[Cuis-dev] LayoutMorph subclass instance #beColumn has not effect

Alexandre Rousseau yalexr at gmail.com
Mon Mar 13 17:40:23 PDT 2023


Thanks for that nuance Mariano. And I'm back in business. :)

On Mon, Mar 13, 2023 at 7:38 PM Mariano Montone <marianomontone at gmail.com>
wrote:

> El 13/3/23 a las 20:29, Alexandre Rousseau escribió:
>
> Hi Hilaire and Mariano,
>
>  Most of the time, you don't need to subclass LayoutMorph, unless you want
>> to define new sort of complex widget.
>
>
> What distinguishes a complex widget from their counterparts? In my case,
> here is a screenshot of work in progress... a sampling of widgets placed on
> a PasteUpMorph instance. Each of those widgets extends LayoutMorph class. I
> could have had them be a subclass of BoxedMorph (or placedMorph) but, given
> that the widgets I want to use all lay out their components in vertical
> order, I thought extending LayoutMorph made more sense. If not, then I
> would have to embed a layout morph as top level submorph in each of them,
> then embedding further submorphs inside of that.
>
> Yes that's fine way of doing it.
>
> About the #beColumn initialization, this is the implementation:
>
> beColumn
>     "Establish the major layout axis, with default edge weight"
>
>     direction := #vertical.
>     axisEdgeWeight ifNil: [self axisEdgeWeight: #center].
>     self layoutSubmorphs.
>
>
> It sets parameters and calls #layoutSubmorphs.
>
> So, the issue in your initialization method was that you were calling
> #beColumn before adding the submorphs, and #layoutSubmorphs was not called
> after that, so there's no effect in layout.
>
>
>      Mariano
>
>
>
> So, if I gather correctly, the following would be more idiomatic. Please
> correct me if I'm wrong (and thanks again!) :
>
>> initialize
>> | lo |
>>   super initialize.
>>   lo LayoutMorph newColumn.
>>   lo
>>     addMorph: (BoxedMorph new color: Color red; yourself);
>>     addMorph: (BoxedMorph new color: Color green; yourself);
>>     addMorph: (BoxedMorph new color: Color blue; yourself).
>>   self addMorph: lo.
>>   self morphExtent: `40 at 120`.
>
>
> A.
> [image: Screenshot 2023-03-13 at 7.28.53 PM.png]
>
>
> On Mon, Mar 13, 2023 at 6:53 PM Mariano Montone <marianomontone at gmail.com>
> wrote:
>
>> I got it wrong. Seems that row layout layouts things horizontally, and
>> column vertically.
>>
>> As Hilaire mentioned, unless you want to define your own layout
>> algorithm, the idea is to use the layout morphs, not subclass from them.
>>
>> Layouts in a column (vertically):
>>
>> LayoutMorph newColumn ::
>>         addMorph: (BoxedMorph new color: Color red; yourself);
>>         addMorph: (BoxedMorph new color: Color green; yourself);
>>         addMorph: (BoxedMorph new color: Color blue; yourself);
>>         openInWorld.
>>
>> Layouts in a row (horizontally):
>>  LayoutMorph newRow ::
>>         addMorph: (BoxedMorph new color: Color red; yourself);
>>         addMorph: (BoxedMorph new color: Color green; yourself);
>>         addMorph: (BoxedMorph new color: Color blue; yourself);
>>         openInWorld.
>>
>>     Mariano
>>
>> El 13/3/23 a las 18:30, Alexandre Rousseau escribió:
>>
>> You may want to try with #beRow if you want submorphs to align vertically
>>> (in rows).
>>
>>
>> Hmm... I'm not sure about this.
>>
>> I've attached the filed-out test class to this email, if you want to take
>> a closer look.
>>
>> Basically it is a LayoutMorph subclass, initialized as:
>>>
>>> initialize
>>> | b1 b2 b3 |
>>
>> super initialize.
>>> self beRow.
>>> b1 BoxedMorph new :: color: Color red.
>>> b2 BoxedMorph new :: color: Color green.
>>> b3 BoxedMorph new :: color: Color blue.
>>> self addMorph: b1.
>>> self addMorph: b2.
>>> self addMorph: b3.
>>> self morphExtent: self minimumExtent.
>>
>> and the instantiation of which results in this (attached image 1).
>>
>> [image: image1.png]
>> [image: image 2.png]
>> Changing line 4 to "self beColumn" does not lay the items out vertically.
>> See attached image 2.
>>
>>
>>
>> On Mon, Mar 13, 2023 at 4:01 PM marianomontone--- via Cuis-dev <
>> cuis-dev at lists.cuis.st> wrote:
>>
>>> On 13/3/23 13:36, Alexandre Rousseau via Cuis-dev <
>>> cuis-dev at lists.cuis.st> wrote:
>>> > Defining a class as subclass of LayoutMorph and initializing it thus:
>>> >
>>> >     initialize
>>> >        super initialize.
>>> >        self beColumn.
>>> >
>>> >
>>> > morphs added to it still appear next to each other, horizontally, as
>>> if
>>> > #beColumn was ignored.
>>> >
>>> > Is this expected behaviour for a subclass of LayoutMorph?
>>>
>>> I think it is. You may want to try with #beRow if you want submorphs to
>>> align vertically (in rows).
>>>
>>>       Mariano
>>> --
>>> Cuis-dev mailing list
>>> Cuis-dev at lists.cuis.st
>>> https://lists.cuis.st/mailman/listinfo/cuis-dev
>>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cuis.st/mailman/archives/cuis-dev/attachments/20230313/63a4414e/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Screenshot 2023-03-13 at 7.28.53 PM.png
Type: image/png
Size: 66778 bytes
Desc: not available
URL: <http://lists.cuis.st/mailman/archives/cuis-dev/attachments/20230313/63a4414e/attachment-0003.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image1.png
Type: image/png
Size: 4032 bytes
Desc: not available
URL: <http://lists.cuis.st/mailman/archives/cuis-dev/attachments/20230313/63a4414e/attachment-0004.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image 2.png
Type: image/png
Size: 5004 bytes
Desc: not available
URL: <http://lists.cuis.st/mailman/archives/cuis-dev/attachments/20230313/63a4414e/attachment-0005.png>


More information about the Cuis-dev mailing list