Thanks Nicolai for your minimalist example. Only until now I have time to test it (sorry), but I get some "MessageNotUnderstood: SpecTreeNodeModel>>layoutFrame:" when I run this:

=================
| aClass subItems |
aClass := RTObject.
subItems := RTObject subclasses.
"create the node"
t :=  TreeNodeModel new
        content: aClass name;
        hasChildren: [ aClass subclasses notEmpty ];
children: [ subItems ifNil:[subItems:=aClass subclasses collect: [ :s | self buildNodeFor: s ] ]];
        yourself.
"listen on selection"
t whenSelectedChanged: [ :bool | bool ifTrue:[self field text: t content] ].
t openWithSpec
=================

There is any way to run a minimal GUI with a tree using your example? I'm still missing a key concept on how to use spec and binding between widgets.

Thanks,

Offray

On 29/11/15 13:51, Nicolai Hess wrote:


2015-11-26 19:36 GMT+01:00 Offray Vladimir Luna Cárdenas <off...@riseup.net <mailto:off...@riseup.net>>:

    Hi,

    I had tried that before and didn't work. Passing information
    between widgets and back in this spec interface seems my stop
    point now... If someone could help me with some kind of minimalist
    example that uses treeModel, that would be greatly appreciated.


Find attached a minimal example. (I use Morph and its subclasses for generating some tree data, these are just names, renaming a node does not rename the class :))

You can listen on tree node selection by registering with #whenSelectedChanged, on the TreeNode(!)

"create the node"
t :=  TreeNodeModel new
        content: aClass name;
        hasChildren: [ aClass subclasses notEmpty ];
children: [ subItems ifNil:[subItems:=aClass subclasses collect: [ :s | self buildNodeFor: s ] ]];
        yourself.

"listen on selection"
t whenSelectedChanged: [ :bool | bool ifTrue:[self field text: t content] ].

this will change the text field content with the content of the node (the default label).

Changing the label node *Morph* on accepting the text field text is somehow impossible or difficult. I would have expected that Spec would create a MorphicTreeNodeAdapter that represents some Morph, for which the adapter would update/change the state, if you change
the TreeNodeModel content.
Instead, it creates some strange SpecTreeNodeModel. And the only way to update the NodeLabel and make this change visible is to
rebuild the whole tree:

tree roots: tree roots.

Yes, I did not find another way.

Luckily MorphTreeMorph is smart enough to remember the selection and path expansion state, so this works quite well.


    Cheers,

    Offray


    On 26/11/15 12:47, webwarrior wrote:

        Try #whenHighlightedItemChanged: method.

        I remember that distinction between selection/highlight is not
        very clear in
        TreeModel.



        --
        View this message in context:
        http://forum.world.st/Spec-Binding-widgets-how-to-tp4863742p4863757.html
        Sent from the Pharo Smalltalk Users mailing list archive at
        Nabble.com.






Reply via email to