b...@openinworld.com wrote:

I found it hard to find documentation on Spec beyond [1],[2],[3], some of which seem to have changed some syntax since they were written. I've been piecing things together to work out how to set the selected item with the simplest example I could. Even though it turns out pretty simple, I thought I'd share in case it was useful for others that haven't dipped their toes into Spec yet.

ComposableModel subclass: #TestSpec
instanceVariableNames: 'list text'
classVariableNames: ''
poolDictionaries: ''
category: 'BTCPlay'

TestSpec >> initializeWidgets
self instantiateModels: #( #list #ListModel ).

TestSpec >> getList
^list

TestSpec class >> mySpecLayout
<spec:#default>
^ SpecLayout composed
add:#getList ;
yourself.

Then from Workspace
x := (TestSpec new openWithSpec ; yourself).
x getList items: { 1 . 2 . 3 . 4}.
x getList setSelectedItem: 2.

cheers -ben

[1] hal.inria.fr/hal-00759030/PDF/Spec-IWST12-Final.pdf‎
[2] https://ci.inria.fr/pharo-contribution/job/PharoForTheEnterprise/lastSuccessfulBuild/artifact/Spec/Spec.pier.pdf
[3] http://hal.inria.fr/docs/00/70/80/67/PDF/SpecTechReport.pdf



So here is the same thing with TreeModel.

ComposableModel subclass: #TestSpec2
   instanceVariableNames: 'tree'
   classVariableNames: ''
   poolDictionaries: ''
   category: 'BTCPlay'

TestSpec2 >> initializeWidgets
self instantiateModels: #( #tree #TreeModel ). tree childrenBlock: [ :treeItem | self haltOnce. (treeItem isKindOf: Association) ifTrue: [ treeItem value ] ifFalse: [ {} ] ].

TestSpec2 >> getTree
   ^tree

TestSpec2 class >> mySpecLayout
   <spec:#default>
   ^ SpecLayout composed
       add:#getTree ;
       yourself.

Then from Workspace (referring to attached pic)
x := (TestSpec2 new openWithSpec ; yourself).
x getTree roots: {  10 -> {  11. 12 } . 20 -> { 21 . 22 }  } .
x getTree selectedItem.  "<Print It> --> 21 "
x getTree selectedItem: ????

Now how do I select a particular tree item at each level ?
eg. Select 10 and Select 12 ?

cheers, ben



<<inline: Spec-TreeModel-simple-example.png>>

Reply via email to