diff -r e9e7eca7efee -r bf71ee032bb4 src/eric7/Project/ProjectSourcesBrowser.py --- a/src/eric7/Project/ProjectSourcesBrowser.py Wed Jul 13 11:16:20 2022 +0200 +++ b/src/eric7/Project/ProjectSourcesBrowser.py Wed Jul 13 14:55:47 2022 +0200 @@ -17,13 +17,18 @@ from EricWidgets.EricApplication import ericApp from UI.BrowserModel import ( - BrowserFileItem, BrowserClassItem, BrowserMethodItem, - BrowserClassAttributeItem, BrowserImportItem + BrowserFileItem, + BrowserClassItem, + BrowserMethodItem, + BrowserClassAttributeItem, + BrowserImportItem, ) from .ProjectBrowserModel import ( - ProjectBrowserFileItem, ProjectBrowserSimpleDirectoryItem, - ProjectBrowserDirectoryItem, ProjectBrowserSourceType + ProjectBrowserFileItem, + ProjectBrowserSimpleDirectoryItem, + ProjectBrowserDirectoryItem, + ProjectBrowserSourceType, ) from .ProjectBaseBrowser import ProjectBaseBrowser @@ -36,37 +41,41 @@ class ProjectSourcesBrowser(ProjectBaseBrowser): """ A class used to display the Sources part of the project. - + @signal showMenu(str, QMenu) emitted when a menu is about to be shown. The name of the menu and a reference to the menu are given. """ + showMenu = pyqtSignal(str, QMenu) - + def __init__(self, project, parent=None): """ Constructor - + @param project reference to the project object @param parent parent widget of this browser (QWidget) """ - ProjectBaseBrowser.__init__(self, project, ProjectBrowserSourceType, - parent) - - self.selectedItemsFilter = [ProjectBrowserFileItem, - ProjectBrowserSimpleDirectoryItem] - - self.setWindowTitle(self.tr('Sources')) + ProjectBaseBrowser.__init__(self, project, ProjectBrowserSourceType, parent) + + self.selectedItemsFilter = [ + ProjectBrowserFileItem, + ProjectBrowserSimpleDirectoryItem, + ] + + self.setWindowTitle(self.tr("Sources")) - self.setWhatsThis(self.tr( - """<b>Project Sources Browser</b>""" - """<p>This allows to easily see all sources contained in the""" - """ current project. Several actions can be executed via the""" - """ context menu.</p>""" - )) - + self.setWhatsThis( + self.tr( + """<b>Project Sources Browser</b>""" + """<p>This allows to easily see all sources contained in the""" + """ current project. Several actions can be executed via the""" + """ context menu.</p>""" + ) + ) + project.prepareRepopulateItem.connect(self._prepareRepopulateItem) project.completeRepopulateItem.connect(self._completeRepopulateItem) - + self.codemetrics = None self.codecoverage = None self.profiledata = None @@ -75,7 +84,7 @@ self.packageDiagram = None self.applicationDiagram = None self.loadedDiagram = None - + def __closeAllWindows(self): """ Private method to close all project related windows. @@ -88,21 +97,21 @@ self.packageDiagram and self.packageDiagram.close() self.applicationDiagram and self.applicationDiagram.close() self.loadedDiagram and self.loadedDiagram.close() - + def _projectClosed(self): """ Protected slot to handle the projectClosed signal. """ self.__closeAllWindows() ProjectBaseBrowser._projectClosed(self) - + def _createPopupMenus(self): """ Protected overloaded method to generate the popup menu. """ ProjectBaseBrowser._createPopupMenus(self) self.sourceMenuActions = {} - + if self.project.isPythonProject(): self.__createPythonPopupMenus() elif self.project.isRubyProject(): @@ -112,91 +121,100 @@ else: # assign generic source menu self.mainMenu = self.sourceMenu - + def __createPythonPopupMenus(self): """ Private method to generate the popup menus for a Python project. """ - self.checksMenu = QMenu(self.tr('Check')) + self.checksMenu = QMenu(self.tr("Check")) self.checksMenu.aboutToShow.connect(self.__showContextMenuCheck) - + self.formattingMenu = QMenu(self.tr("Code Formatting")) self.formattingMenu.addAction( self.tr("Format Code"), - lambda: self.__performFormatWithBlack(BlackFormattingAction.Format) + lambda: self.__performFormatWithBlack(BlackFormattingAction.Format), ) self.formattingMenu.addAction( self.tr("Check Formatting"), - lambda: self.__performFormatWithBlack(BlackFormattingAction.Check) + lambda: self.__performFormatWithBlack(BlackFormattingAction.Check), ) self.formattingMenu.addAction( self.tr("Formatting Diff"), - lambda: self.__performFormatWithBlack(BlackFormattingAction.Diff) + lambda: self.__performFormatWithBlack(BlackFormattingAction.Diff), ) self.formattingMenu.aboutToShow.connect(self.__showContextMenuFormatting) - - self.menuShow = QMenu(self.tr('Show')) - self.menuShow.addAction( - self.tr('Code metrics...'), self.__showCodeMetrics) + + self.menuShow = QMenu(self.tr("Show")) + self.menuShow.addAction(self.tr("Code metrics..."), self.__showCodeMetrics) self.coverageMenuAction = self.menuShow.addAction( - self.tr('Code coverage...'), self.__showCodeCoverage) + self.tr("Code coverage..."), self.__showCodeCoverage + ) self.profileMenuAction = self.menuShow.addAction( - self.tr('Profile data...'), self.__showProfileData) + self.tr("Profile data..."), self.__showProfileData + ) self.menuShow.aboutToShow.connect(self.__showContextMenuShow) - - self.graphicsMenu = QMenu(self.tr('Diagrams')) + + self.graphicsMenu = QMenu(self.tr("Diagrams")) self.classDiagramAction = self.graphicsMenu.addAction( - self.tr("Class Diagram..."), self.__showClassDiagram) + self.tr("Class Diagram..."), self.__showClassDiagram + ) self.graphicsMenu.addAction( - self.tr("Package Diagram..."), self.__showPackageDiagram) + self.tr("Package Diagram..."), self.__showPackageDiagram + ) self.importsDiagramAction = self.graphicsMenu.addAction( - self.tr("Imports Diagram..."), self.__showImportsDiagram) + self.tr("Imports Diagram..."), self.__showImportsDiagram + ) self.graphicsMenu.addAction( - self.tr("Application Diagram..."), - self.__showApplicationDiagram) + self.tr("Application Diagram..."), self.__showApplicationDiagram + ) self.graphicsMenu.addSeparator() self.graphicsMenu.addAction( UI.PixmapCache.getIcon("open"), - self.tr("Load Diagram..."), self.__loadDiagram) + self.tr("Load Diagram..."), + self.__loadDiagram, + ) self.graphicsMenu.aboutToShow.connect(self.__showContextMenuGraphics) - + self.__startMenu = QMenu(self.tr("Start"), self) self.__startMenu.addAction( UI.PixmapCache.getIcon("runScript"), - self.tr('Run Script...'), - self.__contextMenuRunScript) + self.tr("Run Script..."), + self.__contextMenuRunScript, + ) self.__startMenu.addAction( UI.PixmapCache.getIcon("debugScript"), - self.tr('Debug Script...'), - self.__contextMenuDebugScript) + self.tr("Debug Script..."), + self.__contextMenuDebugScript, + ) self.__startMenu.addAction( UI.PixmapCache.getIcon("profileScript"), - self.tr('Profile Script...'), - self.__contextMenuProfileScript) + self.tr("Profile Script..."), + self.__contextMenuProfileScript, + ) self.__startMenu.addAction( UI.PixmapCache.getIcon("coverageScript"), - self.tr('Coverage run of Script...'), - self.__contextMenuCoverageScript) - + self.tr("Coverage run of Script..."), + self.__contextMenuCoverageScript, + ) + self.testingAction = self.sourceMenu.addAction( - self.tr('Run tests...'), self.handleTesting) + self.tr("Run tests..."), self.handleTesting + ) self.sourceMenu.addSeparator() - act = self.sourceMenu.addAction( - self.tr('Rename file'), self._renameFile) + act = self.sourceMenu.addAction(self.tr("Rename file"), self._renameFile) self.menuActions.append(act) act = self.sourceMenu.addAction( - self.tr('Remove from project'), self._removeFile) + self.tr("Remove from project"), self._removeFile + ) self.menuActions.append(act) - act = self.sourceMenu.addAction( - self.tr('Delete'), self.__deleteFile) + act = self.sourceMenu.addAction(self.tr("Delete"), self.__deleteFile) self.menuActions.append(act) self.sourceMenu.addSeparator() - self.sourceMenu.addAction( - self.tr('New package...'), self.__addNewPackage) + self.sourceMenu.addAction(self.tr("New package..."), self.__addNewPackage) + self.sourceMenu.addAction(self.tr("Add source files..."), self.__addSourceFiles) self.sourceMenu.addAction( - self.tr('Add source files...'), self.__addSourceFiles) - self.sourceMenu.addAction( - self.tr('Add source directory...'), self.__addSourceDirectory) + self.tr("Add source directory..."), self.__addSourceDirectory + ) self.sourceMenu.addSeparator() self.sourceMenu.addMenu(self.graphicsMenu) self.sourceMenu.addMenu(self.checksMenu) @@ -206,444 +224,461 @@ self.__startAct = self.sourceMenu.addMenu(self.__startMenu) self.sourceMenu.addSeparator() self.sourceMenu.addAction( - self.tr('Copy Path to Clipboard'), self._copyToClipboard) + self.tr("Copy Path to Clipboard"), self._copyToClipboard + ) self.sourceMenu.addSeparator() self.sourceMenu.addAction( - self.tr('Expand all directories'), self._expandAllDirs) + self.tr("Expand all directories"), self._expandAllDirs + ) self.sourceMenu.addAction( - self.tr('Collapse all directories'), self._collapseAllDirs) + self.tr("Collapse all directories"), self._collapseAllDirs + ) self.sourceMenu.addSeparator() - self.sourceMenu.addAction(self.tr('Configure...'), self._configure) + self.sourceMenu.addAction(self.tr("Configure..."), self._configure) self.menu.addSeparator() - self.menu.addAction( - self.tr('New package...'), self.__addNewPackage) + self.menu.addAction(self.tr("New package..."), self.__addNewPackage) + self.menu.addAction(self.tr("Add source files..."), self.__addSourceFiles) self.menu.addAction( - self.tr('Add source files...'), self.__addSourceFiles) - self.menu.addAction( - self.tr('Add source directory...'), self.__addSourceDirectory) + self.tr("Add source directory..."), self.__addSourceDirectory + ) 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("Expand all directories"), self._expandAllDirs) + self.menu.addAction(self.tr("Collapse all directories"), self._collapseAllDirs) self.menu.addSeparator() - self.menu.addAction(self.tr('Configure...'), self._configure) + self.menu.addAction(self.tr("Configure..."), self._configure) # create the attribute menu self.gotoMenu = QMenu(self.tr("Goto"), self) self.gotoMenu.aboutToShow.connect(self._showGotoMenu) self.gotoMenu.triggered.connect(self._gotoAttribute) - + self.attributeMenu = QMenu(self) self.attributeMenu.addMenu(self.gotoMenu) self.attributeMenu.addSeparator() - self.attributeMenu.addAction( - self.tr('New package...'), self.__addNewPackage) - self.attributeMenu.addAction( - self.tr('Add source files...'), self.project.addSourceFiles) + self.attributeMenu.addAction(self.tr("New package..."), self.__addNewPackage) self.attributeMenu.addAction( - self.tr('Add source directory...'), self.project.addSourceDir) - self.attributeMenu.addSeparator() + self.tr("Add source files..."), self.project.addSourceFiles + ) self.attributeMenu.addAction( - self.tr('Expand all directories'), self._expandAllDirs) - self.attributeMenu.addAction( - self.tr('Collapse all directories'), self._collapseAllDirs) + self.tr("Add source directory..."), self.project.addSourceDir + ) self.attributeMenu.addSeparator() self.attributeMenu.addAction( - self.tr('Configure...'), self._configure) - + self.tr("Expand all directories"), self._expandAllDirs + ) + self.attributeMenu.addAction( + self.tr("Collapse all directories"), self._collapseAllDirs + ) + self.attributeMenu.addSeparator() + self.attributeMenu.addAction(self.tr("Configure..."), self._configure) + self.backMenu = QMenu(self) + self.backMenu.addAction(self.tr("New package..."), self.__addNewPackage) self.backMenu.addAction( - self.tr('New package...'), self.__addNewPackage) - self.backMenu.addAction( - self.tr('Add source files...'), self.project.addSourceFiles) - self.backMenu.addAction( - self.tr('Add source directory...'), self.project.addSourceDir) - self.backMenu.addSeparator() + self.tr("Add source files..."), self.project.addSourceFiles + ) self.backMenu.addAction( - self.tr('Expand all directories'), self._expandAllDirs) + self.tr("Add source directory..."), self.project.addSourceDir + ) + self.backMenu.addSeparator() + self.backMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs) self.backMenu.addAction( - self.tr('Collapse all directories'), self._collapseAllDirs) + self.tr("Collapse all directories"), self._collapseAllDirs + ) self.backMenu.addSeparator() - self.backMenu.addAction(self.tr('Configure...'), self._configure) + self.backMenu.addAction(self.tr("Configure..."), self._configure) self.backMenu.setEnabled(False) - + self.multiMenu.addSeparator() - act = self.multiMenu.addAction( - self.tr('Remove from project'), self._removeFile) + act = self.multiMenu.addAction(self.tr("Remove from project"), self._removeFile) self.multiMenuActions.append(act) - act = self.multiMenu.addAction( - self.tr('Delete'), self.__deleteFile) + act = self.multiMenu.addAction(self.tr("Delete"), self.__deleteFile) self.multiMenuActions.append(act) self.multiMenu.addSeparator() self.multiMenu.addMenu(self.checksMenu) self.multiMenu.addMenu(self.formattingMenu) self.multiMenu.addSeparator() + self.multiMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs) self.multiMenu.addAction( - self.tr('Expand all directories'), self._expandAllDirs) - self.multiMenu.addAction( - self.tr('Collapse all directories'), self._collapseAllDirs) + self.tr("Collapse all directories"), self._collapseAllDirs + ) self.multiMenu.addSeparator() - self.multiMenu.addAction(self.tr('Configure...'), self._configure) - + self.multiMenu.addAction(self.tr("Configure..."), self._configure) + self.dirMenu = QMenu(self) - act = self.dirMenu.addAction( - self.tr('Remove from project'), self._removeDir) + act = self.dirMenu.addAction(self.tr("Remove from project"), self._removeDir) self.dirMenuActions.append(act) - act = self.dirMenu.addAction( - self.tr('Delete'), self._deleteDirectory) + act = self.dirMenu.addAction(self.tr("Delete"), self._deleteDirectory) self.dirMenuActions.append(act) self.dirMenu.addSeparator() - self.dirMenu.addAction( - self.tr('New package...'), self.__addNewPackage) + self.dirMenu.addAction(self.tr("New package..."), self.__addNewPackage) + self.dirMenu.addAction(self.tr("Add source files..."), self.__addSourceFiles) self.dirMenu.addAction( - self.tr('Add source files...'), self.__addSourceFiles) - self.dirMenu.addAction( - self.tr('Add source directory...'), self.__addSourceDirectory) + self.tr("Add source directory..."), self.__addSourceDirectory + ) self.dirMenu.addSeparator() act = self.dirMenu.addMenu(self.graphicsMenu) self.dirMenu.addMenu(self.checksMenu) self.dirMenu.addMenu(self.formattingMenu) self.dirMenu.addSeparator() - self.dirMenu.addAction( - self.tr('Copy Path to Clipboard'), self._copyToClipboard) + 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('Expand all directories'), self._expandAllDirs) - self.dirMenu.addAction( - self.tr('Collapse all directories'), self._collapseAllDirs) + self.tr("Collapse all directories"), self._collapseAllDirs + ) self.dirMenu.addSeparator() - self.dirMenu.addAction(self.tr('Configure...'), self._configure) - + self.dirMenu.addAction(self.tr("Configure..."), self._configure) + self.dirMultiMenu = QMenu(self) self.dirMultiMenu.addAction( - self.tr('Expand all directories'), self._expandAllDirs) + self.tr("Expand all directories"), self._expandAllDirs + ) self.dirMultiMenu.addAction( - self.tr('Collapse all directories'), self._collapseAllDirs) + self.tr("Collapse all directories"), self._collapseAllDirs + ) self.dirMultiMenu.addSeparator() - self.dirMultiMenu.addAction( - self.tr('Configure...'), self._configure) - + self.dirMultiMenu.addAction(self.tr("Configure..."), self._configure) + self.sourceMenu.aboutToShow.connect(self.__showContextMenu) self.multiMenu.aboutToShow.connect(self.__showContextMenuMulti) self.dirMenu.aboutToShow.connect(self.__showContextMenuDir) self.dirMultiMenu.aboutToShow.connect(self.__showContextMenuDirMulti) self.backMenu.aboutToShow.connect(self.__showContextMenuBack) self.mainMenu = self.sourceMenu - + def __createRubyPopupMenus(self): """ Private method to generate the popup menus for a Ruby project. """ - self.graphicsMenu = QMenu(self.tr('Diagrams')) + self.graphicsMenu = QMenu(self.tr("Diagrams")) self.classDiagramAction = self.graphicsMenu.addAction( - self.tr("Class Diagram..."), self.__showClassDiagram) + self.tr("Class Diagram..."), self.__showClassDiagram + ) self.graphicsMenu.addAction( - self.tr("Package Diagram..."), self.__showPackageDiagram) + self.tr("Package Diagram..."), self.__showPackageDiagram + ) self.graphicsMenu.addAction( - self.tr("Application Diagram..."), - self.__showApplicationDiagram) + self.tr("Application Diagram..."), self.__showApplicationDiagram + ) self.graphicsMenu.addSeparator() self.graphicsMenu.addAction( UI.PixmapCache.getIcon("fileOpen"), - self.tr("Load Diagram..."), self.__loadDiagram) - + self.tr("Load Diagram..."), + self.__loadDiagram, + ) + self.sourceMenu.addSeparator() - act = self.sourceMenu.addAction( - self.tr('Rename file'), self._renameFile) + act = self.sourceMenu.addAction(self.tr("Rename file"), self._renameFile) self.menuActions.append(act) act = self.sourceMenu.addAction( - self.tr('Remove from project'), self._removeFile) + self.tr("Remove from project"), self._removeFile + ) self.menuActions.append(act) - act = self.sourceMenu.addAction( - self.tr('Delete'), self.__deleteFile) + act = self.sourceMenu.addAction(self.tr("Delete"), self.__deleteFile) self.menuActions.append(act) self.sourceMenu.addSeparator() + self.sourceMenu.addAction(self.tr("Add source files..."), self.__addSourceFiles) self.sourceMenu.addAction( - self.tr('Add source files...'), self.__addSourceFiles) - self.sourceMenu.addAction( - self.tr('Add source directory...'), self.__addSourceDirectory) + self.tr("Add source directory..."), self.__addSourceDirectory + ) self.sourceMenu.addSeparator() act = self.sourceMenu.addMenu(self.graphicsMenu) self.sourceMenu.addSeparator() self.sourceMenu.addAction( - self.tr('Expand all directories'), self._expandAllDirs) + self.tr("Expand all directories"), self._expandAllDirs + ) self.sourceMenu.addAction( - self.tr('Collapse all directories'), self._collapseAllDirs) + self.tr("Collapse all directories"), self._collapseAllDirs + ) self.sourceMenu.addSeparator() - self.sourceMenu.addAction(self.tr('Configure...'), self._configure) + self.sourceMenu.addAction(self.tr("Configure..."), self._configure) self.menu.addSeparator() - self.menu.addAction( - self.tr('Add source files...'), self.__addSourceFiles) - self.menu.addAction( - self.tr('Add source directory...'), self.__addSourceDirectory) - self.menu.addSeparator() + self.menu.addAction(self.tr("Add source files..."), self.__addSourceFiles) self.menu.addAction( - self.tr('Expand all directories'), self._expandAllDirs) - self.menu.addAction( - self.tr('Collapse all directories'), self._collapseAllDirs) + self.tr("Add source directory..."), self.__addSourceDirectory + ) self.menu.addSeparator() - self.menu.addAction(self.tr('Configure...'), self._configure) + self.menu.addAction(self.tr("Expand all directories"), self._expandAllDirs) + self.menu.addAction(self.tr("Collapse all directories"), self._collapseAllDirs) + self.menu.addSeparator() + self.menu.addAction(self.tr("Configure..."), self._configure) # create the attribute menu self.gotoMenu = QMenu(self.tr("Goto"), self) self.gotoMenu.aboutToShow.connect(self._showGotoMenu) self.gotoMenu.triggered.connect(self._gotoAttribute) - + self.attributeMenu = QMenu(self) self.attributeMenu.addMenu(self.gotoMenu) self.attributeMenu.addSeparator() self.attributeMenu.addAction( - self.tr('Add source files...'), self.project.addSourceFiles) + self.tr("Add source files..."), self.project.addSourceFiles + ) self.attributeMenu.addAction( - self.tr('Add source directory...'), self.project.addSourceDir) - self.attributeMenu.addSeparator() - self.attributeMenu.addAction( - self.tr('Expand all directories'), self._expandAllDirs) - self.attributeMenu.addAction( - self.tr('Collapse all directories'), self._collapseAllDirs) + self.tr("Add source directory..."), self.project.addSourceDir + ) self.attributeMenu.addSeparator() self.attributeMenu.addAction( - self.tr('Configure...'), self._configure) - + self.tr("Expand all directories"), self._expandAllDirs + ) + self.attributeMenu.addAction( + self.tr("Collapse all directories"), self._collapseAllDirs + ) + self.attributeMenu.addSeparator() + self.attributeMenu.addAction(self.tr("Configure..."), self._configure) + self.backMenu = QMenu(self) self.backMenu.addAction( - self.tr('Add source files...'), self.project.addSourceFiles) + self.tr("Add source files..."), self.project.addSourceFiles + ) self.backMenu.addAction( - self.tr('Add source directory...'), self.project.addSourceDir) + self.tr("Add source directory..."), self.project.addSourceDir + ) self.backMenu.addSeparator() + self.backMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs) self.backMenu.addAction( - self.tr('Expand all directories'), self._expandAllDirs) - self.backMenu.addAction( - self.tr('Collapse all directories'), self._collapseAllDirs) + self.tr("Collapse all directories"), self._collapseAllDirs + ) self.backMenu.setEnabled(False) self.backMenu.addSeparator() - self.backMenu.addAction(self.tr('Configure...'), self._configure) - + self.backMenu.addAction(self.tr("Configure..."), self._configure) + self.multiMenu.addSeparator() - act = self.multiMenu.addAction( - self.tr('Remove from project'), self._removeFile) + act = self.multiMenu.addAction(self.tr("Remove from project"), self._removeFile) self.multiMenuActions.append(act) - act = self.multiMenu.addAction( - self.tr('Delete'), self.__deleteFile) + act = self.multiMenu.addAction(self.tr("Delete"), self.__deleteFile) self.multiMenuActions.append(act) self.multiMenu.addSeparator() + self.multiMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs) self.multiMenu.addAction( - self.tr('Expand all directories'), self._expandAllDirs) - self.multiMenu.addAction( - self.tr('Collapse all directories'), self._collapseAllDirs) + self.tr("Collapse all directories"), self._collapseAllDirs + ) self.multiMenu.addSeparator() - self.multiMenu.addAction(self.tr('Configure...'), self._configure) - + self.multiMenu.addAction(self.tr("Configure..."), self._configure) + self.dirMenu = QMenu(self) - act = self.dirMenu.addAction( - self.tr('Remove from project'), self._removeDir) + act = self.dirMenu.addAction(self.tr("Remove from project"), self._removeDir) self.dirMenuActions.append(act) self.dirMenu.addSeparator() + self.dirMenu.addAction(self.tr("Add source files..."), self.__addSourceFiles) self.dirMenu.addAction( - self.tr('Add source files...'), self.__addSourceFiles) - self.dirMenu.addAction( - self.tr('Add source directory...'), self.__addSourceDirectory) + self.tr("Add source directory..."), self.__addSourceDirectory + ) self.dirMenu.addSeparator() act = self.dirMenu.addMenu(self.graphicsMenu) self.dirMenu.addSeparator() - self.dirMenu.addAction( - self.tr('Expand all directories'), self._expandAllDirs) + self.dirMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs) self.dirMenu.addAction( - self.tr('Collapse all directories'), self._collapseAllDirs) + self.tr("Collapse all directories"), self._collapseAllDirs + ) self.dirMenu.addSeparator() - self.dirMenu.addAction(self.tr('Configure...'), self._configure) - + self.dirMenu.addAction(self.tr("Configure..."), self._configure) + self.dirMultiMenu = QMenu(self) self.dirMultiMenu.addAction( - self.tr('Expand all directories'), self._expandAllDirs) + self.tr("Expand all directories"), self._expandAllDirs + ) self.dirMultiMenu.addAction( - self.tr('Collapse all directories'), self._collapseAllDirs) + self.tr("Collapse all directories"), self._collapseAllDirs + ) self.dirMultiMenu.addSeparator() - self.dirMultiMenu.addAction( - self.tr('Configure...'), self._configure) - + self.dirMultiMenu.addAction(self.tr("Configure..."), self._configure) + self.sourceMenu.aboutToShow.connect(self.__showContextMenu) self.multiMenu.aboutToShow.connect(self.__showContextMenuMulti) self.dirMenu.aboutToShow.connect(self.__showContextMenuDir) self.dirMultiMenu.aboutToShow.connect(self.__showContextMenuDirMulti) self.backMenu.aboutToShow.connect(self.__showContextMenuBack) self.mainMenu = self.sourceMenu - + def __createJavaScriptPopupMenus(self): """ Private method to generate the popup menus for a Python project. """ - self.checksMenu = QMenu(self.tr('Check')) + self.checksMenu = QMenu(self.tr("Check")) self.checksMenu.aboutToShow.connect(self.__showContextMenuCheck) - + self.sourceMenu.addSeparator() - act = self.sourceMenu.addAction( - self.tr('Rename file'), self._renameFile) + act = self.sourceMenu.addAction(self.tr("Rename file"), self._renameFile) self.menuActions.append(act) act = self.sourceMenu.addAction( - self.tr('Remove from project'), self._removeFile) + self.tr("Remove from project"), self._removeFile + ) self.menuActions.append(act) - act = self.sourceMenu.addAction( - self.tr('Delete'), self.__deleteFile) + act = self.sourceMenu.addAction(self.tr("Delete"), self.__deleteFile) self.menuActions.append(act) self.sourceMenu.addSeparator() + self.sourceMenu.addAction(self.tr("Add source files..."), self.__addSourceFiles) self.sourceMenu.addAction( - self.tr('Add source files...'), self.__addSourceFiles) - self.sourceMenu.addAction( - self.tr('Add source directory...'), self.__addSourceDirectory) + self.tr("Add source directory..."), self.__addSourceDirectory + ) self.sourceMenu.addSeparator() self.sourceMenu.addMenu(self.checksMenu) self.sourceMenu.addSeparator() self.sourceMenu.addAction( - self.tr('Copy Path to Clipboard'), self._copyToClipboard) + self.tr("Copy Path to Clipboard"), self._copyToClipboard + ) self.sourceMenu.addSeparator() self.sourceMenu.addAction( - self.tr('Expand all directories'), self._expandAllDirs) + self.tr("Expand all directories"), self._expandAllDirs + ) self.sourceMenu.addAction( - self.tr('Collapse all directories'), self._collapseAllDirs) + self.tr("Collapse all directories"), self._collapseAllDirs + ) self.sourceMenu.addSeparator() - self.sourceMenu.addAction(self.tr('Configure...'), self._configure) + self.sourceMenu.addAction(self.tr("Configure..."), self._configure) self.menu.addSeparator() - self.menu.addAction( - self.tr('Add source files...'), self.__addSourceFiles) - self.menu.addAction( - self.tr('Add source directory...'), self.__addSourceDirectory) - self.menu.addSeparator() + self.menu.addAction(self.tr("Add source files..."), self.__addSourceFiles) self.menu.addAction( - self.tr('Expand all directories'), self._expandAllDirs) - self.menu.addAction( - self.tr('Collapse all directories'), self._collapseAllDirs) + self.tr("Add source directory..."), self.__addSourceDirectory + ) self.menu.addSeparator() - self.menu.addAction(self.tr('Configure...'), self._configure) + self.menu.addAction(self.tr("Expand all directories"), self._expandAllDirs) + self.menu.addAction(self.tr("Collapse all directories"), self._collapseAllDirs) + self.menu.addSeparator() + self.menu.addAction(self.tr("Configure..."), self._configure) # create the attribute menu self.gotoMenu = QMenu(self.tr("Goto"), self) self.gotoMenu.aboutToShow.connect(self._showGotoMenu) self.gotoMenu.triggered.connect(self._gotoAttribute) - + self.attributeMenu = QMenu(self) self.attributeMenu.addMenu(self.gotoMenu) self.attributeMenu.addSeparator() self.attributeMenu.addAction( - self.tr('Add source files...'), self.project.addSourceFiles) + self.tr("Add source files..."), self.project.addSourceFiles + ) self.attributeMenu.addAction( - self.tr('Add source directory...'), self.project.addSourceDir) + self.tr("Add source directory..."), self.project.addSourceDir + ) self.attributeMenu.addSeparator() self.attributeMenu.addAction( - self.tr('Expand all directories'), self._expandAllDirs) + self.tr("Expand all directories"), self._expandAllDirs + ) self.attributeMenu.addAction( - self.tr('Collapse all directories'), self._collapseAllDirs) + self.tr("Collapse all directories"), self._collapseAllDirs + ) self.attributeMenu.addSeparator() - self.attributeMenu.addAction( - self.tr('Configure...'), self._configure) - + self.attributeMenu.addAction(self.tr("Configure..."), self._configure) + self.backMenu = QMenu(self) self.backMenu.addAction( - self.tr('Add source files...'), self.project.addSourceFiles) + self.tr("Add source files..."), self.project.addSourceFiles + ) self.backMenu.addAction( - self.tr('Add source directory...'), self.project.addSourceDir) - self.backMenu.addSeparator() - self.backMenu.addAction( - self.tr('Expand all directories'), self._expandAllDirs) - self.backMenu.addAction( - self.tr('Collapse all directories'), self._collapseAllDirs) + self.tr("Add source directory..."), self.project.addSourceDir + ) self.backMenu.addSeparator() - self.backMenu.addAction(self.tr('Configure...'), self._configure) + self.backMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs) + self.backMenu.addAction( + self.tr("Collapse all directories"), self._collapseAllDirs + ) + self.backMenu.addSeparator() + self.backMenu.addAction(self.tr("Configure..."), self._configure) self.backMenu.setEnabled(False) - + self.multiMenu.addSeparator() - act = self.multiMenu.addAction( - self.tr('Remove from project'), self._removeFile) + act = self.multiMenu.addAction(self.tr("Remove from project"), self._removeFile) self.multiMenuActions.append(act) - act = self.multiMenu.addAction( - self.tr('Delete'), self.__deleteFile) + act = self.multiMenu.addAction(self.tr("Delete"), self.__deleteFile) self.multiMenuActions.append(act) self.multiMenu.addSeparator() self.multiMenu.addMenu(self.checksMenu) self.multiMenu.addSeparator() + self.multiMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs) self.multiMenu.addAction( - self.tr('Expand all directories'), self._expandAllDirs) - self.multiMenu.addAction( - self.tr('Collapse all directories'), self._collapseAllDirs) + self.tr("Collapse all directories"), self._collapseAllDirs + ) self.multiMenu.addSeparator() - self.multiMenu.addAction(self.tr('Configure...'), self._configure) - + self.multiMenu.addAction(self.tr("Configure..."), self._configure) + self.dirMenu = QMenu(self) - act = self.dirMenu.addAction( - self.tr('Remove from project'), self._removeDir) + act = self.dirMenu.addAction(self.tr("Remove from project"), self._removeDir) self.dirMenuActions.append(act) - act = self.dirMenu.addAction( - self.tr('Delete'), self._deleteDirectory) + act = self.dirMenu.addAction(self.tr("Delete"), self._deleteDirectory) self.dirMenuActions.append(act) self.dirMenu.addSeparator() + self.dirMenu.addAction(self.tr("Add source files..."), self.__addSourceFiles) self.dirMenu.addAction( - self.tr('Add source files...'), self.__addSourceFiles) - self.dirMenu.addAction( - self.tr('Add source directory...'), self.__addSourceDirectory) + self.tr("Add source directory..."), self.__addSourceDirectory + ) self.dirMenu.addSeparator() self.dirMenu.addMenu(self.checksMenu) self.dirMenu.addSeparator() - self.dirMenu.addAction( - self.tr('Copy Path to Clipboard'), self._copyToClipboard) + 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('Expand all directories'), self._expandAllDirs) - self.dirMenu.addAction( - self.tr('Collapse all directories'), self._collapseAllDirs) + self.tr("Collapse all directories"), self._collapseAllDirs + ) self.dirMenu.addSeparator() - self.dirMenu.addAction(self.tr('Configure...'), self._configure) - + self.dirMenu.addAction(self.tr("Configure..."), self._configure) + self.dirMultiMenu = QMenu(self) self.dirMultiMenu.addAction( - self.tr('Expand all directories'), self._expandAllDirs) + self.tr("Expand all directories"), self._expandAllDirs + ) self.dirMultiMenu.addAction( - self.tr('Collapse all directories'), self._collapseAllDirs) + self.tr("Collapse all directories"), self._collapseAllDirs + ) self.dirMultiMenu.addSeparator() - self.dirMultiMenu.addAction( - self.tr('Configure...'), self._configure) - + self.dirMultiMenu.addAction(self.tr("Configure..."), self._configure) + self.sourceMenu.aboutToShow.connect(self.__showContextMenu) self.multiMenu.aboutToShow.connect(self.__showContextMenuMulti) self.dirMenu.aboutToShow.connect(self.__showContextMenuDir) self.dirMultiMenu.aboutToShow.connect(self.__showContextMenuDirMulti) self.backMenu.aboutToShow.connect(self.__showContextMenuBack) self.mainMenu = self.sourceMenu - + def _contextMenuRequested(self, coord): """ Protected slot to show the context menu. - + @param coord the position of the mouse pointer (QPoint) """ if not self.project.isOpen(): return - + with contextlib.suppress(Exception): categories = self.getSelectedItemsCountCategorized( - [ProjectBrowserFileItem, BrowserClassItem, - BrowserMethodItem, ProjectBrowserSimpleDirectoryItem, - BrowserClassAttributeItem, BrowserImportItem]) + [ + ProjectBrowserFileItem, + BrowserClassItem, + BrowserMethodItem, + ProjectBrowserSimpleDirectoryItem, + BrowserClassAttributeItem, + BrowserImportItem, + ] + ) cnt = categories["sum"] if cnt <= 1: index = self.indexAt(coord) if index.isValid(): self._selectSingleItem(index) categories = self.getSelectedItemsCountCategorized( - [ProjectBrowserFileItem, BrowserClassItem, - BrowserMethodItem, ProjectBrowserSimpleDirectoryItem, - BrowserClassAttributeItem, BrowserImportItem]) + [ + ProjectBrowserFileItem, + BrowserClassItem, + BrowserMethodItem, + ProjectBrowserSimpleDirectoryItem, + BrowserClassAttributeItem, + BrowserImportItem, + ] + ) cnt = categories["sum"] - + bfcnt = categories[str(ProjectBrowserFileItem)] cmcnt = ( - categories[str(BrowserClassItem)] + - categories[str(BrowserMethodItem)] + - categories[str(BrowserClassAttributeItem)] + - categories[str(BrowserImportItem)] + categories[str(BrowserClassItem)] + + categories[str(BrowserMethodItem)] + + categories[str(BrowserClassAttributeItem)] + + categories[str(BrowserImportItem)] ) sdcnt = categories[str(ProjectBrowserSimpleDirectoryItem)] if cnt > 1 and cnt == bfcnt: @@ -658,32 +693,28 @@ if isinstance(itm, ProjectBrowserFileItem): fn = itm.fileName() if self.project.isPythonProject(): - if fn.endswith('.ptl'): + if fn.endswith(".ptl"): for act in self.sourceMenuActions.values(): act.setEnabled(False) self.classDiagramAction.setEnabled(True) self.importsDiagramAction.setEnabled(True) self.testingAction.setEnabled(False) - self.checksMenu.menuAction().setEnabled( - False) - elif fn.endswith('.rb'): + self.checksMenu.menuAction().setEnabled(False) + elif fn.endswith(".rb"): # entry for mixed mode programs for act in self.sourceMenuActions.values(): act.setEnabled(False) self.classDiagramAction.setEnabled(True) self.importsDiagramAction.setEnabled(False) self.testingAction.setEnabled(False) - self.checksMenu.menuAction().setEnabled( - False) - elif fn.endswith('.js'): + self.checksMenu.menuAction().setEnabled(False) + elif fn.endswith(".js"): # entry for mixed mode programs for act in self.sourceMenuActions.values(): act.setEnabled(False) self.testingAction.setEnabled(False) - self.checksMenu.menuAction().setEnabled( - False) - self.graphicsMenu.menuAction().setEnabled( - False) + self.checksMenu.menuAction().setEnabled(False) + self.graphicsMenu.menuAction().setEnabled(False) else: # assume the source file is a Python file for act in self.sourceMenuActions.values(): @@ -691,13 +722,11 @@ self.classDiagramAction.setEnabled(True) self.importsDiagramAction.setEnabled(True) self.testingAction.setEnabled(True) - self.checksMenu.menuAction().setEnabled( - True) + self.checksMenu.menuAction().setEnabled(True) self.sourceMenu.popup(self.mapToGlobal(coord)) elif isinstance( itm, - (BrowserClassItem, BrowserMethodItem, - BrowserImportItem) + (BrowserClassItem, BrowserMethodItem, BrowserImportItem), ): self.menu.popup(self.mapToGlobal(coord)) elif isinstance(itm, BrowserClassAttributeItem): @@ -711,13 +740,13 @@ self.backMenu.popup(self.mapToGlobal(coord)) else: self.backMenu.popup(self.mapToGlobal(coord)) - + def __showContextMenu(self): """ Private slot called by the sourceMenu aboutToShow signal. """ ProjectBaseBrowser._showContextMenu(self, self.sourceMenu) - + itm = self.model().item(self.currentIndex()) if itm: try: @@ -726,134 +755,129 @@ self.__startAct.setEnabled(False) else: self.__startAct.setEnabled(False) - + self.showMenu.emit("Main", self.sourceMenu) - + def __showContextMenuMulti(self): """ Private slot called by the multiMenu aboutToShow signal. """ ProjectBaseBrowser._showContextMenuMulti(self, self.multiMenu) - + 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 __showContextMenuDirMulti(self): """ Private slot called by the dirMultiMenu aboutToShow signal. """ ProjectBaseBrowser._showContextMenuDirMulti(self, self.dirMultiMenu) - + self.showMenu.emit("MainDirMulti", self.dirMultiMenu) - + def __showContextMenuBack(self): """ Private slot called by the backMenu aboutToShow signal. """ ProjectBaseBrowser._showContextMenuBack(self, self.backMenu) - + self.showMenu.emit("MainBack", self.backMenu) - + def __showContextMenuShow(self): """ Private slot called before the show menu is shown. """ prEnable = False coEnable = False - + # first check if the file belongs to a project and there is # a project coverage file fn = self.project.getMainScript(True) if fn is not None: - prEnable = ( - self.project.isPy3Project() and - bool(Utilities.getProfileFileNames(fn)) + prEnable = self.project.isPy3Project() and bool( + Utilities.getProfileFileNames(fn) ) - coEnable = ( - self.project.isPy3Project() and - bool(Utilities.getCoverageFileNames(fn)) + coEnable = self.project.isPy3Project() and bool( + Utilities.getCoverageFileNames(fn) ) - + # now check the selected item itm = self.model().item(self.currentIndex()) fn = itm.fileName() if fn is not None: - prEnable |= ( - itm.isPython3File() and - bool(Utilities.getProfileFileNames(fn)) - ) - coEnable |= ( - itm.isPython3File() and - bool(Utilities.getCoverageFileName(fn)) - ) - + prEnable |= itm.isPython3File() and bool(Utilities.getProfileFileNames(fn)) + coEnable |= itm.isPython3File() and bool(Utilities.getCoverageFileName(fn)) + self.profileMenuAction.setEnabled(prEnable) self.coverageMenuAction.setEnabled(coEnable) - + self.showMenu.emit("Show", self.menuShow) - + def _openItem(self): """ Protected slot to handle the open popup menu entry. """ itmList = self.getSelectedItems( - [BrowserFileItem, BrowserClassItem, BrowserMethodItem, - BrowserClassAttributeItem, BrowserImportItem]) - + [ + BrowserFileItem, + BrowserClassItem, + BrowserMethodItem, + BrowserClassAttributeItem, + BrowserImportItem, + ] + ) + for itm in itmList: if isinstance(itm, BrowserFileItem): if itm.isPython3File(): self.sourceFile[str].emit(itm.fileName()) elif itm.isRubyFile(): - self.sourceFile[str, int, str].emit( - itm.fileName(), -1, "Ruby") + self.sourceFile[str, int, str].emit(itm.fileName(), -1, "Ruby") elif itm.isDFile(): - self.sourceFile[str, int, str].emit( - itm.fileName(), -1, "D") + self.sourceFile[str, int, str].emit(itm.fileName(), -1, "D") else: self.sourceFile[str].emit(itm.fileName()) elif isinstance(itm, BrowserClassItem): - self.sourceFile[str, int].emit( - itm.fileName(), itm.classObject().lineno) + self.sourceFile[str, int].emit(itm.fileName(), itm.classObject().lineno) elif isinstance(itm, BrowserMethodItem): self.sourceFile[str, int].emit( - itm.fileName(), itm.functionObject().lineno) + itm.fileName(), itm.functionObject().lineno + ) elif isinstance(itm, BrowserClassAttributeItem): self.sourceFile[str, int].emit( - itm.fileName(), itm.attributeObject().lineno) + itm.fileName(), itm.attributeObject().lineno + ) elif isinstance(itm, BrowserImportItem): - self.sourceFile[str, list].emit( - itm.fileName(), itm.linenos()) - + self.sourceFile[str, list].emit(itm.fileName(), itm.linenos()) + def __addNewPackage(self): """ Private method to add a new package to the project. """ itm = self.model().item(self.currentIndex()) if isinstance( - itm, - (ProjectBrowserFileItem, BrowserClassItem, BrowserMethodItem) + itm, (ProjectBrowserFileItem, BrowserClassItem, BrowserMethodItem) ): dn = os.path.dirname(itm.fileName()) elif isinstance( - itm, - (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem) + itm, (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem) ): dn = itm.dirName() else: dn = "" - + dn = self.project.getRelativePath(dn) if dn.startswith(os.sep): dn = dn[1:] from .NewPythonPackageDialog import NewPythonPackageDialog + dlg = NewPythonPackageDialog(dn, self) if dlg.exec() == QDialog.DialogCode.Accepted: packageName = dlg.getData() @@ -872,8 +896,9 @@ self.tr( """<p>The package directory <b>{0}</b> could""" """ not be created. Aborting...</p>""" - """<p>Reason: {1}</p>""") - .format(packagePath, str(err))) + """<p>Reason: {1}</p>""" + ).format(packagePath, str(err)), + ) return packageFile = os.path.join(packagePath, "__init__.py") if not os.path.exists(packageFile): @@ -887,57 +912,54 @@ self.tr( """<p>The package file <b>{0}</b> could""" """ not be created. Aborting...</p>""" - """<p>Reason: {1}</p>""") - .format(packageFile, str(err))) + """<p>Reason: {1}</p>""" + ).format(packageFile, str(err)), + ) return self.project.appendFile(packageFile) if packageFile: self.sourceFile[str].emit(packageFile) - + def __addSourceFiles(self): """ Private method to add a source file to the project. """ itm = self.model().item(self.currentIndex()) if isinstance( - itm, - (ProjectBrowserFileItem, BrowserClassItem, BrowserMethodItem) + itm, (ProjectBrowserFileItem, BrowserClassItem, BrowserMethodItem) ): dn = os.path.dirname(itm.fileName()) elif isinstance( - itm, - (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem) + itm, (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem) ): dn = itm.dirName() else: dn = None - self.project.addFiles('source', dn) - + self.project.addFiles("source", dn) + def __addSourceDirectory(self): """ Private method to add source files of a directory to the project. """ itm = self.model().item(self.currentIndex()) if isinstance( - itm, - (ProjectBrowserFileItem, BrowserClassItem, BrowserMethodItem) + itm, (ProjectBrowserFileItem, BrowserClassItem, BrowserMethodItem) ): dn = os.path.dirname(itm.fileName()) elif isinstance( - itm, - (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem) + itm, (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem) ): dn = itm.dirName() else: dn = None - self.project.addDirectory('source', dn) - + self.project.addDirectory("source", dn) + def __deleteFile(self): """ Private method to delete files from the project. """ itmList = self.getSelectedItems() - + files = [] fullNames = [] for itm in itmList: @@ -945,48 +967,48 @@ fullNames.append(fn2) fn = self.project.getRelativePath(fn2) files.append(fn) - - from UI.DeleteFilesConfirmationDialog import ( - DeleteFilesConfirmationDialog - ) + + from UI.DeleteFilesConfirmationDialog import DeleteFilesConfirmationDialog + dlg = DeleteFilesConfirmationDialog( self.parent(), self.tr("Delete files"), - self.tr( - "Do you really want to delete these files from the project?"), - files) - + self.tr("Do you really want to delete these files from the project?"), + files, + ) + if dlg.exec() == QDialog.DialogCode.Accepted: for fn2, fn in zip(fullNames, files): self.closeSourceWindow.emit(fn2) self.project.deleteFile(fn) - + ########################################################################### ## Methods for the Checks submenu ########################################################################### - + def __showContextMenuCheck(self): """ Private slot called before the checks menu is shown. """ self.showMenu.emit("Checks", self.checksMenu) - + ########################################################################### ## Methods for the Show submenu ########################################################################### - + def __showCodeMetrics(self): """ Private method to handle the code metrics context menu action. """ itm = self.model().item(self.currentIndex()) fn = itm.fileName() - + from DataViews.CodeMetricsDialog import CodeMetricsDialog + self.codemetrics = CodeMetricsDialog() self.codemetrics.show() self.codemetrics.start(fn) - + def __showCodeCoverage(self): """ Private method to handle the code coverage context menu action. @@ -994,15 +1016,15 @@ itm = self.model().item(self.currentIndex()) fn = itm.fileName() pfn = self.project.getMainScript(True) - + files = set() - + if pfn is not None: files |= set(Utilities.getCoverageFileNames(pfn)) - + if fn is not None: files |= set(Utilities.getCoverageFileNames(fn)) - + if list(files): if len(files) > 1: cfn, ok = QInputDialog.getItem( @@ -1010,19 +1032,22 @@ self.tr("Code Coverage"), self.tr("Please select a coverage file"), files, - 0, False) + 0, + False, + ) if not ok: return else: cfn = files[0] else: return - + from DataViews.PyCoverageDialog import PyCoverageDialog + self.codecoverage = PyCoverageDialog() self.codecoverage.show() self.codecoverage.start(cfn, fn) - + def __showProfileData(self): """ Private method to handle the show profile data context menu action. @@ -1030,15 +1055,15 @@ itm = self.model().item(self.currentIndex()) fn = itm.fileName() pfn = self.project.getMainScript(True) - + files = set() - + if pfn is not None: files |= set(Utilities.getProfileFileNames(pfn)) - + if fn is not None: files |= set(Utilities.getProfileFileNames(fn)) - + if list(files): if len(files) > 1: pfn, ok = QInputDialog.getItem( @@ -1046,29 +1071,32 @@ self.tr("Profile Data"), self.tr("Please select a profile file"), files, - 0, False) + 0, + False, + ) if not ok: return else: pfn = files[0] else: return - + from DataViews.PyProfileDialog import PyProfileDialog + self.profiledata = PyProfileDialog() self.profiledata.show() self.profiledata.start(pfn, fn) - + ########################################################################### ## Methods for the Graphics submenu ########################################################################### - + def __showContextMenuGraphics(self): """ Private slot called before the checks menu is shown. """ self.showMenu.emit("Graphics", self.graphicsMenu) - + def __showClassDiagram(self): """ Private method to handle the class diagram context menu action. @@ -1082,14 +1110,16 @@ self, self.tr("Class Diagram"), self.tr("""Include class attributes?"""), - yesDefault=True) - + yesDefault=True, + ) + from Graphics.UMLDialog import UMLDialog, UMLDialogType + self.classDiagram = UMLDialog( - UMLDialogType.CLASS_DIAGRAM, self.project, fn, - self, noAttrs=not res) + UMLDialogType.CLASS_DIAGRAM, self.project, fn, self, noAttrs=not res + ) self.classDiagram.show() - + def __showImportsDiagram(self): """ Private method to handle the imports diagram context menu action. @@ -1103,14 +1133,20 @@ res = EricMessageBox.yesNo( self, self.tr("Imports Diagram"), - self.tr("""Include imports from external modules?""")) - + self.tr("""Include imports from external modules?"""), + ) + from Graphics.UMLDialog import UMLDialog, UMLDialogType + self.importsDiagram = UMLDialog( - UMLDialogType.IMPORTS_DIAGRAM, self.project, package, - self, showExternalImports=res) + UMLDialogType.IMPORTS_DIAGRAM, + self.project, + package, + self, + showExternalImports=res, + ) self.importsDiagram.show() - + def __showPackageDiagram(self): """ Private method to handle the package diagram context menu action. @@ -1125,14 +1161,16 @@ self, self.tr("Package Diagram"), self.tr("""Include class attributes?"""), - yesDefault=True) - + yesDefault=True, + ) + from Graphics.UMLDialog import UMLDialog, UMLDialogType + self.packageDiagram = UMLDialog( - UMLDialogType.PACKAGE_DIAGRAM, self.project, package, - self, noAttrs=not res) + UMLDialogType.PACKAGE_DIAGRAM, self.project, package, self, noAttrs=not res + ) self.packageDiagram.show() - + def __showApplicationDiagram(self): """ Private method to handle the application diagram context menu action. @@ -1141,72 +1179,74 @@ self, self.tr("Application Diagram"), self.tr("""Include module names?"""), - yesDefault=True) - + yesDefault=True, + ) + from Graphics.UMLDialog import UMLDialog, UMLDialogType + self.applicationDiagram = UMLDialog( - UMLDialogType.APPLICATION_DIAGRAM, self.project, - self, noModules=not res) + UMLDialogType.APPLICATION_DIAGRAM, self.project, self, noModules=not res + ) self.applicationDiagram.show() - + def __loadDiagram(self): """ Private slot to load a diagram from file. """ from Graphics.UMLDialog import UMLDialog, UMLDialogType + self.loadedDiagram = None - loadedDiagram = UMLDialog( - UMLDialogType.NO_DIAGRAM, self.project, parent=self) + loadedDiagram = UMLDialog(UMLDialogType.NO_DIAGRAM, self.project, parent=self) if loadedDiagram.load(): self.loadedDiagram = loadedDiagram self.loadedDiagram.show(fromFile=True) - + ########################################################################### ## Methods for the Start submenu ########################################################################### - + def __contextMenuRunScript(self): """ Private method to run the editor script. """ fn = self.model().item(self.currentIndex()).fileName() ericApp().getObject("DebugUI").doRun(False, script=fn) - + def __contextMenuDebugScript(self): """ Private method to debug the editor script. """ fn = self.model().item(self.currentIndex()).fileName() ericApp().getObject("DebugUI").doDebug(False, script=fn) - + def __contextMenuProfileScript(self): """ Private method to profile the editor script. """ fn = self.model().item(self.currentIndex()).fileName() ericApp().getObject("DebugUI").doProfile(False, script=fn) - + def __contextMenuCoverageScript(self): """ Private method to run a coverage test of the editor script. """ fn = self.model().item(self.currentIndex()).fileName() ericApp().getObject("DebugUI").doCoverage(False, script=fn) - + ########################################################################### ## Methods for the Code Formatting submenu ########################################################################### - + def __showContextMenuFormatting(self): """ Private slot called before the Code Formatting menu is shown. """ self.showMenu.emit("Formatting", self.formattingMenu) - + def __performFormatWithBlack(self, action): """ Private method to format the selected project sources using the 'Black' tool. - + Following actions are supported. <ul> <li>BlackFormattingAction.Format - the code reformatting is performed</li> @@ -1215,18 +1255,23 @@ <li>BlackFormattingAction.Diff - a unified diff of potential code formatting changes is generated</li> </ul> - + @param action formatting operation to be performed @type BlackFormattingAction """ from CodeFormatting.BlackConfigurationDialog import BlackConfigurationDialog from CodeFormatting.BlackFormattingDialog import BlackFormattingDialog - + files = [ itm.fileName() for itm in self.getSelectedItems( - [BrowserFileItem, BrowserClassItem, BrowserMethodItem, - BrowserClassAttributeItem, BrowserImportItem] + [ + BrowserFileItem, + BrowserClassItem, + BrowserMethodItem, + BrowserClassAttributeItem, + BrowserImportItem, + ] ) if itm.isPython3File() ] @@ -1239,16 +1284,13 @@ for f in self.project.getProjectFiles("SOURCES", normalized=True) if f.startswith(dirName) ] - + if ericApp().getObject("ViewManager").checkAllDirty(): dlg = BlackConfigurationDialog(withProject=True) if dlg.exec() == QDialog.DialogCode.Accepted: config = dlg.getConfiguration() - + formattingDialog = BlackFormattingDialog( - config, - files, - project=self.project, - action=action + config, files, project=self.project, action=action ) formattingDialog.exec()