2016-08-07 17:53 GMT+02:00 Henrik Nergaard <[email protected]>:

> 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'
>
>
>
> --------------------------------------
>

Thanks Peter, Henrik,
yes I was afraid there is no other way.




>
>
> 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