Login  Register

Simple Spec Examples (was: Spec Lists - setting the selection)

Posted by Ben Coman on Oct 11, 2013; 7:24am
URL: https://forum.world.st/Spec-Lists-setting-the-selection-tp4713776p4713787.html

[hidden email] 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




Spec-TreeModel-simple-example.png (11K) Download Attachment