[Newbies] Beginners Digest, Vol 123, Issue 4

H. Hirzel hannes.hirzel at gmail.com
Wed Feb 22 23:34:25 UTC 2017


Assuming you have named your instances of TextMorph and embedded them
in the PasteUpMorph so that they are in the 'submorphs' collection of
the PasteUpMorph

you may access them by name from the PasteUpMorph with


   self submorphs detect: [:m | m externalName = 't1']

(access to morph named 't1').

This is a moderate effort and allows you to construct the GUI through
direct manipulation.

Please note as well that in a recent trunk image the halo menu list of
a SimpleButtonMorph has a 'set target' menu entry which allows you to
set to any target by pointing at it.

--Hannes


On 2/22/17, Tim Cuthbertson <ratcheer at gmail.com> wrote:
> Tim,
>
>> One of the articles on Morphic says you can create composite morphs
> either programatically,
>> using addMorph, or using drag and drop from the Objects menu of the
> morphic World. I have
>> done the latter, because it is easier to design my layout that way. Once
> that has been done,
>> how do I address the submorph from a browser? If I inspect my button
> submorph, for example
>>, all it will tell me about it is "a ScriptableButton<Button>(1364754)". I
> have no idea how to
>> access that object in order to do anything with it. This is the crux of
> my questions.
>
> This is, in my opinion, the most significant limitation of Morphic for
> interactive GUI creation. In the original Morphic in Self the way to
> handle this was to simply search through all your submorphs for the one
> you were interested in, usually by comparing the morphType string. In
> Squeak we can add properties to Morphs very easily so that would be one
> way to tag it. Something like:
>
> | stopButton |
> stopButton := nil.
> self submorphsDo: [ :m | (m hasProperty: #stopButton) ifTrue: [
>                                stopButton := m ] ].
> stopButton ifNotNilDo: [ :b | b ... ].
>
> Code like this will work even if there are no stopButtons at all and if
> you add more than one the code will just use the last one and ignore the
> others.
>
> After creating the button you have to get its halo and use the red
> button (menu) with the debug->inspect morph option to set the
> #stopButton property.
>
> An alternative to using specially created properties is to depend on the
> morph's name. In your case it is "a ScriptableButton<Button>(1364754)"..
> So:
>
> self subMorphsDo: [ :m | (m name includesSubString: 'Button') ifTrue:
> ...
>
> should work for you as long as there is only one button.
>
> -- Jecel
>
> Thank you, Jecel, for trying to help me solve my problem. However, my plan
> is to have multiple sibling morphs for both the buttons and the texts.
>
> So, I am diving in to trying to use addMorph: programatically to add
> submorphs to my display. This allows me to hold a reference to each
> submorph in named variables, through which I should then be able to specify
> state changes and act on events to and from my submorphs.
>
> Maybe my mindset is just too old fashioned. Back in the 90's, I programmed
> MVC applications in VisualWorks. I thought Morphic was supposed to be much
> easier to use than MVC, but so far, I have not been able to figure out how
> to control my objects in Morphic.
>
> Tim Cuthbertson
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: selecting_a_submorph_by_name_2017-02-23.png
Type: image/png
Size: 58957 bytes
Desc: not available
URL: <http://lists.squeakfoundation.org/pipermail/beginners/attachments/20170223/c92ac25f/attachment-0001.png>


More information about the Beginners mailing list