gzz-commits
[Top][All Lists]
Advanced

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

[Gzz-commits] fenfire/org/fenfire demo/actions.py demo/buoyoi...


From: Matti Katila
Subject: [Gzz-commits] fenfire/org/fenfire demo/actions.py demo/buoyoi...
Date: Wed, 25 Jun 2003 20:29:25 -0400

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

Modified files:
        org/fenfire/demo: actions.py buoyoing.py 
        org/fenfire/util: ControlBinding.java 
        org/fenfire/view: PaperView2D.java 
        org/fenfire/view/buoy: AbstractMainNode2D.java 
                               FisheyeMainNode2D.java MainNode2D.java 

Log message:
        steps in event handling.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/demo/actions.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/demo/buoyoing.py.diff?tr1=1.80&tr2=1.81&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/util/ControlBinding.java.diff?tr1=1.8&tr2=1.9&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/PaperView2D.java.diff?tr1=1.13&tr2=1.14&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java.diff?tr1=1.26&tr2=1.27&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/buoy/FisheyeMainNode2D.java.diff?tr1=1.10&tr2=1.11&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/buoy/MainNode2D.java.diff?tr1=1.28&tr2=1.29&r1=text&r2=text

Patches:
Index: fenfire/org/fenfire/demo/actions.py
diff -u fenfire/org/fenfire/demo/actions.py:1.1 
fenfire/org/fenfire/demo/actions.py:1.2
--- fenfire/org/fenfire/demo/actions.py:1.1     Mon Jun 23 14:16:19 2003
+++ fenfire/org/fenfire/demo/actions.py Wed Jun 25 20:29:25 2003
@@ -1,5 +1,5 @@
 # 
-# Copyright (c) 2003, Tuomas J. Lukka, Janne Kujala and Matti Katila
+# Copyright (c) 2003, Matti Katila and Benja Fallenstein
 # 
 # This file is part of Fenfire.
 # 
@@ -21,28 +21,35 @@
 # 
 
 from org import fenfire as ff
+from org.fenfire.vocab import CANVAS2D, RDF
 
+dbg = 0
+
+def p(*s):
+    print 'actions.py::', s
 
 ######## Actions to control pan of main nodes etc.
 
 class MovePanFast(ff.util.ControlBinding.AbstractController):
     def isChangeable(self): return 1
     def change(self, x, y):
+        if dbg: p('move pan fast')
         f = self.obj.getFocus()
         fX, fY = f.getPanX(), f.getPanY()
-        f.setPan( fX-x/f.getZoom(),fY-y/f.getZoom())
+        f.setPan( fX-x/f.getZoom(), fY-y/f.getZoom())
         self.obj.chgFast(self.oldVS)
 
 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)
 
 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
+        ### because of PanSize() - do not call
         #self.obj.chgFast(self.oldVS)
 
 class PanSize(ff.util.ControlBinding.AbstractController):
@@ -53,13 +60,13 @@
 
 class AbstractContextController(ff.util.ControlBinding.AbstractController):
     pass
-#    def __init__(self, context):
-#        self.context = context
+    def __init__(self, context):
+        self.context = context
 
 class UnSelectNodeOnPlane(AbstractContextController):
     def isChangeable(self): return 0
     def controlPoint(self, x, y, scale):
-        context.setAccursed(None)
+        self.context.setAccursed(None)
         
 
 ####### Actions to control nodes on main node plane
@@ -67,21 +74,58 @@
 class SelectNodeOnPlane(AbstractContextController):
     def isChangeable(self): return 0
     def controlPoint(self, x, y, scale):
-        context.setAccursed(self.obj.second)
-
+        self.context.setAccursed(self.obj.second)
+        
 class MoveNodeOnPlane(AbstractContextController):
     def isChangeable(self): return 1
     def change(self, x,y):
-        f = self.obj.first.getFocus()
-        node = self.obj.second
-        if not context.isAccursed(node): return 
+        f = self.obj[0].getFocus()
+        node = self.obj[1]
+        if not self.context.isAccursed(node): return 
 
         fX, fY = f.getPanX(), f.getPanY()
-        f.setPan( fX+x*.5/f.zoom,fY+y*.5/f.zoom)
+        f.setPan( fX+x/f.zoom,fY+y/f.zoom)
 
-        g = fen.graph
+        g = self.obj[2]
         ox = ff.util.RDFUtil.getInt(g, node, CANVAS2D.x)
         oy = ff.util.RDFUtil.getInt(g, node, CANVAS2D.y)
-        ppAct.moveNote(node, int(ox+x/f.zoom), int(oy+y/f.zoom) )
+        self.obj[3].moveNote(node, int(ox+x/f.zoom), int(oy+y/f.zoom) )
+
+
+####### Dispatcher for plane events
 
-    
+class PlaneDispatcher(ff.util.ControlBinding):
+    def __init__(self, main, plane, graph, pp):
+        self.m = main
+        self.p = plane
+        self.all = [ main, plane ]
+        self.last = main
+        self.graph = graph
+        self.pp = pp
+    def handleEvent(self, main, ev, vs):
+
+        if ev.getID() == ev.MOUSE_DRAGGED:
+            if dbg: p('drag')
+            return self.last.handleEvent(main, ev, vs)
+
+        if dbg: p('event', ev)
+        obj = main.getNodeOnPlane(vs, ev.getX(), ev.getY())
+        if dbg: p(obj)
+        if ev.getID() == ev.MOUSE_CLICKED:
+            if obj != None and self.p.hasBinding(ev):
+                self.last = self.p
+                return self.p.handleEvent(ff.util.Pair(main, obj), ev, vs)
+            
+        if obj != None and self.p.hasBinding(ev) and 
self.context.isAccursed(obj):
+            self.last = self.p
+            return self.p.handleEvent([main, obj, self.graph, self.pp], ev, vs)
+        else:
+            self.last = self.m
+            return self.m.handleEvent(main, 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
Index: fenfire/org/fenfire/demo/buoyoing.py
diff -u fenfire/org/fenfire/demo/buoyoing.py:1.80 
fenfire/org/fenfire/demo/buoyoing.py:1.81
--- fenfire/org/fenfire/demo/buoyoing.py:1.80   Tue Jun 24 07:17:41 2003
+++ fenfire/org/fenfire/demo/buoyoing.py        Wed Jun 25 20:29:25 2003
@@ -72,10 +72,7 @@
 fen.txt = ff.impl.SimpleNodeContent(fen, myalph);
 fen.txtfunc = fen.txt.getNodeFunction()
 fen.enfiladeOverlap = fen.txt.getTransclusionIndex()
-
 ppAct = ff.modules.pp.PPActionsImpl(fen)
-#ppAct.dbg = 1
-#ff.view.CanvasView2D.dbg = 1
 
 # Now, before reading the xu stuff, render something 
 # to try to prevent NV driver
@@ -116,99 +113,6 @@
 
 
 
-ctrl = ff.util.ControlBinding()
-ctrl.add(MovePanFast(), -1, ctrl.WHEEL, 7,0, ctrl.VERTICAL)
-ctrl.add(MovePanFast(), 1, ctrl.DRAG, 1, 0, ctrl.ALL)
-ctrl.add(MovePanSlow(), 1, ctrl.CLICK)
-ctrl.add(ZoomPan(), 3, ctrl.DRAG, 1, 0, ctrl.VERTICAL)
-ctrl.add(PanSize(), 3, ctrl.DRAG, 1, 0, ctrl.HORIZONTAL)
-ctrl.add(UnSelectNodeOnPlane(), 3, ctrl.CLICK)
-
-node_ctrl = ff.util.ControlBinding()
-node_ctrl.add(SelectNodeOnPlane(), 3, node_ctrl.CLICK)
-node_ctrl.add(MoveNodeOnPlane(), 1, node_ctrl.DRAG)
-
-#        pa(ev)
-        
-#      if hasattr(mngr.geometer, 'mouse') and \
-#                mngr.geometer.mouse(ev, mngr.vs):
-#          return 
-#      x, y = ev.getX(), ev.getY()
-#      cs = mngr.vs.getCSAt(0, x, y, None)
-
-#         if ev.getID() == ev.MOUSE_RELEASED:
-#             w.setCursor('default')
-#             for ctrl in self.controls:
-#                 ctrl.removePressState()
-#             return
-#         if ev.getID() == ev.MOUSE_DRAGGED:
-#             for ctrl in self.controls:
-#                 if ctrl.hasPressState():
-#                     ctrl.handleEvent(None, ev, mngr.vs)
-#                     if ctrl.replaceVS:
-#                         mngr.replaceScene = mngr.vs
-#                  vob.AbstractUpdateManager.setNoAnimation()
-#                     vob.AbstractUpdateManager.chg()
-#                     return
-                
-#         ### If there exist a buoy jump over there
-#      for single in mngr.singles:
-#          link = single.cs.get(cs, None)
-#          if link != None:
-#                 # pa("IN CS: ",cs, link)
-#                 if hasattr(mngr.geometer, 'buoyMouse') and \
-#                    mngr.geometer.buoyMouse(mngr, ev, single, link):
-#                     return
-                
-#              if ev.getID() != ev.MOUSE_CLICKED:
-#                  return
-#              single.followLink(link)
-#              vob.AbstractUpdateManager.chg()
-#              return
-
-#      ### Fall through if no link - need main node
-#      for i in range(0, len(mngr.singles)):
-#          if mngr.singles[i].mainNode.isHitInsidePlane(x,y,mngr.vs):
-#                 self.context.setMainNodeIndex(i)
-#                 self.lastIndex = i
-
-#                 ### See if there's somtehing on a plane.
-#                 obj = mngr.singles[i].mainNode.getNodeOnPlane(mngr.vs, x,y)
-#                 if obj != None and \
-#                        self.controlNodesOnMain.hasBinding(ev):
-#                     if self.controlNodesOnMain.handleEvent( \
-#                         Pair(mngr.singles[i].mainNode, obj), ev, mngr.vs):
-#                         # can't replace vobscene!!
-#                         #  mngr.replaceScene = mngr.vs
-#                         vob.AbstractUpdateManager.setNoAnimation()
-#                     vob.AbstractUpdateManager.chg()
-#                     return
-
-#                 if self.controlMains.handleEvent(mngr.singles[i].mainNode, 
ev, mngr.vs):
-#                  mngr.replaceScene = mngr.vs
-#                  vob.AbstractUpdateManager.setNoAnimation()
-#              vob.AbstractUpdateManager.chg()
-#              return
-
-#         # ...then see context
-#         if ev.getID() != ev.MOUSE_CLICKED:
-#             return
-#         self.context.setMainNodeIndex(self.lastIndex)
-#         planes = []
-#         for single in mngr.singles:
-#             planes.append(single.getMainNode())
-#         newPlanes = self.context.doMouse(ev, mngr.vs, planes)
-#         if newPlanes != None and planes != newPlanes:
-#             for i in range(0, len(newPlanes)):
-#                 mngr.singles[i] = vob.buoy.buoymanager.SingleFocusManager(
-#                     newPlanes[i],
-#                     mngr.connectors)
-#             vob.AbstractUpdateManager.chg()
-        
-
-
-
-
 
 textstyle = vob.GraphicsAPI.getInstance().getTextStyle("sans", 0, 24)
 textnodeview = ff.view.TextNodeView(fen.txtfunc, textstyle, 1)
@@ -226,6 +130,11 @@
 ff.view.buoy.NodeType2D.effigy = 0
 ff.view.buoy.NodeType2DFull.effigy = 0
 
+main_ctrl = ff.util.ControlBinding()
+node_ctrl = ff.util.ControlBinding()
+ctrl = PlaneDispatcher(main_ctrl, node_ctrl, fen.graph, ppAct)
+
+global context
 context = ff.view.lava.FenPDFContext(fen, ppAct, nodeview, ctrl)
 context.initMainNodes(2)
 nodeview.setContext(context)
@@ -239,6 +148,22 @@
 ff.view.buoy.AbstractMainNode2D.context = context
 
 
+# Default controls
+
+ctrl.setContext(context)
+main_ctrl.add(MovePanFast(), -1, ctrl.WHEEL, 7,0, ctrl.VERTICAL)
+main_ctrl.add(MovePanFast(), 1, ctrl.DRAG, 1, 0, ctrl.ALL)
+main_ctrl.add(MovePanSlow(), 1, ctrl.CLICK)
+main_ctrl.add(ZoomPan(), 3, ctrl.DRAG, 1, 0, ctrl.VERTICAL)
+main_ctrl.add(PanSize(), 3, ctrl.DRAG, 1, 0, ctrl.HORIZONTAL)
+main_ctrl.add(UnSelectNodeOnPlane(context), 3, ctrl.CLICK)
+
+node_ctrl.add(SelectNodeOnPlane(context), 3, node_ctrl.CLICK)
+node_ctrl.add(MoveNodeOnPlane(context), 1, node_ctrl.DRAG)
+
+
+
+
 
 
 
@@ -272,11 +197,12 @@
 
 
 class DoubleGeometer:
-    def __init__(self, mgr):
+    def __init__(self, mgr, context):
        self.split = .5
        self.height = 100
        self.width = 100
         self.mgr = mgr
+        self.context = context
     def _doset(self, vs):
 
         w,h = vs.size.width, vs.size.height
@@ -362,16 +288,32 @@
 
     def mouse(self, ev, oldvs):
         if dbg: pa(ev)
-       if 0 and ev.getID() == ev.MOUSE_WHEEL:
-           pa("WHEEL")
-           r = ev.getWheelRotation()
-           self.split -= .03 * r
-           self._doset(oldvs)
-           vob.AbstractUpdateManager.setNoAnimation()
-           vob.AbstractUpdateManager.chg()
-           return 1
 
-       return 0
+        if ev.getID() == ev.MOUSE_RELEASED:
+            ctrl.removePressState()
+            w.setCursor('default')
+            return 1
+       #return 0
+
+        # ...then see context
+        if ev.getID() != ev.MOUSE_CLICKED:
+            return 0
+        self.context.setMainNodeIndex(self.mgr.lastIndex)
+        planes = []
+        for single in self.mgr.singles:
+            planes.append(single.getMainNode())
+        newPlanes = self.context.doMouse(ev, oldvs, planes)
+        if newPlanes != None and planes != newPlanes:
+            for i in range(0, len(newPlanes)):
+                self.mgr.singles[i] = vob.buoy.buoymanager.SingleFocusManager(
+                    newPlanes[i],
+                    self.mgr.connectors)
+                vob.AbstractUpdateManager.chg()
+            return 1
+        return 0
+
+
+
 
     def buoyMouse(self, mgr, ev, single, link):
         if ev.getID() != ev.MOUSE_CLICKED:
@@ -399,7 +341,7 @@
         elif key == "-":
             self.split -= .03
         elif key == "Home":
-            self.mgr.singles[1].mainNode = ff.view.buoy.MainNode2D(planeHome, 
irregu)
+            self.mgr.singles[1].mainNode = ff.view.buoy.MainNode2D(planeHome, 
irregu, ctrl)
         elif key == "Ctrl-Q":
             from java.lang import System
             System.exit(43)
@@ -419,10 +361,9 @@
     def __init__(self):
        vob.buoy.buoymanager.MultiBuoyManager.__init__(self, 
                [mainNode, mainNode2], [ppconnector, tconnector],
-               DoubleGeometer(self),
+               DoubleGeometer(self, context),
                 context=context)
         w.setCursor('default')
-
 
 currentScene = Scene()
 
Index: fenfire/org/fenfire/util/ControlBinding.java
diff -u fenfire/org/fenfire/util/ControlBinding.java:1.8 
fenfire/org/fenfire/util/ControlBinding.java:1.9
--- fenfire/org/fenfire/util/ControlBinding.java:1.8    Tue Jun 24 10:34:18 2003
+++ fenfire/org/fenfire/util/ControlBinding.java        Wed Jun 25 20:29:25 2003
@@ -83,10 +83,20 @@
         if (event.getID() == event.MOUSE_PRESSED) {
             pressState = event;
             return FAST;
-        } else if(event.getID() == event.MOUSE_RELEASED) {
-           removePressState();
-           return FAST;
-       }
+        } 
+       /** The following code DO NOT work because of events:
+         * (java.awt.event.MouseEvent[MOUSE_PRESSED,
+        * (java.awt.event.MouseEvent[MOUSE_RELEASED and.
+        * (java.awt.event.MouseEvent[MOUSE_CLICKED.
+        *   and AbstracUpdateManager should not been called
+        *   with replacabale vobscene. Instead of this, take
+        *   MOUSE_RELEASED event outside of this, call removePressState
+        *   and do nothing or what ever.
+        *
+        *   else if(event.getID() == event.MOUSE_RELEASED) {
+        *   removePressState();
+        *   return FAST;
+        */
 
         float x = event.getX();
         float y = event.getY();
Index: fenfire/org/fenfire/view/PaperView2D.java
diff -u fenfire/org/fenfire/view/PaperView2D.java:1.13 
fenfire/org/fenfire/view/PaperView2D.java:1.14
--- fenfire/org/fenfire/view/PaperView2D.java:1.13      Wed Jun 11 13:00:24 2003
+++ fenfire/org/fenfire/view/PaperView2D.java   Wed Jun 25 20:29:25 2003
@@ -36,7 +36,7 @@
  * this other view is rendered on top of the paper.
  */
 public class PaperView2D extends View2D {
-public static final String rcsid = "$Id: PaperView2D.java,v 1.13 2003/06/11 
17:00:24 tjl Exp $";
+public static final String rcsid = "$Id: PaperView2D.java,v 1.14 2003/06/26 
00:29:25 mudyc Exp $";
     public static boolean dbg = false;
     private static void pa(String s) { System.out.println("PaperView2D::"+s); }
 
@@ -44,7 +44,7 @@
     public float dicefactor = 1;
     public int flags = 0;
 
-    public float paperScaling = 1/200f;
+    public float paperScaling = 1; //1/200f;
 
     public View2D getChildView2D() { return child; }
     protected View2D child;
Index: fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java
diff -u fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java:1.26 
fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java:1.27
--- fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java:1.26  Tue Jun 24 
09:51:24 2003
+++ fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java       Wed Jun 25 
20:29:25 2003
@@ -237,10 +237,14 @@
        AbstractUpdateManager.chg();
     }
 
+    public void changeSize(float change) { ; }
+    public void changeZoom(float change) {      
+       float zoom = focus.getZoom() * (float) Math.exp(change/150.0);   
+       focus.setZoom(zoom);     
+    }
 
     public boolean mouse(MouseEvent e, VobScene oldVobScene) {
-       /*return*/ controller.handleEvent(this, e, oldVobScene);
-       return false;
+       return controller.handleEvent(this, e, oldVobScene);
     }
 
     public void chgFast(VobScene oldVobScene) {
Index: fenfire/org/fenfire/view/buoy/FisheyeMainNode2D.java
diff -u fenfire/org/fenfire/view/buoy/FisheyeMainNode2D.java:1.10 
fenfire/org/fenfire/view/buoy/FisheyeMainNode2D.java:1.11
--- fenfire/org/fenfire/view/buoy/FisheyeMainNode2D.java:1.10   Mon Jun 23 
14:16:19 2003
+++ fenfire/org/fenfire/view/buoy/FisheyeMainNode2D.java        Wed Jun 25 
20:29:25 2003
@@ -67,9 +67,11 @@
     }
 
     public void changeZoom(float change) {
+       super.changeZoom(change);
        fisheyeState.changeMagnitude(change);
     }
     public void changeSize(float change) {
+       super.changeSize(change);
        fisheyeState.changeSize(change); 
     }
 
Index: fenfire/org/fenfire/view/buoy/MainNode2D.java
diff -u fenfire/org/fenfire/view/buoy/MainNode2D.java:1.28 
fenfire/org/fenfire/view/buoy/MainNode2D.java:1.29
--- fenfire/org/fenfire/view/buoy/MainNode2D.java:1.28  Mon Jun 23 14:16:19 2003
+++ fenfire/org/fenfire/view/buoy/MainNode2D.java       Wed Jun 25 20:29:25 2003
@@ -40,8 +40,6 @@
     public static boolean dbg = true;
     private static void p(String s) { System.out.println("MainNode2D:: "+s); }
 
-    protected float zoom;
-
     private float tmp[] = new float[2];
 
     static public class MainNode2DFactory implements Factory {
@@ -67,7 +65,6 @@
                      ControlBinding controller) {
        super(plane, view2d, focus, controller);
         focus.setZoom(zoom);
-       this.zoom = zoom;
     }
     
     /** Create a main node focused the center of a given plane.
@@ -97,6 +94,7 @@
     }
 
     protected void setZoomPan(VobScene vs, int mainFrame) {
+       float zoom = focus.getZoom();
        vs.coords.setOrthoBoxParams(box2paper, 0, 
                        focus.getPanX()-boxw/zoom/2, 
focus.getPanY()-boxh/zoom/2, 
                                    1/zoom, 1/zoom, boxw, boxh);




reply via email to

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