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

Mariano Montone marianomontone at gmail.com
Mon Mar 13 16:38:22 PDT 2023


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.
> 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).
>>
>>     image1.png
>>     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/0b7db2b8/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/0b7db2b8/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/0b7db2b8/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/0b7db2b8/attachment-0005.png>


More information about the Cuis-dev mailing list