[Pharo-users] Spec layout

Peter Uhnák i.uhnak at gmail.com
Thu May 19 18:42:07 EDT 2016


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 at 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 at 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 at 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pharo.org/pipermail/pharo-users_lists.pharo.org/attachments/20160520/511bd1c4/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: RadioButtonsExample.st
Type: application/octet-stream
Size: 3198 bytes
Desc: not available
URL: <http://lists.pharo.org/pipermail/pharo-users_lists.pharo.org/attachments/20160520/511bd1c4/attachment.st>


More information about the Pharo-users mailing list