def load_file(self, widget, data=None): ''' This callback is fired when the "Open" Gtk.MenuItem is activated. This method opens a filechooser dialog to choose an xml file and then load its contents into the treeview. ''' dialog = Gtk.FileChooserDialog(title=None, parent=None, action=Gtk.FileChooserAction.OPEN, buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.ACCEPT)) xml_file_filter = Gtk.FileFilter() xml_file_filter.add_pattern("*.xml") xml_file_filter.set_name("XML Files") dialog.add_filter(xml_file_filter) response = dialog.run() if response == Gtk.ResponseType.ACCEPT: filename = dialog.get_filename() print("Opening file: {}".format(filename)) dialog.destroy() generator = StyleGenerator() try: info, styles = generator.parse_file(filename, self.sourceview_styles) except ParseError: traceback.print_exc() # Open a dialog that says it failed to parse. return except Exception as e: traceback.print_exc() # Open a dialog that says it failed to parse. return # Set the info pane #self.filename_entry.set_text(filename) self.window.set_title(__application__ + " - " + filename) self.name_entry.set_text(info['name']) self.id_entry.set_text(info['id']) self.author_entry.set_text(info['author']) self.version_entry.set_text(info['version']) self.description_entry.set_text(info['description']) self.styles_interface.treestore.clear() self.styles_interface.styles_rows = {} # Set styles for lang, config in sorted(styles.iteritems()): if lang == '__globals': # Add globals to the StylesTreeView for scheme, conf in config.iteritems(): row = self.format_row(conf, scheme) config[scheme] = row self.styles_interface.init_globals(globals_defaults=config) else: language = config['name'] styles = config['styles'] for scheme, style in styles.iteritems(): row = self.format_row(style, scheme) self.styles_interface.add_style(language, scheme, row) else: dialog.destroy()
def _save_file(self): ''' Save the theme to the current filepath in `self.filename` ''' # Build the styles dict based on the styles that are laid out in the # StylesTreeView. styles_object = self.styles_interface.treestore generator = StyleGenerator() info = self. get_info() generator.add_info(info['id'], info['name'], author=info['author'], description=info['description'], version=info['version']) generator.add_styles(styles_object) print etree.tostring(generator.tree.getroot(), pretty_print=True) generator.save_file(info['filename'])