/[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

trunk/pygtk/canvas/contextmenutool.py revision 2200 by grivan, Thu May 20 05:17:35 2010 UTC branches/adrian/pygtk/canvas/contextmenutool.py revision 2916 by adrian, Wed Apr 29 17:59:16 2015 UTC
# Line 1  Line 1 
   
1  from gaphas.tool import Tool  from gaphas.tool import Tool
2  import pygtk  import gi
3  pygtk.require('2.0')  
4  import gtk  gi.require_version('Gtk', '3.0')
5  import info  from gi.repository import Gtk, Gdk
 import blockinstance  
6  import blockproperties  import blockproperties
7    import canvasproperties
8    import undo
9    
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.button != 3:
25              context.ungrab(self.view.tool)              context.ungrab(self.view.tool)
26              return False              return False
27    
28            self.menu = Gtk.Menu()
29            self.menu.connect("deactivate",self.deactivate,context)
30            '''
31            menublockstreams = Gtk.MenuItem("_Streams")
32            menublockstreams.connect("activate",self.setstream, window, context, context.view.hovered_item)
33            menu.add(menublockstreams)
34            '''
35            window = context.view.get_parent().get_parent().get_parent().get_parent().get_parent()
36            menurename = Gtk.MenuItem("Re_name",True)
37            menurename.set_use_underline(True)
38            menurename.connect("activate",self.rename,context.view.hovered_item,window)
39            self.menu.add(menurename)
40            '''menublockstreams.set_sensitive(False)'''
41    
42            menudelete = Gtk.MenuItem("_Delete",True)
43            menudelete.connect("activate",self.delete,context.view.hovered_item,context.view)
44            menudelete.set_use_underline(True)
45            self.menu.add(menudelete)
46    
47            self.menu.add(Gtk.SeparatorMenuItem())
48    
49            menurotate_clock = Gtk.MenuItem("Rotate clockwise",True)
50            menurotate_clock.connect("activate",self.blockrotate_clock,context.view.hovered_item,window)
51            self.menu.add(menurotate_clock)
52    
53            menurotate_anti = Gtk.MenuItem("Rotate counterclockwise",True)
54            menurotate_anti.connect("activate",self.blockrotate_anti,context.view.hovered_item,window)
55            self.menu.add(menurotate_anti)
56    
57            menuflip = Gtk.MenuItem("Flip",True)
58            menuflip.connect("activate",self.blockflip,context.view.hovered_item,window)
59            self.menu.add(menuflip)
60    
61            self.menu.add(Gtk.SeparatorMenuItem())
62    
63            menublockproperties = Gtk.MenuItem("_Properties")
64            menublockproperties.set_use_underline(True)
65            menublockproperties.connect("activate",self.blockproperties, window, context, context.view.hovered_item, 0)
66            self.menu.add(menublockproperties)
67    
68            menublockparams = Gtk.MenuItem("Parameters")
69            menublockparams.connect("activate",self.blockproperties, window, context, context.view.hovered_item, 1)
70            self.menu.add(menublockparams)
71    
72            menudefault = Gtk.MenuItem("_Set Default Values")
73            menudefault.set_use_underline(True)
74            menudefault.connect("activate",self.defaultvalues,window ,context,context.view.hovered_item)
75            self.menu.add(menudefault)
76    
77            #menublockmethod = Gtk.MenuItem("_Custom Method(s)")
78            #menublockmethod.connect("activate",self.blockproperties, window, context, context.view.hovered_item, 2)
79            #menu.add(menublockmethod)
80    
81            menublockinstance = Gtk.MenuItem("_Instance")
82            menublockinstance.set_use_underline(True)
83            menublockinstance.connect("activate",self.blockproperties, window, context, context.view.hovered_item, 2)
84            self.menu.add(menublockinstance)
85            '''
86            menublockstreams = Gtk.MenuItem("_Streams")
87            menublockstreams.connect("activate",self.setstream, window, context, context.view.hovered_item)
88            menu.add(menublockstreams)
89                '''
90            #menuinfo = Gtk.MenuItem("_Info",True)
91            #menuinfo.connect("activate",self.info,window,context,context.view.hovered_item)
92            #menu.add(menuinfo)
93    
94            self.menu.add(Gtk.SeparatorMenuItem())
95    
96            menucanvas = Gtk.MenuItem("_Canvas Properties",True)
97            menucanvas.set_use_underline(True)
98            menucanvas.connect("activate",self.canvasproperties,window ,context)
99            self.menu.add(menucanvas)
100    
101            if not context.view.hovered_item:
102                menurename.set_sensitive(False)
103                #menuinfo.set_sensitive(False)
104                menudelete.set_sensitive(False)
105                menurotate_clock.set_sensitive(False)
106                menurotate_anti.set_sensitive(False)
107                menuflip.set_sensitive(False)
108                menublockproperties.set_sensitive(False)
109                menublockinstance.set_sensitive(False)
110                #menublockmethod.set_sensitive(False)
111                menublockparams.set_sensitive(False)
112                menudefault.set_sensitive(False)
113                '''menublockstreams.set_sensitive(False)'''
114    
115    
116            if not hasattr(context.view.hovered_item,'blockinstance'):
117                menurename.set_sensitive(False)
118                #menuinfo.set_sensitive(False)
119    
120          if context.view.hovered_item:          if context.view.hovered_item:
121              menu = gtk.Menu()              if not context.view.hovered_item.blockinstance.instance:
122              menu.connect("deactivate",self.deactivate,context)                  menublockinstance.set_sensitive(False)
             menurename = gtk.MenuItem("Re_name",True)  
             window = context.view.parent.parent.parent.parent.parent  
             menurename.connect("activate",self.rename,context.view.hovered_item,window)  
             menu.add(menurename)  
             menudelete = gtk.MenuItem("_Delete",True)  
             menudelete.connect("activate",self.delete,context.view.hovered_item,context.view)  
             menu.add(menudelete)  
             menu.add(gtk.SeparatorMenuItem())  
               
             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()  
123    
124            self.menu.show_all()
125            self.menu.popup(None, None, None, None, event.button.button, event.time)
126            #self.view.tool.ungrab(self.view.tool)
127            return False
128    
129        #def on_button_release(self, event):
130            #print event
131            #self.view.hovered_item = None
132            #return False
133    
134        def on_double_click(self,event):
135            context = self.view.tool
136            if event.button.button != 1 or not context.view.hovered_item:
137                context.ungrab(self.view.tool)
138                return False
139    
140            window = context.view.get_parent().get_parent().get_parent().get_parent().get_parent()
141            self.blockproperties(None , window, context, context.view.hovered_item)
142    
143      def deactivate(self,widget,context):      def deactivate(self,widget,context):
144          #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.  
145          context.view.hovered_item = None          context.view.hovered_item = None
146    
147      def rename(self,widget,item,window):      def rename(self,widget,item,window):
148          if hasattr(item,'blockinstance'):          if hasattr(item,'blockinstance'):
149              bi = item.blockinstance              bi = item.blockinstance
150              dia = gtk.Dialog("Rename %s '%s'"              dia = Gtk.Dialog("Rename %s '%s'" % (bi.blocktype.type.getName(),bi.name), window,Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT,(Gtk.STOCK_CANCEL, 0, Gtk.STOCK_OK, Gtk.ResponseType.OK))
151                  % (              dia.set_default_response(Gtk.ResponseType.OK)
152                      bi.blocktype.type.getName()              ent = Gtk.Entry()
                     ,bi.name  
                 ), window,gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT  
                 ,(gtk.STOCK_CANCEL, 0, gtk.STOCK_OK, gtk.RESPONSE_OK)  
             )  
             dia.set_default_response(gtk.RESPONSE_OK)  
             ent = gtk.Entry()  
153              ent.set_text(bi.name)              ent.set_text(bi.name)
154              def key_press(ent,event):              def key_press(ent,event):
155                  key = gtk.gdk.keyval_name(event.keyval)                  key = Gdk.keyval_name(event.keyval)
156                  if key == 'Return':                  if key == 'Return':
157                      dia.response(gtk.RESPONSE_OK)                      dia.response(Gtk.ResponseType.OK)
158                      return True                      return True
159                  return False                  return False
160              ent.connect("key-press-event",key_press)              ent.connect("key-press-event",key_press)
161              dia.vbox.add(ent)              dia.vbox.add(ent)
162              dia.show_all()              dia.show_all()
163              res = dia.run()              res = dia.run()
164              if res == gtk.RESPONSE_OK:              if res == Gtk.ResponseType.OK:
165                  bi.name = ent.get_text()                  bi.name = ent.get_text()
166              dia.destroy()              dia.destroy()
167    
168        @undo.block_observed
169      def delete(self,widget,item,view):      def delete(self,widget,item,view):
170          print "DELETING OBJECT"           view.canvas.remove(item)
171          # TODO: add undo handler  
172          view.canvas.remove(item)      def blockproperties(self, widget = None, window = None, context = None, item = None, tab = None):
173             blockproperties.BlockProperties(window, item, tab = tab).run()
174      def blockproperties(self, widget, window, context, item):  
175          blockproperties.BlockProperties(window, item).run()      def blockrotate_clock(self, widget, item, window):
176                    ''' handler for rotating an item '''
177                            item.rotate_clock()
178    
179        def blockrotate_anti(self,widget, item, window):
180            item.rotate_anti()
181    
182        def blockflip(self,widget, item, window):
183            item.flip()
184    
185        def canvasproperties(self, widget, window, context):
186            canvasproperties.CanvasProperties(window).run()
187        '''
188        def setstream(self, widget, window, context, item):
189            print window.ascwrap.streams
190        '''
191        def defaultvalues(self,widget,window,context,item):
192            print widget,window,context,item.blockinstance
193    
194            model = str(self.view.canvas)
195            #print model
196            self.view.canvas.saved_model = model
197            self.view.canvas.saved_data = {}
198    
199            window.ascwrap.library.loadString(model,"canvasmodel")
200            t = window.ascwrap.library.findType(str(item.blockinstance.blocktype.type.getName()));
201            try:
202                m =t.getMethod('default_self');
203            except:
204                return
205            i = t.getSimulation('sim',False);
206            i.build()
207            i.run(m);
208            fv = i.getFixedVariables();
209            for i in fv:
210                for param in item.blockinstance.params:
211                    if param == i.getName():
212                        item.blockinstance.params[param].value = i.getValue();
213                        item.blockinstance.params[param].fix = True

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

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