class EditorTab(object): """ Represents a Document Object in the Editor """ file_uri = None edited = 0 def __init__(self, window, cmdm=None): if cmdm is None: cmdm = CommandManager() cmdm.enable_undo = self.enable_undo cmdm.enable_redo = self.enable_redo cmdm.error_func = window.command_error self.command_manager = cmdm self.document = None self.window = window self._clones = [self] def new(self, doc=None): """ initialize a new document """ if doc is None: doc = odml.Document() sec = odml.Section(name="Default Section") doc.append(sec) self.window.registry.add(doc) self.document = doc self.file_uri = None def load(self, uri): self.file_uri = uri xml_file = gio.File(uri) self.document = XMLReader(ignore_errors=True).fromFile(xml_file.read()) self.document.finalize() self.window.registry.add(self.document) self.window._info_bar.show_info("Loading of %s done!" % (xml_file.get_basename())) # TODO select default section def reset(self): self.edited = 0 # initialize the edit stack position self.command_manager.reset() self.enable_undo(enable=False) self.enable_redo(enable=False) @property def is_modified(self): return self.edited != len(self.command_manager) def save_if_changed(self): """ if the document was modified, ask the user if he or she wants to save the document returns false if the user cancelled the action """ if not self.is_modified: return True dialog = gtk.MessageDialog( self.window, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_YES_NO, "%s has been modified. Do you want to save your changes?" % self.file_uri) dialog.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) dialog.set_title("Save changes?") dialog.set_default_response(gtk.RESPONSE_CANCEL) response = dialog.run() dialog.destroy() if response == gtk.RESPONSE_CANCEL: return False if response == gtk.RESPONSE_NO: return True return self.window.save(None) def save(self, uri): self.document.clean() doc = XMLWriter(self.document) gf = gio.File(uri) try: data = unicode(doc) except Exception, e: self._info_bar.show_info("Save failed: %s" % e.message) return xml_file = gf.replace(etag='', make_backup=False) # TODO make backup? xml_file.write(doc.header) xml_file.write(data) xml_file.close() self.document.finalize() # undo the clean self.window._info_bar.show_info("%s was saved" % (gf.get_basename())) self.edited = len(self.command_manager) return True # TODO return false on any error and notify the user
class EditorTab(object): """ Represents a Document Object in the Editor """ file_uri = None edited = 0 def __init__(self, window, cmdm=None): if cmdm is None: cmdm = CommandManager() cmdm.enable_undo = self.enable_undo cmdm.enable_redo = self.enable_redo cmdm.error_func = window.command_error self.command_manager = cmdm self.document = None self.window = window self._clones = [self] def new(self, doc=None): """ initialize a new document """ if doc is None: doc = odml.Document() sec = odml.Section(name="Default Section") doc.append(sec) self.window.registry.add(doc) self.document = doc self.file_uri = None def load(self, uri): self.file_uri = uri xml_file = gio.File(uri) self.document = XMLReader(ignore_errors=True).fromFile(xml_file.read()) self.document.finalize() self.window.registry.add(self.document) self.window._info_bar.show_info("Loading of %s done!" % (xml_file.get_basename())) # TODO select default section def reset(self): self.edited = 0 # initialize the edit stack position self.command_manager.reset() self.enable_undo(enable=False) self.enable_redo(enable=False) @property def is_modified(self): return self.edited != len(self.command_manager) def save_if_changed(self): """ if the document was modified, ask the user if he or she wants to save the document returns false if the user cancelled the action """ if not self.is_modified: return True dialog = gtk.MessageDialog(self.window, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_YES_NO, "%s has been modified. Do you want to save your changes?" % self.file_uri) dialog.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) dialog.set_title("Save changes?") dialog.set_default_response(gtk.RESPONSE_CANCEL) response = dialog.run() dialog.destroy() if response == gtk.RESPONSE_CANCEL: return False if response == gtk.RESPONSE_NO: return True return self.window.save(None) def save(self, uri): self.document.clean() doc = XMLWriter(self.document) gf = gio.File(uri) try: data = unicode(doc) except Exception, e: self._info_bar.show_info("Save failed: %s" % e.message) return xml_file = gf.replace(etag='', make_backup=False) # TODO make backup? xml_file.write(doc.header) xml_file.write(data) xml_file.close() self.document.finalize() # undo the clean self.window._info_bar.show_info("%s was saved" % (gf.get_basename())) self.edited = len(self.command_manager) return True # TODO return false on any error and notify the user