ListModel has that: #selectedItemsSorted, but looking at the tree model 
structure I guess the simplest way is to just traverse the whole structure 
until the selected nodes are found.
Something like this should do the trick:

--------------------------------------------------
TreeModel >> selectionSorted
               | ordered lookingFor search |

               ordered := OrderedCollection new.

               lookingFor := self selectedItems asIdentitySet.
               LookingFor ifEmpty: [ ^ #() ]
               search := [ :nodes |
                              nodes do: [ :node |
                                             (lookingFor includes: node) 
ifTrue: [
                                                            ordered add: node.
                                                            lookingFor remove: 
node.
                                                            lookingFor isEmpty 
ifTrue: [ ^ ordered asArray ]
                                             ].
                                             search value:  node children value
                              ]
               ].

               search value: self roots.

               self error: 'should not happen'

--------------------------------------

Best regards,
Henrik

From: Pharo-dev [mailto:[email protected]] On Behalf Of Nicolai 
Hess
Sent: Sunday, August 7, 2016 4:55 PM
To: Pharo Development List <[email protected]>
Subject: [Pharo-dev] Spec TreeModel get selected items in order

Hi,
Is there a way to retrive the selected nodes of a TreeModel in the same order 
they are
shown in the widget ?
For example, open this tree model, and select item 5/4/3/1
|t|
Transcript clear.
t := TreeModel new.
t beCheckList ;
 autoMultiSelection: true.
t roots:((1 to:10) collect:[:c | TreeNodeModel new 
content:c;hasContentToShow:true]).
t openWithSpec.
t inspect .
Now, if I try to collect the selected items with
t selectedItems collect:#contents
they appear in the order I selected them, but I would like to get the order
1/2/3/4/5
thanks
Nicolai

Reply via email to