Crear  Editar  FrontPage  Indexes  Buscar  Cambios  History  RSS  Login

tut-treeview-renderer-example

Un ejemplo práctico

Volvamos al ejemplo del principio (con una columna adicional esta vez), solo que en este caso el contenido del modelo se dibuja correctamente en pantalla. Tanto los atributos como las funciones sobre datos de celda se usan como simple demostración.

require 'gtk2'

treestore = Gtk::TreeStore.new(String, String, Integer)

# Agrega una fila de primer nivel y agrega algunos datos
parent = treestore.append(nil)
parent[0] = "Maria"
parent[1] = "Incognito"

# Agrega una segunda fila de primer nivel y la rellena con algunos datos
parent = treestore.append(nil)
parent[0] = "Jane"
parent[1] = "Average"
parent[2] = 1962

# Agrega un hijo a la segunda fila con algunos datos
child = treestore.append(parent)
child[0] = "Janinita"
child[1] = "Average"
child[2] = 1985

view = Gtk::TreeView.new(treestore)
view.selection.mode = Gtk::SELECTION_NONE

# Crea el CellRenderer
renderer = Gtk::CellRendererText.new

# Agrega una columna usando el renderer
col = Gtk::TreeViewColumn.new("First Name", renderer, :text => 0)
view.append_column(col)

# Crea otro CellRenderer y le asigna la propiedad weight
renderer = Gtk::CellRendererText.new
renderer.weight = Pango::FontDescription::WEIGHT_BOLD

# Agrega una columna usando el segundo renderer
col = Gtk::TreeViewColumn.new("Last Name", renderer, :text => 1)
view.append_column(col)

# Crea un último CellRenderer y pone el color de fondo rojo
renderer = Gtk::CellRendererText.new
renderer.foreground = "red"

# Agrega otra columna usando el tercer renderer
col = Gtk::TreeViewColumn.new("Age", renderer)
view.append_column(col)

# Crea una función sobre datos de celda para calcular la edad
col.set_cell_data_func(renderer) do |col, renderer, model, iter|
  year_now = 2003 # Para ahorrar código no relevante para el ejemplo
  year_born = iter[2]

  if (year_born <= year_now) && (year_born > 0)
    renderer.text = sprintf("%i years old", year_now - year_born)
    # dibuja el color de fondo por defecto si conocemos la edad
    renderer.foreground_set = false
  else
    renderer.text = "age unknown"
    # dibuja el color de fondo personalizado si no conocemos la edad
    renderer.foreground_set = true
  end
end

window = Gtk::Window.new(Gtk::Window::TOPLEVEL)
window.signal_connect("delete_event") { Gtk.main_quit; exit! }
window.add(view)
window.show_all

Gtk.main
Ultimas actualizaciones:2011/06/05 23:13:38
Clave:
Referencias:[tut-treeview]