/[fenfire]/fenfire/org/fenfire/fenpdf/events/mousemenu.py
ViewVC logotype

Diff of /fenfire/org/fenfire/fenpdf/events/mousemenu.py

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

revision 1.5 by tjl, Mon Aug 25 07:02:25 2003 UTC revision 1.6 by mudyc, Tue Aug 26 00:26:44 2003 UTC
# Line 5  from __future__ import nested_scopes Line 5  from __future__ import nested_scopes
5  import vob  import vob
6  from org.fenfire.swamp import Nodes  from org.fenfire.swamp import Nodes
7  from org import fenfire as ff  from org import fenfire as ff
8  import java  import java, jarray
9    import org.nongnu.libvob.vobs.SelectItemVob as Item
10    
11  def p(*s):  def p(*s):
12      print 'ff.fenpdf.events.mousemenu::', s      print 'ff.fenpdf.events.mousemenu::', s
13    
14    dbg = 0
15    
16  class MouseMenu:  class MouseMenu:
17        def __init__(self, fenPDF, states, eventHandler):
     def __init__(self, fenPDF, states):  
18          self.fenPDF = fenPDF          self.fenPDF = fenPDF
19          self.states = states          self.states = states
20            self.eventHandler = eventHandler
21          self.style = vob.GraphicsAPI.getInstance().getTextStyle('sans', 0, 12)          self.style = vob.GraphicsAPI.getInstance().getTextStyle('sans', 0, 12)
22          self.makeMainList()          self.makeMainList()
23          self.hideList()          self.hideList()
24                    
25      def makeMainList(self):      def makeMainList(self):
26          self.selectListVob = vob.vobs.SelectListVob(self.style)          list = []
27          if self.states.selection.hasSelection():          if self.states.selection.hasSelection():
28              self.selectListVob.add('Transclude selection (PDF to canvas only)',              list.append(Item('Transclude selection (PDF to canvas only)',
29                      lambda: self.fenPDF.actions.menu.transclude())                      lambda: self.fenPDF.actions.menu.transclude()))
30          if self.fenPDF.uistate.menu.originatingNode:          if self.fenPDF.uistate.menu.originatingNode:
31              self.selectListVob.add('<-----  Link node to left',              list.append(Item('<-----  Link node to left',
32                      lambda: self.fenPDF.actions.menu.structLinkNodes(-1))                      lambda: self.fenPDF.actions.menu.structLinkNodes(-1)))
33              self.selectListVob.add('Link node to right ----->',              list.append(Item('Link node to right ----->',
34                      lambda: self.fenPDF.actions.menu.structLinkNodes(1))                      lambda: self.fenPDF.actions.menu.structLinkNodes(1)))
35              self.selectListVob.add('Delete this node',              list.append(Item('Delete this node',
36                      lambda: self.fenPDF.actions.menu.deleteNode())                      lambda: self.fenPDF.actions.menu.deleteNode()))
37    
38            list.append(Item('Destroy this canvas',
39                        lambda: self.fenPDF.actions.menu.killPlane()))
40    
41          self.selectListVob.add('Destroy this canvas',          self.selectListVob = vob.vobs.SelectListVob(list)
                     lambda: self.fenPDF.actions.menu.killPlane())  
42    
43      def makeBuoyList(self):      def makeBuoyList(self):
44          self.selectListVob = vob.vobs.SelectListVob(self.style)          list = []
45          self.selectListVob.add('Unlink buoy',          list.append(Item('Unlink buoy',
46              lambda: self.fenPDF.actions.menu.unlinkBuoy())              lambda: self.fenPDF.actions.menu.unlinkBuoy()))
47            self.selectListVob = vob.vobs.SelectListVob(list)
48    
49      def render(self, vs):      def render(self, vs):
50          cs = vs.orthoBoxCS(0, 'MOUSE_MENU',-100, self.x, self.y-self.h/2,          cs = vs.orthoBoxCS(0, 'MOUSE_MENU',-100, self.x, self.y-self.h/2,
# Line 47  class MouseMenu: Line 52  class MouseMenu:
52          vs.put(self.selectListVob, cs)          vs.put(self.selectListVob, cs)
53    
54      def showList(self, x, y, who):      def showList(self, x, y, who):
55            self.eventHandler.eventStoler = self.mouse
56          p("showList")          p("showList")
57          if who == 'buoymenu':          if who == 'buoymenu':
58              self.makeBuoyList()              self.makeBuoyList()
# Line 58  class MouseMenu: Line 64  class MouseMenu:
64              return              return
65                    
66          self.w, self.h = self.selectListVob.width, self.selectListVob.height          self.w, self.h = self.selectListVob.width, self.selectListVob.height
67            self.w *= 2.5
68            self.h *= 2.5
69          self.x, self.y = x, y          self.x, self.y = x, y
         self.fenPDF.uistate.menu.shown = 1  
70    
71      def hideList(self):      def hideList(self):
72            self.eventHandler.eventStoler = None
73          p("Hidelist")          p("Hidelist")
74          if hasattr(self.states, 'lastEvent'):          if hasattr(self.states, 'lastEvent'):
75              self.x, self.y = self.states.lastEvent.getX(), self.states.lastEvent.getY()              self.x, self.y = self.states.lastEvent.getX(), self.states.lastEvent.getY()
76          else: self.x, self.y = 0,0          else: self.x, self.y = 0,0
77          self.w, self.h = .0, .0          self.w, self.h = .0, .0
         self.fenPDF.uistate.menu.shown = 0  
         self.fenPDF.animation.regenerateVS()  
         self.fenPDF.animation.noAnimation()  
         vob.AbstractUpdateManager.chg()  
   
     def getCSKey(self, ev):  
         if not self.fenPDF.uistate.menu.shown : return None  
         vs = self.fenPDF.animation.lastVs  
           
         cs = vs.matcher.getCS(0, 'MOUSE_MENU')  
         p('cs:', cs)  
         key = vs.getKeyAt(cs, ev.getX(), ev.getY(), None)  
         return key  
   
     def mousePressed(self, ev):  
         """A mouse pressed event was received.  
   
         If it's outside the menu, pop the menu away.  
   
         Returns: 1 if it was inside a menu,  
         and should be eaten.  
         """  
         key = self.getCSKey(ev)  
         if self.fenPDF.uistate.menu.shown:  
             if key == None:  
                 self.hideList()  
                 return 1  
             else:  
                 return 1  
         else:  
             return 0  
   
     def mouseClicked(self, ev):  
         """A mouse clicked event was received.  
         If it's in the menu, react, otherwise  
         remove the menu.  
   
         Returns: 1 if the event was consumed.  
         """  
         key = self.getCSKey(ev)  
         if key != None:  
             try:  
                 p('context menu hit!')  
                 self.selectListVob.colorize(key, java.awt.Color.red)  
                 key = key.object  
                 key()  
                 self.hideList()  
             finally: # If there's an error, we still need a new scene  
                 self.fenPDF.animation.regenerateVS()  
             return 1  
         else:  
             if self.fenPDF.uistate.menu.shown:  
                 self.hideList()  
                 # We return 1 here too, since the button press  
                 # outside the menu should be eaten.  
                 return 1  
             return 0  
78    
79            # what are these?!
80            #self.fenPDF.animation.regenerateVS()
81            #self.fenPDF.animation.noAnimation()
82            #vob.AbstractUpdateManager.chg()
83    
84        def mouse(self, ev, oldVS):
85            """ Should be called only through eventHandler.eventStoler
86            """
87            cs = oldVS.matcher.getCS(0, 'MOUSE_MENU')
88            key = oldVS.getKeyAt(cs, ev.getX(), ev.getY(), None)
89            p('cs', cs, key)
90            if cs < 0:
91                p('Something WRONG!!, should not happend! How can ',oldvs,'be *WRONG* vobscene??? should not be reused!')
92                return
93    
94            pts = jarray.zeros(3, 'f')
95            if dbg: p('mouse', ev.getX(), ev.getY())
96            oldVS.coords.inverseTransformPoints3(cs, [ev.getX(), ev.getY(), 0.], pts)
97            if dbg: p('transformed', pts)
98    
99            if ev.getType() in [ev.MOUSE_PRESSED, ev.MOUSE_DRAGGED]:
100                self.selectListVob.preSelect(pts[0], pts[1])
101            if ev.getType() in [ev.MOUSE_RELEASED, ev.MOUSE_CLICKED]:
102                self.selectListVob.postSelect(pts[0], pts[1])
103                
104                if key:
105                    key.run()
106                else:
107                    p('nothing', key)
108                self.eventHandler.eventStoler = None
109    
110            vob.AbstractUpdateManager.setNoAnimation()
111            vob.AbstractUpdateManager.chg()
112    

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6

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