[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
|