[Pharo-users] Spec: Populating a playground with a particular content (was Re: Spec: Binding widgets how to)

Offray Vladimir Luna Cárdenas offray at riseup.net
Thu Jan 14 11:20:29 EST 2016


Hi Nicolai,

That was the issue. Now it's working! I was trying to test different 
combinations to see why UI updating was not happening but I got the 
variations wrong (one true, another false, instead of both false :-) ).

The next step I'm working on in populating the GTPlayPage with some 
particular content. In my previous interface I made something like this:

-[1]---------------------
GrafoscopioBrowser>>panelAsCodeFor: aNode
     "Shows an interactive playground for Smalltalk code in a node body"

     browser := GLMTabulator new.
     browser title: 'Código'.
     browser column: #code.
     browser transmit
         to: #code;
         transformed: [ GTPlayPage new content: aNode body ];
         andShow: [ :a | a custom: GTPlayground new ].
     browser sendToOutside: #nodeBody from: #code -> #text.
     ^ browser.
------------------------

In this one I tried some variation of GlamourPresentationModel>>glmPres 
that let the user predefine a content for the GTPlayPage like this:

-[2]----------------------
glmPresWithContent: aString
     glmPres isNil ifTrue:[
         glmPres := GTPlayground new startOn:  (GTPlayPage new content: 
aString)].
     ^glmPres
---------------------------

but if I try running the interface with this//I get: 
"MessageNotUnderstood: GlamourPresentationModel>>content:", so I think 
that something more is needed to create Playgrounds in the Spec-Glamour 
that are pre-populated with content.

How can I create a playground inside a Spec-Glamour interface that is 
already populated with a given content?

Thanks,

Offray

On 14/01/16 03:56, Nicolai Hess wrote:
>
>
> 2016-01-13 23:07 GMT+01:00 Offray Vladimir Luna Cárdenas 
> <offray at riseup.net <mailto:offray at riseup.net>>:ui insp 
> presentationClass: GTInspector startOn: 42.
>
>     Hi,
>
>     I've reading the code at [1] but I'm still having problems
>     understanding the dynamic spec. I have created a small dictionary
>     and populated with data, then created the accessors and
>     initializePresenter, initializeWidgets and rebuildWithdCodeLayout
>     and rebuildWithTextLayout, as you can see on the following
>     snippets, but nothing happens despite the debugging Transcript is
>     showing me that the content subwidget has the proper model, but is
>     not rebuild in the GUI.
>
>     Any help is, as always, very much appreciated.
>
>
> Hi Offray,
>
> I think you have to call
>     self needRebuild: false.
> in both rebuild... methods.
> Otherwise the all "inner"-widgets are rebuild:
>
>
>     [1]
>     https://github.com/spec-framework/documentation/blob/master/output/book.md#rebuildDynamically
>
>     ----------------------
>     DynamicDict>>initializeWidgets
>
>         | data |
>         data := { 'first' -> 'I\"m just text' . 'second' -> 'ProfStef
>     openPharoZenWorkspace'} asOrderedDictionary.
>         list := self newList.
>         list items: data keys.
>         content := self newText.
>         self focusOrder
>             add: list;
>             add: content.
>     ----------------------
>     DynamicDict>>initializePresenter
>         list whenSelectedItemChanged: [:item |
>             item = 'first'
>                 ifTrue: [ self rebuildWithTextLayout ].
>             item = 'second'
>                 ifTrue: [ self rebuildWithCodeLayout ].
>         ]
>     ----------------------
>     DynamicDict>>rebuildWithCodeLayout
>         | newLayout |
>
>         content := self instantiate: GlamourPresentationModel.
>         newLayout := SpecLayout composed
>             newRow: [:row |
>                 row
>                     add: #list right: 0.7;
>                     add: #content left: 0.3];
>             yourself.
>         self needRebuild: true.
>         content needRebuild: true.
>         Transcript show: 'código + ', self content asString, String cr.
>         self buildWithSpecLayout: newLayout.
>     ----------------------
>     DynamicDict>>rebuildWithTextLayout
>         | newLayout |
>
>         content := self newText.
>         newLayout := SpecLayout composed
>             newRow: [:row |
>                 row
>                     add: #list right: 0.7;
>                     add: #content left: 0.3];
>             yourself.
>         self needRebuild: false.
>         list needRebuild: false.
>         content needRebuild: true.
>         Transcript show: 'texto + ', self content asString, String cr..
>         self buildWithSpecLayout: newLayout.
>     ----------------------
>
>     Cheers,
>
>     Offray
>
>     On 10/01/16 13:39, Johan Fabry wrote:
>>     Sorry for the lateness and short reply but I’m involved in a
>>     bunch of other things that are taking almost all of my time ...
>>
>>     From what I understand and what I can see in your code, you want
>>     to modify a widget when the UI is open. However you never trigger
>>     the rebuilding of the window. For example, see the Spec docs that
>>     I sent, where in 9.1 there is code that calls buildWithSpecLayout: .
>>
>>     Actually, I am not sure you need to subclass
>>     DynamicComposableModel since the number of widgets never changes.
>>     You can use a normal ComposableModel subclass and use what is
>>     detailed in 9.1 to change the layout between the two options you
>>     want to have (a TextModel or a GlamourPresentationModel).
>>
>>>     On Jan 8, 2016, at 23:07, Offray Vladimir Luna Cárdenas
>>>     <offray at riseup.net <mailto:offray at riseup.net>> wrote:
>>>
>>>     Shouldn't be #right dynamically defined according to the values
>>>     of 'item' and be replaced on the m2 layout?
>>
>>
>>
>>     ---> Save our in-boxes! http://emailcharter.org <---
>>
>>     Johan Fabry   - http://pleiad.cl/~jfabry <http://pleiad.cl/%7Ejfabry>
>>     PLEIAD and RyCh labs  -  Computer Science Department (DCC)  -
>>      University of Chile
>>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pharo.org/pipermail/pharo-users_lists.pharo.org/attachments/20160114/3e7464f6/attachment.html>


More information about the Pharo-users mailing list