Posted by
Offray on
Jan 13, 2016; 9:47pm
URL: https://forum.world.st/Spec-Binding-widgets-how-to-tp4863742p4871209.html
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.
[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 <
[hidden email]>
wrote:
Shouldn't be
#right dynamically defined according to the values of
'item' and be replaced on the m2 layout?