Mon, 11 Dec 2023 10:30:24 +0100
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.
--- 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.