MultiProject/MultiProject.py

changeset 6836
93b8c77502e0
parent 6653
ac800d2700d2
diff -r 1f08657c8407 -r 93b8c77502e0 MultiProject/MultiProject.py
--- a/MultiProject/MultiProject.py	Sun Mar 03 17:52:36 2019 +0100
+++ b/MultiProject/MultiProject.py	Sun Mar 03 17:53:06 2019 +0100
@@ -13,14 +13,15 @@
 import shutil
 
 from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QFileInfo, QFile, \
-    QIODevice, QObject
+    QIODevice, QObject, QUuid
 from PyQt5.QtGui import QCursor
 from PyQt5.QtWidgets import QMenu, QApplication, QDialog, QToolBar
 
 from Globals import recentNameMultiProject
 
 from E5Gui.E5Action import E5Action, createActionGroup
-from E5Gui import E5FileDialog, E5MessageBox
+from E5Gui import E5FileDialog, E5MessageBox, E5PathPickerDialog
+from E5Gui.E5PathPickerDialog import E5PathPickerModes
 
 import UI.PixmapCache
 
@@ -353,6 +354,56 @@
             self.projectAdded.emit(project)
             self.setDirty(True)
     
+    def copyProject(self, uid):
+        """
+        Public method to copy the project with given UID on disk.
+        
+        @param uid UID of the project to copy
+        @type str
+        """
+        if uid in self.__projects:
+            startdir = self.ppath
+            if not startdir:
+                startdir = Preferences.getMultiProject("Workspace")
+            srcProject = self.__projects[uid]
+            srcProjectDirectory = os.path.dirname(srcProject["file"])
+            dstProjectDirectory, ok = E5PathPickerDialog.getPath(
+                self.parent(),
+                self.tr("Copy Project"),
+                self.tr("Enter directory for the new project (must not exist"
+                        " already):"),
+                mode=E5PathPickerModes.DirectoryMode,
+                path=srcProjectDirectory,
+                defaultDirectory=startdir,
+            )
+            if ok and dstProjectDirectory and \
+               not os.path.exists(dstProjectDirectory):
+                try:
+                    shutil.copytree(srcProjectDirectory, dstProjectDirectory)
+                except shutil.Error:
+                    E5MessageBox.critical(
+                        self.parent(),
+                        self.tr("Copy Project"),
+                        self.tr("<p>The source project <b>{0}</b> could not"
+                                " be copied to its destination <b>{1}</b>."
+                                "</p>").format(srcProjectDirectory,
+                                               dstProjectDirectory))
+                    return
+                
+                dstUid = QUuid.createUuid().toString()
+                dstProject = {
+                    'name': self.tr("{0} - Copy").format(srcProject["name"]),
+                    'file': os.path.join(dstProjectDirectory,
+                                         os.path.basename(srcProject["file"])),
+                    'master': False,
+                    'description': srcProject["description"],
+                    'category': srcProject["category"],
+                    'uid': dstUid,
+                }
+                self.__projects[dstUid] = dstProject
+                self.projectAdded.emit(dstProject)
+                self.setDirty(True)
+    
     def changeProjectProperties(self, pro):
         """
         Public method to change the data of a project entry.

eric ide

mercurial