Added possibility for plug-ins to have toolbars.

Sun, 01 Feb 2015 18:23:12 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 01 Feb 2015 18:23:12 +0100
changeset 4079
a3319822d303
parent 4078
0e14bef0b47b
child 4080
d4ba5fab5557

Added possibility for plug-ins to have toolbars.

Plugins/PluginVcsMercurial.py file | annotate | diff | comparison | revisions
Plugins/PluginVcsPySvn.py file | annotate | diff | comparison | revisions
Plugins/PluginVcsSubversion.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/ProjectHelper.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/ProjectHelper.py file | annotate | diff | comparison | revisions
Project/Project.py file | annotate | diff | comparison | revisions
UI/UserInterface.py file | annotate | diff | comparison | revisions
VCS/ProjectHelper.py file | annotate | diff | comparison | revisions
VCS/__init__.py file | annotate | diff | comparison | revisions
--- a/Plugins/PluginVcsMercurial.py	Sat Jan 31 19:53:35 2015 +0100
+++ b/Plugins/PluginVcsMercurial.py	Sun Feb 01 18:23:12 2015 +0100
@@ -200,6 +200,15 @@
         """
         from VcsPlugins.vcsMercurial.hg import Hg
         self.__object = Hg(self, self.__ui)
+        
+        tb = self.__ui.getToolbar("vcs")[1]
+        tb.setVisible(False)
+        tb.setEnabled(False)
+        
+        tb = self.__ui.getToolbar("mercurial")[1]
+        tb.setVisible(True)
+        tb.setEnabled(True)
+        
         return self.__object, True
     
     def deactivate(self):
@@ -207,6 +216,14 @@
         Public method to deactivate this plugin.
         """
         self.__object = None
+        
+        tb = self.__ui.getToolbar("mercurial")[1]
+        tb.setVisible(False)
+        tb.setEnabled(False)
+        
+        tb = self.__ui.getToolbar("vcs")[1]
+        tb.setVisible(True)
+        tb.setEnabled(True)
     
     def getPreferences(self, key):
         """
--- a/Plugins/PluginVcsPySvn.py	Sat Jan 31 19:53:35 2015 +0100
+++ b/Plugins/PluginVcsPySvn.py	Sun Feb 01 18:23:12 2015 +0100
@@ -158,8 +158,8 @@
             "CommitMessages": 20,
         }
         
-        from VcsPlugins.vcsPySvn.ProjectHelper import SvnProjectHelper
-        self.__projectHelperObject = SvnProjectHelper(None, None)
+        from VcsPlugins.vcsPySvn.ProjectHelper import PySvnProjectHelper
+        self.__projectHelperObject = PySvnProjectHelper(None, None)
         try:
             e5App().registerPluginObject(
                 pluginTypename, self.__projectHelperObject, pluginType)
@@ -184,6 +184,15 @@
         """
         from VcsPlugins.vcsPySvn.subversion import Subversion
         self.__object = Subversion(self, self.__ui)
+        
+        tb = self.__ui.getToolbar("vcs")[1]
+        tb.setVisible(False)
+        tb.setEnabled(False)
+        
+        tb = self.__ui.getToolbar("pysvn")[1]
+        tb.setVisible(True)
+        tb.setEnabled(True)
+        
         return self.__object, True
     
     def deactivate(self):
@@ -191,6 +200,14 @@
         Public method to deactivate this plugin.
         """
         self.__object = None
+        
+        tb = self.__ui.getToolbar("pysvn")[1]
+        tb.setVisible(False)
+        tb.setEnabled(False)
+        
+        tb = self.__ui.getToolbar("vcs")[1]
+        tb.setVisible(True)
+        tb.setEnabled(True)
     
     def getPreferences(self, key):
         """
--- a/Plugins/PluginVcsSubversion.py	Sat Jan 31 19:53:35 2015 +0100
+++ b/Plugins/PluginVcsSubversion.py	Sun Feb 01 18:23:12 2015 +0100
@@ -190,6 +190,15 @@
         """
         from VcsPlugins.vcsSubversion.subversion import Subversion
         self.__object = Subversion(self, self.__ui)
+        
+        tb = self.__ui.getToolbar("vcs")[1]
+        tb.setVisible(False)
+        tb.setEnabled(False)
+        
+        tb = self.__ui.getToolbar("subversion")[1]
+        tb.setVisible(True)
+        tb.setEnabled(True)
+        
         return self.__object, True
     
     def deactivate(self):
@@ -197,6 +206,14 @@
         Public method to deactivate this plugin.
         """
         self.__object = None
+        
+        tb = self.__ui.getToolbar("subversion")[1]
+        tb.setVisible(False)
+        tb.setEnabled(False)
+        
+        tb = self.__ui.getToolbar("vcs")[1]
+        tb.setVisible(True)
+        tb.setEnabled(True)
     
     def getPreferences(self, key):
         """
--- a/Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py	Sat Jan 31 19:53:35 2015 +0100
+++ b/Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py	Sun Feb 01 18:23:12 2015 +0100
@@ -11,7 +11,7 @@
 
 import os
 
-from PyQt5.QtWidgets import QMenu
+from PyQt5.QtWidgets import QMenu, QToolBar
 
 from E5Gui import E5MessageBox
 from E5Gui.E5Application import e5App
@@ -1398,6 +1398,64 @@
         menu.addAction(self.vcsNewAct)
         menu.addAction(self.vcsExportAct)
     
+    def initToolbar(self, ui, toolbarManager):
+        """
+        Public slot to initialize the VCS toolbar.
+        
+        @param ui reference to the main window (UserInterface)
+        @param toolbarManager reference to a toolbar manager object
+            (E5ToolBarManager)
+        @return the toolbar generated (QToolBar)
+        """
+        tb = QToolBar(self.tr("Mercurial"), ui)
+        tb.setIconSize(UI.Config.ToolBarIconSize)
+        tb.setObjectName("MercurialToolbar")
+        tb.setToolTip(self.tr('Mercurial'))
+        
+        tb.addAction(self.hgLogBrowserAct)
+        tb.addAction(self.vcsStatusAct)
+        tb.addSeparator()
+        tb.addAction(self.vcsDiffAct)
+        tb.addSeparator()
+        tb.addAction(self.vcsNewAct)
+        tb.addAction(self.vcsExportAct)
+        tb.addSeparator()
+        
+        title = tb.windowTitle()
+        toolbarManager.addToolBar(tb, title)
+        toolbarManager.addAction(self.hgPullAct, title)
+        toolbarManager.addAction(self.vcsUpdateAct, title)
+        toolbarManager.addAction(self.vcsCommitAct, title)
+        toolbarManager.addAction(self.hgPushAct, title)
+        toolbarManager.addAction(self.hgPushForcedAct, title)
+        toolbarManager.addAction(self.vcsLogAct, title)
+        toolbarManager.addAction(self.hgExtDiffAct, title)
+        toolbarManager.addAction(self.hgSummaryAct, title)
+        toolbarManager.addAction(self.vcsRevertAct, title)
+        toolbarManager.addAction(self.vcsMergeAct, title)
+        toolbarManager.addAction(self.hgReMergeAct, title)
+        toolbarManager.addAction(self.vcsTagAct, title)
+        toolbarManager.addAction(self.hgBranchAct, title)
+        toolbarManager.addAction(self.vcsSwitchAct, title)
+        toolbarManager.addAction(self.hgGraftAct, title)
+        toolbarManager.addAction(self.hgAddSubrepoAct, title)
+        toolbarManager.addAction(self.hgRemoveSubreposAct, title)
+        toolbarManager.addAction(self.hgArchiveAct, title)
+        toolbarManager.addAction(self.hgBookmarksListAct, title)
+        toolbarManager.addAction(self.hgBookmarkDefineAct, title)
+        toolbarManager.addAction(self.hgBookmarkDeleteAct, title)
+        toolbarManager.addAction(self.hgBookmarkRenameAct, title)
+        toolbarManager.addAction(self.hgBookmarkMoveAct, title)
+        toolbarManager.addAction(self.hgBookmarkPullAct, title)
+        toolbarManager.addAction(self.hgBookmarkPushAct, title)
+        
+        tb.setEnabled(False)
+        tb.setVisible(False)
+        
+        ui.registerToolbar("mercurial", tb.windowTitle(), tb)
+        
+        return tb
+    
     def showMenu(self):
         """
         Public slot called before the vcs menu is shown.
--- a/Plugins/VcsPlugins/vcsPySvn/ProjectHelper.py	Sat Jan 31 19:53:35 2015 +0100
+++ b/Plugins/VcsPlugins/vcsPySvn/ProjectHelper.py	Sun Feb 01 18:23:12 2015 +0100
@@ -11,16 +11,17 @@
 
 import os
 
-from E5Gui.E5Application import e5App
+from PyQt5.QtWidgets import QToolBar
 
 from VCS.ProjectHelper import VcsProjectHelper
 
 from E5Gui.E5Action import E5Action
+from E5Gui.E5Application import e5App
 
 import UI.PixmapCache
 
 
-class SvnProjectHelper(VcsProjectHelper):
+class PySvnProjectHelper(VcsProjectHelper):
     """
     Class implementing the VCS project helper for Subversion.
     """
@@ -560,6 +561,52 @@
         menu.addAction(self.vcsNewAct)
         menu.addAction(self.vcsExportAct)
     
+    def initToolbar(self, ui, toolbarManager):
+        """
+        Public slot to initialize the VCS toolbar.
+        
+        @param ui reference to the main window (UserInterface)
+        @param toolbarManager reference to a toolbar manager object
+            (E5ToolBarManager)
+        @return the toolbar generated (QToolBar)
+        """
+        tb = QToolBar(self.tr("Subversion (pysvn)"), ui)
+        tb.setIconSize(UI.Config.ToolBarIconSize)
+        tb.setObjectName("PySvnToolbar")
+        tb.setToolTip(self.tr('Subversion (pysvn)'))
+        
+        tb.addAction(self.svnLogBrowserAct)
+        tb.addAction(self.vcsStatusAct)
+        tb.addSeparator()
+        tb.addAction(self.vcsDiffAct)
+        tb.addSeparator()
+        tb.addAction(self.svnRepoBrowserAct)
+        tb.addAction(self.vcsNewAct)
+        tb.addAction(self.vcsExportAct)
+        tb.addSeparator()
+        
+        title = tb.windowTitle()
+        toolbarManager.addToolBar(tb, title)
+        toolbarManager.addAction(self.vcsUpdateAct, title)
+        toolbarManager.addAction(self.vcsCommitAct, title)
+        toolbarManager.addAction(self.vcsLogAct, title)
+        toolbarManager.addAction(self.svnExtDiffAct, title)
+        toolbarManager.addAction(self.svnUrlDiffAct, title)
+        toolbarManager.addAction(self.svnChangeListsAct, title)
+        toolbarManager.addAction(self.svnRepoInfoAct, title)
+        toolbarManager.addAction(self.vcsTagAct, title)
+        toolbarManager.addAction(self.vcsRevertAct, title)
+        toolbarManager.addAction(self.vcsMergeAct, title)
+        toolbarManager.addAction(self.vcsSwitchAct, title)
+        toolbarManager.addAction(self.svnRelocateAct, title)
+        
+        tb.setEnabled(False)
+        tb.setVisible(False)
+        
+        ui.registerToolbar("pysvn", tb.windowTitle(), tb)
+        
+        return tb
+    
     def __svnResolve(self):
         """
         Private slot used to resolve conflicts of the local project.
--- a/Plugins/VcsPlugins/vcsSubversion/ProjectHelper.py	Sat Jan 31 19:53:35 2015 +0100
+++ b/Plugins/VcsPlugins/vcsSubversion/ProjectHelper.py	Sun Feb 01 18:23:12 2015 +0100
@@ -11,11 +11,12 @@
 
 import os
 
-from E5Gui.E5Application import e5App
+from PyQt5.QtWidgets import QToolBar
 
 from VCS.ProjectHelper import VcsProjectHelper
 
 from E5Gui.E5Action import E5Action
+from E5Gui.E5Application import e5App
 
 import UI.PixmapCache
 
@@ -544,6 +545,51 @@
         menu.addAction(self.vcsNewAct)
         menu.addAction(self.vcsExportAct)
     
+    def initToolbar(self, ui, toolbarManager):
+        """
+        Public slot to initialize the VCS toolbar.
+        
+        @param ui reference to the main window (UserInterface)
+        @param toolbarManager reference to a toolbar manager object
+            (E5ToolBarManager)
+        @return the toolbar generated (QToolBar)
+        """
+        tb = QToolBar(self.tr("Subversion (svn)"), ui)
+        tb.setIconSize(UI.Config.ToolBarIconSize)
+        tb.setObjectName("SubversionToolbar")
+        tb.setToolTip(self.tr('Subversion (svn)'))
+        
+        tb.addAction(self.svnLogBrowserAct)
+        tb.addAction(self.vcsStatusAct)
+        tb.addSeparator()
+        tb.addAction(self.vcsDiffAct)
+        tb.addSeparator()
+        tb.addAction(self.svnRepoBrowserAct)
+        tb.addAction(self.vcsNewAct)
+        tb.addAction(self.vcsExportAct)
+        tb.addSeparator()
+        
+        title = tb.windowTitle()
+        toolbarManager.addToolBar(tb, title)
+        toolbarManager.addAction(self.vcsUpdateAct, title)
+        toolbarManager.addAction(self.vcsCommitAct, title)
+        toolbarManager.addAction(self.vcsLogAct, title)
+        toolbarManager.addAction(self.svnExtDiffAct, title)
+        toolbarManager.addAction(self.svnUrlDiffAct, title)
+        toolbarManager.addAction(self.svnChangeListsAct, title)
+        toolbarManager.addAction(self.vcsTagAct, title)
+        toolbarManager.addAction(self.vcsRevertAct, title)
+        toolbarManager.addAction(self.vcsMergeAct, title)
+        toolbarManager.addAction(self.vcsSwitchAct, title)
+        toolbarManager.addAction(self.svnRelocateAct, title)
+        
+        tb.setEnabled(False)
+        tb.setVisible(False)
+        
+        ui.registerToolbar("subversion", tb.windowTitle(), tb)
+        
+        return tb
+    
     def __svnResolve(self):
         """
         Private slot used to resolve conflicts of the local project.
--- a/Project/Project.py	Sat Jan 31 19:53:35 2015 +0100
+++ b/Project/Project.py	Sun Feb 01 18:23:12 2015 +0100
@@ -3931,13 +3931,14 @@
         self.menu = menu
         return menu
         
-    def initToolbar(self, toolbarManager):
-        """
-        Public slot to initialize the project toolbar.
+    def initToolbars(self, toolbarManager):
+        """
+        Public slot to initialize the project toolbar and the basic VCS
+        toolbar.
         
         @param toolbarManager reference to a toolbar manager object
             (E5ToolBarManager)
-        @return the toolbar generated (QToolBar)
+        @return tuple of the generated toolbars (tuple of two QToolBar)
         """
         tb = QToolBar(self.tr("Project"), self.ui)
         tb.setIconSize(UI.Config.ToolBarIconSize)
@@ -3957,7 +3958,11 @@
         toolbarManager.addAction(self.propsAct, tb.windowTitle())
         toolbarManager.addAction(self.userPropsAct, tb.windowTitle())
         
-        return tb
+        import VCS
+        vcstb = VCS.getBasicHelper(self).initBasicToolbar(
+            self.ui, toolbarManager)
+        
+        return tb, vcstb
         
     def __showMenu(self):
         """
@@ -4300,8 +4305,8 @@
                 pass
         
         if vcs is None:
-            from VCS.ProjectHelper import VcsProjectHelper
-            self.vcsProjectHelper = VcsProjectHelper(None, self)
+            import VCS
+            self.vcsProjectHelper = VCS.getBasicHelper(self)
             self.vcsBasicHelper = True
         else:
             self.vcsProjectHelper = vcs.vcsGetProjectHelper(self)
--- a/UI/UserInterface.py	Sat Jan 31 19:53:35 2015 +0100
+++ b/UI/UserInterface.py	Sun Feb 01 18:23:12 2015 +0100
@@ -523,6 +523,16 @@
         # now activate plugins having autoload set to True
         splash.showMessage(self.tr("Activating Plugins..."))
         self.pluginManager.activatePlugins()
+        splash.showMessage(self.tr("Generating Plugins Toolbars..."))
+        self.pluginManager.initOnDemandPlugins()
+        for name, ref in e5App().getPluginObjects():
+            try:
+                tb = ref.initToolbar(self, self.toolbarManager)
+                if tb is not None:
+                    self.addToolBar(tb)
+            except AttributeError:
+                # ignore it
+                pass
         
         # now read the keyboard shortcuts for all the actions
         from Preferences import Shortcuts
@@ -2559,7 +2569,7 @@
         viewtb = self.viewmanager.initViewToolbar(self.toolbarManager)
         starttb, debugtb = self.debuggerUI.initToolbars(self.toolbarManager)
         multiprojecttb = self.multiProject.initToolbar(self.toolbarManager)
-        projecttb = self.project.initToolbar(self.toolbarManager)
+        projecttb, vcstb = self.project.initToolbars(self.toolbarManager)
         toolstb = QToolBar(self.tr("Tools"), self)
         unittesttb = QToolBar(self.tr("Unittest"), self)
         bookmarktb = self.viewmanager.initBookmarkToolbar(self.toolbarManager)
@@ -2666,6 +2676,7 @@
         self.addToolBar(debugtb)
         self.addToolBar(multiprojecttb)
         self.addToolBar(projecttb)
+        self.addToolBar(vcstb)
         self.addToolBar(Qt.RightToolBarArea, settingstb)
         self.addToolBar(Qt.RightToolBarArea, toolstb)
         self.addToolBar(helptb)
@@ -2708,6 +2719,7 @@
         self.__toolbars["multiproject"] = [multiprojecttb.windowTitle(),
                                            multiprojecttb]
         self.__toolbars["spelling"] = [spellingtb.windowTitle(), spellingtb]
+        self.__toolbars["vcs"] = [vcstb.windowTitle(), vcstb]
         
     def __initDebugToolbarsLayout(self):
         """
@@ -5266,8 +5278,8 @@
         Private slot to configure the various view profiles.
         """
         from Preferences.ViewProfileDialog import ViewProfileDialog
-        dlg = ViewProfileDialog(
-            self.layoutType, self.profiles['edit'][1], self.profiles['debug'][1])
+        dlg = ViewProfileDialog(self.layoutType, self.profiles['edit'][1],
+                                self.profiles['debug'][1])
         if dlg.exec_() == QDialog.Accepted:
             edit, debug = dlg.getVisibilities()
             self.profiles['edit'][1] = edit
--- a/VCS/ProjectHelper.py	Sat Jan 31 19:53:35 2015 +0100
+++ b/VCS/ProjectHelper.py	Sun Feb 01 18:23:12 2015 +0100
@@ -14,13 +14,15 @@
 import copy
 
 from PyQt5.QtCore import pyqtSlot, QDir, QFileInfo, QObject
-from PyQt5.QtWidgets import QDialog, QInputDialog
+from PyQt5.QtWidgets import QDialog, QInputDialog, QToolBar
 
 from E5Gui.E5Action import E5Action
 from E5Gui import E5MessageBox
 from E5Gui.E5Application import e5App
 
 import Preferences
+import UI.PixmapCache
+import UI.Config
 
 
 class VcsProjectHelper(QObject):
@@ -65,6 +67,7 @@
         """
         self.vcsNewAct = E5Action(
             self.tr('New from repository'),
+            UI.PixmapCache.getIcon("vcsCheckout.png"),
             self.tr('&New from repository...'),
             0, 0, self, 'vcs_new')
         self.vcsNewAct.setStatusTip(self.tr(
@@ -80,6 +83,7 @@
         
         self.vcsExportAct = E5Action(
             self.tr('Export from repository'),
+            UI.PixmapCache.getIcon("vcsExport.png"),
             self.tr('&Export from repository...'),
             0, 0, self, 'vcs_export')
         self.vcsExportAct.setStatusTip(self.tr(
@@ -94,6 +98,7 @@
         
         self.vcsAddAct = E5Action(
             self.tr('Add to repository'),
+            UI.PixmapCache.getIcon("vcsCommit.png"),
             self.tr('&Add to repository...'),
             0, 0, self, 'vcs_add')
         self.vcsAddAct.setStatusTip(self.tr(
@@ -121,6 +126,40 @@
         menu.addAction(self.vcsAddAct)
         menu.addSeparator()
 
+    def initToolbar(self, ui, toolbarManager):
+        """
+        Public slot to initialize the VCS toolbar.
+        
+        @param ui reference to the main window (UserInterface)
+        @param toolbarManager reference to a toolbar manager object
+            (E5ToolBarManager)
+        @return the toolbar generated (QToolBar)
+        """
+        return None
+    
+    def initBasicToolbar(self, ui, toolbarManager):
+        """
+        Public slot to initialize the basic VCS toolbar.
+        
+        @param ui reference to the main window (UserInterface)
+        @param toolbarManager reference to a toolbar manager object
+            (E5ToolBarManager)
+        @return the toolbar generated (QToolBar)
+        """
+        tb = QToolBar(self.tr("VCS"), ui)
+        tb.setIconSize(UI.Config.ToolBarIconSize)
+        tb.setObjectName("VersionControlToolbar")
+        tb.setToolTip(self.tr('VCS'))
+        
+        tb.addAction(self.vcsNewAct)
+        tb.addAction(self.vcsExportAct)
+        tb.addSeparator()
+        tb.addAction(self.vcsAddAct)
+        
+        toolbarManager.addToolBar(tb, tb.windowTitle())
+        
+        return tb
+    
     def showMenu(self):
         """
         Public slot called before the vcs menu is shown.
--- a/VCS/__init__.py	Sat Jan 31 19:53:35 2015 +0100
+++ b/VCS/__init__.py	Sun Feb 01 18:23:12 2015 +0100
@@ -58,3 +58,23 @@
                                 break
                 break
     return vc
+
+
+VcsBasicHelperSingleton = None
+
+
+def getBasicHelper(project):
+    """
+    Module function to get a reference to the basic project helper singleton.
+    
+    @param project reference to the project object (Project)
+    @return reference to the basic VCS project helper singleton
+        (VcsProjectHelper)
+    """
+    global VcsBasicHelperSingleton
+    
+    if VcsBasicHelperSingleton is None:
+        from .ProjectHelper import VcsProjectHelper
+        VcsBasicHelperSingleton = VcsProjectHelper(None, project)
+    
+    return VcsBasicHelperSingleton

eric ide

mercurial