[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[ff-cvs] fenfire/org/fenfire bin/fenpdf10.py fenpdf/appe...
From: |
Tuomas J. Lukka |
Subject: |
[ff-cvs] fenfire/org/fenfire bin/fenpdf10.py fenpdf/appe... |
Date: |
Mon, 25 Aug 2003 03:02:25 -0400 |
CVSROOT: /cvsroot/fenfire
Module name: fenfire
Branch:
Changes by: Tuomas J. Lukka <address@hidden> 03/08/25 03:02:25
Modified files:
org/fenfire/bin: fenpdf10.py
org/fenfire/fenpdf/appearance: views.py
org/fenfire/fenpdf/events: eventhandler.py mousemenu.py
Added files:
org/fenfire/fenpdf/appearance: background.py
Log message:
patch-63
Remove invalid action
patch-64
Remove the badly encapsulated MouseMenu.link variable
patch-65
Remove the 'isHide' variable
patch-66
Event robusting
patch-67
Fix menu events once more
patch-68
Nicer background, may even be faster
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/bin/fenpdf10.py.diff?tr1=1.72&tr2=1.73&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/appearance/background.py?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/appearance/views.py.diff?tr1=1.9&tr2=1.10&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/events/eventhandler.py.diff?tr1=1.4&tr2=1.5&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/events/mousemenu.py.diff?tr1=1.4&tr2=1.5&r1=text&r2=text
Patches:
Index: fenfire/org/fenfire/bin/fenpdf10.py
diff -u fenfire/org/fenfire/bin/fenpdf10.py:1.72
fenfire/org/fenfire/bin/fenpdf10.py:1.73
--- fenfire/org/fenfire/bin/fenpdf10.py:1.72 Sun Aug 24 08:06:01 2003
+++ fenfire/org/fenfire/bin/fenpdf10.py Mon Aug 25 03:02:25 2003
@@ -216,14 +216,12 @@
fenPDF.events.mouse = ff.fenpdf.events.mouse.MouseMapper(context)
fenPDF.events.key = ff.fenpdf.events.key.KeyHandler(context.states)
-# XXX KLUDGE
-mainMouse = fenPDF.events.mouse.mainMouse
-buoyMouse = fenPDF.events.mouse.buoyMouse
views = ff.fenpdf.appearance.views.Views(fenPDF, papers,
eventHandler,
planeHome)
fenPDF.views = views
+fenPDF.views.background =
ff.fenpdf.appearance.background.FancyBlueBackground1()
context.states.cursor = ff.fenpdf.fenpdfcontext.Cursor(fen,
views.getMultiplexerNodeContentFunction())
fenPDF.uistate.cursor = context.states.cursor
Index: fenfire/org/fenfire/fenpdf/appearance/views.py
diff -u fenfire/org/fenfire/fenpdf/appearance/views.py:1.9
fenfire/org/fenfire/fenpdf/appearance/views.py:1.10
--- fenfire/org/fenfire/fenpdf/appearance/views.py:1.9 Sat Aug 23 13:13:33 2003
+++ fenfire/org/fenfire/fenpdf/appearance/views.py Mon Aug 25 03:02:25 2003
@@ -12,6 +12,10 @@
STRICT ENCAPSULATION: NO MEMBERS SHOULD BE ACCESSED
FROM OUTSIDE, EXCEPT FOR METHODS WITHOUT UNDERSCORES
+ Some members should be placed from outside:
+
+ background -- an object implementing placeBackDrop and placeFinalVob
+
The idea is that this class may be subclassed to obtain
versions that use other node types as well (mm graphs etc)
"""
@@ -101,6 +105,7 @@
self.geometryConfiguration
)
+
def getBuoyManager(self):
return self.buoyManager
@@ -134,10 +139,16 @@
if self.fenPDF.animation.reuseVs:
return self.fenPDF.animation.lastVs
+ self.background.placeBackDrop(vs)
+
self.buoyManager.scene(vs)
- self.fenPDF.events.buttons.render(vs, 0)
self.fenPDF.events.mousemenu.render(vs)
+
+ self.background.placeFinalVob(vs)
+
+ # Render buttons after the final vob to get proper blending
+ self.fenPDF.events.buttons.render(vs, 0)
self.fenPDF.animation.generatedNewScene(vs)
Index: fenfire/org/fenfire/fenpdf/events/eventhandler.py
diff -u fenfire/org/fenfire/fenpdf/events/eventhandler.py:1.4
fenfire/org/fenfire/fenpdf/events/eventhandler.py:1.5
--- fenfire/org/fenfire/fenpdf/events/eventhandler.py:1.4 Sat Aug 23
09:25:18 2003
+++ fenfire/org/fenfire/fenpdf/events/eventhandler.py Mon Aug 25 03:02:25 2003
@@ -10,6 +10,10 @@
def __init__(self, fenPDF):
self.fenPDF = fenPDF
+ # Whether the next mouse click should be eaten
+ # Used when a mouse press did something.
+ self._eatNextClick = 0
+
def mouse(self, ev, oldvs):
""" Callback from buoymanager, should not do context things..
@@ -18,8 +22,29 @@
"""
if dbg: p(ev)
+ # MouseMenu will want to know if the mouse is pressed
+ # to remove itself if the press is not inside
+ # the menu.
+ #
+ # In addition to the PRESSED,
+ # we need to eat the next MOUSE_CLICKED event.
+ if ev.getType() == ev.MOUSE_PRESSED:
+ # If a previous PRESSED didn't end as a click
+ # because of a drag, don't eat the following click.
+ self._eatNextClick = 0
+ if self.fenPDF.uistate.menu.shown and \
+ not self.fenPDF.events.mousemenu.mousePressed(ev) :
+ p("Eating next click")
+ self._eatNextClick = 1
+ return 1
+
+ if dbg: p("1", self._eatNextClick)
+
if ev.getType() == ev.MOUSE_CLICKED:
- if (self.fenPDF.events.mousemenu.mouse(ev) or
+ if self._eatNextClick:
+ self._eatNextClick = 0
+ return 1
+ if (self.fenPDF.events.mousemenu.mouseClicked(ev) or
self.fenPDF.events.buttons.mouseEvent(ev, oldvs)):
p('context seen, now cleaning it')
self.context.clean()
@@ -29,6 +54,8 @@
self.context.clean()
+ if dbg: p("2")
+
if ev.getType() == ev.MOUSE_RELEASED:
p('mainMouse released? - there\'s a bug in here!')
@@ -46,6 +73,9 @@
return 1
# There is a bug in AbstractUpdateManager code(?) and that's why
now is must to return.
+ if dbg: p("3")
+
+
self.context.states.lastEvent = ev
buoymanager = self.fenPDF.views.getBuoyManager()
@@ -55,6 +85,7 @@
vob.AbstractUpdateManager.chg()
return 1
+ if dbg: p("3")
if ev.getType() == ev.MOUSE_DRAGGED:
if buoymanager.singles[buoymanager.lastIndex].mainNode.mouse(ev,
buoymanager.vs):
@@ -63,6 +94,8 @@
vob.AbstractUpdateManager.chg()
return 1
+ if dbg: p("4")
+
buoyhit = buoymanager.findIfBuoyHit(buoymanager.vs, ev.getX(),
ev.getY())
if buoyhit != None:
single, link = buoyhit
@@ -71,6 +104,8 @@
if buoymanager.eventHandler.buoyMouse(buoymanager, ev,
buoymanager.singles[single], link):
return 1
return 0
+
+ if dbg: p("5")
topmostMainNode = buoymanager.findTopmostMainNode(buoymanager.vs,
ev.getX(), ev.getY())
Index: fenfire/org/fenfire/fenpdf/events/mousemenu.py
diff -u fenfire/org/fenfire/fenpdf/events/mousemenu.py:1.4
fenfire/org/fenfire/fenpdf/events/mousemenu.py:1.5
--- fenfire/org/fenfire/fenpdf/events/mousemenu.py:1.4 Sun Aug 24 08:06:01 2003
+++ fenfire/org/fenfire/fenpdf/events/mousemenu.py Mon Aug 25 03:02:25 2003
@@ -9,16 +9,15 @@
def p(*s):
print 'ff.fenpdf.events.mousemenu::', s
-
+
+
class MouseMenu:
def __init__(self, fenPDF, states):
self.fenPDF = fenPDF
self.states = states
self.style = vob.GraphicsAPI.getInstance().getTextStyle('sans', 0, 12)
- self.link = 0
self.makeMainList()
- self.isHide = 1
self.hideList()
def makeMainList(self):
@@ -26,22 +25,21 @@
if self.states.selection.hasSelection():
self.selectListVob.add('Transclude selection (PDF to canvas only)',
lambda: self.fenPDF.actions.menu.transclude())
- if self.link:
- self.selectListVob.add('Link node to left',
+ if self.fenPDF.uistate.menu.originatingNode:
+ self.selectListVob.add('<----- Link node to left',
lambda: self.fenPDF.actions.menu.structLinkNodes(-1))
- self.selectListVob.add('Link node to right',
+ self.selectListVob.add('Link node to right ----->',
lambda: self.fenPDF.actions.menu.structLinkNodes(1))
- self.selectListVob.add('Destroy this canvas',
- lambda: self.fenPDF.actions.menu.killPlane())
- if self.link:
self.selectListVob.add('Delete this node',
lambda: self.fenPDF.actions.menu.deleteNode())
+ self.selectListVob.add('Destroy this canvas',
+ lambda: self.fenPDF.actions.menu.killPlane())
+
def makeBuoyList(self):
self.selectListVob = vob.vobs.SelectListVob(self.style)
self.selectListVob.add('Unlink buoy',
lambda: self.fenPDF.actions.menu.unlinkBuoy())
- self.selectListVob.add('Go to home', 'home')
def render(self, vs):
cs = vs.orthoBoxCS(0, 'MOUSE_MENU',-100, self.x, self.y-self.h/2,
@@ -49,6 +47,7 @@
vs.put(self.selectListVob, cs)
def showList(self, x, y, who):
+ p("showList")
if who == 'buoymenu':
self.makeBuoyList()
elif who == 'mainmenu':
@@ -60,34 +59,70 @@
self.w, self.h = self.selectListVob.width, self.selectListVob.height
self.x, self.y = x, y
- self.isHide = 0
+ self.fenPDF.uistate.menu.shown = 1
def hideList(self):
+ p("Hidelist")
if hasattr(self.states, 'lastEvent'):
self.x, self.y = self.states.lastEvent.getX(),
self.states.lastEvent.getY()
else: self.x, self.y = 0,0
self.w, self.h = .0, .0
- self.isHide = 1
+ self.fenPDF.uistate.menu.shown = 0
+ self.fenPDF.animation.regenerateVS()
+ self.fenPDF.animation.noAnimation()
+ vob.AbstractUpdateManager.chg()
- def mouse(self, ev):
- if self.isHide: return 0
+ def getCSKey(self, ev):
+ if not self.fenPDF.uistate.menu.shown : return None
vs = self.fenPDF.animation.lastVs
cs = vs.matcher.getCS(0, 'MOUSE_MENU')
p('cs:', cs)
key = vs.getKeyAt(cs, ev.getX(), ev.getY(), None)
+ return key
+
+ def mousePressed(self, ev):
+ """A mouse pressed event was received.
+
+ If it's outside the menu, pop the menu away.
+
+ Returns: 1 if it was inside a menu,
+ and should be eaten.
+ """
+ key = self.getCSKey(ev)
+ if self.fenPDF.uistate.menu.shown:
+ if key == None:
+ self.hideList()
+ return 1
+ else:
+ return 1
+ else:
+ return 0
+
+ def mouseClicked(self, ev):
+ """A mouse clicked event was received.
+ If it's in the menu, react, otherwise
+ remove the menu.
+
+ Returns: 1 if the event was consumed.
+ """
+ key = self.getCSKey(ev)
if key != None:
try:
p('context menu hit!')
self.selectListVob.colorize(key, java.awt.Color.red)
key = key.object
- self.states.oldVS = vs
key()
- self.states.oldVS = None
self.hideList()
finally: # If there's an error, we still need a new scene
self.fenPDF.animation.regenerateVS()
return 1
- return 0
+ else:
+ if self.fenPDF.uistate.menu.shown:
+ self.hideList()
+ # We return 1 here too, since the button press
+ # outside the menu should be eaten.
+ return 1
+ return 0