fenfire-commits
[Top][All Lists]
Advanced

[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
 
 




reply via email to

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