/[fenfire]/fenfire/org/fenfire/fenpdf/actions/eventgrabs.py
ViewVC logotype

Diff of /fenfire/org/fenfire/fenpdf/actions/eventgrabs.py

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

revision 1.2 by tjl, Fri Oct 31 07:21:15 2003 UTC revision 1.3 by tjl, Wed Nov 5 10:25:51 2003 UTC
# Line 44  class Grabber(ff.fenpdf.events.MouseEven Line 44  class Grabber(ff.fenpdf.events.MouseEven
44      def isCanvas(self, mainNode, fenPDF):      def isCanvas(self, mainNode, fenPDF):
45          return  mainNode != None and fenPDF.structure.canvas2d.isCanvas(mainNode.getPlane())          return  mainNode != None and fenPDF.structure.canvas2d.isCanvas(mainNode.getPlane())
46    
47        def getNodeCSbyNode(self, mainNode, fenPDF, vs, node):
48            box2screen = mainNode.getBox2Screen()
49            plane = mainNode.getPlane()
50            if mainNode.getView2D().getContentView2D() == None:
51                return None
52            return mainNode.getView2D()(). \
53                   getContentView2D().getNodeCS(vs,\
54                   node, plane, box2screen, box2screen, 0)
55    
56    
57    
58  class NodeMoverActionGrabber(Grabber):  class NodeMoverActionGrabber(Grabber):
59      def __init__(self, fenpdf, x,y,node, canvas):      def __init__(self, fenpdf, x,y,node, canvas):
60          self.fenPDF = fenpdf          self.fenPDF = fenpdf
# Line 109  class TextCloud(Grabber): Line 120  class TextCloud(Grabber):
120          self.node = node          self.node = node
121          self.x, self.y = x,y          self.x, self.y = x,y
122    
123            """ tipNode has content for a tip, i.e., dragged text
124            cloud inserted into the underlying node's text.
125            'Final content if you drop the text now'
126            """
127          self.tipNode = ff.swamp.Nodes.N()          self.tipNode = ff.swamp.Nodes.N()
128          self.tipOffset = None          self.tipOffset = None
129    
# Line 116  class TextCloud(Grabber): Line 131  class TextCloud(Grabber):
131          self.drewMainNode = None          self.drewMainNode = None
132    
133    
134  ##     def getNodeCS(self, vs, ev, ignoreNode):      def getNodeOnPlane(self, vs, ev, ignoreNode):
135  ##         mainNode = self.mainNodeOfEvent(vs, ev, self.fenPDF)          mainNode = self.mainNodeOfEvent(vs, ev, self.fenPDF)
136  ##         if self.isCanvas(mainNode, self.fenPDF):          if self.isCanvas(mainNode, self.fenPDF):
137  ##             canvasCS = ff.view.CanvasView2D.getContainerCS(vs, mainNode.getBox2Screen())              cs = mainNode.getBox2Screen()
138  ##             canvasCS = mainNode.getBox2Screen()              ints = vs.coords.getAllCSAt(cs, ev.getX(), ev.getY())
139  ##             p('canvasCS', canvasCS)              #p('ints:', ints)
140  ##             ints = vs.coords.getAllCSAt(canvasCS, ev.getX(), ev.getY())              for i in ints:
141  ##             #p(vs.coords.getCSAt(                  node = vs.matcher.getKey(i)
142  ##             p('ints:', ints)                  if node != ignoreNode:
143  ##         else:                      return node
144  ##             raise 'not on canvas'          else:
145                raise 'not on canvas'
146    
147      def draw(self, vs):      def draw(self, vs):
148          if self.ev == None: return          if self.ev == None: return
# Line 136  class TextCloud(Grabber): Line 152  class TextCloud(Grabber):
152              self.createFlyingNode(vs, self.node, self.ev, self.fenPDF)              self.createFlyingNode(vs, self.node, self.ev, self.fenPDF)
153          self.drewMainNode = mainNode          self.drewMainNode = mainNode
154    
155            viewFunction = self.fenPDF.views.getMultiplexerNodeContentFunction()
156            placeable = viewFunction.f(self.fenPDF.fen.graph, self.tipNode)
157            cs = vs.orthoBoxCS(0, 'TipNode', -1000,50,50, 1,1,
158                               placeable.getWidth(), placeable.getHeight())
159            placeable.place(vs, cs)
160    
161    
162      def eventGrabber(self, ev, vs):      def eventGrabber(self, ev, vs):
163          self.ev = ev          self.ev = ev
# Line 148  class TextCloud(Grabber): Line 170  class TextCloud(Grabber):
170              if self.isCanvas(mainNode, self.fenPDF):              if self.isCanvas(mainNode, self.fenPDF):
171                  canvas = mainNode.getPlane()                  canvas = mainNode.getPlane()
172                  self.fenPDF.structure.canvas2d.placeOnCanvas(canvas, self.node, self.x, self.y)                  self.fenPDF.structure.canvas2d.placeOnCanvas(canvas, self.node, self.x, self.y)
173                p('regenerate')
174              self.fenPDF.animation.regenerateVS()              self.fenPDF.animation.regenerateVS()
175          else:          else:
176              if self.isCanvas(mainNode, self.fenPDF):              if self.isCanvas(mainNode, self.fenPDF):
# Line 161  class TextCloud(Grabber): Line 184  class TextCloud(Grabber):
184              self.fenPDF.animation.reuseVS = 1              self.fenPDF.animation.reuseVS = 1
185              self.fenPDF.animation.animate = 0              self.fenPDF.animation.animate = 0
186    
187          if ev.getType() != ev.MOUSE_DRAGGED:          # if there are a change by offset!
188              if not self.isCanvas(mainNode, self.fenPDF):          if self.isCanvas(mainNode, self.fenPDF):
189                  self.fenPDF.structure.canvas2d.removeNode(self.node)              node = self.getNodeOnPlane(vs, ev, self.node)
                 # XXX others also  
                 self.fenPDF.structure.canvas2d.placeOnCanvas(self.canvas, self.node, self.x, self.y)  
                 p('placed on fen, using default')  
             # temporarily solution, flush drags away...  
             self.fenPDF.events.mouse.mainMouse.flush()  
             self.fenPDF.events.eventHandler.eventGrabber = None  
             self.fenPDF.animation.regenerateVS()  
   
         vob.AbstractUpdateManager.chg()  
   
         if 1: return  
           
190    
191                if node != None:
192                    #p('there\'s a node')
193                    viewFunction = self.fenPDF.views.getMultiplexerNodeContentFunction()
194                    placeable = viewFunction.f(self.fenPDF.fen.graph, node)
195                    if isinstance(placeable, vob.lava.placeable.TextPlaceable):
196                        #p('textplaceable')
197                        cs = self.getNodeCSbyNode(mainNode, self.fenPDF, vs, node)
198                        ptsIn = jarray.array([ev.getX(),ev.getY(),0], 'f')
199                        ptsOut = jarray.zeros(3, 'f')
200                        vs.coords.inverseTransformPoints3(cs, ptsIn, ptsOut)
201                        offset = placeable.getCursorPos(ptsOut[0], ptsOut[1])
202                        if self.tipOffset != offset:
203                            p('regenerate')
204                            self.fenPDF.animation.regenerateVS()
205                        self.tipOffset = offset
206                
207                        self.fenPDF.structure.ff.setContent(self.tipNode, \
208                             self.fenPDF.structure.ff.getContent(node))
209                        self.fenPDF.structure.ff.insert(self.tipNode, offset, \
210                             self.fenPDF.structure.ff.getContent(self.node))
211                    else: self.hideTipNode(vs)
212                else: self.hideTipNode(vs)
213    
         self.getNodeCS(vs, ev, None)  
         cs = vs.matcher.getCS('NODE_CS')  
         if cs < 2:  
             self.createFlyingNode(vs, self.node, ev, self.fenPDF)  
             return  
         self.transCS = cs  
   
         if ev.getType() == ev.MOUSE_DRAGGED:  
             # tip panel activism  
             self.showTipPanel(vs, ev)  
   
             vs.coords.setTranslateParams(self.transCS, ev.getX(), ev.getY())  
214    
215              self.setFlyingNodeZoom(vs, self.node, self.fenPDF, ev)          if ev.getType() != ev.MOUSE_DRAGGED:
216              self.fenPDF.animation.reuseVS = 1              # XXX others also ?
217              self.fenPDF.animation.animate = 0              self.fenPDF.structure.canvas2d.removeNode(self.node)
218          else:              if not self.isCanvas(mainNode, self.fenPDF):
             self.hideTipPanel(vs)  
             buoymanager = self.fenPDF.views.getBuoyManager()  
             mainNode = buoymanager.findTopmostMainNode(vs, ev.getX(), ev.getY())  
             # if no focus or not canvas view  
             if mainNode == None or not self.fenPDF.structure.canvas2d.isCanvas(mainNode.getPlane()):  
219                  self.fenPDF.structure.ff.insert(self.originalNode, self.originalOffset,                  self.fenPDF.structure.ff.insert(self.originalNode, self.originalOffset,
220                                                          self.fenPDF.structure.ff.getContent(self.node))                                                  self.fenPDF.structure.ff.getContent(self.node))
221              else:              else:
222                    node = self.getNodeOnPlane(vs, ev, self.node)
                 node = mainNode.getNodeOnPlane(vs, ev.getX(), ev.getY())  
223                  viewFunction = self.fenPDF.views.getMultiplexerNodeContentFunction()                  viewFunction = self.fenPDF.views.getMultiplexerNodeContentFunction()
224                  placeable = viewFunction.f(self.fenPDF.fen.graph, node)                  placeable = viewFunction.f(self.fenPDF.fen.graph, node)
225    
226                  # check if there are text under the mouse cursor                  # check if there are text under the mouse cursor
227                  if node != None and isinstance(placeable, vob.lava.placeable.TextPlaceable):                  if node != None and isinstance(placeable, vob.lava.placeable.TextPlaceable):
228                      cs = mainNode.getNodeCS(vs, node)                      self.fenPDF.structure.canvas2d.removeNode(self.node)
229                        cs = self.getNodeCSbyNode(mainNode, self.fenPDF, vs, node)
230                      ptsIn = jarray.array([ev.getX(),ev.getY(),0], 'f')                      ptsIn = jarray.array([ev.getX(),ev.getY(),0], 'f')
231                      ptsOut = jarray.zeros(3, 'f')                      ptsOut = jarray.zeros(3, 'f')
232                      vs.coords.inverseTransformPoints3(cs, ptsIn, ptsOut)                      vs.coords.inverseTransformPoints3(cs, ptsIn, ptsOut)
# Line 222  class TextCloud(Grabber): Line 238  class TextCloud(Grabber):
238                  else:                  else:
239                      xy = mainNode.getXYHit(vs, ev.getX(), ev.getY())                      xy = mainNode.getXYHit(vs, ev.getX(), ev.getY())
240                      self.fenPDF.structure.canvas2d.placeOnCanvas(mainNode.getPlane(), self.node, xy[0], xy[1])                      self.fenPDF.structure.canvas2d.placeOnCanvas(mainNode.getPlane(), self.node, xy[0], xy[1])
241                
242    
243              # temporarily solution, flush drags away...              # temporarily solution, flush drags away...
244              self.fenPDF.events.mouse.mainMouse.flush()              self.fenPDF.events.mouse.mainMouse.flush()
245              self.fenPDF.events.eventHandler.eventGrabber = None              self.fenPDF.events.eventHandler.eventGrabber = None
246              self.fenPDF.animation.regenerateVS()              self.fenPDF.animation.regenerateVS()
247    
248          vob.AbstractUpdateManager.chg()          vob.AbstractUpdateManager.chg()
249                            
250        def hideTipNode(self, vs):
251      def hideTipPanel(self, vs):          cs = vs.matcher.getCS('TipNode')
252          cs = vs.matcher.getCS('TipPanel')          if cs < 2: return
         if cs < 2:  
             cs = vs.orthoBoxCS(0, 'TipPanel', 0,0,0, 1,1, 0,0)  
253          vs.coords.setOrthoBoxParams(cs, 0, 0,0,0,0,0,0)          vs.coords.setOrthoBoxParams(cs, 0, 0,0,0,0,0,0)
254    
     def showTipPanel(self, vs, ev):  
         self.hideTipPanel(vs)  
   
         buoymanager = self.fenPDF.views.getBuoyManager()  
         mainNode = buoymanager.findTopmostMainNode(vs, ev.getX(), ev.getY())  
         if mainNode == None: return  
         node = mainNode.getNodeOnPlane(vs, ev.getX(), ev.getY())  
         if node == None: return  
         viewFunction = self.fenPDF.views.getMultiplexerNodeContentFunction()  
         placeable = viewFunction.f(self.fenPDF.fen.graph, node)  
         if not isinstance(placeable, vob.lava.placeable.TextPlaceable): return  
   
         cs = mainNode.getNodeCS(vs, node)  
         ptsIn = jarray.array([ev.getX(),ev.getY(),0], 'f')  
         ptsOut = jarray.zeros(3, 'f')  
         vs.coords.inverseTransformPoints3(cs, ptsIn, ptsOut)  
         offset = placeable.getCursorPos(ptsOut[0], ptsOut[1])  
         if self.tipOffset != offset:  
             self.fenPDF.animation.regenerateVS()  
         self.tipOffset = offset  
   
         self.fenPDF.structure.ff.setContent(self.tipNode, \  
             self.fenPDF.structure.ff.getContent(node))  
         self.fenPDF.structure.ff.insert(self.tipNode, offset, \  
             self.fenPDF.structure.ff.getContent(self.node))  
   
         viewFunction = self.fenPDF.views.getMultiplexerNodeContentFunction()  
         placeable = viewFunction.f(self.fenPDF.fen.graph, self.tipNode)  
         cs = vs.matcher.getCS('TipPanel')  
         vs.coords.setOrthoBoxParams(cs, -1000,50,50, 1,1,  
                                     placeable.getWidth(), placeable.getHeight())  
         placeable.place(vs, cs)  
         vob.AbstractUpdateManager.setNoAnimation()  
         vob.AbstractUpdateManager.chg()  
   
               
                       

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

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