/[fenfire]/fenfire/org/fenfire/demo/buoyoing.py
ViewVC logotype

Diff of /fenfire/org/fenfire/demo/buoyoing.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.78 by mudyc, Mon Jun 23 12:37:04 2003 UTC revision 1.79 by benja, Mon Jun 23 18:16:19 2003 UTC
# Line 47  from org.nongnu import storm Line 47  from org.nongnu import storm
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')
# Line 112  if 1: Line 114  if 1:
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)
# Line 128  irregu = ff.view.IrregularViewportView2D Line 229  irregu = ff.view.IrregularViewportView2D
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)
# Line 151  ff.view.buoy.AbstractMainNode2D.context Line 252  ff.view.buoy.AbstractMainNode2D.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    
# Line 169  tconnector = ff.view.buoy.TransclusionCo Line 270  tconnector = ff.view.buoy.TransclusionCo
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:
# Line 322  class Scene(vob.buoy.buoymanager.MultiBu Line 423  class Scene(vob.buoy.buoymanager.MultiBu
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    

Legend:
Removed from v.1.78  
changed lines
  Added in v.1.79

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26