Thu, 22 Feb 2024 19:40:56 +0100
Implemented the 'Save As Remote Project" function.
--- 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/eric7/icons/breeze-dark/projectSaveAs-remote.svg Thu Feb 22 19:40:56 2024 +0100 @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + version="1.1" + viewBox="0 0 22 22" + id="svg10" + sodipodi:docname="projectSaveAs-remote.svg" + inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <sodipodi:namedview + id="namedview12" + pagecolor="#ffffff" + bordercolor="#000000" + borderopacity="0.25" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + showgrid="false" + inkscape:zoom="46.681818" + inkscape:cx="12.135346" + inkscape:cy="11.567673" + inkscape:window-width="2580" + inkscape:window-height="1281" + inkscape:window-x="861" + inkscape:window-y="0" + inkscape:window-maximized="0" + inkscape:current-layer="svg10" /> + <defs + id="defs4"> + <style + type="text/css" + id="style2">.ColorScheme-Text { + color:#eff0f1; + }</style> + </defs> + <g + id="g2432" + transform="matrix(0.74999663,0,0,0.74999663,2.7500034,0.25000337)"> + <g + id="g2427"> + <path + d="M 3.5,1 V 3.5 H 1 v 3.75 h 2.5 v 7.5 H 1 V 18.5 H 3.5 V 21 H 11 V 19.75 H 4.75 V 6 h 15 v 5 H 21 V 1 Z m 1.25,1.25 h 15 v 2.5 h -15 z" + color="#eff0f1" + fill="currentColor" + id="path6" /> + </g> + <path + class="ColorScheme-Text" + d="m 12,12.5 v 8.4969 h 4.5 V 20.46594 H 14 v -3.186 h 2.5 v -0.531 h -3 v 3.717 h -1 v -7.4339 H 14 v 2.655 h 4 v -2.655 h 0.14648 l 1.3535,1.4374 v 1.7486 h 0.5 v -1.9643 h -0.0039 l 0.0039,-0.0051 -1.6465,-1.7486 -0.0039,0.0051 v -0.0051 h -0.34961 z m 2.5,0.53203 h 1.9502 v 2.124 H 14.5 Z m 5.5,3.717 -0.49805,0.52788 h -0.0019 l -2.5,2.6539 0.0039,0.0051 -0.0019,0.53307 h -0.0019 v 0.531 h 1 l 0.0029,-0.0051 h 0.0068 l -0.0029,-0.0051 0.49316,-0.52374 2,-2.1219 -0.35254,-0.37647 -2.4951,2.6477 -0.29688,-0.31424 2.4961,-2.6488 0.2959,0.31528 0.35254,0.37336 0.49996,-0.531 z" + color="#eff0f1" + fill="currentColor" + id="path8" /> + </g> + <path + style="color:#eff0f1;fill:currentColor;fill-opacity:1;stroke:none;stroke-width:1.29099" + d="m 8.4999998,17 v 1.333333 H 1 v 1.333334 H 8.4999998 V 21 H 13.499999 V 19.666667 H 21 V 18.333333 H 13.499999 V 17 H 8.4999998 M 11,17.666667 c 0.6925,0 1.25,0.594666 1.25,1.333333 0,0.738667 -0.5575,1.333333 -1.25,1.333333 -0.6925,0 -1.2500002,-0.594666 -1.2500002,-1.333333 0,-0.738667 0.5575002,-1.333333 1.2500002,-1.333333" + class="ColorScheme-Text" + id="path4" + sodipodi:nodetypes="ccccccccccccccsssc" /> +</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/eric7/icons/breeze-light/projectSaveAs-remote.svg Thu Feb 22 19:40:56 2024 +0100 @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + version="1.1" + viewBox="0 0 22 22" + id="svg10" + sodipodi:docname="projectSaveAs-remote.svg" + inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <sodipodi:namedview + id="namedview12" + pagecolor="#ffffff" + bordercolor="#000000" + borderopacity="0.25" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + showgrid="false" + inkscape:zoom="46.681818" + inkscape:cx="11.407011" + inkscape:cy="11.214216" + inkscape:window-width="2580" + inkscape:window-height="1274" + inkscape:window-x="861" + inkscape:window-y="0" + inkscape:window-maximized="0" + inkscape:current-layer="svg10" /> + <defs + id="defs4"> + <style + type="text/css" + id="style2">.ColorScheme-Text { + color:#eff0f1; + }</style> + </defs> + <g + id="g2428" + transform="matrix(0.74999663,0,0,0.74999663,2.7500034,0.25000337)"> + <path + d="M 3.5,1 V 3.5 H 1 v 3.75 h 2.5 v 7.5 H 1 V 18.5 H 3.5 V 21 H 11 V 19.75 H 4.75 V 6 h 15 v 5 H 21 V 1 Z m 1.25,1.25 h 15 v 2.5 h -15 z" + color="#eff0f1" + fill="#232629" + id="path6" /> + <path + class="ColorScheme-Text" + d="m 12,12.5 v 8.4969 h 4.5 V 20.46594 H 14 v -3.186 h 2.5 v -0.531 h -3 v 3.717 h -1 v -7.4339 H 14 v 2.655 h 4 v -2.655 h 0.14648 l 1.3535,1.4374 v 1.7486 h 0.5 v -1.9643 h -0.0039 l 0.0039,-0.0051 -1.6465,-1.7486 -0.0039,0.0051 v -0.0051 h -0.34961 z m 2.5,0.53203 h 1.9502 v 2.124 H 14.5 Z m 5.5,3.717 -0.49805,0.52788 h -0.0019 l -2.5,2.6539 0.0039,0.0051 -0.0019,0.53307 h -0.0019 v 0.531 h 1 l 0.0029,-0.0051 h 0.0068 l -0.0029,-0.0051 0.49316,-0.52374 2,-2.1219 -0.35254,-0.37647 -2.4951,2.6477 -0.29688,-0.31424 2.4961,-2.6488 0.2959,0.31528 0.35254,0.37336 0.49996,-0.531 z" + color="#eff0f1" + fill="#232629" + id="path8" /> + </g> + <path + style="color:#232629;fill:currentColor;fill-opacity:1;stroke:none;stroke-width:1.29099" + d="m 8.4999983,17 v 1.333333 H 1 v 1.333334 H 8.4999983 V 21 h 4.9999987 v -1.333333 h 7.499999 V 18.333333 H 13.499997 V 17 H 8.4999983 m 2.4999997,0.666667 c 0.6925,0 1.25,0.594666 1.25,1.333333 0,0.738667 -0.5575,1.333333 -1.25,1.333333 -0.6925,0 -1.25,-0.594666 -1.25,-1.333333 0,-0.738667 0.5575,-1.333333 1.25,-1.333333" + class="ColorScheme-Text" + id="path4" + sodipodi:nodetypes="ccccccccccccccsssc" /> +</svg>