[Newbies] Beginners Digest, Vol 123, Issue 4

Tobias Pape Das.Linux at gmx.de
Wed Feb 22 23:52:38 UTC 2017


On 23.02.2017, at 00:34, H. Hirzel <hannes.hirzel at gmail.com> wrote:

> 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']

self submorphNamed: '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
>> 
> <selecting_a_submorph_by_name_2017-02-23.png>_______________________________________________
> Beginners mailing list
> Beginners at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/mailman/listinfo/beginners



More information about the Beginners mailing list