def saveAs(self, event=None, fileName=None): '''Save a Leo outline to a file with a new filename.''' c = self; p = c.p # Do this now: w may go away. w = g.app.gui.get_focus(c) inBody = g.app.gui.widget_name(w).startswith('body') if inBody: p.saveCursorAndScroll() if g.app.disableSave: g.es("save commands disabled", color="purple") return c.init_error_dialogs() # 2013/09/28: add fileName keyword arg for leoBridge scripts. if fileName: c.frame.title = g.computeWindowTitle(fileName) c.mFileName = fileName # Make sure we never pass None to the ctor. if not c.mFileName: c.frame.title = "" if not fileName: fileName = ''.join(c.k.givenArgs) if not fileName: fileName = g.app.gui.runSaveFileDialog(c, initialfile=c.mFileName, title="Save As", filetypes=[g.fileFilters('LEOFILES')], defaultextension=g.defaultLeoFileExtension(c)) c.bringToFront() if fileName: # Fix bug 998090: save file as doesn't remove entry from open file list. if c.mFileName: g.app.forgetOpenFile(c.mFileName) # Don't change mFileName until the dialog has suceeded. c.mFileName = g.ensure_extension(fileName, g.defaultLeoFileExtension(c)) # Part of the fix for https://bugs.launchpad.net/leo-editor/+bug/1194209 c.frame.title = title = c.computeWindowTitle(c.mFileName) c.frame.setTitle(title) # 2013/08/04: use c.computeWindowTitle. c.openDirectory = c.frame.openDirectory = g.os_path_dirname(c.mFileName) # Bug fix in 4.4b2. # Calls c.setChanged(False) if no error. if g.app.qt_use_tabs and hasattr(c.frame, 'top'): c.frame.top.leo_master.setTabName(c, c.mFileName) c.fileCommands.saveAs(c.mFileName) g.app.recentFilesManager.updateRecentFiles(c.mFileName) g.chdir(c.mFileName) # Done in FileCommands.saveAs. # c.redraw_after_icons_changed() c.raise_error_dialogs(kind='write') # *Safely* restore focus, without using the old w directly. if inBody: c.bodyWantsFocus() p.restoreCursorAndScroll() else: c.treeWantsFocus()
def save(self, event=None, fileName=None): """Save a Leo outline to a file.""" if False and g.app.gui.guiName() == 'curses': g.trace('===== Save disabled in curses gui =====') return c = self p = c.p # Do this now: w may go away. w = g.app.gui.get_focus(c) inBody = g.app.gui.widget_name(w).startswith('body') if inBody: p.saveCursorAndScroll() if g.unitTesting and g.app.unitTestDict.get('init_error_dialogs') is not None: # A kludge for unit testing: # indicated that c.init_error_dialogs and c.raise_error_dialogs # will be called below, *without* actually saving the .leo file. c.init_error_dialogs() c.raise_error_dialogs(kind='write') return if g.app.disableSave: g.es("save commands disabled", color="purple") return c.init_error_dialogs() # 2013/09/28: use the fileName keyword argument if given. # This supports the leoBridge. # Make sure we never pass None to the ctor. if fileName: c.frame.title = g.computeWindowTitle(fileName) c.mFileName = fileName if not c.mFileName: c.frame.title = "" c.mFileName = "" if c.mFileName: # Calls c.setChanged(False) if no error. g.app.syntax_error_files = [] c.fileCommands.save(c.mFileName) c.syntaxErrorDialog() else: root = c.rootPosition() if not root.next() and root.isAtEditNode(): # There is only a single @edit node in the outline. # A hack to allow "quick edit" of non-Leo files. # See https://bugs.launchpad.net/leo-editor/+bug/381527 fileName = None # Write the @edit node if needed. if root.isDirty(): c.atFileCommands.writeOneAtEditNode(root) c.setChanged(False) else: fileName = ''.join(c.k.givenArgs) if not fileName: fileName = g.app.gui.runSaveFileDialog(c, initialfile=c.mFileName, title="Save", filetypes=[("Leo files", "*.leo *.db"),], defaultextension=g.defaultLeoFileExtension(c)) c.bringToFront() if fileName: # Don't change mFileName until the dialog has suceeded. c.mFileName = g.ensure_extension(fileName, g.defaultLeoFileExtension(c)) c.frame.title = c.computeWindowTitle(c.mFileName) c.frame.setTitle(c.computeWindowTitle(c.mFileName)) # 2013/08/04: use c.computeWindowTitle. c.openDirectory = c.frame.openDirectory = g.os_path_dirname(c.mFileName) # Bug fix in 4.4b2. if g.app.qt_use_tabs and hasattr(c.frame, 'top'): c.frame.top.leo_master.setTabName(c, c.mFileName) c.fileCommands.save(c.mFileName) g.app.recentFilesManager.updateRecentFiles(c.mFileName) g.chdir(c.mFileName) # Done in FileCommands.save. # c.redraw_after_icons_changed() c.raise_error_dialogs(kind='write') # *Safely* restore focus, without using the old w directly. if inBody: c.bodyWantsFocus() p.restoreCursorAndScroll() else: c.treeWantsFocus()
def saveAs(self, event=None, fileName=None): """ Save a Leo outline to a file, prompting for a new filename unless the fileName kwarg is given. kwarg: a file name, for use by file-save-as-zipped, file-save-as-unzipped and scripts using Leo's bridge. """ c, p = self, self.p # Do this now: w may go away. w = g.app.gui.get_focus(c) inBody = g.app.gui.widget_name(w).startswith('body') if inBody: p.saveCursorAndScroll() if g.app.disableSave: g.es("save commands disabled", color="purple") return c.init_error_dialogs() # 2013/09/28: add fileName keyword arg for leoBridge scripts. if fileName: c.frame.title = g.computeWindowTitle(fileName) c.mFileName = fileName # Make sure we never pass None to the ctor. if not c.mFileName: c.frame.title = "" if not fileName: fileName = ''.join(c.k.givenArgs) if not fileName: fileName = g.app.gui.runSaveFileDialog( c, title="Save As", filetypes=[ ("Leo files", "*.leo *.db *.leojs"), ], defaultextension=g.defaultLeoFileExtension(c)) c.bringToFront() if fileName: # #998090: save file as doesn't remove entry from open file list. g.trace(fileName) if c.mFileName: g.app.forgetOpenFile(c.mFileName) # Don't change mFileName until the dialog has suceeded. if fileName.endswith(('.leo', '.db', '.leojs')): c.mFileName = fileName else: c.mFileName = g.ensure_extension(fileName, g.defaultLeoFileExtension(c)) # Part of the fix for https://bugs.launchpad.net/leo-editor/+bug/1194209 c.frame.title = title = c.computeWindowTitle(c.mFileName) c.frame.setTitle(title) c.openDirectory = c.frame.openDirectory = g.os_path_dirname( c.mFileName) # Calls c.clearChanged() if no error. if hasattr(c.frame, 'top'): c.frame.top.leo_master.setTabName(c, c.mFileName) c.fileCommands.saveAs(c.mFileName) g.app.recentFilesManager.updateRecentFiles(c.mFileName) g.chdir(c.mFileName) # FileCommands.saveAs calls c.redraw_after_icons_changed() c.raise_error_dialogs(kind='write') # *Safely* restore focus, without using the old w directly. if inBody: c.bodyWantsFocus() p.restoreCursorAndScroll() else: c.treeWantsFocus()
def save(self, event=None, fileName=None): """ Save a Leo outline to a file, using the existing file name unless the fileName kwarg is given. kwarg: a file name, for use by scripts using Leo's bridge. """ c = self p = c.p # Do this now: w may go away. w = g.app.gui.get_focus(c) inBody = g.app.gui.widget_name(w).startswith('body') if inBody: p.saveCursorAndScroll() if g.app.disableSave: g.es("save commands disabled", color="purple") return c.init_error_dialogs() # 2013/09/28: use the fileName keyword argument if given. # This supports the leoBridge. # Make sure we never pass None to the ctor. if fileName: c.frame.title = g.computeWindowTitle(fileName) c.mFileName = fileName if not c.mFileName: c.frame.title = "" c.mFileName = "" if c.mFileName: # Calls c.clearChanged() if no error. g.app.syntax_error_files = [] c.fileCommands.save(c.mFileName) c.syntaxErrorDialog() else: root = c.rootPosition() if not root.next() and root.isAtEditNode(): # There is only a single @edit node in the outline. # A hack to allow "quick edit" of non-Leo files. # See https://bugs.launchpad.net/leo-editor/+bug/381527 fileName = None # Write the @edit node if needed. if root.isDirty(): c.atFileCommands.writeOneAtEditNode(root) c.clearChanged() # Clears all dirty bits. else: fileName = ''.join(c.k.givenArgs) if not fileName: fileName = g.app.gui.runSaveFileDialog( c, title="Save", filetypes=[ ("Leo files", "*.leo *.db"), ], defaultextension=g.defaultLeoFileExtension(c)) c.bringToFront() if fileName: # Don't change mFileName until the dialog has suceeded. c.mFileName = g.ensure_extension(fileName, g.defaultLeoFileExtension(c)) c.frame.title = c.computeWindowTitle(c.mFileName) c.frame.setTitle(c.computeWindowTitle(c.mFileName)) c.openDirectory = c.frame.openDirectory = g.os_path_dirname( c.mFileName) if hasattr(c.frame, 'top'): c.frame.top.leo_master.setTabName(c, c.mFileName) c.fileCommands.save(c.mFileName) g.app.recentFilesManager.updateRecentFiles(c.mFileName) g.chdir(c.mFileName) # FileCommands.save calls c.redraw_after_icons_changed() c.raise_error_dialogs(kind='write') # *Safely* restore focus, without using the old w directly. if inBody: c.bodyWantsFocus() p.restoreCursorAndScroll() else: c.treeWantsFocus()
def save(self, event=None, fileName=None): '''Save a Leo outline to a file.''' if False and g.app.gui.guiName() == 'curses': g.trace('===== Save disabled in curses gui =====') return c = self p = c.p # Do this now: w may go away. w = g.app.gui.get_focus(c) inBody = g.app.gui.widget_name(w).startswith('body') if inBody: p.saveCursorAndScroll() if g.unitTesting and g.app.unitTestDict.get('init_error_dialogs') is not None: # A kludge for unit testing: # indicated that c.init_error_dialogs and c.raise_error_dialogs # will be called below, *without* actually saving the .leo file. c.init_error_dialogs() c.raise_error_dialogs(kind='write') return if g.app.disableSave: g.es("save commands disabled", color="purple") return c.init_error_dialogs() # 2013/09/28: use the fileName keyword argument if given. # This supports the leoBridge. # Make sure we never pass None to the ctor. if fileName: c.frame.title = g.computeWindowTitle(fileName) c.mFileName = fileName if not c.mFileName: c.frame.title = "" c.mFileName = "" if c.mFileName: # Calls c.setChanged(False) if no error. g.app.syntax_error_files = [] c.fileCommands.save(c.mFileName) c.syntaxErrorDialog() else: root = c.rootPosition() if not root.next() and root.isAtEditNode(): # There is only a single @edit node in the outline. # A hack to allow "quick edit" of non-Leo files. # See https://bugs.launchpad.net/leo-editor/+bug/381527 fileName = None # Write the @edit node if needed. if root.isDirty(): c.atFileCommands.writeOneAtEditNode(root, toString=False, force=True) c.setChanged(False) else: fileName = ''.join(c.k.givenArgs) if not fileName: fileName = g.app.gui.runSaveFileDialog(c, initialfile=c.mFileName, title="Save", filetypes=[g.fileFilters('LEOFILES')], defaultextension=g.defaultLeoFileExtension(c)) c.bringToFront() if fileName: # Don't change mFileName until the dialog has suceeded. c.mFileName = g.ensure_extension(fileName, g.defaultLeoFileExtension(c)) c.frame.title = c.computeWindowTitle(c.mFileName) c.frame.setTitle(c.computeWindowTitle(c.mFileName)) # 2013/08/04: use c.computeWindowTitle. c.openDirectory = c.frame.openDirectory = g.os_path_dirname(c.mFileName) # Bug fix in 4.4b2. if g.app.qt_use_tabs and hasattr(c.frame, 'top'): c.frame.top.leo_master.setTabName(c, c.mFileName) c.fileCommands.save(c.mFileName) g.app.recentFilesManager.updateRecentFiles(c.mFileName) g.chdir(c.mFileName) # Done in FileCommands.save. # c.redraw_after_icons_changed() c.raise_error_dialogs(kind='write') # *Safely* restore focus, without using the old w directly. if inBody: c.bodyWantsFocus() p.restoreCursorAndScroll() else: c.treeWantsFocus()