MultiProject/MultiProjectBrowser.py

changeset 6652
dfc89403b426
parent 6645
ad476851d7e0
child 6653
ac800d2700d2
--- a/MultiProject/MultiProjectBrowser.py	Sat Jan 12 12:40:14 2019 +0100
+++ b/MultiProject/MultiProjectBrowser.py	Sat Jan 12 18:25:04 2019 +0100
@@ -9,10 +9,14 @@
 
 from __future__ import unicode_literals
 
+import os
+import glob
+
 from PyQt5.QtCore import Qt
 from PyQt5.QtWidgets import QTreeWidget, QTreeWidgetItem, QDialog, QMenu
 
 from E5Gui.E5Application import e5App
+from E5Gui import E5MessageBox
 
 import UI.PixmapCache
 
@@ -291,6 +295,65 @@
             if uid:
                 self.multiProject.removeProject(uid)
     
+    def __deleteProject(self):
+        """
+        Private method to handle the Delete context menu entry.
+        """
+        itm = self.currentItem()
+        if itm is not None and itm.parent() is not None:
+            projectFile = itm.data(0, MultiProjectBrowser.ProjectFileNameRole)
+            projectPath = os.path.dirname(projectFile)
+            
+            if self.project.getProjectPath() == projectPath:
+                E5MessageBox.warning(
+                    self,
+                    self.tr("Delete Project"),
+                    self.tr("""The current project cannot be deleted."""
+                            """ Please close it first."""))
+            else:
+                projectFiles = glob.glob(os.path.join(projectPath, "*.e4p"))
+                if not projectFiles:
+                    # Oops, that should not happen; play it save
+                    res = False
+                elif len(projectFiles) == 1:
+                    res = E5MessageBox.yesNo(
+                        self,
+                        self.tr("Delete Project"),
+                        self.tr("""<p>Shall the project <b>{0}</b> (Path:"""
+                                """ {1}) really be deleted?</p>""").format(
+                            itm.text(0), projectPath))
+                else:
+                    res = E5MessageBox.yesNo(
+                        self,
+                        self.tr("Delete Project"),
+                        self.tr("""<p>Shall the project <b>{0}</b> (Path:"""
+                                """ {1}) really be deleted?</p>"""
+                                """<p><b>Warning:</b> It contains <b>{2}</b>"""
+                                """ sub-projects.</p>""").format(
+                            itm.text(0), projectPath, len(projectFiles)))
+                if res:
+                    for subprojectFile in projectFiles:
+                        # remove all sub-projects before deleting the directory
+                        if subprojectFile != projectFile:
+                            projectData = {
+                                'name': "",
+                                'file': subprojectFile,
+                                'master': False,
+                                'description': "",
+                                'category': "",
+                                'uid': "",
+                            }
+                            pitm = self.__findProjectItem(projectData)
+                            if pitm:
+                                uid = pitm.data(
+                                    0, MultiProjectBrowser.ProjectUidRole)
+                                if uid:
+                                    self.multiProject.removeProject(uid)
+                        
+                    uid = itm.data(0, MultiProjectBrowser.ProjectUidRole)
+                    if uid:
+                        self.multiProject.deleteProject(uid)
+    
     def __showProjectProperties(self):
         """
         Private method to show the data of a project entry.
@@ -330,7 +393,10 @@
         """
         self.__menu = QMenu(self)
         self.__menu.addAction(self.tr("Open"), self.__openItem)
-        self.__menu.addAction(self.tr("Remove"), self.__removeProject)
+        self.__menu.addAction(self.tr("Remove from Multi Project"),
+                              self.__removeProject)
+        self.__menu.addAction(self.tr("Delete from Disk"),
+                              self.__deleteProject)
         self.__menu.addAction(self.tr("Properties"),
                               self.__showProjectProperties)
         self.__menu.addSeparator()

eric ide

mercurial