Implemented the 'Save As Remote Project" function. server

Thu, 22 Feb 2024 19:40:56 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 22 Feb 2024 19:40:56 +0100
branch
server
changeset 10599
36b8c7115c32
parent 10598
79c6ea2cb2e7
child 10601
a8775ecd25dc

Implemented the 'Save As Remote Project" function.

src/eric7/Project/Project.py file | annotate | diff | comparison | revisions
src/eric7/icons/breeze-dark/projectSaveAs-remote.svg file | annotate | diff | comparison | revisions
src/eric7/icons/breeze-light/projectSaveAs-remote.svg file | annotate | diff | comparison | revisions
src/eric7/icons/oxygen/projectOpen-remote.png file | annotate | diff | comparison | revisions
src/eric7/icons/oxygen/projectSaveAs-remote.png file | annotate | diff | comparison | revisions
--- 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>
Binary file src/eric7/icons/oxygen/projectOpen-remote.png has changed
Binary file src/eric7/icons/oxygen/projectSaveAs-remote.png has changed

eric ide

mercurial