src/eric7/Project/Project.py

branch
server
changeset 10599
36b8c7115c32
parent 10598
79c6ea2cb2e7
child 10605
b6f5e27daeb5
--- 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

eric ide

mercurial