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/fenp...


From: Tuomas J. Lukka
Subject: [ff-cvs] fenfire/org/fenfire bin/fenpdf10.py fenpdf/fenp...
Date: Sat, 23 Aug 2003 09:25:19 -0400

CVSROOT:        /cvsroot/fenfire
Module name:    fenfire
Branch:         
Changes by:     Tuomas J. Lukka <address@hidden>        03/08/23 09:25:18

Modified files:
        org/fenfire/bin: fenpdf10.py 
        org/fenfire/fenpdf: fenpdf.py 
        org/fenfire/fenpdf/actions: keyboard.py mouse.py 
        org/fenfire/fenpdf/appearance: views.py 
        org/fenfire/fenpdf/events: eventhandler.py mousemenu.py 

Log message:
        Arch: patch-50
        Moving ui state. Clear encapsulation of location where reuse of vs's is 
decided
        patch-51
        Comments, rm crud
        patch-52
        Fix mousemenu again

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/bin/fenpdf10.py.diff?tr1=1.69&tr2=1.70&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/fenpdf.py.diff?tr1=1.7&tr2=1.8&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/actions/keyboard.py.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/actions/mouse.py.diff?tr1=1.4&tr2=1.5&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/appearance/views.py.diff?tr1=1.7&tr2=1.8&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/events/eventhandler.py.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/events/mousemenu.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text

Patches:
Index: fenfire/org/fenfire/bin/fenpdf10.py
diff -u fenfire/org/fenfire/bin/fenpdf10.py:1.69 
fenfire/org/fenfire/bin/fenpdf10.py:1.70
--- fenfire/org/fenfire/bin/fenpdf10.py:1.69    Sat Aug 23 06:48:40 2003
+++ fenfire/org/fenfire/bin/fenpdf10.py Sat Aug 23 09:25:18 2003
@@ -207,7 +207,7 @@
 
 context = Context(w, fen, ppActions, FILE)
 
-context.mousemenu = ff.fenpdf.events.mousemenu.MouseMenu(context.states)
+context.mousemenu = ff.fenpdf.events.mousemenu.MouseMenu(fenPDF, 
context.states)
 fenPDF.events.mousemenu = context.mousemenu
 
 fenPDF.events.mouse = ff.fenpdf.events.mouse.MouseMapper(context)
@@ -230,7 +230,7 @@
 ff.view.buoy.MainNode2D.fen = fen
 ff.view.buoy.AbstractMainNode2D.context = context
 
-fenPDF.actions.mouse = ff.fenpdf.actions.mouse.MouseActions(context)
+fenPDF.actions.mouse = ff.fenpdf.actions.mouse.MouseActions(fenPDF,context)
 fenPDF.actions.key = ff.fenpdf.actions.keyboard.KeyActions(context)
 
 
Index: fenfire/org/fenfire/fenpdf/actions/keyboard.py
diff -u fenfire/org/fenfire/fenpdf/actions/keyboard.py:1.5 
fenfire/org/fenfire/fenpdf/actions/keyboard.py:1.6
--- fenfire/org/fenfire/fenpdf/actions/keyboard.py:1.5  Fri Aug 22 05:06:57 2003
+++ fenfire/org/fenfire/fenpdf/actions/keyboard.py      Sat Aug 23 09:25:18 2003
@@ -17,6 +17,10 @@
 def p(*s):
     print 'ff.fenpdf.events.key::', s
 
+# Note that the default is that the old vobscene is reused.
+# If an action needs regeneration, it has to explicitly call for
+# that by fenPDF.uistate.regenerateVs()
+
 class KeyActions:
     def __init__(self, context):
        self.context = context
@@ -35,6 +39,8 @@
        self.fenPDF.structure.alphContent.insertText(acc, offs, char, 1)
        cur.setCursorOffset(offs + 1)
 
+       fenPDF.uistate.regenerateVS()
+
        
     def insertCharOrCreate(self, main, char):
        """Insert a character to the accursed node.
@@ -57,6 +63,8 @@
 
        self.insertChar(main, char)
 
+       fenPDF.uistate.regenerateVS()
+
     def moveInsertionCursor(self, main, n):
        """Move the text insertion cursor by n.
 
@@ -75,6 +83,8 @@
 
        cur.setCursorOffset(offs)
 
+       fenPDF.uistate.regenerateVS()
+
     def backspace(self, main):
         cur = self.context.states.cursor
 
@@ -101,6 +111,8 @@
                    self.fenPDF.structure.canvas2d.removeNode(node)
                    cur.setAccursed(None)
 
+       fenPDF.uistate.regenerateVS()
+
        
     # XXX Not implemented
     def toggleBgTextureUse(self, value = -1):
@@ -119,8 +131,11 @@
        # here from fenpdf10.py, and needs fixing XXX
        self.context.states.buoymanager.singles[1].mainNode = 
ff.view.buoy.MainNode2D(planeHome, irregu, ctrl)
 
+       fenPDF.uistate.regenerateVS()
+
     def save(self):
        self.context.save()
+       fenPDF.uistate.regenerateVS()
 
     def exit(self):
        # Harsh
@@ -134,6 +149,7 @@
        self.fenPDF.views.getDoubleGeometer().setSingle(
            not self.fenPDF.views.getDoubleGeometer().getSingle())
        vob.AbstractUpdateManager.chg()
+       fenPDF.uistate.regenerateVS()
 
 
     def importPDF(self):
@@ -145,12 +161,14 @@
        p('sc: ',scrollBlock,'id: ', scrollBlock.getID())
        if scrollBlock != None:
            self.moveTo(None, scrollBlock)
+       fenPDF.uistate.regenerateVS()
 
     def newCanvas(self):
        canvas = Nodes.N()
        self.fenPDF.structure.canvas2d.makeIntoCanvas(canvas)
        self.fenPDF.structure.treeTime.addLatest(self.fenPDF.fen.graph, canvas)
        self.moveTo(None, canvas)
+       fenPDF.uistate.regenerateVS()
 
     def moveTo(self, main, newFocus):
        """Move the focus to a new place.
@@ -161,17 +179,7 @@
        index = 0
 
        self.fenPDF.views.setFocus(index, newFocus)
-       # buoymanager.replaceManager(0, 
-       #    ff.view.buoy.FisheyeMainNode2D(
-       #       scrollBlock, 
-       #       views.pageview, 
-       #       ff.view.buoy.AbstractMainNode2D.SimpleFocus(0,0),
-       #       self.states.mainMouse))
-
-       #buoymanager.replaceManager(0, 
-       #    ff.view.buoy.MainNode2D(ff.swamp.Nodes.get(paper), 
-       #                           views.irregu, 
ff.view.buoy.AbstractMainNode2D.SimpleFocus(0,0),1,
-       #                           self.states.mainMouse))
+       fenPDF.uistate.regenerateVS()
 
 
     
Index: fenfire/org/fenfire/fenpdf/actions/mouse.py
diff -u fenfire/org/fenfire/fenpdf/actions/mouse.py:1.4 
fenfire/org/fenfire/fenpdf/actions/mouse.py:1.5
--- fenfire/org/fenfire/fenpdf/actions/mouse.py:1.4     Thu Aug 21 04:24:09 2003
+++ fenfire/org/fenfire/fenpdf/actions/mouse.py Sat Aug 23 09:25:18 2003
@@ -37,23 +37,27 @@
 
 # Define the actions.
 
-def defineActions(context):
+def defineActions(fenPDF, context):
     def getMainNode():
        return context.states.buoymanager.getLastMain()
     def getOldVS():
-       return context.states.buoymanager.getVs()
+       return fenPDF.uistate.lastVs
 
 # Inside the action, we have the following symbols usable:
+#  fenPDF - the main FenPDF object
 #  context - the context object
 #  getMainNode() - get the main node that was hit last
 #  getOldVS() - get the previous vobScene.
 
+# Note that the default is that the old vobscene is reused.
+# If an action needs regeneration, it has to explicitly call for
+# that by fenPDF.uistate.regenerateVs()
+
     ######## Actions to control pan of main nodes etc.
 
     class PanMover(vob.mouse.RelativeAdapter,
                   vob.input.RelativeAxisListener):
        def changedRelative(self, x,y='foo'):
-           context.states.fastChg = 1
            # grrr.. pythonism, overloading of own method is sicknes
            if y=='foo': return self._changedRelative(x)
            f = getMainNode().getFocus()
@@ -73,26 +77,24 @@
            obj = getMainNode().getNodeOnPlane(getOldVS(), x,y)
            context.states.cursor.setAccursed(obj)
            getMainNode().moveToPoint(int(x),int(y), getOldVS())
-           context.states.fastChg = 0
+           fenPDF.uistate.regenerateVS()
 
 
     class ZoomPan(vob.input.RelativeAxisListener):
        def changedRelative(self, x):
            getMainNode().changeZoom(x)
            getMainNode().chgFast(getOldVS(), -1)
-           context.states.fastChg = 1
 
     class ChangeSize(vob.input.RelativeAxisListener):
        def changedRelative(self, x):
            getMainNode().changeSize(x)
            getMainNode().chgFast(getOldVS(), -1)
-           context.states.fastChg = 1
 
     class IfSelectNodeOnPlane(vob.mouse.MouseClickListener):
        def clicked(self, x, y):
            obj = getMainNode().getNodeOnPlane(getOldVS(), x,y)
            context.states.cursor.setAccursed(obj)
-           context.states.fastChg = 0
+           fenPDF.uistate.regenerateVS()
 
     class MouseMenu(vob.mouse.MouseClickListener):
        def clicked(self, x, y):
@@ -102,7 +104,7 @@
                context.mousemenu.link = 1
            else: context.mousemenu.link = 0
            context.mousemenu.showList(x,y,'mainmenu')
-           context.states.fastChg = 0
+           fenPDF.uistate.regenerateVS()
            vob.AbstractUpdateManager.setNoAnimation()
 
     ####### Actions to control nodes on main node plane
@@ -125,7 +127,6 @@
            oy = ff.util.RDFUtil.getFloat(g, self.node, CANVAS2D.y)
            self.pp.moveNote(self.node, ox+x/f.zoom, oy+y/f.zoom )
            getMainNode().chgFast(getOldVS(), -1)
-           context.states.fastChg = 1
 
 
 
@@ -150,7 +151,6 @@
                    getMainNode())
 
            getMainNode().chgFast(getOldVS(), -1)
-           context.states.fastChg = 1
        def endDrag(self, x,y):
            self.drag(x,y)
 
@@ -164,6 +164,7 @@
            self.nodeMover = nodeMover
            self.panMover = panMover
        def pressed(self, x, y):
+           p("OldVS: ", getOldVS())
            obj = getMainNode().getNodeOnPlane(getOldVS(), x,y)
            
            if obj != None and obj == context.states.cursor.getAccursed():
@@ -192,7 +193,7 @@
            buoymanager = context.states.buoymanager
            p('hit',buoymanager.buoyHit)
            context.mousemenu.showList(x,y, 'buoymenu')
-           context.states.fastChg = 0
+           fenPDF.uistate.regenerateVS()
            vob.AbstractUpdateManager.setNoAnimation()
 
     class BuoyFollowClick(vob.mouse.MouseClickListener):
@@ -200,7 +201,7 @@
            buoymanager = context.states.buoymanager
            p('hit',buoymanager.buoyHit, buoymanager.buoyHit.single)
            buoymanager.buoyHit.single.followLink(buoymanager.buoyHit.link)
-           context.states.fastChg = 0
+           fenPDF.uistate.regenerateVS()
 
     # Return a map of symbols
     res = { }
@@ -210,8 +211,8 @@
     return res
 
 class MouseActions:
-    def __init__(self, context):
-       actions = defineActions(context)
+    def __init__(self, fenPDF, context):
+       actions = defineActions(fenPDF,context)
        for sym in actions.keys():
            setattr(self, sym, actions[sym])
 
Index: fenfire/org/fenfire/fenpdf/appearance/views.py
diff -u fenfire/org/fenfire/fenpdf/appearance/views.py:1.7 
fenfire/org/fenfire/fenpdf/appearance/views.py:1.8
--- fenfire/org/fenfire/fenpdf/appearance/views.py:1.7  Fri Aug 22 07:22:58 2003
+++ fenfire/org/fenfire/fenpdf/appearance/views.py      Sat Aug 23 09:25:18 2003
@@ -126,12 +126,21 @@
        BuoyManager may decide
        """
 
-       replacingScene = self.buoyManager.scene(vs)
-       if replacingScene == None: 
-           self.fenPDF.events.buttons.render(vs, 0)
-           self.fenPDF.events.mousemenu.render(vs)
+       if (not self.fenPDF.uistate.animate) or (
+           self.fenPDF.uistate.reuseVs):
+               vob.AbstractUpdateManager.setNoAnimation()
+           
 
-       return replacingScene
+       if self.fenPDF.uistate.reuseVs:
+           return self.fenPDF.uistate.lastVs
+
+       self.buoyManager.scene(vs)
+       self.fenPDF.events.buttons.render(vs, 0)
+       self.fenPDF.events.mousemenu.render(vs)
+
+       self.fenPDF.uistate.generatedNewScene(vs)
+
+       return vs
 
     def getConnectors(self):
        return self.connectors
Index: fenfire/org/fenfire/fenpdf/events/eventhandler.py
diff -u fenfire/org/fenfire/fenpdf/events/eventhandler.py:1.3 
fenfire/org/fenfire/fenpdf/events/eventhandler.py:1.4
--- fenfire/org/fenfire/fenpdf/events/eventhandler.py:1.3       Sat Aug 23 
06:48:41 2003
+++ fenfire/org/fenfire/fenpdf/events/eventhandler.py   Sat Aug 23 09:25:18 2003
@@ -19,7 +19,7 @@
         if dbg: p(ev)
 
         if ev.getType() == ev.MOUSE_CLICKED:
-           if (self.fenPDF.events.mousemenu.mouse(ev, oldvs) or
+           if (self.fenPDF.events.mousemenu.mouse(ev) or
                self.fenPDF.events.buttons.mouseEvent(ev, oldvs)):
                p('context seen, now cleaning it')
                self.context.clean()
Index: fenfire/org/fenfire/fenpdf/events/mousemenu.py
diff -u fenfire/org/fenfire/fenpdf/events/mousemenu.py:1.1 
fenfire/org/fenfire/fenpdf/events/mousemenu.py:1.2
--- fenfire/org/fenfire/fenpdf/events/mousemenu.py:1.1  Sat Aug 23 06:48:41 2003
+++ fenfire/org/fenfire/fenpdf/events/mousemenu.py      Sat Aug 23 09:25:18 2003
@@ -1,6 +1,7 @@
 # (c) Tuomas J. Lukka and Matti Katila
 
 import vob
+from org.fenfire.swamp import Nodes
 from org import fenfire as ff
 import java
 
@@ -9,8 +10,9 @@
         
 class MouseMenu:
     class Action:
-        def __init__(self, states):
+        def __init__(self, fenPDF, states):
             self.states = states
+           self.fenPDF = fenPDF
         def run(self):
             pass
 
@@ -19,11 +21,13 @@
             obj = self.states.objectOnPlane
             pp = self.states.ppActions
             pp.assocNotes(obj, -1, self.states.cursor.getAccursed())
+           self.fenPDF.uistate.regenerateVS()
     class LinkR(Action):
         def run(self):
             obj = self.states.objectOnPlane
             pp = self.states.ppActions
             pp.assocNotes(obj, 1, self.states.cursor.getAccursed())
+           self.fenPDF.uistate.regenerateVS()
     class UnlinkBuoy(Action):
         def run(self):
             link = self.states.buoymanager.buoyHit.link
@@ -41,6 +45,7 @@
                a,b = link[1].first, link[1].second
                pp.detachNotes(a, 1, b)
                pp.detachNotes(a, -1, b)
+           self.fenPDF.uistate.regenerateVS()
 
     class KillPlane(Action):
         def run(self):
@@ -57,6 +62,7 @@
                 p('foo fish eye')
             else:
                 p('plaah, unknow main view2d')
+           self.fenPDF.uistate.regenerateVS()
 
     class GoHome(Action):
         def run(self):
@@ -67,6 +73,7 @@
         def run(self):
             obj = self.states.objectOnPlane
             self.states.ppActions.deleteNote(obj)
+           self.fenPDF.uistate.regenerateVS()
 
     class Transclude(Action):
        def run(self):
@@ -88,10 +95,12 @@
            node = Nodes.get(self.states.ppActions.newNote(plane,
                                focus.getPanX(), focus.getPanY(), ""))
            self.states.fen.txt.set(node, obj)
+           self.fenPDF.uistate.regenerateVS()
                    
 
 
-    def __init__(self, states):
+    def __init__(self, fenPDF, states):
+        self.fenPDF = fenPDF
         self.states = states
         self.style = vob.GraphicsAPI.getInstance().getTextStyle('sans', 0, 12)
         self.link = 0
@@ -103,18 +112,18 @@
         self.selectListVob = vob.vobs.SelectListVob(self.style)
        if self.states.selection.hasSelection():
            self.selectListVob.add('Transclude selection (PDF to canvas only)',
-                   self.Transclude(self.states))
+                   self.Transclude(self.fenPDF, self.states))
         if self.link:
-            self.selectListVob.add('Link node to left', 
self.LinkL(self.states))
-            self.selectListVob.add('Link node to rigth', 
self.LinkR(self.states))
+            self.selectListVob.add('Link node to left', 
self.LinkL(self.fenPDF, self.states))
+            self.selectListVob.add('Link node to rigth', 
self.LinkR(self.fenPDF, self.states))
         self.selectListVob.add('Go to home', 'home')
-        self.selectListVob.add('Destroy this canvas', 
self.KillPlane(self.states))
+        self.selectListVob.add('Destroy this canvas', 
self.KillPlane(self.fenPDF, self.states))
         if self.link:
-            self.selectListVob.add('Delete this node', 
self.DeleteNode(self.states))
+            self.selectListVob.add('Delete this node', 
self.DeleteNode(self.fenPDF, self.states))
 
     def makeBuoyList(self):
         self.selectListVob = vob.vobs.SelectListVob(self.style)
-        self.selectListVob.add('Unlink buoy', self.UnlinkBuoy(self.states))
+        self.selectListVob.add('Unlink buoy', self.UnlinkBuoy(self.fenPDF, 
self.states))
         self.selectListVob.add('Go to home', 'home')
 
     def render(self, vs):
@@ -143,8 +152,9 @@
         self.w, self.h = .0, .0
         self.isHide = 1
 
-    def mouse(self, ev, vs):
+    def mouse(self, ev):
         if self.isHide: return 0
+       vs = self.fenPDF.uistate.lastVs
         
         cs = vs.matcher.getCS(0, 'MOUSE_MENU')
         p('cs:', cs)
Index: fenfire/org/fenfire/fenpdf/fenpdf.py
diff -u fenfire/org/fenfire/fenpdf/fenpdf.py:1.7 
fenfire/org/fenfire/fenpdf/fenpdf.py:1.8
--- fenfire/org/fenfire/fenpdf/fenpdf.py:1.7    Fri Aug 22 07:22:58 2003
+++ fenfire/org/fenfire/fenpdf/fenpdf.py        Sat Aug 23 09:25:18 2003
@@ -4,10 +4,42 @@
 """
 
 from org import fenfire as ff
+import vob
 
 class _Empty:
     pass
 
+class UIState:
+    """
+
+    The following fields are public:
+       
+       lastVs -- The vobscene that has been drawn last.
+       reuseVs -- set to true if the change was fast and we can just
+                  reuse the last time's vs.
+       animate -- The next regeneration should also animate. 
+
+    """
+
+    def __init__(self):
+       self.reuseVs = 0
+       self.lastVs = None
+       self.animate = 0
+
+    def regenerateVS(self):
+       self.reuseVs = 0
+       vob.AbstractUpdateManager.chg()
+
+    def noAnimation(self):
+       self.reuseVs = 0
+
+    def generatedNewScene(self, vs):
+       """A new scene was generated, start fresh.
+       """
+       self.reuseVs = 1
+       self.lastVs = vs
+       self.animate = 1
+
 class FenPDF:
     """This class represents a complete fenpdf "application".
 
@@ -37,6 +69,7 @@
 
     window -- the GraphicsAPI.window object
 
+    uistate -- an UIState object
     The internal members are prefixed by underscore.
     """
 
@@ -47,6 +80,7 @@
        self.events = _Empty()
        self.actions = _Empty()
        self.structure = _Empty()
+       self.uistate = UIState()
 
        self.structure.structLink = ff.structure.StructLink.create(fen.graph)
        self.structure.alphContent = ff.util.AlphContent(fen)




reply via email to

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