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 13:13:33 -0400

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

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: mousemenu.py 
        org/fenfire/view/buoy: AbstractMainNode2D.java 

Log message:
        Arch: patch-53
        Take away redundant error message
        patch-54
        Rename uistate to animationstate: let's try not to let too much 
orthogonal stuff clump together. UIstate will contain things like whether a 
menu is shown, what node was clicked to get the menu etc.
        patch-55
        Menu refactoring
        patch-56
        Refactor linking action away from menu code
        patch-57
        Refactor unlink buoy action to actions
        patch-58
        Move node deletion to actions

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/bin/fenpdf10.py.diff?tr1=1.70&tr2=1.71&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/fenpdf.py.diff?tr1=1.8&tr2=1.9&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/actions/keyboard.py.diff?tr1=1.6&tr2=1.7&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/actions/mouse.py.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/appearance/views.py.diff?tr1=1.8&tr2=1.9&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/events/mousemenu.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java.diff?tr1=1.46&tr2=1.47&r1=text&r2=text

Patches:
Index: fenfire/org/fenfire/bin/fenpdf10.py
diff -u fenfire/org/fenfire/bin/fenpdf10.py:1.70 
fenfire/org/fenfire/bin/fenpdf10.py:1.71
--- fenfire/org/fenfire/bin/fenpdf10.py:1.70    Sat Aug 23 09:25:18 2003
+++ fenfire/org/fenfire/bin/fenpdf10.py Sat Aug 23 13:13:33 2003
@@ -223,6 +223,7 @@
 fenPDF.views = views
 
 context.states.cursor = ff.fenpdf.fenpdfcontext.Cursor(fen, 
views.getMultiplexerNodeContentFunction())
+fenPDF.uistate.cursor = context.states.cursor
 
 
 eventHandler.context = context
@@ -232,6 +233,7 @@
 
 fenPDF.actions.mouse = ff.fenpdf.actions.mouse.MouseActions(fenPDF,context)
 fenPDF.actions.key = ff.fenpdf.actions.keyboard.KeyActions(context)
+fenPDF.actions.menu = ff.fenpdf.actions.menu.MenuActions(fenPDF)
 
 
 fenPDF.events.mouse.fenPDF = fenPDF
Index: fenfire/org/fenfire/fenpdf/actions/keyboard.py
diff -u fenfire/org/fenfire/fenpdf/actions/keyboard.py:1.6 
fenfire/org/fenfire/fenpdf/actions/keyboard.py:1.7
--- fenfire/org/fenfire/fenpdf/actions/keyboard.py:1.6  Sat Aug 23 09:25:18 2003
+++ fenfire/org/fenfire/fenpdf/actions/keyboard.py      Sat Aug 23 13:13:33 2003
@@ -19,7 +19,7 @@
 
 # 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()
+# that by fenPDF.animation.regenerateVs()
 
 class KeyActions:
     def __init__(self, context):
@@ -39,7 +39,7 @@
        self.fenPDF.structure.alphContent.insertText(acc, offs, char, 1)
        cur.setCursorOffset(offs + 1)
 
-       fenPDF.uistate.regenerateVS()
+       fenPDF.animation.regenerateVS()
 
        
     def insertCharOrCreate(self, main, char):
@@ -63,7 +63,7 @@
 
        self.insertChar(main, char)
 
-       fenPDF.uistate.regenerateVS()
+       fenPDF.animation.regenerateVS()
 
     def moveInsertionCursor(self, main, n):
        """Move the text insertion cursor by n.
@@ -83,7 +83,7 @@
 
        cur.setCursorOffset(offs)
 
-       fenPDF.uistate.regenerateVS()
+       fenPDF.animation.regenerateVS()
 
     def backspace(self, main):
         cur = self.context.states.cursor
@@ -111,7 +111,7 @@
                    self.fenPDF.structure.canvas2d.removeNode(node)
                    cur.setAccursed(None)
 
-       fenPDF.uistate.regenerateVS()
+       fenPDF.animation.regenerateVS()
 
        
     # XXX Not implemented
@@ -131,11 +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()
+       fenPDF.animation.regenerateVS()
 
     def save(self):
        self.context.save()
-       fenPDF.uistate.regenerateVS()
+       fenPDF.animation.regenerateVS()
 
     def exit(self):
        # Harsh
@@ -149,7 +149,7 @@
        self.fenPDF.views.getDoubleGeometer().setSingle(
            not self.fenPDF.views.getDoubleGeometer().getSingle())
        vob.AbstractUpdateManager.chg()
-       fenPDF.uistate.regenerateVS()
+       fenPDF.animation.regenerateVS()
 
 
     def importPDF(self):
@@ -161,14 +161,14 @@
        p('sc: ',scrollBlock,'id: ', scrollBlock.getID())
        if scrollBlock != None:
            self.moveTo(None, scrollBlock)
-       fenPDF.uistate.regenerateVS()
+       fenPDF.animation.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()
+       fenPDF.animation.regenerateVS()
 
     def moveTo(self, main, newFocus):
        """Move the focus to a new place.
@@ -179,7 +179,7 @@
        index = 0
 
        self.fenPDF.views.setFocus(index, newFocus)
-       fenPDF.uistate.regenerateVS()
+       fenPDF.animation.regenerateVS()
 
 
     
Index: fenfire/org/fenfire/fenpdf/actions/mouse.py
diff -u fenfire/org/fenfire/fenpdf/actions/mouse.py:1.5 
fenfire/org/fenfire/fenpdf/actions/mouse.py:1.6
--- fenfire/org/fenfire/fenpdf/actions/mouse.py:1.5     Sat Aug 23 09:25:18 2003
+++ fenfire/org/fenfire/fenpdf/actions/mouse.py Sat Aug 23 13:13:33 2003
@@ -41,7 +41,7 @@
     def getMainNode():
        return context.states.buoymanager.getLastMain()
     def getOldVS():
-       return fenPDF.uistate.lastVs
+       return fenPDF.animation.lastVs
 
 # Inside the action, we have the following symbols usable:
 #  fenPDF - the main FenPDF object
@@ -51,7 +51,7 @@
 
 # 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()
+# that by fenPDF.animation.regenerateVs()
 
     ######## Actions to control pan of main nodes etc.
 
@@ -77,7 +77,7 @@
            obj = getMainNode().getNodeOnPlane(getOldVS(), x,y)
            context.states.cursor.setAccursed(obj)
            getMainNode().moveToPoint(int(x),int(y), getOldVS())
-           fenPDF.uistate.regenerateVS()
+           fenPDF.animation.regenerateVS()
 
 
     class ZoomPan(vob.input.RelativeAxisListener):
@@ -94,7 +94,7 @@
        def clicked(self, x, y):
            obj = getMainNode().getNodeOnPlane(getOldVS(), x,y)
            context.states.cursor.setAccursed(obj)
-           fenPDF.uistate.regenerateVS()
+           fenPDF.animation.regenerateVS()
 
     class MouseMenu(vob.mouse.MouseClickListener):
        def clicked(self, x, y):
@@ -103,8 +103,11 @@
                context.states.objectOnPlane = obj
                context.mousemenu.link = 1
            else: context.mousemenu.link = 0
+
+           fenPDF.uistate.menu.originateFromMainNode(getMainNode(), obj)
+
            context.mousemenu.showList(x,y,'mainmenu')
-           fenPDF.uistate.regenerateVS()
+           fenPDF.animation.regenerateVS()
            vob.AbstractUpdateManager.setNoAnimation()
 
     ####### Actions to control nodes on main node plane
@@ -192,8 +195,9 @@
        def clicked(self, x, y):
            buoymanager = context.states.buoymanager
            p('hit',buoymanager.buoyHit)
+           fenPDF.uistate.menu.originateFromBuoy(buoymanager.buoyHit)
            context.mousemenu.showList(x,y, 'buoymenu')
-           fenPDF.uistate.regenerateVS()
+           fenPDF.animation.regenerateVS()
            vob.AbstractUpdateManager.setNoAnimation()
 
     class BuoyFollowClick(vob.mouse.MouseClickListener):
@@ -201,7 +205,7 @@
            buoymanager = context.states.buoymanager
            p('hit',buoymanager.buoyHit, buoymanager.buoyHit.single)
            buoymanager.buoyHit.single.followLink(buoymanager.buoyHit.link)
-           fenPDF.uistate.regenerateVS()
+           fenPDF.animation.regenerateVS()
 
     # Return a map of symbols
     res = { }
Index: fenfire/org/fenfire/fenpdf/appearance/views.py
diff -u fenfire/org/fenfire/fenpdf/appearance/views.py:1.8 
fenfire/org/fenfire/fenpdf/appearance/views.py:1.9
--- fenfire/org/fenfire/fenpdf/appearance/views.py:1.8  Sat Aug 23 09:25:18 2003
+++ fenfire/org/fenfire/fenpdf/appearance/views.py      Sat Aug 23 13:13:33 2003
@@ -126,19 +126,20 @@
        BuoyManager may decide
        """
 
-       if (not self.fenPDF.uistate.animate) or (
-           self.fenPDF.uistate.reuseVs):
+       if (not self.fenPDF.animation.animate) or (
+           self.fenPDF.animation.reuseVs):
                vob.AbstractUpdateManager.setNoAnimation()
            
 
-       if self.fenPDF.uistate.reuseVs:
-           return self.fenPDF.uistate.lastVs
+       if self.fenPDF.animation.reuseVs:
+           return self.fenPDF.animation.lastVs
 
        self.buoyManager.scene(vs)
+
        self.fenPDF.events.buttons.render(vs, 0)
        self.fenPDF.events.mousemenu.render(vs)
 
-       self.fenPDF.uistate.generatedNewScene(vs)
+       self.fenPDF.animation.generatedNewScene(vs)
 
        return vs
 
Index: fenfire/org/fenfire/fenpdf/events/mousemenu.py
diff -u fenfire/org/fenfire/fenpdf/events/mousemenu.py:1.2 
fenfire/org/fenfire/fenpdf/events/mousemenu.py:1.3
--- fenfire/org/fenfire/fenpdf/events/mousemenu.py:1.2  Sat Aug 23 09:25:18 2003
+++ fenfire/org/fenfire/fenpdf/events/mousemenu.py      Sat Aug 23 13:13:33 2003
@@ -1,5 +1,7 @@
 # (c) Tuomas J. Lukka and Matti Katila
 
+from __future__ import nested_scopes
+
 import vob
 from org.fenfire.swamp import Nodes
 from org import fenfire as ff
@@ -13,42 +15,10 @@
         def __init__(self, fenPDF, states):
             self.states = states
            self.fenPDF = fenPDF
-        def run(self):
+        def __call__(self):
             pass
-
-    class LinkL(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 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
-            #(otherNode, linkId, otherAnchor, into)
-           p('link',link)
-            p('Detaching 
linkid',link[1],'otheranchor',link[2],'othernode',link[0])
-           linkId = link[1]
-           if isinstance(linkId, 
-                         ff.view.buoy.TransclusionConnector.LinkId):
-               # Transclusion link: delete the node
-               self.states.ppActions.deleteNote(
-                   Nodes.toString(linkId.node))
-           else:
-               pp = self.states.ppActions
-               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):
+        def __call__(self):
             main = self.states.buoymanager.getLastMain()
             if isinstance(main, ff.view.buoy.MainNode2D):
                 self.states.ppActions.deletePaper(main.getPlane())
@@ -62,21 +32,15 @@
                 p('foo fish eye')
             else:
                 p('plaah, unknow main view2d')
-           self.fenPDF.uistate.regenerateVS()
 
     class GoHome(Action):
-        def run(self):
+        def __call__(self):
             pass
             #self.s.buoymanager.singles[1].mainNode = 
ff.view.buoy.MainNode2D(planeHome, irregu, ctrl)
 
-    class DeleteNode(Action):
-        def run(self):
-            obj = self.states.objectOnPlane
-            self.states.ppActions.deleteNote(obj)
-           self.fenPDF.uistate.regenerateVS()
 
     class Transclude(Action):
-       def run(self):
+       def __call__(self):
            pdfMainNode = self.states.selection.getMainNode()
            area = self.states.selection.getXYWH()
            obj = pdfMainNode.getView2D().getSelectedObject(
@@ -95,7 +59,6 @@
            node = Nodes.get(self.states.ppActions.newNote(plane,
                                focus.getPanX(), focus.getPanY(), ""))
            self.states.fen.txt.set(node, obj)
-           self.fenPDF.uistate.regenerateVS()
                    
 
 
@@ -114,16 +77,20 @@
            self.selectListVob.add('Transclude selection (PDF to canvas only)',
                    self.Transclude(self.fenPDF, self.states))
         if self.link:
-            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('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('Go to home', 'home')
         self.selectListVob.add('Destroy this canvas', 
self.KillPlane(self.fenPDF, self.states))
         if self.link:
-            self.selectListVob.add('Delete this node', 
self.DeleteNode(self.fenPDF, self.states))
+            self.selectListVob.add('Delete this node', 
+                   lambda: self.fenPDF.actions.menu.deleteNode())
 
     def makeBuoyList(self):
         self.selectListVob = vob.vobs.SelectListVob(self.style)
-        self.selectListVob.add('Unlink buoy', self.UnlinkBuoy(self.fenPDF, 
self.states))
+        self.selectListVob.add('Unlink buoy', 
+           lambda: self.fenPDF.actions.menu.unlinkBuoy())
         self.selectListVob.add('Go to home', 'home')
 
     def render(self, vs):
@@ -154,21 +121,22 @@
 
     def mouse(self, ev):
         if self.isHide: return 0
-       vs = self.fenPDF.uistate.lastVs
+       vs = self.fenPDF.animation.lastVs
         
         cs = vs.matcher.getCS(0, 'MOUSE_MENU')
         p('cs:', cs)
         key = vs.getKeyAt(cs, ev.getX(), ev.getY(), None)
         if key != None:
-            p('context menu hit!')
-            self.selectListVob.colorize(key, java.awt.Color.red)
-            key = key.object
-            if isinstance(key, self.Action):
+           try:
+               p('context menu hit!')
+               self.selectListVob.colorize(key, java.awt.Color.red)
+               key = key.object
                self.states.oldVS = vs
-                key.run()
+               key()
                self.states.oldVS = None
-            else: p('mouse menu key is: ', key)
-            self.hideList()
+               self.hideList()
+           finally: # If there's an error, we still need a new scene
+               self.fenPDF.animation.regenerateVS()
             return 1
         return 0
 
Index: fenfire/org/fenfire/fenpdf/fenpdf.py
diff -u fenfire/org/fenfire/fenpdf/fenpdf.py:1.8 
fenfire/org/fenfire/fenpdf/fenpdf.py:1.9
--- fenfire/org/fenfire/fenpdf/fenpdf.py:1.8    Sat Aug 23 09:25:18 2003
+++ fenfire/org/fenfire/fenpdf/fenpdf.py        Sat Aug 23 13:13:33 2003
@@ -9,7 +9,7 @@
 class _Empty:
     pass
 
-class UIState:
+class AnimationState:
     """
 
     The following fields are public:
@@ -40,6 +40,50 @@
        self.lastVs = vs
        self.animate = 1
 
+class UIState_Menu:
+    """
+
+    The fields are accessible and are allowed
+    to be read, but they
+    should only be written to using the 
+    UIState_Menu object methods.
+
+           shown -- If a menu is currently shown.
+
+           originatingNode -- the node (may be None) 
+                              on which the context menu 
+                              was clicked open
+
+           originatingMainNode -- the main view on which
+                                   the context menu was clicked
+                                   open. If originatingNode is
+                                   non-null, this should be too.
+
+           originatingBuoy -- the buoy on which the context
+                               menu was clicked open.
+                               XXX data format?
+           
+    """
+
+    def __init__(self):
+       self.shown = 0
+       self.originatingMainNode = None
+       self.originatingNode = None
+       self.originatingBuoy = None
+    def originateFromBuoy(self, buoy):
+       self.originatingBuoy = buoy
+       self.originatingNode = None
+       self.originatingMainNode = None
+       self.shown = 1
+    def originateFromMainNode(self, mainNode, node):
+       self.originatingBuoy = None
+       self.originatingNode = node
+       self.originatingMainNode = mainNode
+       self.shown = 1
+    def clear(self):
+       self.__init__()
+       
+
 class FenPDF:
     """This class represents a complete fenpdf "application".
 
@@ -59,6 +103,7 @@
 
        mouse -- an object like org.fenfire.fenpdf.actions.mouse.MouseActions
        key --
+       menu --
 
     structure -- an object with no methods, just fields:
 
@@ -69,10 +114,24 @@
 
     window -- the GraphicsAPI.window object
 
-    uistate -- an UIState object
-    The internal members are prefixed by underscore.
-    """
+    animation -- an AnimationState object
+
+    uistate -- just fields:
+              This object stores **ALL** state about the 
+              user interface interactions, except
+              the focuses of the main nodes, which are
+              inside views.
+
+              Any selections, cursors, &c are here.
+    
+       cursor -- the accursed node or plane
 
+       menu -- State of the ui context menu.
+    
+
+    Any internal members are prefixed by underscore and should
+    not be used by anyone else.
+    """
 
     def __init__(self, fen, treeTime):
        self.fen = fen
@@ -80,7 +139,10 @@
        self.events = _Empty()
        self.actions = _Empty()
        self.structure = _Empty()
-       self.uistate = UIState()
+       self.animation = AnimationState()
+       self.uistate = _Empty()
+       self.uistate.menu = UIState_Menu()
+
 
        self.structure.structLink = ff.structure.StructLink.create(fen.graph)
        self.structure.alphContent = ff.util.AlphContent(fen)
Index: fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java
diff -u fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java:1.46 
fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java:1.47
--- fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java:1.46  Wed Aug 20 
12:34:33 2003
+++ fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java       Sat Aug 23 
13:13:33 2003
@@ -254,6 +254,7 @@
            view = view.getChildView2D();
            
        // currently only for canvas2d canvases
+       // XXX Refactor: should be in View2D
        if (view instanceof CanvasView2D) {
                
            Object obj = ((CanvasView2D)view)
@@ -262,10 +263,7 @@
                         box2paper, null);
            if (dbg) p("Object is: "+ (obj != null ? obj.toString() : obj));
            return obj;
-       } else {
-           p("not a canvas view?");
-           new Throwable().printStackTrace();
-       }
+       } 
        return null;
     }
 }




reply via email to

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