[squeak-dev] How do I "sleep 5"?
Eduardo Ochs
eduardoochs at gmail.com
Tue Feb 21 22:57:29 UTC 2023
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/20230221/25c94cdb/attachment.html>
More information about the Squeak-dev
mailing list
|