47 |
|
|
48 |
from org.nongnu.alph.impl import PageImageScroll |
from org.nongnu.alph.impl import PageImageScroll |
49 |
|
|
50 |
|
from org.fenfire.demo.actions import * |
51 |
|
|
52 |
|
|
53 |
import vob |
import vob |
54 |
w.setCursor('wait') |
w.setCursor('wait') |
114 |
ppAct.assocNotes(noteHome, 1, noteA1) |
ppAct.assocNotes(noteHome, 1, noteA1) |
115 |
|
|
116 |
|
|
117 |
|
|
118 |
|
|
119 |
|
|
120 |
|
|
121 |
|
|
122 |
|
ctrl = ff.util.ControlBinding() |
123 |
|
ctrl.add(MovePanFast(), -1, ctrl.WHEEL, 7,0, ctrl.VERTICAL) |
124 |
|
ctrl.add(MovePanFast(), 1, ctrl.DRAG, 1, 0, ctrl.ALL) |
125 |
|
ctrl.add(MovePanSlow(), 1, ctrl.CLICK) |
126 |
|
ctrl.add(ZoomPan(), 3, ctrl.DRAG, 1, 0, ctrl.VERTICAL) |
127 |
|
ctrl.add(PanSize(), 3, ctrl.DRAG, 1, 0, ctrl.HORIZONTAL) |
128 |
|
ctrl.add(UnSelectNodeOnPlane(), 3, ctrl.CLICK) |
129 |
|
|
130 |
|
node_ctrl = ff.util.ControlBinding() |
131 |
|
node_ctrl.add(SelectNodeOnPlane(), 3, node_ctrl.CLICK) |
132 |
|
node_ctrl.add(MoveNodeOnPlane(), 1, node_ctrl.DRAG) |
133 |
|
|
134 |
|
# pa(ev) |
135 |
|
|
136 |
|
# if hasattr(mngr.geometer, 'mouse') and \ |
137 |
|
# mngr.geometer.mouse(ev, mngr.vs): |
138 |
|
# return |
139 |
|
# x, y = ev.getX(), ev.getY() |
140 |
|
# cs = mngr.vs.getCSAt(0, x, y, None) |
141 |
|
|
142 |
|
# if ev.getID() == ev.MOUSE_RELEASED: |
143 |
|
# w.setCursor('default') |
144 |
|
# for ctrl in self.controls: |
145 |
|
# ctrl.removePressState() |
146 |
|
# return |
147 |
|
# if ev.getID() == ev.MOUSE_DRAGGED: |
148 |
|
# for ctrl in self.controls: |
149 |
|
# if ctrl.hasPressState(): |
150 |
|
# ctrl.handleEvent(None, ev, mngr.vs) |
151 |
|
# if ctrl.replaceVS: |
152 |
|
# mngr.replaceScene = mngr.vs |
153 |
|
# vob.AbstractUpdateManager.setNoAnimation() |
154 |
|
# vob.AbstractUpdateManager.chg() |
155 |
|
# return |
156 |
|
|
157 |
|
# ### If there exist a buoy jump over there |
158 |
|
# for single in mngr.singles: |
159 |
|
# link = single.cs.get(cs, None) |
160 |
|
# if link != None: |
161 |
|
# # pa("IN CS: ",cs, link) |
162 |
|
# if hasattr(mngr.geometer, 'buoyMouse') and \ |
163 |
|
# mngr.geometer.buoyMouse(mngr, ev, single, link): |
164 |
|
# return |
165 |
|
|
166 |
|
# if ev.getID() != ev.MOUSE_CLICKED: |
167 |
|
# return |
168 |
|
# single.followLink(link) |
169 |
|
# vob.AbstractUpdateManager.chg() |
170 |
|
# return |
171 |
|
|
172 |
|
# ### Fall through if no link - need main node |
173 |
|
# for i in range(0, len(mngr.singles)): |
174 |
|
# if mngr.singles[i].mainNode.isHitInsidePlane(x,y,mngr.vs): |
175 |
|
# self.context.setMainNodeIndex(i) |
176 |
|
# self.lastIndex = i |
177 |
|
|
178 |
|
# ### See if there's somtehing on a plane. |
179 |
|
# obj = mngr.singles[i].mainNode.getNodeOnPlane(mngr.vs, x,y) |
180 |
|
# if obj != None and \ |
181 |
|
# self.controlNodesOnMain.hasBinding(ev): |
182 |
|
# if self.controlNodesOnMain.handleEvent( \ |
183 |
|
# Pair(mngr.singles[i].mainNode, obj), ev, mngr.vs): |
184 |
|
# # can't replace vobscene!! |
185 |
|
# # mngr.replaceScene = mngr.vs |
186 |
|
# vob.AbstractUpdateManager.setNoAnimation() |
187 |
|
# vob.AbstractUpdateManager.chg() |
188 |
|
# return |
189 |
|
|
190 |
|
# if self.controlMains.handleEvent(mngr.singles[i].mainNode, ev, mngr.vs): |
191 |
|
# mngr.replaceScene = mngr.vs |
192 |
|
# vob.AbstractUpdateManager.setNoAnimation() |
193 |
|
# vob.AbstractUpdateManager.chg() |
194 |
|
# return |
195 |
|
|
196 |
|
# # ...then see context |
197 |
|
# if ev.getID() != ev.MOUSE_CLICKED: |
198 |
|
# return |
199 |
|
# self.context.setMainNodeIndex(self.lastIndex) |
200 |
|
# planes = [] |
201 |
|
# for single in mngr.singles: |
202 |
|
# planes.append(single.getMainNode()) |
203 |
|
# newPlanes = self.context.doMouse(ev, mngr.vs, planes) |
204 |
|
# if newPlanes != None and planes != newPlanes: |
205 |
|
# for i in range(0, len(newPlanes)): |
206 |
|
# mngr.singles[i] = vob.buoy.buoymanager.SingleFocusManager( |
207 |
|
# newPlanes[i], |
208 |
|
# mngr.connectors) |
209 |
|
# vob.AbstractUpdateManager.chg() |
210 |
|
|
211 |
|
|
212 |
|
|
213 |
|
|
214 |
|
|
215 |
|
|
216 |
textstyle = vob.GraphicsAPI.getInstance().getTextStyle("sans", 0, 24) |
textstyle = vob.GraphicsAPI.getInstance().getTextStyle("sans", 0, 24) |
217 |
textnodeview = ff.view.TextNodeView(fen.txtfunc, textstyle, 1) |
textnodeview = ff.view.TextNodeView(fen.txtfunc, textstyle, 1) |
218 |
pagenodeview = ff.view.PageNodeView(fen.txtfunc) |
pagenodeview = ff.view.PageNodeView(fen.txtfunc) |
229 |
ff.view.buoy.NodeType2D.effigy = 0 |
ff.view.buoy.NodeType2D.effigy = 0 |
230 |
ff.view.buoy.NodeType2DFull.effigy = 0 |
ff.view.buoy.NodeType2DFull.effigy = 0 |
231 |
|
|
232 |
context = ff.view.lava.FenPDFContext(fen, ppAct, nodeview) |
context = ff.view.lava.FenPDFContext(fen, ppAct, nodeview, ctrl) |
233 |
context.initMainNodes(2) |
context.initMainNodes(2) |
234 |
nodeview.setContext(context) |
nodeview.setContext(context) |
235 |
textnodeview.setContext(context) |
textnodeview.setContext(context) |
252 |
plane = Nodes.get(paperA) |
plane = Nodes.get(paperA) |
253 |
planeHome = Nodes.get(paperHome) |
planeHome = Nodes.get(paperHome) |
254 |
|
|
255 |
mainNode = ff.view.buoy.MainNode2D(plane, irregu) |
mainNode = ff.view.buoy.MainNode2D(plane, irregu, ctrl) |
256 |
mainNode2 = ff.view.buoy.MainNode2D(planeHome, irregu) |
mainNode2 = ff.view.buoy.MainNode2D(planeHome, irregu, ctrl) |
257 |
#mainNode = ff.view.buoy.MainNode2D(plane, paperview) |
#mainNode = ff.view.buoy.MainNode2D(plane, paperview, ctrl) |
258 |
|
|
259 |
#connector = ff.view.buoy.PPConnector(fen, paperviewonly) |
#connector = ff.view.buoy.PPConnector(fen, paperviewonly) |
260 |
#connector.hackForTesting = 1 |
#connector.hackForTesting = 1 |
261 |
|
|
262 |
ppconnector = ff.view.buoy.PPConnector(fen, irregu, |
ppconnector = ff.view.buoy.PPConnector(fen, irregu, |
263 |
ff.view.buoy.MainNode2D.MainNode2DFactory(1), |
ff.view.buoy.MainNode2D.MainNode2DFactory(1, ctrl), |
264 |
nodeview) |
nodeview) |
265 |
tconnector = ff.view.buoy.TransclusionConnector(fen, nodeview) |
tconnector = ff.view.buoy.TransclusionConnector(fen, nodeview) |
266 |
|
|
270 |
pagescroll2d = ff.view.PageScrollView2D() |
pagescroll2d = ff.view.PageScrollView2D() |
271 |
|
|
272 |
tconnector.normalNodeNodeType = ff.view.buoy.NodeType2D(irregu, |
tconnector.normalNodeNodeType = ff.view.buoy.NodeType2D(irregu, |
273 |
ff.view.buoy.MainNode2D.MainNode2DFactory(1)) |
ff.view.buoy.MainNode2D.MainNode2DFactory(1, ctrl)) |
274 |
tconnector.pageImageScrollNodeType = ff.view.buoy.NodeType2DFull(pagescroll2d, ff.view.buoy.FisheyeMainNode2D.FisheyeMainNode2DFactory()) |
tconnector.pageImageScrollNodeType = ff.view.buoy.NodeType2DFull(pagescroll2d, ff.view.buoy.FisheyeMainNode2D.FisheyeMainNode2DFactory(ctrl)) |
275 |
|
|
276 |
|
|
277 |
class DoubleGeometer: |
class DoubleGeometer: |
423 |
vob.buoy.buoymanager.MultiBuoyManager.__init__(self, |
vob.buoy.buoymanager.MultiBuoyManager.__init__(self, |
424 |
[mainNode, mainNode2], [ppconnector, tconnector], |
[mainNode, mainNode2], [ppconnector, tconnector], |
425 |
DoubleGeometer(self), |
DoubleGeometer(self), |
426 |
FenPDFActions(context, 2), context) |
context=context) |
427 |
w.setCursor('default') |
w.setCursor('default') |
428 |
|
|
429 |
|
|
|
######## Actions to control pan of main nodes etc. |
|
|
|
|
|
class MovePanFast(ff.util.ControlBinding.AbstractController): |
|
|
def isChangeable(self): return 1 |
|
|
def change(self, x, y): |
|
|
f = self.obj.getFocus() |
|
|
fX, fY = f.getPanX(), f.getPanY() |
|
|
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): |
|
|
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 |
|
|
#self.obj.chgFast(self.oldVS) |
|
|
|
|
|
class PanSize(ff.util.ControlBinding.AbstractController): |
|
|
def isChangeable(self): return 1 |
|
|
def change(self, x, y): |
|
|
self.obj.changeSize(x+y) |
|
|
self.obj.chgFast(self.oldVS) |
|
|
|
|
|
class AbstractContextController(ff.util.ControlBinding.AbstractController): |
|
|
def __init__(self, context): |
|
|
self.context = context |
|
|
|
|
|
class UnSelectNodeOnPlane(AbstractContextController): |
|
|
def isChangeable(self): return 0 |
|
|
def controlPoint(self, x, y, scale): |
|
|
self.context.setAccursed(None) |
|
|
|
|
|
|
|
|
####### Actions to control nodes on main node plane |
|
|
|
|
|
class SelectNodeOnPlane(AbstractContextController): |
|
|
def isChangeable(self): return 0 |
|
|
def controlPoint(self, x, y, scale): |
|
|
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 self.context.isAccursed(node): return |
|
|
|
|
|
fX, fY = f.getPanX(), f.getPanY() |
|
|
f.setPan( fX+x*.5/f.zoom,fY+y*.5/f.zoom) |
|
|
|
|
|
g = fen.graph |
|
|
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) ) |
|
|
|
|
|
|
|
|
class FenPDFActions: |
|
|
def __init__(self, context, mainNodes): |
|
|
self.context = context |
|
|
self.context.initMainNodes(mainNodes) |
|
|
self.lastIndex = 0 |
|
|
|
|
|
c = self.controlMains = ff.util.ControlBinding() |
|
|
c.add(MovePanFast(), -1, c.WHEEL, 7,0, c.VERTICAL) |
|
|
c.add(MovePanFast(), 1, c.DRAG, 1.3, 0, c.ALL) |
|
|
c.add(MovePanSlow(), 1, c.CLICK) |
|
|
c.add(ZoomPan(), 3, c.DRAG, 1, 0, c.VERTICAL) |
|
|
c.add(PanSize(), 3, c.DRAG, 1, 0, c.HORIZONTAL) |
|
|
c.add(UnSelectNodeOnPlane(context), 3, c.CLICK) |
|
|
|
|
|
c = self.controlNodesOnMain = ff.util.ControlBinding() |
|
|
c.replaceVS = 0 |
|
|
c.add(SelectNodeOnPlane(context), 3, c.CLICK) |
|
|
c.add(MoveNodeOnPlane(context), 1, c.DRAG) |
|
|
|
|
|
|
|
|
#c.dbg=1 |
|
|
self.controls = [ self.controlMains, self.controlNodesOnMain ] |
|
|
|
|
|
def key(self, mngr, key): |
|
|
index = self.lastIndex |
|
|
self.context.setMainNodeIndex(index) |
|
|
mngr.singles[index].mainNode.keystroke(key) |
|
|
vob.AbstractUpdateManager.chg() |
|
|
|
|
|
def mouse(self, mngr, ev): |
|
|
# 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() |
|
|
|
|
|
|
|
430 |
currentScene = Scene() |
currentScene = Scene() |
431 |
|
|
432 |
|
|