--- a/src/eric7/ViewManager/ViewManager.py Fri Feb 02 14:55:14 2024 +0100 +++ b/src/eric7/ViewManager/ViewManager.py Mon Feb 05 11:15:47 2024 +0100 @@ -770,13 +770,40 @@ QCoreApplication.translate( "ViewManager", """<b>Save File as</b>""" - """<p>Save the contents of current editor window to a new file.""" + """<p>Save the contents of the current editor window to a new file.""" """ The file can be entered in a file selection dialog.</p>""", ) ) self.saveAsAct.triggered.connect(self.saveAsCurrentEditor) self.fileActions.append(self.saveAsAct) + self.saveAsRemoteAct = EricAction( + QCoreApplication.translate("ViewManager", "Save as (Remote)"), + EricPixmapCache.getIcon("fileSaveAsRemote"), + QCoreApplication.translate("ViewManager", "Save as (Remote)..."), + 0, + 0, + self.saveActGrp, + "vm_file_save_as_remote", + ) + self.saveAsRemoteAct.setStatusTip( + QCoreApplication.translate( + "ViewManager", + "Save the current file to a new one on an eric-ide server" + ) + ) + self.saveAsRemoteAct.setWhatsThis( + QCoreApplication.translate( + "ViewManager", + """<b>Save File as (Remote)</b>""" + """<p>Save the contents of the current editor window to a new file""" + """ on the connected eric-ide server. The file can be entered in a""" + """ file selection dialog.</p>""", + ) + ) + self.saveAsRemoteAct.triggered.connect(self.saveAsRemoteCurrentEditor) + self.fileActions.append(self.saveAsRemoteAct) + self.saveCopyAct = EricAction( QCoreApplication.translate("ViewManager", "Save Copy"), EricPixmapCache.getIcon("fileSaveCopy"), @@ -932,6 +959,7 @@ menu.addSeparator() menu.addAction(self.saveAct) menu.addAction(self.saveAsAct) + menu.addAction(self.saveAsRemoteAct) menu.addAction(self.saveCopyAct) menu.addAction(self.saveAllAct) self.exportersMenuAct = menu.addMenu(self.exportersMenu) @@ -969,6 +997,7 @@ tb.addSeparator() tb.addAction(self.saveAct) tb.addAction(self.saveAsAct) + tb.addAction(self.saveAsRemoteAct) tb.addAction(self.saveCopyAct) tb.addAction(self.saveAllAct) @@ -5689,6 +5718,7 @@ @type bool """ self.openRemoteAct.setEnabled(connected) + self.saveAsRemoteAct.setEnabled(self.saveActGrp.isEnabled() and connected) def exit(self): """ @@ -6299,6 +6329,29 @@ aw = self.activeWindow() self.saveAsEditorEd(aw) + @pyqtSlot(Editor) + def saveAsRemoteEditorEd(self, ed): + """ + Public slot to save the contents of an editor to a new file on a + connected eric-ide server. + + @param ed editor to be saved + @type Editor + """ + if ed: + ok = ed.saveFileAs(remote=True) + if ok: + self.setEditorName(ed, ed.getFileName()) + + @pyqtSlot() + def saveAsRemoteCurrentEditor(self): + """ + Public slot to save the contents of the current editor to a new file on a + connected eric-ide server. + """ + aw = self.activeWindow() + self.saveAsRemoteEditorEd(aw) + def saveCopyEditorEd(self, ed): """ Public slot to save the contents of an editor to a new copy of @@ -7682,6 +7735,7 @@ """ self.closeActGrp.setEnabled(True) self.saveActGrp.setEnabled(True) + self.saveAsRemoteAct.setEnabled(self.ui.isEricServerConnected()) self.exportersMenuAct.setEnabled(True) self.printAct.setEnabled(True) if self.printPreviewAct: @@ -7714,10 +7768,7 @@ @type bool """ if editor is not None: - self.saveAct.setEnabled( - editor.isModified() - and not FileSystemUtilities.isRemoteFileName(editor.getFileName()) - ) + self.saveAct.setEnabled(editor.isModified()) self.revertAct.setEnabled(editor.isModified()) self.undoAct.setEnabled(editor.isUndoAvailable())