Project Browser eric7

Mon, 11 Dec 2023 10:30:24 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 11 Dec 2023 10:30:24 +0100
branch
eric7
changeset 10398
ef1ea18994d5
parent 10397
f60464a5f7ea
child 10399
48014775ad31

Project Browser
- Added context menu entries to show the directory path of an item in an external file manager.
- Added an entry to the background context menu to show the project directory in an external file manager.

docs/changelog.md file | annotate | diff | comparison | revisions
src/eric7/Project/ProjectBaseBrowser.py file | annotate | diff | comparison | revisions
src/eric7/Project/ProjectBrowserModel.py file | annotate | diff | comparison | revisions
src/eric7/Project/ProjectFormsBrowser.py file | annotate | diff | comparison | revisions
src/eric7/Project/ProjectOthersBrowser.py file | annotate | diff | comparison | revisions
src/eric7/Project/ProjectResourcesBrowser.py file | annotate | diff | comparison | revisions
src/eric7/Project/ProjectSourcesBrowser.py file | annotate | diff | comparison | revisions
src/eric7/Project/ProjectTranslationsBrowser.py file | annotate | diff | comparison | revisions
src/eric7/UI/Browser.py file | annotate | diff | comparison | revisions
src/eric7/UI/BrowserModel.py file | annotate | diff | comparison | revisions
--- a/docs/changelog.md	Sun Dec 10 17:49:42 2023 +0100
+++ b/docs/changelog.md	Mon Dec 11 10:30:24 2023 +0100
@@ -15,7 +15,13 @@
       that do not support single line comments (e.g. HTML uses `<!--` and
       `-->`.
 - File Browser
-    - Added a menu entry to show the directory path of an entry in a file manager.
+    - Added context menu entries to show the directory path of an item in an
+      external file manager.
+- Project Browser
+    - Added context menu entries to show the directory path of an item in an
+      external file manager.
+    - Added an entry to the background context menu to show the project
+      directory in an external file manager.
 - Viewmanager
     - Added `Close Tabs to the Left` and `Close Tabs to the Right` context
       menu entries to the tabview view manager.
--- a/src/eric7/Project/ProjectBaseBrowser.py	Sun Dec 10 17:49:42 2023 +0100
+++ b/src/eric7/Project/ProjectBaseBrowser.py	Mon Dec 11 10:30:24 2023 +0100
@@ -24,6 +24,7 @@
 from eric7.EricGui.EricOverrideCursor import EricOverrideCursor
 from eric7.EricWidgets import EricMessageBox
 from eric7.EricWidgets.EricApplication import ericApp
+from eric7.SystemUtilities import FileSystemUtilities
 from eric7.UI.Browser import Browser
 from eric7.UI.BrowserModel import (
     BrowserClassItem,
@@ -228,7 +229,7 @@
         @param start start row number (integer)
         @param end end row number (integer)
         """
-        self._resizeColumns(parent)
+        self._resizeColumns()
 
     def _projectClosed(self):
         """
@@ -383,6 +384,31 @@
                 self._selectSingleItem(index)
                 self.scrollTo(index)
 
+    def _showProjectInFileManager(self):
+        """
+        Protected slot to show the path of the project in a file manager application.
+        """
+        if not self.project.isOpen():
+            EricMessageBox.warning(
+                self,
+                self.tr("Show in File Manager"),
+                self.tr("""A project must be opened first."""),
+            )
+            return
+
+        directory = self.project.getProjectPath()
+        ok = FileSystemUtilities.startfile(directory)
+
+        if not ok:
+            EricMessageBox.warning(
+                self,
+                self.tr("Show in File Manager"),
+                self.tr(
+                    "<p>The directory of the current project (<b>{0}</b>) cannot be"
+                    " shown in a file manager application.</p>"
+                ).format(directory),
+            )
+
     def _expandAllDirs(self):
         """
         Protected slot to handle the 'Expand all directories' menu action.
--- a/src/eric7/Project/ProjectBrowserModel.py	Sun Dec 10 17:49:42 2023 +0100
+++ b/src/eric7/Project/ProjectBrowserModel.py	Mon Dec 11 10:30:24 2023 +0100
@@ -15,13 +15,13 @@
 from PyQt6.QtGui import QColor
 
 from eric7 import Preferences
-from eric7.EricGui import EricPixmapCache
 from eric7.SystemUtilities import FileSystemUtilities
 from eric7.UI.BrowserModel import (
     BrowserDirectoryItem,
     BrowserFileItem,
     BrowserItem,
     BrowserModel,
+    BrowserSimpleDirectoryItem,
 )
 from eric7.Utilities import ModuleParser
 
@@ -100,7 +100,9 @@
         self._projectTypes.append(type_)
 
 
-class ProjectBrowserSimpleDirectoryItem(BrowserItem, ProjectBrowserItemMixin):
+class ProjectBrowserSimpleDirectoryItem(
+    BrowserSimpleDirectoryItem, ProjectBrowserItemMixin
+):
     """
     Class implementing the data structure for project browser simple directory
     items.
@@ -115,61 +117,10 @@
         @param text text to be displayed (string)
         @param path path of the directory (string)
         """
-        BrowserItem.__init__(self, parent, text)
+        BrowserSimpleDirectoryItem.__init__(self, parent, text, path=path)
         ProjectBrowserItemMixin.__init__(self, projectType)
 
-        self._dirName = path
-        if not os.path.isdir(self._dirName):
-            self._dirName = os.path.dirname(self._dirName)
-
         self.type_ = ProjectBrowserItemSimpleDirectory
-        if os.path.lexists(self._dirName) and os.path.islink(self._dirName):
-            self.symlink = True
-            self.icon = EricPixmapCache.getSymlinkIcon("dirClosed")
-        else:
-            self.icon = EricPixmapCache.getIcon("dirClosed")
-
-    def setName(self, dinfo, full=True):  # noqa: U100
-        """
-        Public method to set the directory name.
-
-        @param dinfo dinfo is the string for the directory (string)
-        @param full flag indicating full path name should be displayed (boolean)
-        """
-        self._dirName = os.path.abspath(dinfo)
-        self.itemData[0] = os.path.basename(self._dirName)
-
-    def dirName(self):
-        """
-        Public method returning the directory name.
-
-        @return directory name (string)
-        """
-        return self._dirName
-
-    def name(self):
-        """
-        Public method to return the name of the item.
-
-        @return name of the item (string)
-        """
-        return self._dirName
-
-    def lessThan(self, other, column, order):
-        """
-        Public method to check, if the item is less than the other one.
-
-        @param other reference to item to compare against (BrowserItem)
-        @param column column number to use for the comparison (integer)
-        @param order sort order (Qt.SortOrder) (for special sorting)
-        @return true, if this item is less than other (boolean)
-        """
-        if issubclass(other.__class__, BrowserFileItem) and Preferences.getUI(
-            "BrowsersListFoldersFirst"
-        ):
-            return order == Qt.SortOrder.AscendingOrder
-
-        return BrowserItem.lessThan(self, other, column, order)
 
 
 class ProjectBrowserDirectoryItem(BrowserDirectoryItem, ProjectBrowserItemMixin):
--- a/src/eric7/Project/ProjectFormsBrowser.py	Sun Dec 10 17:49:42 2023 +0100
+++ b/src/eric7/Project/ProjectFormsBrowser.py	Mon Dec 11 10:30:24 2023 +0100
@@ -269,6 +269,7 @@
         self.menu.addAction(self.tr("Add forms..."), self.__addFormFiles)
         self.menu.addAction(self.tr("Add forms directory..."), self.__addFormsDirectory)
         self.menu.addSeparator()
+        self.menu.addAction(self.tr("Show in File Manager"), self._showInFileManager)
         self.menu.addAction(self.tr("Copy Path to Clipboard"), self._copyToClipboard)
         self.menu.addSeparator()
         self.menu.addAction(self.tr("Expand all directories"), self._expandAllDirs)
@@ -304,6 +305,10 @@
             lambda: self.project.addDirectory("FORMS"),
         )
         self.backMenu.addSeparator()
+        self.backMenu.addAction(
+            self.tr("Show in File Manager"), self._showProjectInFileManager
+        )
+        self.backMenu.addSeparator()
         self.backMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs)
         self.backMenu.addAction(
             self.tr("Collapse all directories"), self._collapseAllDirs
@@ -391,6 +396,7 @@
             self.tr("Add forms directory..."), self.__addFormsDirectory
         )
         self.dirMenu.addSeparator()
+        self.dirMenu.addAction(self.tr("Show in File Manager"), self._showInFileManager)
         self.dirMenu.addAction(self.tr("Copy Path to Clipboard"), self._copyToClipboard)
         self.dirMenu.addSeparator()
         self.dirMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs)
--- a/src/eric7/Project/ProjectOthersBrowser.py	Sun Dec 10 17:49:42 2023 +0100
+++ b/src/eric7/Project/ProjectOthersBrowser.py	Mon Dec 11 10:30:24 2023 +0100
@@ -10,7 +10,7 @@
 
 import contextlib
 
-from PyQt6.QtCore import QModelIndex, QUrl, pyqtSignal
+from PyQt6.QtCore import QUrl, pyqtSignal
 from PyQt6.QtGui import QDesktopServices
 from PyQt6.QtWidgets import QDialog, QMenu
 
@@ -159,6 +159,7 @@
         self.menu.addSeparator()
         self.menu.addAction(self.tr("Refresh"), self.__refreshItem)
         self.menu.addSeparator()
+        self.menu.addAction(self.tr("Show in File Manager"), self._showInFileManager)
         self.menu.addAction(self.tr("Copy Path to Clipboard"), self._copyToClipboard)
         self.menu.addSeparator()
         self.menu.addAction(self.tr("Expand all directories"), self._expandAllDirs)
@@ -179,6 +180,7 @@
         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("Show in File Manager"), self._showInFileManager)
         self.dirMenu.addAction(self.tr("Copy Path to Clipboard"), self._copyToClipboard)
         self.dirMenu.addSeparator()
         self.dirMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs)
@@ -196,6 +198,10 @@
             self.tr("Add directory..."), lambda: self.project.addDirectory("OTHERS")
         )
         self.backMenu.addSeparator()
+        self.backMenu.addAction(
+            self.tr("Show in File Manager"), self._showProjectInFileManager
+        )
+        self.backMenu.addSeparator()
         self.backMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs)
         self.backMenu.addAction(
             self.tr("Collapse all directories"), self._collapseAllDirs
@@ -530,4 +536,4 @@
         else:
             name = ""
 
-        self._resizeColumns(QModelIndex())
+        self._resizeColumns()
--- a/src/eric7/Project/ProjectResourcesBrowser.py	Sun Dec 10 17:49:42 2023 +0100
+++ b/src/eric7/Project/ProjectResourcesBrowser.py	Mon Dec 11 10:30:24 2023 +0100
@@ -207,6 +207,7 @@
             self.tr("Add resources directory..."), self.__addResourcesDirectory
         )
         self.menu.addSeparator()
+        self.menu.addAction(self.tr("Show in File Manager"), self._showInFileManager)
         self.menu.addAction(self.tr("Copy Path to Clipboard"), self._copyToClipboard)
         self.menu.addSeparator()
         self.menu.addAction(self.tr("Expand all directories"), self._expandAllDirs)
@@ -256,6 +257,10 @@
             lambda: self.project.addDirectory("RESOURCES"),
         )
         self.backMenu.addSeparator()
+        self.backMenu.addAction(
+            self.tr("Show in File Manager"), self._showProjectInFileManager
+        )
+        self.backMenu.addSeparator()
         self.backMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs)
         self.backMenu.addAction(
             self.tr("Collapse all directories"), self._collapseAllDirs
@@ -342,6 +347,7 @@
             self.tr("Add resources directory..."), self.__addResourcesDirectory
         )
         self.dirMenu.addSeparator()
+        self.dirMenu.addAction(self.tr("Show in File Manager"), self._showInFileManager)
         self.dirMenu.addAction(self.tr("Copy Path to Clipboard"), self._copyToClipboard)
         self.dirMenu.addSeparator()
         self.dirMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs)
--- a/src/eric7/Project/ProjectSourcesBrowser.py	Sun Dec 10 17:49:42 2023 +0100
+++ b/src/eric7/Project/ProjectSourcesBrowser.py	Mon Dec 11 10:30:24 2023 +0100
@@ -323,6 +323,9 @@
         self.__startAct = self.sourceMenu.addMenu(self.__startMenu)
         self.sourceMenu.addSeparator()
         self.sourceMenu.addAction(
+            self.tr("Show in File Manager"), self._showInFileManager
+        )
+        self.sourceMenu.addAction(
             self.tr("Copy Path to Clipboard"), self._copyToClipboard
         )
         self.sourceMenu.addSeparator()
@@ -345,6 +348,8 @@
             self.tr("Add source directory..."), self.__addSourceDirectory
         )
         self.menu.addSeparator()
+        self.menu.addAction(self.tr("Show in File Manager"), self._showInFileManager)
+        self.menu.addSeparator()
         self.menu.addAction(self.tr("Expand all directories"), self._expandAllDirs)
         self.menu.addAction(self.tr("Collapse all directories"), self._collapseAllDirs)
         self.menu.addAction(self.tr("Collapse all files"), self._collapseAllFiles)
@@ -374,6 +379,10 @@
         )
         self.attributeMenu.addSeparator()
         self.attributeMenu.addAction(
+            self.tr("Show in File Manager"), self._showInFileManager
+        )
+        self.attributeMenu.addSeparator()
+        self.attributeMenu.addAction(
             self.tr("Expand all directories"), self._expandAllDirs
         )
         self.attributeMenu.addAction(
@@ -398,6 +407,10 @@
             lambda: self.project.addDirectory("SOURCES"),
         )
         self.backMenu.addSeparator()
+        self.backMenu.addAction(
+            self.tr("Show in File Manager"), self._showProjectInFileManager
+        )
+        self.backMenu.addSeparator()
         self.backMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs)
         self.backMenu.addAction(
             self.tr("Collapse all directories"), self._collapseAllDirs
@@ -442,6 +455,7 @@
         self.dirMenu.addMenu(self.checksMenu)
         self.dirMenu.addMenu(self.formattingMenu)
         self.dirMenu.addSeparator()
+        self.dirMenu.addAction(self.tr("Show in File Manager"), self._showInFileManager)
         self.dirMenu.addAction(self.tr("Copy Path to Clipboard"), self._copyToClipboard)
         self.dirMenu.addSeparator()
         self.dirMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs)
@@ -511,6 +525,10 @@
         act = self.sourceMenu.addMenu(self.graphicsMenu)
         self.sourceMenu.addSeparator()
         self.sourceMenu.addAction(
+            self.tr("Show in File Manager"), self._showInFileManager
+        )
+        self.sourceMenu.addSeparator()
+        self.sourceMenu.addAction(
             self.tr("Expand all directories"), self._expandAllDirs
         )
         self.sourceMenu.addAction(
@@ -526,6 +544,8 @@
             self.tr("Add source directory..."), self.__addSourceDirectory
         )
         self.menu.addSeparator()
+        self.menu.addAction(self.tr("Show in File Manager"), self._showInFileManager)
+        self.menu.addSeparator()
         self.menu.addAction(self.tr("Expand all directories"), self._expandAllDirs)
         self.menu.addAction(self.tr("Collapse all directories"), self._collapseAllDirs)
         self.menu.addAction(self.tr("Collapse all files"), self._collapseAllFiles)
@@ -550,6 +570,10 @@
         )
         self.attributeMenu.addSeparator()
         self.attributeMenu.addAction(
+            self.tr("Show in File Manager"), self._showInFileManager
+        )
+        self.attributeMenu.addSeparator()
+        self.attributeMenu.addAction(
             self.tr("Expand all directories"), self._expandAllDirs
         )
         self.attributeMenu.addAction(
@@ -571,6 +595,10 @@
             lambda: self.project.addDirectory("SOURCES"),
         )
         self.backMenu.addSeparator()
+        self.backMenu.addAction(
+            self.tr("Show in File Manager"), self._showProjectInFileManager
+        )
+        self.backMenu.addSeparator()
         self.backMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs)
         self.backMenu.addAction(
             self.tr("Collapse all directories"), self._collapseAllDirs
@@ -605,6 +633,8 @@
         self.dirMenu.addSeparator()
         act = self.dirMenu.addMenu(self.graphicsMenu)
         self.dirMenu.addSeparator()
+        self.dirMenu.addAction(self.tr("Show in File Manager"), self._showInFileManager)
+        self.dirMenu.addSeparator()
         self.dirMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs)
         self.dirMenu.addAction(
             self.tr("Collapse all directories"), self._collapseAllDirs
@@ -658,6 +688,9 @@
         self.sourceMenu.addMenu(self.checksMenu)
         self.sourceMenu.addSeparator()
         self.sourceMenu.addAction(
+            self.tr("Show in File Manager"), self._showInFileManager
+        )
+        self.sourceMenu.addAction(
             self.tr("Copy Path to Clipboard"), self._copyToClipboard
         )
         self.sourceMenu.addSeparator()
@@ -677,6 +710,8 @@
             self.tr("Add source directory..."), self.__addSourceDirectory
         )
         self.menu.addSeparator()
+        self.menu.addAction(self.tr("Show in File Manager"), self._showInFileManager)
+        self.menu.addSeparator()
         self.menu.addAction(self.tr("Expand all directories"), self._expandAllDirs)
         self.menu.addAction(self.tr("Collapse all directories"), self._collapseAllDirs)
         self.menu.addAction(self.tr("Collapse all files"), self._collapseAllFiles)
@@ -701,6 +736,10 @@
         )
         self.attributeMenu.addSeparator()
         self.attributeMenu.addAction(
+            self.tr("Show in File Manager"), self._showInFileManager
+        )
+        self.attributeMenu.addSeparator()
+        self.attributeMenu.addAction(
             self.tr("Expand all directories"), self._expandAllDirs
         )
         self.attributeMenu.addAction(
@@ -722,6 +761,10 @@
             lambda: self.project.addDirectory("SOURCES"),
         )
         self.backMenu.addSeparator()
+        self.backMenu.addAction(
+            self.tr("Show in File Manager"), self._showProjectInFileManager
+        )
+        self.backMenu.addSeparator()
         self.backMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs)
         self.backMenu.addAction(
             self.tr("Collapse all directories"), self._collapseAllDirs
@@ -760,6 +803,7 @@
         self.dirMenu.addSeparator()
         self.dirMenu.addMenu(self.checksMenu)
         self.dirMenu.addSeparator()
+        self.dirMenu.addAction(self.tr("Show in File Manager"), self._showInFileManager)
         self.dirMenu.addAction(self.tr("Copy Path to Clipboard"), self._copyToClipboard)
         self.dirMenu.addSeparator()
         self.dirMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs)
--- a/src/eric7/Project/ProjectTranslationsBrowser.py	Sun Dec 10 17:49:42 2023 +0100
+++ b/src/eric7/Project/ProjectTranslationsBrowser.py	Mon Dec 11 10:30:24 2023 +0100
@@ -312,6 +312,7 @@
             self.tr("Add translation files..."), self.__addTranslationFiles
         )
         self.menu.addSeparator()
+        self.menu.addAction(self.tr("Show in File Manager"), self._showInFileManager)
         self.menu.addAction(self.tr("Copy Path to Clipboard"), self._copyToClipboard)
         self.menu.addSeparator()
         self.menu.addAction(self.tr("Configure..."), self._configure)
@@ -387,6 +388,10 @@
             self.tr("Add translation files..."), self.__addTranslationFiles
         )
         self.backMenu.addSeparator()
+        self.backMenu.addAction(
+            self.tr("Show in File Manager"), self._showProjectInFileManager
+        )
+        self.backMenu.addSeparator()
         self.backMenu.addAction(self.tr("Configure..."), self._configure)
         self.backMenu.setEnabled(False)
 
@@ -568,6 +573,7 @@
             self.tr("Add translation files..."), self.__addTranslationFiles
         )
         self.dirMenu.addSeparator()
+        self.dirMenu.addAction(self.tr("Show in File Manager"), self._showInFileManager)
         self.dirMenu.addAction(self.tr("Copy Path to Clipboard"), self._copyToClipboard)
         self.dirMenu.addSeparator()
         self.dirMenu.addAction(self.tr("Configure..."), self._configure)
--- a/src/eric7/UI/Browser.py	Sun Dec 10 17:49:42 2023 +0100
+++ b/src/eric7/UI/Browser.py	Mon Dec 11 10:30:24 2023 +0100
@@ -50,6 +50,7 @@
     BrowserItemDirectory,
     BrowserMethodItem,
     BrowserModel,
+    BrowserSimpleDirectoryItem,
     BrowserSysPathItem,
 )
 from .BrowserSortFilterProxyModel import BrowserSortFilterProxyModel
@@ -250,10 +251,6 @@
         self.sourceMenu.addAction(
             QCoreApplication.translate("Browser", "Open"), self._openItem
         )
-        self.sourceMenu.addAction(
-            QCoreApplication.translate("Browser", "Show in File Manager"),
-            self._showInFileManager,
-        )
         self.testingAct = self.sourceMenu.addAction(
             QCoreApplication.translate("Browser", "Run Test..."), self.handleTesting
         )
@@ -268,6 +265,10 @@
         )
         self.sourceMenu.addSeparator()
         self.sourceMenu.addAction(
+            QCoreApplication.translate("Browser", "Show in File Manager"),
+            self._showInFileManager,
+        )
+        self.sourceMenu.addAction(
             QCoreApplication.translate("Browser", "Copy Path to Clipboard"),
             self._copyToClipboard,
         )
@@ -300,16 +301,16 @@
             QCoreApplication.translate("Browser", "Open in PDF Viewer"),
             self._openPdfViewer,
         )
-        self.menu.addAction(
-            QCoreApplication.translate("Browser", "Show in File Manager"),
-            self._showInFileManager,
-        )
         self.menu.addSeparator()
         self.mimeTypeAct = self.menu.addAction(
             QCoreApplication.translate("Browser", "Show Mime-Type"), self.__showMimeType
         )
         self.menu.addSeparator()
         self.menu.addAction(
+            QCoreApplication.translate("Browser", "Show in File Manager"),
+            self._showInFileManager,
+        )
+        self.menu.addAction(
             QCoreApplication.translate("Browser", "Copy Path to Clipboard"),
             self._copyToClipboard,
         )
@@ -349,11 +350,6 @@
         )
         self.dirMenu.addSeparator()
         self.dirMenu.addAction(
-            QCoreApplication.translate("Browser", "Show in File Manager"),
-            self._showInFileManager,
-        )
-        self.dirMenu.addSeparator()
-        self.dirMenu.addAction(
             QCoreApplication.translate("Browser", "Refresh directory"),
             self.__refreshDirectory,
         )
@@ -366,6 +362,11 @@
             QCoreApplication.translate("Browser", "Find && Replace in this directory"),
             self.__replaceInDirectory,
         )
+        self.dirMenu.addSeparator()
+        self.dirMenu.addAction(
+            QCoreApplication.translate("Browser", "Show in File Manager"),
+            self._showInFileManager,
+        )
         self.dirMenu.addAction(
             QCoreApplication.translate("Browser", "Copy Path to Clipboard"),
             self._copyToClipboard,
@@ -595,13 +596,15 @@
                 BrowserClassAttributeItem,
                 BrowserImportItem,
                 BrowserDirectoryItem,
+                BrowserSimpleDirectoryItem,
             ]
         )
         for itm in itmList:
-            if isinstance(itm, BrowserDirectoryItem):
-                directory = itm.dirName()
-            else:
-                directory = os.path.dirname(itm.fileName())
+            directory = (
+                itm.dirName()
+                if isinstance(itm, (BrowserDirectoryItem, BrowserSimpleDirectoryItem))
+                else os.path.dirname(itm.fileName())
+            )
             ok = FileSystemUtilities.startfile(directory)
 
             if not ok:
@@ -609,7 +612,7 @@
                     self,
                     self.tr("Show in File Manager"),
                     self.tr(
-                        "<p>The directory of the selected item (<b>{0}</b>could not be"
+                        "<p>The directory of the selected item (<b>{0}</b>) cannot be"
                         " shown in a file manager application.</p>"
                     ).format(directory),
                 )
--- a/src/eric7/UI/BrowserModel.py	Sun Dec 10 17:49:42 2023 +0100
+++ b/src/eric7/UI/BrowserModel.py	Mon Dec 11 10:30:24 2023 +0100
@@ -31,16 +31,17 @@
 from eric7.Utilities.ClassBrowsers import ClbrBaseClasses
 
 BrowserItemRoot = 0
-BrowserItemDirectory = 1
-BrowserItemSysPath = 2
-BrowserItemFile = 3
-BrowserItemClass = 4
-BrowserItemMethod = 5
-BrowserItemAttributes = 6
-BrowserItemAttribute = 7
-BrowserItemCoding = 8
-BrowserItemImports = 9
-BrowserItemImport = 10
+BrowserItemSimpleDirectory = 1
+BrowserItemDirectory = 2
+BrowserItemSysPath = 3
+BrowserItemFile = 4
+BrowserItemClass = 5
+BrowserItemMethod = 6
+BrowserItemAttributes = 7
+BrowserItemAttribute = 8
+BrowserItemCoding = 9
+BrowserItemImports = 10
+BrowserItemImport = 11
 
 
 class BrowserModel(QAbstractItemModel):
@@ -1049,6 +1050,76 @@
         return self.symlink
 
 
+class BrowserSimpleDirectoryItem(BrowserItem):
+    """
+    Class implementing the data structure for browser simple directory items.
+    """
+
+    def __init__(self, parent, text, path=""):
+        """
+        Constructor
+
+        @param parent parent item
+        @param text text to be displayed (string)
+        @param path path of the directory (string)
+        """
+        BrowserItem.__init__(self, parent, text)
+
+        self.type_ = BrowserItemSimpleDirectory
+
+        self._dirName = path
+        if not os.path.isdir(self._dirName):
+            self._dirName = os.path.dirname(self._dirName)
+
+        if os.path.lexists(self._dirName) and os.path.islink(self._dirName):
+            self.symlink = True
+            self.icon = EricPixmapCache.getSymlinkIcon("dirClosed")
+        else:
+            self.icon = EricPixmapCache.getIcon("dirClosed")
+
+    def setName(self, dinfo, full=True):  # noqa: U100
+        """
+        Public method to set the directory name.
+
+        @param dinfo dinfo is the string for the directory (string)
+        @param full flag indicating full path name should be displayed (boolean)
+        """
+        self._dirName = os.path.abspath(dinfo)
+        self.itemData[0] = os.path.basename(self._dirName)
+
+    def dirName(self):
+        """
+        Public method returning the directory name.
+
+        @return directory name (string)
+        """
+        return self._dirName
+
+    def name(self):
+        """
+        Public method to return the name of the item.
+
+        @return name of the item (string)
+        """
+        return self._dirName
+
+    def lessThan(self, other, column, order):
+        """
+        Public method to check, if the item is less than the other one.
+
+        @param other reference to item to compare against (BrowserItem)
+        @param column column number to use for the comparison (integer)
+        @param order sort order (Qt.SortOrder) (for special sorting)
+        @return true, if this item is less than other (boolean)
+        """
+        if issubclass(other.__class__, BrowserFileItem) and Preferences.getUI(
+            "BrowsersListFoldersFirst"
+        ):
+            return order == Qt.SortOrder.AscendingOrder
+
+        return BrowserItem.lessThan(self, other, column, order)
+
+
 class BrowserDirectoryItem(BrowserItem):
     """
     Class implementing the data structure for browser directory items.

eric ide

mercurial