def _application_window_create(self): application_window = gtk.VBox() menubar = self._construct_menu_and_toolbar(application_window) self._palette = Palette(self._catalogs) self._palette.set_size_request(300,250) self._palette.connect('toggled', self._palette_button_clicked) self._editor = EmbedEditor(self) self._editor.set_size_request(300,200) self._editor._signal_editor._signals_list.connect("row-activated", self.cb_signal_activated) widget_view = self._widget_tree_view_create() widget_view.set_size_request(300,200) self.gactions_view = self._gactions_view_create() self.gactions_view.set_size_request(300,200) self._statusbar = self._construct_statusbar() # Layout them on the window main_vbox = gtk.VPaned() application_window.add(main_vbox) #main_vbox.pack_start(menubar, False) hbox = gtk.VBox() exp = gtk.Expander(label='Widgets') exp.add(self._palette) exp.set_expanded(True) hbox.pack_start(exp, expand=False) vpaned = gtk.VPaned() hbox.pack_start(vpaned) notebook = gtk.Notebook() notebook.append_page(widget_view, gtk.Label(('Widgets'))) notebook.append_page(self.gactions_view, gtk.Label(('Actions'))) vpaned.set_position(150) vpaned.add1(notebook) vpaned.add2(self._editor) main_vbox.pack1(hbox) #main_vbox.pack2(self._statusbar, False) # dnd doesn't seem to work with Konqueror, at least not when # gtk.DEST_DEFAULT_ALL or gtk.DEST_DEFAULT_MOTION is used. If # handling the drag-motion event it will work though, but it's # a bit tricky. application_window.drag_dest_set(gtk.DEST_DEFAULT_ALL, self.targets, gtk.gdk.ACTION_COPY) application_window.connect('drag_data_received', self._dnd_data_received_cb) return application_window
class GazpachoEmbedded(GazpachoApplication): def __init__(self, cb): self.cb = cb GazpachoApplication.__init__(self) def _change_action_state(self, sensitive=[], unsensitive=[]): return def set_title(self, title): pass def get_window(self): return self.cb.mainwindow def get_container(self): return self.window def _application_window_create(self): application_window = gtk.VBox() menubar = self._construct_menu_and_toolbar(application_window) self._palette = Palette(self._catalogs) self._palette.set_size_request(300,250) self._palette.connect('toggled', self._palette_button_clicked) self._editor = EmbedEditor(self) self._editor.set_size_request(300,200) self._editor._signal_editor._signals_list.connect("row-activated", self.cb_signal_activated) widget_view = self._widget_tree_view_create() widget_view.set_size_request(300,200) self.gactions_view = self._gactions_view_create() self.gactions_view.set_size_request(300,200) self._statusbar = self._construct_statusbar() # Layout them on the window main_vbox = gtk.VPaned() application_window.add(main_vbox) #main_vbox.pack_start(menubar, False) hbox = gtk.VBox() exp = gtk.Expander(label='Widgets') exp.add(self._palette) exp.set_expanded(True) hbox.pack_start(exp, expand=False) vpaned = gtk.VPaned() hbox.pack_start(vpaned) notebook = gtk.Notebook() notebook.append_page(widget_view, gtk.Label(('Widgets'))) notebook.append_page(self.gactions_view, gtk.Label(('Actions'))) vpaned.set_position(150) vpaned.add1(notebook) vpaned.add2(self._editor) main_vbox.pack1(hbox) #main_vbox.pack2(self._statusbar, False) # dnd doesn't seem to work with Konqueror, at least not when # gtk.DEST_DEFAULT_ALL or gtk.DEST_DEFAULT_MOTION is used. If # handling the drag-motion event it will work though, but it's # a bit tricky. application_window.drag_dest_set(gtk.DEST_DEFAULT_ALL, self.targets, gtk.gdk.ACTION_COPY) application_window.connect('drag_data_received', self._dnd_data_received_cb) return application_window def cb_signal_activated(self, tv, path, column): model = tv.get_model() niter = model.get_iter(path) callbackname = model.get_value(niter, 1) widgetname = self._editor._loaded_widget.name widgettype = self._editor._loaded_widget.gtk_widget signalname = model.get_value(niter, 0) if callbackname and callbackname.startswith('<'): callbackname = '%s_%s' % (widgetname, signalname.replace('-', '_')) model.set_value(niter, 1, callbackname) if callbackname: if not self._project.path: mb = gtk.MessageDialog(parent=self.get_window(), flags = 0, type = gtk.MESSAGE_INFO, buttons = gtk.BUTTONS_OK, message_format='You must save your user interface ' 'file before continuing.') def mbok(*args): mb.destroy() mb.connect('response', mbok) mb.run() self._save_cb(None) if not self._project.path: return self.cb.evt('signaledited', self._project.path, widgetname, widgettype, signalname, callbackname) #print self._project.path def _construct_menu_and_toolbar(self, application_window): actions =( ('Gazpacho', None, ('_Gaz')), ('FileMenu', None, ('_File')), ('New', gtk.STOCK_NEW, ('_New'), '<control>N', ('New Project'), self._new_cb), ('Open', gtk.STOCK_OPEN, ('_Open'), '<control>O', ('Open Project'), self._open_cb), ('Save', gtk.STOCK_SAVE, ('_Save'), '<control>S', ('Save Project'), self._save_cb), ('SaveAs', gtk.STOCK_SAVE_AS, ('_Save As...'), '<shift><control>S', ('Save project with different name'), self._save_as_cb), ('Close', gtk.STOCK_CLOSE, ('_Close'), '<control>W', ('Close Project'), self._close_cb), ('Quit', gtk.STOCK_QUIT, ('_Quit'), '<control>Q', ('Quit'), self._quit_cb), ('EditMenu', None, ('_Edit')), ('Cut', gtk.STOCK_CUT, ('C_ut'), '<control>X', ('Cut'), self._cut_cb), ('Copy', gtk.STOCK_COPY, ('_Copy'), '<control>C', ('Copy'), self._copy_cb), ('Paste', gtk.STOCK_PASTE, ('_Paste'), '<control>V', ('Paste'), self._paste_cb), ('Delete', gtk.STOCK_DELETE, ('_Delete'), '<control>D', ('Delete'), self._delete_cb), ('ActionMenu', None, ('_Actions')), ('AddAction', gtk.STOCK_ADD, ('_Add action'), '<control>A', ('Add an action'), self._add_action_cb), ('RemoveAction', gtk.STOCK_REMOVE, ('_Remove action'), None, ('Remove action'), self._remove_action_cb), ('EditAction', None, ('_Edit action'), None, ('Edit Action'), self._edit_action_cb), ('ProjectMenu', None, ('_Project')), ('DebugMenu', None, ('_Debug')), ('HelpMenu', None, ('_Help')), ('About', None, ('_About'), None, ('About'), self._about_cb) ) toggle_actions = ( ('ShowCommandStack', None, ('Show _command stack'), 'F3', ('Show the command stack'), self._show_command_stack_cb, False), ('ShowClipboard', None, ('Show _clipboard'), 'F4', ('Show the clipboard'), self._show_clipboard_cb, False), ) undo_action = ( ('Undo', gtk.STOCK_UNDO, ('_Undo'), '<control>Z', ('Undo last action'), self._undo_cb), ) redo_action = ( ('Redo', gtk.STOCK_REDO, ('_Redo'), '<control>R', ('Redo last action'), self._redo_cb), ) ui_description = """<ui> <menubar name="MainMenu"> <menu action="Gazpacho"> <menu action="FileMenu"> <menuitem action="New"/> <menuitem action="Open"/> <separator name="FM1"/> <menuitem action="Save"/> <menuitem action="SaveAs"/> <separator name="FM2"/> <menuitem action="Close"/> <menuitem action="Quit"/> </menu> <menu action="EditMenu"> <menuitem action="Undo"/> <menuitem action="Redo"/> <separator name="EM1"/> <menuitem action="Cut"/> <menuitem action="Copy"/> <menuitem action="Paste"/> <menuitem action="Delete"/> </menu> <menu action="ActionMenu"> <menuitem action="AddAction"/> <menuitem action="RemoveAction"/> <menuitem action="EditAction"/> </menu> <menu action="ProjectMenu"> </menu> <menu action="DebugMenu"> <menuitem action="ShowCommandStack"/> <menuitem action="ShowClipboard"/> </menu> <menu action="HelpMenu"> <menuitem action="About"/> </menu> </menu> </menubar> <toolbar name="MainToolbar"> <toolitem action="Open"/> <toolitem action="Save"/> <toolitem action="Undo"/> <toolitem action="Redo"/> </toolbar> <toolbar name="EditBar"> <toolitem action="Cut"/> <toolitem action="Copy"/> <toolitem action="Paste"/> <toolitem action="Delete"/> </toolbar> </ui> """ self._ui_manager = gtk.UIManager() action_group = gtk.ActionGroup('MenuActions') action_group.add_actions(actions) action_group.add_toggle_actions(toggle_actions) self._ui_manager.insert_action_group(action_group, 0) action_group = gtk.ActionGroup('UndoAction') action_group.add_actions(undo_action) self._ui_manager.insert_action_group(action_group, 0) action_group = gtk.ActionGroup('RedoAction') action_group.add_actions(redo_action) self._ui_manager.insert_action_group(action_group, 0) self._ui_manager.add_ui_from_string(ui_description) #application_window.add_accel_group(self._ui_manager.get_accel_group()) self.project_action_group = gtk.ActionGroup('ProjectActions') self._ui_manager.insert_action_group(self.project_action_group, 0) menu = self._ui_manager.get_widget('/MainMenu') self.menu = menu return menu def refresh_undo_and_redo(self): undo_info = redo_info = None if self._project is not None: undo_info = self._project.undo_stack.get_undo_info() redo_info = self._project.undo_stack.get_redo_info() undo_action = self._ui_manager.get_action('/MainToolbar/Undo') undo_group = undo_action.get_property('action-group') undo_group.set_sensitive(undo_info is not None) undo_widget = self.undo_button undo_widget.set_sensitive(undo_info is not None) redo_action = self._ui_manager.get_action('/MainToolbar/Redo') redo_group = redo_action.get_property('action-group') redo_group.set_sensitive(redo_info is not None) redo_widget = self.redo_button redo_widget.set_sensitive(redo_info is not None) if self._command_stack_window is not None: command_stack_view = self._command_stack_window.get_child() command_stack_view.update()