gzz-commits
[Top][All Lists]
Advanced

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

[Gzz-commits] fenfire/org/fenfire/view/buoy AbstractMainNode2...


From: Matti Katila
Subject: [Gzz-commits] fenfire/org/fenfire/view/buoy AbstractMainNode2...
Date: Wed, 06 Aug 2003 11:55:54 -0400

CVSROOT:        /cvsroot/fenfire
Module name:    fenfire
Branch:         
Changes by:     Matti Katila <address@hidden>   03/08/06 11:55:54

Modified files:
        org/fenfire/view/buoy: AbstractMainNode2D.java 
                               FisheyeMainNode2D.java MainNode2D.java 
                               actions.py 
        org/fenfire/view/buoy/lava: MindMapConnector.java 

Log message:
        bindings changed to use new api

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java.diff?tr1=1.38&tr2=1.39&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/buoy/FisheyeMainNode2D.java.diff?tr1=1.14&tr2=1.15&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/buoy/MainNode2D.java.diff?tr1=1.31&tr2=1.32&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/buoy/actions.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/buoy/lava/MindMapConnector.java.diff?tr1=1.1&tr2=1.2&r1=text&r2=text

Patches:
Index: fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java
diff -u fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java:1.38 
fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java:1.39
--- fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java:1.38  Mon Aug  4 
02:02:48 2003
+++ fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java       Wed Aug  6 
11:55:54 2003
@@ -26,7 +26,7 @@
 
 package org.fenfire.view.buoy;
 import org.fenfire.view.*;
-import org.fenfire.util.ControlBinding;
+import org.nongnu.libvob.mouse.MouseMultiplexer;
 
 import org.nongnu.libvob.*;
 import org.nongnu.libvob.impl.DefaultVobMatcher;
@@ -53,8 +53,8 @@
     }
        
 
-    /** The controller associated with this main node. */
-    protected ControlBinding controller;
+    /** The mouse controller associated with this main node. */
+    protected MouseMultiplexer mouseController;
 
     /** An object representing a focus on a 2D plane.
      *  The SimpleFocus implementation below just stores
@@ -114,16 +114,16 @@
     protected float boxw, boxh;
 
     public AbstractMainNode2D(Object plane, View2D view2d,
-                             Focus focus, ControlBinding controller ) {
+                             Focus focus, MouseMultiplexer mouse) {
        this.plane = plane; this.view2d = view2d;
-       this.focus = focus; this.controller = controller;
+       this.focus = focus; this.mouseController = mouse;
     }
 
 
     /** Render the context into the main node view i.e., 
      * text cursor. 
      */
-    static public Render context = null;
+    static public Context context = null;
     public void keystroke(String s) {
        throw new Error("Not implemented.");
     }
@@ -133,9 +133,10 @@
        if (context != null)
            context.mainNodeToBeRender(vs, into, this);
     }
-    public interface Render {
+    public interface Context {
        void mainNodeToBeRender(VobScene vs, int into,
                                 AbstractMainNode2D main);
+       boolean changeFastAfterMouseEvent();
     }
 
     /** Cause the changes to the zooming and panning variables
@@ -261,7 +262,8 @@
     }
 
     public boolean mouse(VobMouseEvent e, VobScene oldVobScene) {
-       return controller.handleEvent(this, e, oldVobScene);
+       mouseController.deliverEvent(e);
+       return context.changeFastAfterMouseEvent();
     }
 
     public void chgFast(VobScene oldVobScene, int parent) {
@@ -271,11 +273,6 @@
        View2D view = getView2D();
        while (view != null) {
            if (view instanceof org.fenfire.view.lava.FastView)
-               /** Jams the machine if called.
-                * ''Single Multiple'' views makes things awful.
-                * 
-                * ...working on a better solution.
-                */
                ((org.fenfire.view.lava.FastView)view)
                        .chgFast(oldVobScene, box2screen);
            view = view.getChildView2D();
Index: fenfire/org/fenfire/view/buoy/FisheyeMainNode2D.java
diff -u fenfire/org/fenfire/view/buoy/FisheyeMainNode2D.java:1.14 
fenfire/org/fenfire/view/buoy/FisheyeMainNode2D.java:1.15
--- fenfire/org/fenfire/view/buoy/FisheyeMainNode2D.java:1.14   Sat Aug  2 
04:21:47 2003
+++ fenfire/org/fenfire/view/buoy/FisheyeMainNode2D.java        Wed Aug  6 
11:55:54 2003
@@ -26,7 +26,7 @@
 
 package org.fenfire.view.buoy;
 import org.fenfire.view.View2D;
-import org.fenfire.util.ControlBinding;
+import org.nongnu.libvob.mouse.MouseMultiplexer;
 
 import org.nongnu.libvob.*;
 import org.nongnu.libvob.view.FisheyeState;
@@ -43,15 +43,15 @@
 
 
     static public class FisheyeMainNode2DFactory implements Factory {
-       protected ControlBinding controller;
-       public FisheyeMainNode2DFactory(ControlBinding controller) {
-           this.controller = controller;
+       protected MouseMultiplexer mouseController;
+       public FisheyeMainNode2DFactory(MouseMultiplexer mouse) {
+           this.mouseController = mouse;
        }
        public AbstractMainNode2D create(Object plane, View2D view2d,
                                         float panx, float pany) {
            return new FisheyeMainNode2D(plane, view2d,
                                         new SimpleFocus(panx, pany),
-                                        controller);
+                                        mouseController);
        }
     }
 
@@ -60,8 +60,8 @@
     /** Create a main node with a given plane, pan.
      */
     public FisheyeMainNode2D(Object plane, View2D view2d,
-                            Focus focus, ControlBinding controller) {
-       super(plane, view2d, focus, controller);
+                            Focus focus, MouseMultiplexer mouse) {
+       super(plane, view2d, focus, mouse);
         focus.setZoom(1);
     }
 
Index: fenfire/org/fenfire/view/buoy/MainNode2D.java
diff -u fenfire/org/fenfire/view/buoy/MainNode2D.java:1.31 
fenfire/org/fenfire/view/buoy/MainNode2D.java:1.32
--- fenfire/org/fenfire/view/buoy/MainNode2D.java:1.31  Tue Jul  1 12:33:33 2003
+++ fenfire/org/fenfire/view/buoy/MainNode2D.java       Wed Aug  6 11:55:54 2003
@@ -27,7 +27,7 @@
  */
 package org.fenfire.view.buoy;
 import org.fenfire.view.View2D;
-import org.fenfire.util.ControlBinding;
+import org.nongnu.libvob.mouse.MouseMultiplexer;
 
 import org.nongnu.libvob.*;
 import org.nongnu.libvob.impl.DefaultVobMatcher;
@@ -44,17 +44,17 @@
 
     static public class MainNode2DFactory implements Factory {
        public float zoom;
-       protected ControlBinding controller;
+       protected MouseMultiplexer mouseController;
        public MainNode2DFactory(float zoom, 
-                                ControlBinding controller) {
+                                MouseMultiplexer mouse) {
            this.zoom = zoom;
-           this.controller = controller;
+           this.mouseController = mouse;
        }
        public AbstractMainNode2D create(Object plane, View2D view2d,
                                         float panx, float pany) {
            return new MainNode2D(plane, view2d, 
                                  new SimpleFocus(panx, pany), zoom,
-                                 controller);
+                                 mouseController);
        }
     }
 
@@ -62,17 +62,17 @@
      */
     public MainNode2D(Object plane, View2D view2d,
                      Focus focus, float zoom, 
-                     ControlBinding controller) {
-       super(plane, view2d, focus, controller);
+                     MouseMultiplexer mouse) {
+       super(plane, view2d, focus, mouse);
         focus.setZoom(zoom);
     }
     
     /** Create a main node focused the center of a given plane.
      */
     public MainNode2D(Object plane, View2D view2d,
-                     ControlBinding controller) {
+                     MouseMultiplexer mouse) {
        this(plane, view2d, new SimpleFocus(0, 0), 1,
-            controller);
+            mouse);
        view2d.getSize(plane, tmp);
        if(tmp[0] >= 0) {
            focus.setPan(tmp[0] / 2f, tmp[1] / 2f);
Index: fenfire/org/fenfire/view/buoy/actions.py
diff -u fenfire/org/fenfire/view/buoy/actions.py:1.1 
fenfire/org/fenfire/view/buoy/actions.py:1.2
--- fenfire/org/fenfire/view/buoy/actions.py:1.1        Sat Aug  2 04:44:24 2003
+++ fenfire/org/fenfire/view/buoy/actions.py    Wed Aug  6 11:55:54 2003
@@ -33,44 +33,62 @@
     def __init__(self, context):
         self.context = context
 
+class AbstractAction:
+    def __init__(self, context):
+        self.context = context
+    def super(self):
+        self.main = self.context.states.mgr.getLastMain()
+        self.oldVS = self.context.states.mgr.getVs()
+
 
 ######## Actions to control pan of main nodes etc.
 
-class MovePanFast(AbstractContextController):
-    def isChangeable(self): return 1
-    def change(self, x, y):
-        if dbg: p('move pan fast')
-        f = self.obj.getFocus()
+class PanMover(AbstractAction, vob.mouse.RelativeAdapter,
+               vob.input.RelativeAxisListener):
+    def changedRelative(self, x,y='foo'):
+        # grrr.. pythonism, overloading of own method is sicknes
+        if y=='foo': return self._changedRelative(x)
+        self.super()
+        f = self.main.getFocus()
         fX, fY = f.getPanX(), f.getPanY()
-        f.setPan( fX-x/f.zoom, fY-y/f.zoom)
-        #self.context.chgFast(self.oldVS)
-        self.obj.chgFast(self.oldVS, -1)
-
-class MovePanSlow(ff.util.ControlBinding.AbstractController):
-    def isChangeable(self): return 0
-    def controlPoint(self, x, y, scale):
-        if dbg: p('move pan slow')
-        self.obj.moveToPoint(int(x),int(y), self.oldVS)
+        f.setPan(fX-x/f.zoom,
+                 fY-y/f.zoom)
+        self.main.chgFast(self.oldVS, -1)
+    def _changedRelative(self, d):
+        self.super()
+        f = self.main.getFocus()
+        fY = f.getPanY()
+        f.setPan(0, fY-d/f.zoom)
+        self.main.chgFast(self.oldVS, -1)
+
+class BrowseClick(AbstractAction, vob.mouse.MouseClickListener):
+    def clicked(self, x, y):
+        if 1 or dbg: p('move pan slow')
+        self.super()
+        self.main.moveToPoint(int(x),int(y), self.oldVS)
+        self.context.states.fastChg = 0
+
+class ZoomPan(vob.input.RelativeAxisListener, AbstractAction):
+    def changedRelative(self, x):
+        self.super()
+        self.main.changeZoom(x)
+        self.main.chgFast(self.oldVS, -1)
+        self.context.states.fastChg = 1
+
+class ChangeSize(vob.input.RelativeAxisListener, AbstractAction):
+    def changedRelative(self, x):
+        self.super()
+        self.main.changeSize(x)
+        self.main.chgFast(self.oldVS, -1)
+        self.context.states.fastChg = 1
 
-class ZoomPan(ff.util.ControlBinding.AbstractController):
-    def isChangeable(self): return 1
-    def change(self, x, y):
-        self.obj.changeZoom(x+y)
-        ### because of PanSize() - do not call
-        #self.obj.chgFast(self.oldVS)
-
-class PanSize(AbstractContextController):
-    def isChangeable(self): return 1
-    def change(self, x, y):
-        self.obj.changeSize(x+y)
-        self.obj.chgFast(self.oldVS, -1)
-        #self.context.chgFast(self.oldVS)
+class IfSelectNodeOnPlane(AbstractAction, vob.mouse.MouseClickListener):
+    def click(self, x, y):
 
-class UnSelectNodeOnPlane(AbstractContextController):
-    def isChangeable(self): return 0
-    def controlPoint(self, x, y, scale):
         self.context.states.cursor.setAccursed(None)
+        self.context.states.fastChg = 0
 
+#
 class ShowMouseMenu(AbstractContextController):
     def isChangeable(self): return 0
     def controlPoint(self, x, y, scale):
@@ -78,105 +96,61 @@
         vob.AbstractUpdateManager.setNoAnimation()
 
 ####### Actions to control nodes on main node plane
-
-class SelectNodeOnPlane(AbstractContextController):
-    def isChangeable(self): return 0
-    def controlPoint(self, x, y, scale):
-        self.context.states.cursor.setAccursed(self.obj[1])
         
-class MoveNodeOnPlane(AbstractContextController):
-    def isChangeable(self): return 1
-    def change(self, x,y):
-        f = self.obj[0].getFocus()
-        node = self.obj[1]
-        if not self.context.states.cursor.isAccursed(node): return 
-
+class NodeMover(AbstractAction, vob.mouse.RelativeAdapter):
+    def set(self, node):
+        self.super()
+        s = self.context.states
+        self.node, self.pp, self.graph = node, s.pp, s.fen.graph
+    def changedRelative(self, x,y):
+        self.super()
+        f = self.main.getFocus()
         fX, fY = f.getPanX(), f.getPanY()
-        f.setPan( fX+x/f.zoom,fY+y/f.zoom)
-
-        g = self.obj[2]
-        ox = ff.util.RDFUtil.getFloat(g, node, CANVAS2D.x)
-        oy = ff.util.RDFUtil.getFloat(g, node, CANVAS2D.y)
-        self.obj[3].moveNote(node, ox+x/f.zoom, oy+y/f.zoom )
-        self.obj[0].chgFast(self.oldVS, -1)
+        f.setPan(fX+x/f.zoom,
+                 fY+y/f.zoom)
+        g = self.graph
+        ox = ff.util.RDFUtil.getFloat(g, self.node, CANVAS2D.x)
+        oy = ff.util.RDFUtil.getFloat(g, self.node, CANVAS2D.y)
+        self.pp.moveNote(self.node, ox+x/f.zoom, oy+y/f.zoom )
+        self.main.chgFast(self.oldVS, -1)
 
 
 ####### Actions to control selection (Ctrl pressed)
 
-class SelectArea(AbstractContextController):
-    def isChangeable(self): return 0
-    def tryFast(self): return 1
-    def controlPoint(self, x, y, scale):
-        if dbg: self.context.states.p()
-        xy = self.obj[0].getXYHit(self.oldVS, x,y)
-        oldXY = self.context.states.getPressPans()
-        self.obj[1].setArea(oldXY[0], oldXY[1], xy[0], xy[1])
-        if dbg: p(self.context.states.selection.area)
-        self.context.states.selection.area = [oldXY[0], oldXY[1], xy[0], xy[1]]
-        self.obj[0].chgFast(self.oldVS, -1)
-
+class SelectArea(AbstractAction, vob.mouse.MouseDragListener,
+                 vob.mouse.MousePressListener):
+    def pressed(self, x,y):
+        """ dumb bersion of listener """
+        return self
+    def startDrag(self, x,y):
+        self.super()
+        self.oldxy = self.main.getXYHit(self.oldVS, y, y)
+        p('old', self.oldxy)
+    def drag(self, x, y):
+        v = ff.util.lava.view.getView(self.main, ff.view.AreaSelectingView2D)
+        v.setCurrentPlane(self.main.getPlane())
+        xy = self.main.getXYHit(self.oldVS, x,y)
+        v.setArea(self.oldxy[0], self.oldxy[1], xy[0], xy[1])
+        self.main.chgFast(self.oldVS, -1)
+        self.context.states.fastChg = 1
+    def endDrag(self, x,y):
+        self.drag(x,y)
 
 ####### Dispatcher for plane events etc.
 
-class ControlsDispatcher(ff.util.ControlBinding):
-    def __init__(self, main, plane, withCtrl, graph, pp):
-        self.m = main
-        self.p = plane
-        self.c = withCtrl
-        self.all = [ main, plane, withCtrl ]
-        self.last = main
-        self.args = main
-        self.graph = graph
-        self.pp = pp
-
-    def handleEvent(self, main, ev, vs):
-        if ev.getType() == ev.MOUSE_DRAGGED:
-            if dbg: p('drag')
-            return self.last.handleEvent(self.args, ev, vs)
-        elif ev.getType() == ev.MOUSE_PRESSED:
-            xy = main.getXYHit(vs, ev.getX(), ev.getY())
-            self.context.states.setPressPans(xy[0], xy[1])
-            if dbg: self.context.states.p()
-
-        ### Get node on plane if any
-        if dbg: p('event', ev)
-        obj = main.getNodeOnPlane(vs, ev.getX(), ev.getY())
-        if dbg: p(obj)
-
-
-        ### Set selection plane
-        v = ff.util.lava.view.getView(main, ff.view.AreaSelectingView2D)
-        v.setCurrentPlane(main.getPlane())
-        self.selection = v
-
-        #### Special case if user has pressed 'Ctrl'
-        if self.context.states.hasCtrl():
-            self.last = self.c
-            self.args = [main, self.selection]
-        else:
-            if ev.getType() == ev.MOUSE_CLICKED:
-                if obj != None and self.p.hasBinding(ev):
-                    self.last = self.p
-                    self.args = [main, obj, self.graph, self.pp]
-                    return self.p.handleEvent(self.args, ev, vs)
-
-            ### Drag if something under mouse pointer is accursed!
-            if obj != None and self.p.hasBinding(ev) and 
self.context.states.cursor.isAccursed(obj):
-                self.last = self.p
-                self.args = [main, obj, self.graph, self.pp]
-            else:
-                self.last = self.m
-                self.args = main
-
-        if 0 and ev.getType() != ev.MOUSE_PRESSED and not 
self.last.hasPressState():
-            self.removePressState()
-            self.last.setPressStateByForce(ev)
-            raise 'set press state by force - should not happen!', ev
-        return self.last.handleEvent(self.args, ev, vs)
-    def removePressState(self):
-        for c in self.all:
-            c.removePressState()
-    def hasPressState(self):
-        return self.last.hasPressState()
-    def setContext(self, context):
-        self.context = context
+class CanvasNodePressListener(vob.mouse.MousePressListener, AbstractAction):
+    def __init__(self, context, nodeMover, panMover):
+        AbstractAction.__init__(self, context)
+        self.nodeMover = nodeMover
+        self.panMover = panMover
+    def pressed(self, x, y):
+        self.super()
+        self.context.states.fastChg = 1
+        obj = self.main.getNodeOnPlane(self.oldVS, x,y)
+        
+        if obj != None and obj == self.context.states.cursor.getAccursed():
+            p('accursed!')
+            self.nodeMover.set(obj)
+            return self.nodeMover
+        return self.panMover
+
Index: fenfire/org/fenfire/view/buoy/lava/MindMapConnector.java
diff -u fenfire/org/fenfire/view/buoy/lava/MindMapConnector.java:1.1 
fenfire/org/fenfire/view/buoy/lava/MindMapConnector.java:1.2
--- fenfire/org/fenfire/view/buoy/lava/MindMapConnector.java:1.1        Mon Aug 
 4 02:02:48 2003
+++ fenfire/org/fenfire/view/buoy/lava/MindMapConnector.java    Wed Aug  6 
11:55:54 2003
@@ -20,7 +20,7 @@
  * First only canvas perhaps (later more).
  */
 public class MindMapConnector implements BuoyViewConnector {
-public static final String rcsid = "$Id: MindMapConnector.java,v 1.1 
2003/08/04 06:02:48 mudyc Exp $";
+public static final String rcsid = "$Id: MindMapConnector.java,v 1.2 
2003/08/06 15:55:54 mudyc Exp $";
     public static boolean dbg = false;
     private static void p(String s) { System.out.println("MindMapConnector:: 
"+s); }
 
@@ -37,7 +37,7 @@
     private NodeFunction mindMapForNode = 
        new NodeFunction() {
            public Object f(ConstGraph a, Object node) {
-               p("b: "+node);
+               if (dbg) p("b: "+node);
                //return null;
 
                float x=0,y=0, w=100, h=100;
@@ -84,10 +84,10 @@
        } else if(mn2d.getView2D() == mindMapNodeType.getView2D()) {
            if (dbg) p("mindmap -> outside");
 
-           if (true) return; 
-
            for(Iterator i=m.getKeys(parentCs).iterator(); i.hasNext();) {
                Object key = i.next();
+               p("key: "+key);
+
                if(!(key instanceof PageImageSpan)) continue;
                PageImageSpan span = (PageImageSpan)key;
 




reply via email to

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