def quit(self): """ Quit Application and gtk main loop. """ try: Application.quit(self) gtk.main_quit() except error.UserCancel: return
def set_project(self, project, confirm=True): """ Assign the given project to the Application. @param confirm: Ask user 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 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( self.path.get('current_dir') ) 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 = self.path.get('example_dir') 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 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 do_import(self, project, filenames, template_key=None): # try to determine template key if it is not given if template_key is None or template_key=='auto': matches = dataio.importer_template_from_filename(filenames[0]) if len(matches) > 0: template_key = matches[0] else: template_key = 'ASCII' # # Request import options # # Note that if 'skip_option' is set in the template, then # there will be no user options dialog. if dataio.import_templates[template_key].skip_options is False: dialog = import_dialog.ImportOptions(template_key, previewfile=filenames[0]) try: result = dialog.run() if result == gtk.RESPONSE_ACCEPT: # save template as 'recently used' template = dataio.IOTemplate() template.defaults = dialog.importer.get_values(include=dialog.importer.public_props) template.blurb = "Recently used Template" template.importer_key = dialog.template.importer_key template.write_config = True template.is_internal = True dataio.import_templates['recently used'] = template else: return finally: dialog.destroy() else: template = template_key # The progress bar displays which file is currently being imported. Application.import_datasets(self, project, filenames, template)
def quit(self): try: Application.quit(self) gtk.main_quit() except error.UserCancel: return