fenfire-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[ff-cvs] fenfire/org/fenfire/fenpdf/events mousemenu.py


From: Matti Katila
Subject: [ff-cvs] fenfire/org/fenfire/fenpdf/events mousemenu.py
Date: Mon, 25 Aug 2003 20:26:44 -0400

CVSROOT:        /cvsroot/fenfire
Module name:    fenfire
Branch:         
Changes by:     Matti Katila <address@hidden>   03/08/25 20:26:44

Modified files:
        org/fenfire/fenpdf/events: mousemenu.py 

Log message:
        startted to use new selectlsitvob. removed abomination, uses 
eventStoler now

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/events/mousemenu.py.diff?tr1=1.5&tr2=1.6&r1=text&r2=text

Patches:
Index: fenfire/org/fenfire/fenpdf/events/mousemenu.py
diff -u fenfire/org/fenfire/fenpdf/events/mousemenu.py:1.5 
fenfire/org/fenfire/fenpdf/events/mousemenu.py:1.6
--- fenfire/org/fenfire/fenpdf/events/mousemenu.py:1.5  Mon Aug 25 03:02:25 2003
+++ fenfire/org/fenfire/fenpdf/events/mousemenu.py      Mon Aug 25 20:26:44 2003
@@ -5,41 +5,46 @@
 import vob
 from org.fenfire.swamp import Nodes
 from org import fenfire as ff
-import java
+import java, jarray
+import org.nongnu.libvob.vobs.SelectItemVob as Item
 
 def p(*s):
     print 'ff.fenpdf.events.mousemenu::', s
 
+dbg = 0
 
 class MouseMenu:
-
-    def __init__(self, fenPDF, states):
+    def __init__(self, fenPDF, states, eventHandler):
         self.fenPDF = fenPDF
         self.states = states
+        self.eventHandler = eventHandler
         self.style = vob.GraphicsAPI.getInstance().getTextStyle('sans', 0, 12)
         self.makeMainList()
         self.hideList()
         
     def makeMainList(self):
-        self.selectListVob = vob.vobs.SelectListVob(self.style)
+        list = []
        if self.states.selection.hasSelection():
-           self.selectListVob.add('Transclude selection (PDF to canvas only)',
-                   lambda: self.fenPDF.actions.menu.transclude())
+           list.append(Item('Transclude selection (PDF to canvas only)',
+                   lambda: self.fenPDF.actions.menu.transclude()))
         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 ----->', 
-                   lambda: self.fenPDF.actions.menu.structLinkNodes(1))
-            self.selectListVob.add('Delete this node', 
-                   lambda: self.fenPDF.actions.menu.deleteNode())
+            list.append(Item('<-----  Link node to left', 
+                   lambda: self.fenPDF.actions.menu.structLinkNodes(-1)))
+            list.append(Item('Link node to right ----->', 
+                   lambda: self.fenPDF.actions.menu.structLinkNodes(1)))
+            list.append(Item('Delete this node', 
+                   lambda: self.fenPDF.actions.menu.deleteNode()))
+
+        list.append(Item('Destroy this canvas', 
+                   lambda: self.fenPDF.actions.menu.killPlane()))
 
-        self.selectListVob.add('Destroy this canvas', 
-                   lambda: self.fenPDF.actions.menu.killPlane())
+        self.selectListVob = vob.vobs.SelectListVob(list)
 
     def makeBuoyList(self):
-        self.selectListVob = vob.vobs.SelectListVob(self.style)
-        self.selectListVob.add('Unlink buoy', 
-           lambda: self.fenPDF.actions.menu.unlinkBuoy())
+        list = []
+        list.append(Item('Unlink buoy', 
+            lambda: self.fenPDF.actions.menu.unlinkBuoy()))
+        self.selectListVob = vob.vobs.SelectListVob(list)
 
     def render(self, vs):
         cs = vs.orthoBoxCS(0, 'MOUSE_MENU',-100, self.x, self.y-self.h/2,
@@ -47,6 +52,7 @@
         vs.put(self.selectListVob, cs)
 
     def showList(self, x, y, who):
+        self.eventHandler.eventStoler = self.mouse
        p("showList")
         if who == 'buoymenu':
             self.makeBuoyList()
@@ -58,71 +64,49 @@
             return
         
         self.w, self.h = self.selectListVob.width, self.selectListVob.height
+        self.w *= 2.5
+        self.h *= 2.5
         self.x, self.y = x, y
-        self.fenPDF.uistate.menu.shown = 1
 
     def hideList(self):
+        self.eventHandler.eventStoler = None
        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.fenPDF.uistate.menu.shown = 0
-       self.fenPDF.animation.regenerateVS()
-       self.fenPDF.animation.noAnimation()
-       vob.AbstractUpdateManager.chg()
-
-    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
-               key()
-               self.hideList()
-           finally: # If there's an error, we still need a new scene
-               self.fenPDF.animation.regenerateVS()
-            return 1
-       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
 
+        # what are these?!
+       #self.fenPDF.animation.regenerateVS()
+       #self.fenPDF.animation.noAnimation()
+       #vob.AbstractUpdateManager.chg()
+
+    def mouse(self, ev, oldVS):
+        """ Should be called only through eventHandler.eventStoler
+        """
+        cs = oldVS.matcher.getCS(0, 'MOUSE_MENU')
+        key = oldVS.getKeyAt(cs, ev.getX(), ev.getY(), None)
+        p('cs', cs, key)
+        if cs < 0:
+            p('Something WRONG!!, should not happend! How can ',oldvs,'be 
*WRONG* vobscene??? should not be reused!')
+            return
+
+        pts = jarray.zeros(3, 'f')
+        if dbg: p('mouse', ev.getX(), ev.getY())
+        oldVS.coords.inverseTransformPoints3(cs, [ev.getX(), ev.getY(), 0.], 
pts)
+        if dbg: p('transformed', pts)
+
+        if ev.getType() in [ev.MOUSE_PRESSED, ev.MOUSE_DRAGGED]:
+            self.selectListVob.preSelect(pts[0], pts[1])
+        if ev.getType() in [ev.MOUSE_RELEASED, ev.MOUSE_CLICKED]:
+            self.selectListVob.postSelect(pts[0], pts[1])
+            
+            if key:
+                key.run()
+            else:
+                p('nothing', key)
+            self.eventHandler.eventStoler = None
+
+        vob.AbstractUpdateManager.setNoAnimation()
+        vob.AbstractUpdateManager.chg()
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]