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