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 <off...@riseup.net <mailto:off...@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
    <off...@riseup.net <mailto:off...@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




Reply via email to