Hi,

The important visual objects, such as the selection, are reflected on the ports of the pane containing the presentation.

The tree has two ports that are relevant for selection:
- #selection will give you the selected node
- #selectionPath will give you the path from the selected node to the root

You can do like this:
a tree
�� ��act: [:treePresentation | treePresentation selection inspect ] entitled: 'Inspect selection';
�� ��act: [:treePresentation | treePresentation selectionPath inspect ] entitled: 'Inspect selection path'


Cheers,
Doru



On Thu, Aug 14, 2014 at 1:32 AM, Nicolai Hess <nicolaihess@web.de> wrote:
Hi Offray,

some notes about your code:


browser
�� �� �� �� act: [:newNode |
�� �� �� �� �� �� �� �� �� �� �� �� newNode := UbakyeNode
�� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� header: 'nuevoNodo' body: ''.
�� �� �� �� �� �� �� �� �� �� �� �� mainTree addNode: newNode.]��

this would change the block parameter "newNode", but the block parameter is supposed to deliver the object you'll act on, the browser for example.
I think you wanted to write this code:

browser
�������������� act: [ :b�� | |newNode|

���������������������������������������������� newNode := UbakyeNode
���������������������������������������������� header: 'nuevoNodo' body: ''.
���������������������������������������������� b entity addNode: newNode .

if you call "b update" like you did in the "remove action" your browse tree update will work.

changing OrderedCollection to GLMAnnouncingCollection should work, but you'll have to define
the appropiate announcer source #children instead of #yourself. #yourself gives the mainTree, and that
does not work as your mainTree is not a GLMAnnouncingCollection.

updateOn: GLMItemAdded from: #children

There are two things I don't understand

1.
setting updateOn: on the browser does not work:

browser updateOn: GLMItemAdded from: #children.

but setting it on the tree

(browser transmit)
�������������� to: #preview;
�������������� andShow: [ :a |��
������������������������������ a tree
"-->"�������� updateOn: GLMItemAdded from: #children;

���������������������������������������������� title: mainTree header;
���������������������������������������������� children: [:eachNode | eachNode children ];

���������������������������������������������� format: [:eachNode | eachNode header ].
������������������������������ a text
���������������������������������������������� title: 'Text'].


updates the tree when adding an element by the + button

2. is there a way to get the currently selected tree node? Otherwise
all new nodes only added to the first node.


There are plenty of examples, but no one with add/remove or selection on trees.


Nicolai


















2014-08-13 21:37 GMT+02:00 Offray Vladimir Luna C��rdenas <offray@riseup.net>:

Hi Usman,


On 08/13/2014 02:16 AM, Usman Bhatti wrote:
Hi Offray,

As Doru mentioned, without a complete example it is difficult to reproduce and
analyze your problem.

My main issue is that I don't know how to share a complete example except by sharing this url:

http://smalltalkhub.com/#!/~Offray/Ubakye/

and advising to upload the code and run "UbakyeBrowser open". In file based frameworks I can point to a ��specific file which contains the model of my defined objects, but I don't know how to share my own defined objects/messages in Smalltalk except by this or by manually cutting and pasting to email (it should be a better way).

Anyway this is the part where I define a UbakyeNode:

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Object subclass: #UbakyeNode
�� �� �� �� instanceVariableNames: 'header headers key icon body children parent node'
�� �� �� �� classVariableNames: ''
�� �� �� �� category: 'Ubakye-Model'
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

and the children method is the one which uses a colection:


=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
UbakyeNode>>children
�� �� �� �� "Returns the receivers list of children"
�� �� �� ��
�� �� �� �� ^ children ifNil: [children := OrderedCollection new]
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


For the tree to get updated on node addition or removal, you need to use
GLMAnnouncingCollection to group your nodes. Hence, when you add a new node in
your announcing collection object, this code comes into effect:

updateOn: GLMItemAdded from: #yourself;

So, make sure you are using appropriate collection object.


I tried changing OrderedCollection in the children message by GLMAnnouncingCollection, but the header message started to fail. Can I pass my children collection to a GLMAnnouncingCollection just in the interface or need I to change the object definition for the UbakyeNode, and if this is the case, how can I access the header of a UbakyeNode stored in this kind of collection? I know is kind of dumb to ask without proper context, but I hope that the SmalltalkHub repository (or other method) can be used to share my own defined object to make better questions.

usman

Cheers,

Offray







--
www.tudorgirba.com

"Every thing has its own flow"