diff -r 79c6ea2cb2e7 -r 36b8c7115c32 src/eric7/Project/Project.py --- a/src/eric7/Project/Project.py Thu Feb 22 16:51:19 2024 +0100 +++ b/src/eric7/Project/Project.py Thu Feb 22 19:40:56 2024 +0100 @@ -173,6 +173,7 @@ super().__init__(parent) self.ui = parent + self.__remoteServer = remoteServer self.__remotefsInterface = remoteServer.getServiceInterface("FileSystem") self.__progLanguages = [ @@ -2661,6 +2662,10 @@ self.reloadAct.setEnabled(True) self.closeAct.setEnabled(True) self.saveasAct.setEnabled(True) + self.saveasRemoteAct.setEnabled( + self.__remoteServer.isServerConnected() + and FileSystemUtilities.isRemoteFileName(self.pfile) + ) self.actGrp2.setEnabled(True) self.propsAct.setEnabled(True) self.userPropsAct.setEnabled(True) @@ -3392,6 +3397,10 @@ self.reloadAct.setEnabled(True) self.closeAct.setEnabled(True) self.saveasAct.setEnabled(True) + self.saveasRemoteAct.setEnabled( + self.__remoteServer.isServerConnected() + and FileSystemUtilities.isRemoteFileName(self.pfile) + ) self.actGrp2.setEnabled(True) self.propsAct.setEnabled(True) self.userPropsAct.setEnabled(True) @@ -3531,7 +3540,7 @@ if fpath.exists(): res = EricMessageBox.yesNo( self.ui, - self.tr("Save File"), + self.tr("Save Project"), self.tr( """<p>The file <b>{0}</b> already exists.""" """ Overwrite it?</p>""" @@ -3541,7 +3550,6 @@ if not res: return False - self.name = fpath.stem ok = self.__writeProject(str(fpath)) if ok: @@ -3676,6 +3684,7 @@ self.__initData() self.reloadAct.setEnabled(False) self.closeAct.setEnabled(False) + self.saveasRemoteAct.setEnabled(False) self.saveasAct.setEnabled(False) self.saveAct.setEnabled(False) self.actGrp2.setEnabled(False) @@ -4503,6 +4512,28 @@ self.saveasAct.triggered.connect(self.saveProjectAs) self.actions.append(self.saveasAct) + self.saveasRemoteAct = EricAction( + self.tr("Save project as (Remote)"), + EricPixmapCache.getIcon("projectSaveAs-remote"), + self.tr("Save as (Remote)..."), + 0, + 0, + self, + "project_save_as_remote", + ) + self.saveasRemoteAct.setStatusTip( + self.tr("Save the current project to a new remote file") + ) + self.saveasRemoteAct.setWhatsThis( + self.tr( + """<b>Save as (Remote)</b>""" + """<p>This saves the current project to a new remote file.</p>""" + ) + ) + self.saveasRemoteAct.triggered.connect(self.__saveRemoteProjectAs) + self.actions.append(self.saveasRemoteAct) + self.saveasRemoteAct.setEnabled(False) # server is not connected initially + ################################################################### ## Project management actions ################################################################### @@ -5589,6 +5620,7 @@ menu.addSeparator() menu.addAction(self.saveAct) menu.addAction(self.saveasAct) + menu.addAction(self.saveasRemoteAct) menu.addSeparator() menu.addActions(self.actGrp2.actions()) menu.addSeparator() @@ -5661,6 +5693,7 @@ tb.addSeparator() tb.addAction(self.saveAct) tb.addAction(self.saveasAct) + tb.addAction(self.saveasRemoteAct) toolbarManager.addToolBar(tb, tb.windowTitle()) toolbarManager.addAction(self.addFilesAct, tb.windowTitle()) @@ -7416,22 +7449,77 @@ @type bool """ self.openRemoteAct.setEnabled(connected) + self.saveasRemoteAct.setEnabled( + connected + and self.opened + and FileSystemUtilities.isRemoteFileName(self.pfile) + ) @pyqtSlot() def __openRemoteProject(self): """ Private slot to open a project of an 'eric-ide' server. """ - # TODO: not implemented yet fn = EricServerFileDialog.getOpenFileName( self.parent(), - self.tr("Open project"), + self.tr("Open Remote Project"), "", self.tr("Project Files (*.epj)"), ) if fn: self.openProject(fn=fn) + @pyqtSlot() + def __saveRemoteProjectAs(self): + """ + Private slot to save the current remote project to different remote file. + """ + defaultFilter = self.tr("Project Files (*.epj)") + defaultPath = self.ppath if self.ppath else "" + fn, selectedFilter = EricServerFileDialog.getSaveFileNameAndFilter( + self.parent(), + self.tr("Save Remote Project"), + defaultPath, + self.tr("Project Files (*.epj)"), + defaultFilter, + EricFileDialog.DontConfirmOverwrite, + ) + + if fn: + fname, ext = self.__remotefsInterface.splitext(fn) + if not ext: + ex = selectedFilter.split("(*")[1].split(")")[0] + if ex: + fn = f"{fname}{ex}" + if self.__remotefsInterface.exists(fn): + res = EricMessageBox.yesNo( + self.ui, + self.tr("Save Remote Project"), + self.tr( + """<p>The file <b>{0}</b> already exists.""" + """ Overwrite it?</p>""" + ).format(fn), + icon=EricMessageBox.Warning, + ) + if not res: + return + + ok = self.__writeProject(fn) + + if ok: + # create management directory if not present + self.createProjectManagementDir() + + # now save the tasks + self.writeTasks() + + self.sessActGrp.setEnabled(ok) + self.menuSessionAct.setEnabled(ok) + self.projectClosedHooks.emit() + self.projectClosed.emit(False) + self.projectOpenedHooks.emit() + self.projectOpened.emit() + # # eflag: noqa = M601