[squeak-dev] How do I "sleep 5"?

karl ramberg karlramberg at gmail.com
Wed Feb 22 04:56:31 UTC 2023


Hi,
A morph has to be in the world to be able to interact with it; eg.
#openInWorld.

If you don't want to see the morph you can send it message #hide. It makes
the morph invisible but it's still in the world and can interact with it.
To see the morph again send #show.
To delete the morph send #delete. The morph will be garbage collected.

Best,
Karl


On Tue, Feb 21, 2023 at 11:57 PM Eduardo Ochs <eduardoochs at gmail.com> wrote:

> Hi Vanessa!
> Thanks! =) This works in a workspace,
>
>   "Create a SimpleSwitchMorph with label 'Toggle'
>       and a SimpleButtonMorph with label 'Flash'.
>       The button will be placed below the switch."
>
>   sm := SimpleSwitchMorph new.
>   sm openInWorld.
>   bm := SimpleButtonMorph new.
>   bm openInWorld.
>   bm position: bm position + (0 at 32).
>
>   "Three ways of toggling the color of the switch:"
>
>   sm toggleState.
>
>   bl := [ sm toggleState ].
>   bl value.
>
>   bm target: bl.
>   bm actionSelector: #value.
>   bm doButtonAction.
>
>   "Two ways of toggling the switch after 1000ms:"
>
>   sm addAlarm: #toggleState after: 1000.
>   bm addAlarm: #doButtonAction after: 1000.
>
> but this doesn't:
>
>   bm2 := SimpleButtonMorph new.
>   bm2 target: bl.
>   bm2 actionSelector: #value.
>   bm2 addAlarm: #doButtonAction after: 1000.
>
> What is the right way to add an alarm to a morph that is not shown on
> the screen? Also, can I create a new invisible morph every time that I
> want to run an alarm? Are they going to be garbage collected?
>
>   Thanks in advance!
>     Eduardo Ochs
>     http://anggtwu.net/eev-squeak.html
>
>
> On Tue, 21 Feb 2023 at 02:16, Vanessa Freudenberg <vanessa at codefrau.net>
> wrote:
>
>> The best way to do this in Morphic is with "alarms":
>>
>>     self addAlarm: #changeKeyboardFocus after: 5000.
>>
>> which would execute the morph's changeKeyboardFocus method 5 seconds
>> later.
>>
>> The way of sleeping you suggest is possible too but more tricky,
>> since you would have to move your wait code to an extra process to not
>> block the UI process, but then make sure that the actual work is done in
>> the UI process again (Morphic is not multithreaded, although Squeak is).
>>
>> Vanessa
>>
>> On Mon, Feb 20, 2023 at 8:49 PM Eduardo Ochs <eduardoochs at gmail.com>
>> wrote:
>>
>>> Hi list,
>>>
>>> a few days ago I asked for help on how to send a "synthetic" keyboard
>>> event to a morph, and Karl Ramberg gave me exactly the right hints in
>>> this thread:
>>>
>>>
>>> http://lists.squeakfoundation.org/pipermail/squeak-dev/2023-February/223473.html
>>>
>>> My code is ready except for documentation and comments - I'll work on
>>> that in the next few days and then post the result here and on the
>>> wiki...
>>>
>>> ...but there's a feature that I want to add to it that - again =( -
>>> needs something that I'm not being able to discover by myself. How do
>>> I write a line of code that waits for 5 seconds, sort of like running
>>> "sleep 5" in a shell, and that doesn't block the rest of the system?
>>> If I have that I'll be able to run these two lines in a workspace,
>>>
>>>   self mySleep: 5000.
>>>   kf := self currentHand keyboardFocus.
>>>
>>> switch the keyboard focus to something else by clicking on it, and
>>> then the variable kf will be set to this "something else"...
>>>
>>> Thanks in advance!
>>>   Eduardo Ochs
>>>   http://anggtwu.net/eev-squeak.html
>>>
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20230222/c71e1034/attachment.html>


More information about the Squeak-dev mailing list