Sun, 01 Feb 2015 18:23:12 +0100
Added possibility for plug-ins to have toolbars.
--- 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