[Stackless] Re: Stackless subscription notification
Christian Tismer
tismer at tismer.com
Wed Aug 14 03:48:35 CEST 2002
mailman-owner at trixie.triqs.com wrote:
> aaron at reportlab.com has been successfully subscribed to Stackless.
>
>
Welcome! I'm in fact impressed of your interest!
On the other hand, I'm using Stackless myself, now.
And I find myself writing event handlers as simple,
endless lops, now. Look here, please:
"""
def OnMouseEvents(self, event):
if not self.graph:
event.Skip()
return
# we must clone, since the C object dies
# when we leave this stack.
#dup = event.Clone()
# oops, doesn't work either.
# we need to unpack it all here :(
class x: pass
x.pos = event.GetPosition()
x.enter = event.Entering()
x.leave = event.Leaving()
x.drag = event.Dragging()
x.move = event.Moving()
x.down1 = event.ButtonDown(1)
if self.mouse:
self.mouse.send(x)
event.Skip()
def mouseHandler(self):
try:
self._mouseHandler()
except SystemExit, msg:
print msg
except Exception, e:
print "mist", e
print "killing handler"
self.mouse = None
raise
def shutdown(self):
self.cache = None
if self.mouse:
mouse = self.mouse
self.mouse = None
mouse.send_exception(SystemExit, "thanks for all the fish :-)")
def _mouseHandler(self):
last = None
def true_rec():
f=getcurrent().frame
i = 0
while f:
i += 1
f = f.f_back
return i
while 1:
g = self.graph
event = self.mouse.receive()
if not g: continue
x, y = event.pos.x, event.pos.y
what = g.test(x, y)
if what < 0:
self.SetCursor(self.CurHand)
elif what == 0:
self.SetCursor(self.CurSize)
else:
self.SetCursor(wxSTANDARD_CURSOR)
if event.down1:
g.setSpot(x, y)
if event.drag:
if what < 0:
# shift
# stay in a loop or we might miss
while event.drag:
if g.allowedShift(x, y):
g.shiftTo(x, y)
self.update()
if self.notify: self.notify()
event = self.mouse.receive()
x, y = event.pos.x, event.pos.y
elif what == 0:
# grow
while event.drag:
if g.allowedGrowth(x, y):
g.growTo(x, y)
self.update()
if self.notify: self.notify()
event = self.mouse.receive()
x, y = event.pos.x, event.pos.y
"""
This class implements a bitmap with some drawing upon it.
The drawing is not shown here, but it needs to complement
the existing bitmap. (circles/squares for selection)
Please, see this extremely simple event loop. This is a single
tasklet that stays waiting for mouse events, until it gets
blown by a SystemExit exception.
This is quite revealing. Now I can have program state in my
PC counter, as it was 20 years ago. The handler feels like
a main program.
As a side note, you can also see that I have to copy all relevant
mouse state into som etemp class. This is most probably
due to the fact (fault), that wxWindows keeps the mouse event
on its stack. When I use that in another tasklet, the result is bogus.
I will ask Robin to change that and do a proper copy.
Even event.Clone() doesn't help it.
But there is no free meal - ly y'rs - chris
--
Christian Tismer :^) <mailto:tismer at tismer.com>
Mission Impossible 5oftware : Have a break! Take a ride on Python's
Johannes-Niemeyer-Weg 9a : *Starship* http://starship.python.net/
14109 Berlin : PGP key -> http://wwwkeys.pgp.net/
work +49 30 89 09 53 34 home +49 30 802 86 56 pager +49 173 24 18 776
PGP 0x57F3BF04 9064 F4E1 D754 C2FF 1619 305B C09C 5A3B 57F3 BF04
whom do you want to sponsor today? http://www.stackless.com/
_______________________________________________
Stackless mailing list
Stackless at www.tismer.com
http://www.tismer.com/mailman/listinfo/stackless
More information about the Stackless
mailing list