/[ascend]/branches/adrian/pygtk/canvas/contextmenutool.py
ViewVC logotype

Diff of /branches/adrian/pygtk/canvas/contextmenutool.py

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

revision 2005 by jpye, Mon Apr 20 08:39:46 2009 UTC revision 2394 by jpye, Thu Feb 24 01:43:46 2011 UTC
# Line 1  Line 1 
1    
2  from gaphas.tool import Tool  from gaphas.tool import Tool
3  import pygtk  import pygtk
4  pygtk.require('2.0')  pygtk.require('2.0')
5  import gtk  import gtk
 import info  
6  import blockinstance  import blockinstance
7    import blockproperties
8    import canvasproperties
9    import undo
10    
11  class ContextMenuTool(Tool):  class ContextMenuTool(Tool):
12      """      """
# Line 13  class ContextMenuTool(Tool): Line 16  class ContextMenuTool(Tool):
16      Code for performing these tasks should not be here; this should just      Code for performing these tasks should not be here; this should just
17      hook into the appropriate code in the Application layer.      hook into the appropriate code in the Application layer.
18      """      """
19      def __init__(self):      def __init__(self,view=None):
20          pass          super(ContextMenuTool, self).__init__(view)
21                    
22      def on_button_press(self, context, event):      def on_button_press(self, event):
23            context = self.view.tool
24          if event.button != 3:          if event.button != 3:
25              context.ungrab()              context.ungrab(self.view.tool)
26              return False              return False
27          if context.view.hovered_item:          
28              menu = gtk.Menu()          menu = gtk.Menu()
29              menu.connect("deactivate",self.deactivate,context)          menu.connect("deactivate",self.deactivate,context)
30              menurename = gtk.MenuItem("Re_name",True)          
31              window = context.view.get_parent_window()          menurename = gtk.MenuItem("Re_name",True)
32              print window.__class__          window = context.view.parent.parent.parent.parent.parent
33              menurename.connect("activate",self.rename,context.view.hovered_item,window)          menurename.connect("activate",self.rename,context.view.hovered_item,window)
34              menu.add(menurename)          menu.add(menurename)
35              menudelete = gtk.MenuItem("_Delete",True)  
36              menudelete.connect("activate",self.delete,context.view.hovered_item,context.view)          menudelete = gtk.MenuItem("_Delete",True)
37              menu.add(menudelete)          menudelete.connect("activate",self.delete,context.view.hovered_item,context.view)
38              menu.add(gtk.SeparatorMenuItem())          menu.add(menudelete)
39              menuinfo = gtk.MenuItem("_Info",True)  
40              menuinfo.connect("activate",self.info,window,context,context.view.hovered_item)                  menu.add(gtk.SeparatorMenuItem())
41              menu.add(menuinfo)          
42              if not hasattr(context.view.hovered_item,'blockinstance'):          menublockproperties = gtk.MenuItem("_Properties")
43                  menurename.set_sensitive(False)          menublockproperties.connect("activate",self.blockproperties, window, context, context.view.hovered_item, 0)
44                  menuinfo.set_sensitive(False)          menu.add(menublockproperties)
45              menu.show_all()          
46              menu.popup( None, None, None, event.button, event.time)          menublockparams = gtk.MenuItem("_Parameters")
47              context.ungrab()          menublockparams.connect("activate",self.blockproperties, window, context, context.view.hovered_item, 1)
48              return True          menu.add(menublockparams)
49            
50      def info(self,widget,window,context,item):          #menublockmethod = gtk.MenuItem("_Custom Method(s)")
51          print window.__class__          #menublockmethod.connect("activate",self.blockproperties, window, context, context.view.hovered_item, 2)
52          bi = item.blockinstance          #menu.add(menublockmethod)
53          title = "Info for block '%s'" % bi.name          
54          text = "Block info\n\n"          menublockinstance = gtk.MenuItem("_Instance")
55          text += "Name:\t%s\n" % bi.name          menublockinstance.connect("activate",self.blockproperties, window, context, context.view.hovered_item, 3)
56          text += "Type:\t%s\n" % bi.blocktype.type.getName()          menu.add(menublockinstance)
57    
58          text += "\nPorts:\n"          #menuinfo = gtk.MenuItem("_Info",True)
59          for k,v in bi.ports.iteritems():          #menuinfo.connect("activate",self.info,window,context,context.view.hovered_item)    
60              text += "\t%s" % v.name          #menu.add(menuinfo)
61              if v.type == blockinstance.PORT_IN:          
62                  text += " (IN)\n"          menu.add(gtk.SeparatorMenuItem())
63              elif v.type == blockinstance.PORT_OUT:          
64                  text += " (OUT)\n"          menucanvas = gtk.MenuItem("_Canvas Properties",True)
65            menucanvas.connect("activate",self.canvasproperties,window ,context)
66          if hasattr(bi,"params"):          menu.add(menucanvas)
67              text += "\nParameters:\n"          
68              for k,v in bi.params.iteritems():          if not context.view.hovered_item:
69                  text += "\t%s = %f\n" % (v.name, v.value)              menurename.set_sensitive(False)
70                            #menuinfo.set_sensitive(False)
71              if bi.instance:              menudelete.set_sensitive(False)
72                  text += "\nInstance exists\n"              menublockproperties.set_sensitive(False)
73              else:              menublockinstance.set_sensitive(False)
74                  text += "\nNo instance exists\n"              #menublockmethod.set_sensitive(False)
75                menublockparams.set_sensitive(False)
         info.Info(window,text,title).run()  
   
76    
77                
78            if not hasattr(context.view.hovered_item,'blockinstance'):
79                menurename.set_sensitive(False)
80                #menuinfo.set_sensitive(False)
81            
82            if context.view.hovered_item:
83                if not context.view.hovered_item.blockinstance.instance:
84                    menublockinstance.set_sensitive(False)
85                    
86            menu.show_all()
87            menu.popup( None, None, None, event.button, event.time)
88            #self.view.tool.ungrab(self.view.tool)
89            return False
90            
91        #def on_button_release(self, event):
92            #print event
93            #self.view.hovered_item = None
94            #return False
95        
96        def on_double_click(self,event):
97            context = self.view.tool
98            if event.button != 1 or not context.view.hovered_item:
99                context.ungrab(self.view.tool)
100                return False
101            
102            window = context.view.parent.parent.parent.parent.parent        
103            self.blockproperties(None , window, context, context.view.hovered_item)
104            
105      def deactivate(self,widget,context):      def deactivate(self,widget,context):
106          #print "DEACTIVATING MENU"          #print 'Hovered Item Set To None'
         # TODO pass a signal to the HoverTool to update the hovered item  
         # according to where the mouse is currently located.  
107          context.view.hovered_item = None          context.view.hovered_item = None
108    
109      def rename(self,widget,item,window):      def rename(self,widget,item,window):
110          if hasattr(item,'blockinstance'):          if hasattr(item,'blockinstance'):
111              bi = item.blockinstance              bi = item.blockinstance
112              dia = gtk.Dialog("Rename %s '%s'"              dia = gtk.Dialog("Rename %s '%s'" % (bi.blocktype.type.getName(),bi.name), window,gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,(gtk.STOCK_CANCEL, 0, gtk.STOCK_OK, gtk.RESPONSE_OK))
                 % (  
                     bi.blocktype.type.getName()  
                     ,bi.name  
                 ), window,gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT  
                 ,(gtk.STOCK_CANCEL, 0, gtk.STOCK_OK, gtk.RESPONSE_OK)  
             )  
113              dia.set_default_response(gtk.RESPONSE_OK)              dia.set_default_response(gtk.RESPONSE_OK)
114              ent = gtk.Entry()              ent = gtk.Entry()
115              ent.set_text(bi.name)              ent.set_text(bi.name)
# Line 104  class ContextMenuTool(Tool): Line 126  class ContextMenuTool(Tool):
126              if res == gtk.RESPONSE_OK:              if res == gtk.RESPONSE_OK:
127                  bi.name = ent.get_text()                  bi.name = ent.get_text()
128              dia.destroy()              dia.destroy()
129                
130        @undo.block_observed
131      def delete(self,widget,item,view):      def delete(self,widget,item,view):
         print "DELETING OBJECT"  
         # TODO: add undo handler  
132          view.canvas.remove(item)          view.canvas.remove(item)
133    
134        def blockproperties(self, widget = None, window = None, context = None, item = None, tab = None):
135            blockproperties.BlockProperties(window, item, tab = tab).run()
136            
137        def canvasproperties(self, widget, window, context):
138            canvasproperties.CanvasProperties(window).run()

Legend:
Removed from v.2005  
changed lines
  Added in v.2394

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22