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

karl ramberg karlramberg at gmail.com
Wed Feb 22 19:16:11 UTC 2023


On Wed, Feb 22, 2023 at 8:47 AM Taeumel, Marcel via Squeak-dev <
squeak-dev at lists.squeakfoundation.org> wrote:

> (bm2 future: 1000) doButtonAction.
>

> Also works for objects that are not or cannot be in the world.
>
> Uses Morphic alarms when when in UI process.
>

Ah, that's cool. I never used #future:  :-)

Best,
Karl


>
> Best,
> Marcel
> ------------------------------
> *From:* Squeak-dev <squeak-dev-bounces at lists.squeakfoundation.org> on
> behalf of Eduardo Ochs <eduardoochs at gmail.com>
> *Sent:* Wednesday, February 22, 2023 7:17:01 AM
> *To:* The general-purpose Squeak developers list <
> squeak-dev at lists.squeakfoundation.org>
> *Subject:* Re: [squeak-dev] How do I "sleep 5"?
>
> 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/a7d1fe16/attachment-0001.html>


More information about the Squeak-dev mailing list