/[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 2200 by grivan, Thu May 20 05:17:35 2010 UTC revision 2394 by jpye, Thu Feb 24 01:43:46 2011 UTC
# Line 3  from gaphas.tool import Tool Line 3  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  import blockproperties
8    import canvasproperties
9    import undo
10    
11  class ContextMenuTool(Tool):  class ContextMenuTool(Tool):
12      """      """
# Line 15  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, event):      def on_button_press(self, event):
23          context = self.view.tool          context = self.view.tool
24          if event.button != 3:          if event.button != 3:
25              context.ungrab(self.view.tool)              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.parent.parent.parent.parent.parent          menurename = gtk.MenuItem("Re_name",True)
32              menurename.connect("activate",self.rename,context.view.hovered_item,window)          window = context.view.parent.parent.parent.parent.parent
33              menu.add(menurename)          menurename.connect("activate",self.rename,context.view.hovered_item,window)
34              menudelete = gtk.MenuItem("_Delete",True)          menu.add(menurename)
35              menudelete.connect("activate",self.delete,context.view.hovered_item,context.view)  
36              menu.add(menudelete)          menudelete = gtk.MenuItem("_Delete",True)
37              menu.add(gtk.SeparatorMenuItem())          menudelete.connect("activate",self.delete,context.view.hovered_item,context.view)
38                        menu.add(menudelete)
             menublockproperties = gtk.MenuItem("_Properties")  
             menublockproperties.connect("activate",self.blockproperties, window, context, context.view.hovered_item)  
             menu.add(menublockproperties)  
   
             menuinfo = gtk.MenuItem("_Info",True)  
             menuinfo.connect("activate",self.info,window,context,context.view.hovered_item)  
             menu.add(menuinfo)  
               
             if not hasattr(context.view.hovered_item,'blockinstance'):  
                 menurename.set_sensitive(False)  
                 menuinfo.set_sensitive(False)  
             menu.show_all()  
             menu.popup( None, None, None, event.button, event.time)  
             self.view.tool.ungrab(self.view.tool)  
             return True  
   
     def info(self,widget,window,context,item):  
         print window.__class__  
         bi = item.blockinstance  
         title = "Info for block '%s'" % bi.name  
         text = "Block info\n\n"  
         text += "Name:\t%s\n" % bi.name  
         text += "Type:\t%s\n" % bi.blocktype.type.getName()  
   
         text += "\nPorts:\n"  
         for k,v in bi.ports.iteritems():  
             text += "\t%s" % v.name  
             if v.type == blockinstance.PORT_IN:  
                 text += " (IN)\n"  
             elif v.type == blockinstance.PORT_OUT:  
                 text += " (OUT)\n"  
             elif v.type == blockinstance.PORT_INOUT:  
                 text += " (IN/OUT)\n"  
                   
         if hasattr(bi,"params"):  
             text += "\nParameters:\n"  
             for k,v in bi.params.iteritems():  
                 text += "\t%s = %f\n" % (v.name, v.value)  
               
             if bi.instance:  
                   
                 text += "\nInstance exists\n"  
             else:  
                 text += "\nNo instance exists\n"  
         info.Info(window,text,title).run()  
39    
40            menu.add(gtk.SeparatorMenuItem())
41            
42            menublockproperties = gtk.MenuItem("_Properties")
43            menublockproperties.connect("activate",self.blockproperties, window, context, context.view.hovered_item, 0)
44            menu.add(menublockproperties)
45            
46            menublockparams = gtk.MenuItem("_Parameters")
47            menublockparams.connect("activate",self.blockproperties, window, context, context.view.hovered_item, 1)
48            menu.add(menublockparams)
49            
50            #menublockmethod = gtk.MenuItem("_Custom Method(s)")
51            #menublockmethod.connect("activate",self.blockproperties, window, context, context.view.hovered_item, 2)
52            #menu.add(menublockmethod)
53            
54            menublockinstance = gtk.MenuItem("_Instance")
55            menublockinstance.connect("activate",self.blockproperties, window, context, context.view.hovered_item, 3)
56            menu.add(menublockinstance)
57    
58            #menuinfo = gtk.MenuItem("_Info",True)
59            #menuinfo.connect("activate",self.info,window,context,context.view.hovered_item)    
60            #menu.add(menuinfo)
61            
62            menu.add(gtk.SeparatorMenuItem())
63            
64            menucanvas = gtk.MenuItem("_Canvas Properties",True)
65            menucanvas.connect("activate",self.canvasproperties,window ,context)
66            menu.add(menucanvas)
67            
68            if not context.view.hovered_item:
69                menurename.set_sensitive(False)
70                #menuinfo.set_sensitive(False)
71                menudelete.set_sensitive(False)
72                menublockproperties.set_sensitive(False)
73                menublockinstance.set_sensitive(False)
74                #menublockmethod.set_sensitive(False)
75                menublockparams.set_sensitive(False)
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 114  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, window, context, item):      def blockproperties(self, widget = None, window = None, context = None, item = None, tab = None):
135          blockproperties.BlockProperties(window, item).run()          blockproperties.BlockProperties(window, item, tab = tab).run()
136                    
137                        def canvasproperties(self, widget, window, context):
138            canvasproperties.CanvasProperties(window).run()

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

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