Hi,

I've made a simple example ��� see attached fileout.

Couple things to note:

1.
>��If i put it on instance side, the lookup don't find it (in the book Building UI with��Spec, it said the lookup begin by the instance side and it allow to have specific UI, in part about layout)

As far as I know / as far as I can tell this is false for ComposableModel.
For DynamicComposableModel you can override the method "#layout".

2. For some odd reason when you add a new radio button it looks like a checkbox and only once you click on it it turns into a checkbox��� which is WTF but it shouldn't matter atm

3. DynamicComposableModel holds the item in a Dictionary, since you can't provide accessors for each item, you have to cobble together some other selector, as shown in createWidgets

4. I don't know if this is the best approach, but I've been using something like this for quite a while

I'm quite busy this week, however I scheduled to take a look at the Spec book next week as I should probably write something there���
So if you have any more questions/comments please ask.

Peter

On Wed, May 18, 2016 at 2:19 PM, Marion Noirbent <ms.noirbent@etudiant.univ-lille1.fr> wrote:
Ok, I wait your answer.
Thanks for your help.
Marion,


Le 18/05/2016 12:04, Peter Uhn��k a ��crit :
Yes but someone must call rebuildWidget��� I will try to take a look at this
today and give a better/more comprehensive example.

Peter

On Wed, May 18, 2016 at 1:01 PM, stepharo <stepharo@free.fr> wrote:

I do not get it.

I still think that the solution of peter is the one to implement

rebuildWidget
�� �� ��self widgets removeAll.
�� �� ��self createWidgets.
�� �� ��self needFullRebuild: false.
�� �� ��self buildWithSpecLayout: self dynamicLayout.
�� �� ��self alignButtons


dynamicLayout
�� �� ��| keys |
�� �� ��keys := self widgets keys.
�� �� ��^ SpecLayout composed
�� �� �� �� ��newColumn: [ :c |
�� �� �� �� �� �� �� �� �� �� ��keys do: [ :key | c newRow: key height: self class
buttonHeight ].
�� �� �� �� �� �� �� �� �� �� ��c newRow: [ :r |�� ] ];
�� �� �� �� ��yourself



Le 18/5/16 �� 12:46, Marion Noirbent a ��crit :

Because I would use "openWithSpec" to build only when the widget is ready,
but it call a method (with the good pragma) on the class side.

In the example i use i have add RadioButtonModel with addRadioButton: in
the collection buttons, it's not empty but RadioButtonModel is a
ComposableModel and layout: is define in the subclass
DynamicComposableModel .

Le 18/05/2016 10:22, stepharo a ��crit :

But why from the class side.

buttons
�� �� �� ^ buttons

returns an empty collection

and

rebuildWidget
�� �� �� self widgets removeAll.
�� �� �� self createWidgets.
�� �� �� self needFullRebuild: false.
�� �� �� self buildWithSpecLayout: self dynamicLayout.
�� �� �� self alignButtons



Le 18/5/16 �� 11:31, Marion Noirbent a ��crit :

I was trying to use it but i have still the problem to call the
instance method from the class side, so i call the
buildWithSpecLayout: in the method to add buttons in the collection,
it seems work but i have an "MessageNotUnderstood" RadioButton>>layout:

Le 18/05/2016 09:20, stepharo a ��crit :

marion the solution is what peter proposes.

Stef


Le 18/5/16 �� 11:14, Marion Noirbent a ��crit :

In fact i was trying to modify RadioButtonGroup to turn it into a
widget, #buttons is not a widget but its collection of widget.

May you have confused RadioButtonGroup with the MenuModel /
MenuGroupModel / MenuItemModel which are widgets. I take inspiration
from them and I would got the same kind of behaviour.

Le 17/05/2016 21:11, stepharo a ��crit :

Thanks Johan


We looked at

RadioButtonGroupExample

but you see we cannot have a RadioButtonGroupPresenter having 2, 3
or 4
radioButton.

Stef


Le 17/5/16 �� 18:52, Johan Fabry a ��crit :

Hi Marion,

the class side message of defaultSpec is generally meant to be
used if
you use a fixed number of widgets, so you can put the reference to
the
name of each widget there (in cour case #buttons). For variable
number
of widgets you should have a look at the dynamic features of Spec.

That being said, It looks like what you really want to use is a
Radio
Button Group. Have a look at RadioButtonGroupExample.

HTH

--
Does this mail seem too brief? Sorry for that, I don���t mean to be
rude! Please see http://emailcharter.org .

Johan Fabry�� ��-�� ��http://pleiad.cl/~jfabry
PLEIAD and RyCh labs�� -�� Computer Science Department (DCC)�� -
University of Chile

On May 17, 2016, at 13:48, Marion Noirbent
<ms.noirbent@etudiant.univ-lille1.fr> wrote:

Hi,
I'm trying to create a widget whith Spec, managing a collection of
RadioButton. But I have a problem with defaultSpec (the accessor of
the collection is the methods "buttons") :

If i put defaultSpec on class side, i can't acces the collection of
the instance. (the following code iterate on the string)

defaultSpec
�� �� ��<spec: #default>
�� �� ��^ SpecLayout composed
�� �� �� �� ��newColumn: [ :column | #buttons do: [ :item | column add:
item ] ];
�� �� �� �� ��yourself

If i put it on instance side, the lookup don't find it (in the book
Building UI with Spec, it said the lookup begin by the instance
side
and it allow to have specific UI, in part about layout)

defaultSpec
�� �� ��<spec: #default>
�� �� ��^ SpecLayout composed
�� �� �� �� ��newColumn: [ :column | self buttons do: [ :item | column
add:
item ] ];
�� �� �� �� ��yourself

Any idea ?

Marion Noirbent,


















--
Ma cl�� publique sur pgp.mit.edu