src/eric7/Project/ProjectOthersBrowser.py

branch
eric7
changeset 9362
9daa438fb4de
parent 9221
bf71ee032bb4
child 9402
f5d9aa5c62db
diff -r 718bc86e1c3f -r 9daa438fb4de src/eric7/Project/ProjectOthersBrowser.py
--- a/src/eric7/Project/ProjectOthersBrowser.py	Tue Sep 27 14:59:32 2022 +0200
+++ b/src/eric7/Project/ProjectOthersBrowser.py	Tue Sep 27 17:58:12 2022 +0200
@@ -9,6 +9,7 @@
 """
 
 import contextlib
+import os
 
 from PyQt6.QtCore import QModelIndex, pyqtSignal, QUrl
 from PyQt6.QtGui import QDesktopServices
@@ -93,8 +94,8 @@
         act = self.menu.addAction(self.tr("Delete"), self.__deleteItem)
         self.menuActions.append(act)
         self.menu.addSeparator()
-        self.menu.addAction(self.tr("Add files..."), self.project.addOthersFiles)
-        self.menu.addAction(self.tr("Add directory..."), self.project.addOthersDir)
+        self.menu.addAction(self.tr("Add files..."), self.__addOthersFiles)
+        self.menu.addAction(self.tr("Add directory..."), self.__addOthersDirectory)
         self.menu.addSeparator()
         self.menu.addAction(self.tr("Refresh"), self.__refreshItem)
         self.menu.addSeparator()
@@ -105,6 +106,28 @@
         self.menu.addSeparator()
         self.menu.addAction(self.tr("Configure..."), self._configure)
 
+        self.dirMenu = QMenu(self)
+        self.removeDirAct = self.dirMenu.addAction(
+            self.tr("Remove from project"), self._removeDir
+        )
+        self.dirMenuActions.append(self.removeDirAct)
+        self.deleteDirAct = self.dirMenu.addAction(
+            self.tr("Delete"), self._deleteDirectory
+        )
+        self.dirMenuActions.append(self.deleteDirAct)
+        self.dirMenu.addSeparator()
+        self.dirMenu.addAction(self.tr("Add files..."), self.__addOthersFiles)
+        self.dirMenu.addAction(self.tr("Add directory..."), self.__addOthersDirectory)
+        self.dirMenu.addSeparator()
+        self.dirMenu.addAction(self.tr("Copy Path to Clipboard"), self._copyToClipboard)
+        self.dirMenu.addSeparator()
+        self.dirMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs)
+        self.dirMenu.addAction(
+            self.tr("Collapse all directories"), self._collapseAllDirs
+        )
+        self.dirMenu.addSeparator()
+        self.dirMenu.addAction(self.tr("Configure..."), self._configure)
+
         self.backMenu = QMenu(self)
         self.backMenu.addAction(self.tr("Add files..."), self.project.addOthersFiles)
         self.backMenu.addAction(self.tr("Add directory..."), self.project.addOthersDir)
@@ -134,6 +157,7 @@
 
         self.menu.aboutToShow.connect(self.__showContextMenu)
         self.multiMenu.aboutToShow.connect(self.__showContextMenuMulti)
+        self.dirMenu.aboutToShow.connect(self.__showContextMenuDir)
         self.backMenu.aboutToShow.connect(self.__showContextMenuBack)
         self.mainMenu = self.menu
 
@@ -147,12 +171,20 @@
             return
 
         with contextlib.suppress(Exception):
-            cnt = self.getSelectedItemsCount()
-            if cnt <= 1:
+            cnt = self.getSelectedItemsCount([
+                ProjectBrowserFileItem,
+                ProjectBrowserDirectoryItem,
+                ProjectBrowserSimpleDirectoryItem,
+            ])
+            if cnt < 1:
                 index = self.indexAt(coord)
                 if index.isValid():
                     self._selectSingleItem(index)
-                    cnt = self.getSelectedItemsCount()
+                    cnt = self.getSelectedItemsCount([
+                        ProjectBrowserFileItem,
+                        ProjectBrowserDirectoryItem,
+                        ProjectBrowserSimpleDirectoryItem,
+                    ])
 
             if cnt > 1:
                 self.multiMenu.popup(self.mapToGlobal(coord))
@@ -166,9 +198,13 @@
                         self.mimeTypeAct.setVisible(True)
                         self.menu.popup(self.mapToGlobal(coord))
                     elif isinstance(itm, ProjectBrowserDirectoryItem):
-                        self.editPixmapAct.setVisible(False)
-                        self.mimeTypeAct.setVisible(False)
-                        self.menu.popup(self.mapToGlobal(coord))
+                        self.removeDirAct.setVisible(True)
+                        self.deleteDirAct.setVisible(True)
+                        self.dirMenu.popup(self.mapToGlobal(coord))
+                    elif isinstance(itm, ProjectBrowserSimpleDirectoryItem):
+                        self.removeDirAct.setVisible(False)
+                        self.deleteDirAct.setVisible(False)
+                        self.dirMenu.popup(self.mapToGlobal(coord))
                     else:
                         self.backMenu.popup(self.mapToGlobal(coord))
                 else:
@@ -190,6 +226,14 @@
 
         self.showMenu.emit("MainMulti", self.multiMenu)
 
+    def __showContextMenuDir(self):
+        """
+        Private slot called by the dirMenu aboutToShow signal.
+        """
+        ProjectBaseBrowser._showContextMenuDir(self, self.dirMenu)
+
+        self.showMenu.emit("MainDir", self.dirMenu)
+
     def __showContextMenuBack(self):
         """
         Private slot called by the backMenu aboutToShow signal.
@@ -317,6 +361,36 @@
                         textMimeTypesList.append(mimetype)
                         Preferences.setUI("TextMimeTypes", textMimeTypesList)
 
+    def __addOthersFiles(self):
+        """
+        Private method to add files to the project.
+        """
+        itm = self.model().item(self.currentIndex())
+        if isinstance(itm, ProjectBrowserFileItem):
+            dn = os.path.dirname(itm.fileName())
+        elif isinstance(
+            itm, (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem)
+        ):
+            dn = itm.dirName()
+        else:
+            dn = None
+        self.project.addFiles("others", dn)
+
+    def __addOthersDirectory(self):
+        """
+        Private method to add files of a directory to the project.
+        """
+        itm = self.model().item(self.currentIndex())
+        if isinstance(ProjectBrowserFileItem):
+            dn = os.path.dirname(itm.fileName())
+        elif isinstance(
+            itm, (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem)
+        ):
+            dn = itm.dirName()
+        else:
+            dn = None
+        self.project.addDirectory("others", dn)
+
     def __removeItem(self):
         """
         Private slot to remove the selected entry from the OTHERS project

eric ide

mercurial