def __init__(self, project=None): # self.window needs to be initialized first self.window = AppWindow(self) # gtk Application.__init__(self, project) self._clipboard = gtk.Clipboard() # not implemented yet # gtk self.progresslist = GtkProgressList
def load_project(self, filename=None): """ Open a FileChooserDialog and let the user pick a new project to be loaded. The old project is replaced. """ if filename is None: # TODO # maybe we could have application.load_project # just request the file name and we simply # create a method for this dialog. # create chooser object chooser = gtk.FileChooserDialog( title="Open project", action=gtk.FILE_CHOOSER_ACTION_OPEN, buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK)) chooser.set_default_response(gtk.RESPONSE_OK) chooser.set_current_folder( const.internal_path(const.PATH_EXAMPLE) ) chooser.set_select_multiple(False) filter = gtk.FileFilter() filter.set_name("All files") filter.add_pattern("*") chooser.add_filter(filter) filter = gtk.FileFilter() filter.set_name("Sloppyplot Project files") filter.add_pattern("*.spj") filter.add_pattern("*.SPJ") chooser.add_filter(filter) chooser.set_filter(filter) # default filter shortcut_folder = const.internal_path(const.PATH_EXAMPLE) if os.path.exists(shortcut_folder): chooser.add_shortcut_folder( shortcut_folder ) response = chooser.run() if response == gtk.RESPONSE_OK: filename = chooser.get_filename() else: filename = None chooser.destroy() if filename is not None: Application.load_project(self, filename)
def set_project(self, project, confirm=True): " Assign the given project to the Application. " # ask for permission to close the project # (unless there were no changes) if self._project is not None: if self._project.journal.can_undo() and confirm is True: msg = \ """ You are about to close the Project. Do you want to save your changes ? """ dialog = gtk.MessageDialog(type = gtk.MESSAGE_QUESTION, message_format = msg) dialog.add_button("_Don't Save", gtk.RESPONSE_NO) btn_default = dialog.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) dialog.add_button(gtk.STOCK_SAVE, gtk.RESPONSE_YES) btn_default.grab_focus() response = dialog.run() dialog.destroy() if response == gtk.RESPONSE_YES: # yes = yes, save the file before closing self.save_project() elif response == gtk.RESPONSE_NO: # no = no, proceed with closing pass else: # everything else -> abort action raise error.UserCancel # set new project Application.set_project(self, project) self.window.treeview.set_project(project) # assign project label to window title if project: title = project.filename or "<unnamed project>" else: title = "(no project)" self.window.set_title(basename(title)) if project is not None: project.journal.on_change = self.window._refresh_undo_redo self.window._refresh_undo_redo() self.window._refresh_recentfiles()
def init_plugins(self): Application.init_plugins(self) for plugin in self.plugins.itervalues(): if hasattr(plugin, 'gtk_popup_actions'): action_wrappers = plugin.gtk_popup_actions() # create action group ag = gtk.ActionGroup("Plugin") for item in action_wrappers: ag.add_action(item.action) self.window.uimanager.insert_action_group(ag, -1) # construct plugin ui plugin_ui = '<popup name="popup_dataset">' for item in action_wrappers: plugin_ui += '<menuitem action="%s"/>' % item.name plugin_ui += '</popup>' # merge plugin ui merge_id = self.window.uimanager.add_ui_from_string(plugin_ui)
def quit(self): try: Application.quit(self) gtk.main_quit() except error.UserCancel: return