[Top][All Lists]
[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);
- [Gzz-commits] fenfire/org/fenfire demo/actions.py demo/buoyoi...,
Matti Katila <=