miércoles, 27 de febrero de 2008

Ejemplo con tree_item

primer ejemplo, creo que sencillo, por si alguna vez teneis que utilizar un tree_item.
El funcionamiento es sencillo, creamos un dialogo, montamos un tree_item en un Row_Col, para llenarlo usamos una Rope, rellena de display_tree.
Aquí un ejemplillo:

#% text_encoding = iso8859_1

def_slotted_exemplar(:Proba_tree,
{
{:item,_unset},
{:datos,_unset}
},
:model)
$

$
# Definicion de acceso a los slots de la clase
Proba_tree.define_slot_access(:item, :write, :private)
$
# Definicion de acceso a los slots de la clase
Proba_tree.define_slot_access(:datos, :write, :public)
$

_pragma(classify_level=basic)
_method Proba_tree.new()
##
## en el ini llenamos el Tree
.datos< _local dt, vals, dtC, dtCC
dt << display_tree.new("IMPAR")
dtC << display_tree.new(_unset, "UNO",dt)
dtC << display_tree.new(_unset, "TRES",dt)
dtC << display_tree.new(_unset, "CINCO",dt)
dtC << display_tree.new(_unset, "SIETE",dt)
dtC << display_tree.new(_unset, "NUEVE",dt)
dtCC << display_tree.new(_unset, "NUEVE UNO",dtC)
dtCC << display_tree.new(_unset, "NUEVE DOS",dtC)
dtCC << display_tree.new(_unset, "NUEVE TRES",dtC)
.datos.add(dt)
dt << display_tree.new("PAR")
dtC << display_tree.new(_unset, "DOS",dt)
dtC << display_tree.new(_unset, "CUATRO",dt)
dtC << display_tree.new(_unset, "SEIS",dt)
dtC << display_tree.new(_unset, "OCHO",dt)
dtC << display_tree.new(_unset, "DIEZ",dt)
.datos.add(dt)
>> _clone.init()

_endmethod
$

_pragma(classify_level=basic)
_private _method Proba_tree.init()
##
## Inicializacion del nuevo elemento
_super.init()
.item << property_list.new()
_self.changed(:datos, :renew)
>> _self

_endmethod
$

_pragma(classify_level=basic)
_method Proba_tree.capcalera
##
## Defineix una capçalera al tree_item
>> {"PROBA"}
_endmethod
$

# metodo redefinido de model del que recibe a_container con el
# cual no tenemos que crear ni el frame ni el panel. ya nos lo
# da :model
_pragma(classify_level=basic)
_method Proba_tree.activate_in(a_container)
##
## Activacion de pantalla

_local rc

# propiedades de la ventana
a_container.resizable? << _false
a_container.maximizable? << _true
a_container.minimizable? << _true

# cración de Tree item.
# Tree_item. :many significa que se puede seleccionar mas de uno

rc_0 << rowcol.new(a_container, 1, 1, :pixel,
:style, :top_level,
:col_spacing, 0
)
.item[:lista] << tree_item.new(rc_0,
:column_headings, _self.capcalera ,
:model, _self,
:aspect, :datos,
:data_selector, :datos,
:col, 1,
:col_alignment, :fill,
:row_alignment, :fill,
:height, 300,
:mode, :many,
:row, 1,
:width, 340 )

# elemento rowcol para colocar objetos en la pantalla
rc << rowcol.new(a_container, 1, 3, :pixel,
:style, :top_level,
:col_spacing, 0
)
# boton para salir de la pantalla
button_item.new(rc,"Salir",_self,
:quit|()|,
:row, 1,
:col, 2
)

>> a_container

_endmethod
$

# procedimiento para inicial la aplicación
_block
_local a << _unset
a << Proba_tree.new()
a.activate()
_endblock
$
Si teneis dudas las contestare en los comentarios.

5 comentarios:

Gork dijo...

tened en cuanta que donde pone <<>( deberia ser <<(, pero el Bloger me da problemas al pegar codigo en color.

Anónimo dijo...

supongo que has quitado, el color, mejor, porque asi podemos hacer directamente un cortar y pegar.

Gracias por tu iniciativa

Carlos dijo...

Muy interesante la aplicación del tree_item. Yo tengo implementado uno similar, pero con unos toggles en el display_tree.
Lo que no puedo conseguir es que cuando cambio el valor (true o false) de un toggle padre, éstos se propaguen automáticamente a los hijos, y vice versa. Tal como se como se comporta el tree_item del Object Control. Podrías ayudarme?

Metal Core dijo...

Es una lástima que no hayas seguido con tu iniciativa. No veo entradas desde el año pasado. Si quieres volver a comenzar y transformar tu blog en algo permanente, te ofrezco mi ayuda. Trabajo en Smallworld desde hace 10 años y creo que he acumulado bastante experiencia como para colaborar contigo.

Julio

Don dijo...

at Proba_tree.new, should .datos << rope.new() ??

gracious!