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

Eduardo Ochs eduardoochs at gmail.com
Wed Feb 22 06:17:01 UTC 2023


Hi Karl!
Fantastic, thanks! =)
I added this to the class in which I'm putting most of my stuff,

!See class methodsFor: 'as yet unclassified' stamp: 'Edrx 2/22/2023 02:54'!
run: aBlock after: ms
| aButton |
aButton := SimpleButtonMorph new.
aButton openInWorld;
        hide;
        target: aBlock;
        actionSelector: #value;
        addAlarm: #doButtonAction after: ms.
! !

and now I can simply run this

  See run: [ kf := self currentHand keyboardFocus ] after: 5000.

to save into the variable kf the morph on which the keyboard focus is
after 5 seconds. Neat! =)

  Cheers,
    Eduardo Ochs
    http://anggtwu.net/eev-squeak.html


On Wed, 22 Feb 2023 at 01:56, karl ramberg <karlramberg at gmail.com> wrote:

> 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/3b7bd00c/attachment.html>


More information about the Squeak-dev mailing list