Refined the Mercurial extensions code a little bit to deal with torn of menus in a better way.

Tue, 31 May 2011 11:25:52 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 31 May 2011 11:25:52 +0200
changeset 1088
9c84b88cff09
parent 1087
fb8cd56819a9
child 1090
41b2f212563c

Refined the Mercurial extensions code a little bit to deal with torn of menus in a better way.

APIs/Python3/eric5.api file | annotate | diff | comparison | revisions
Documentation/Help/source.qch file | annotate | diff | comparison | revisions
Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.hg.html file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/hg.py file | annotate | diff | comparison | revisions
--- a/APIs/Python3/eric5.api	Tue May 31 10:31:06 2011 +0200
+++ b/APIs/Python3/eric5.api	Tue May 31 11:25:52 2011 +0200
@@ -3605,6 +3605,7 @@
 eric5.Plugins.VcsPlugins.vcsMercurial.TransplantExtension.transplant.Transplant.hgTransplantContinue?4(path)
 eric5.Plugins.VcsPlugins.vcsMercurial.TransplantExtension.transplant.Transplant?1(vcs)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg._createStatusMonitorThread?5(interval, project)
+eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.activeExtensionsChanged?7
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.clearStatusCache?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.committed?7
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.getExtensionObject?4(extensionName)
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.hg.html	Tue May 31 10:31:06 2011 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.hg.html	Tue May 31 11:25:52 2011 +0200
@@ -46,7 +46,11 @@
     Class implementing the version control systems interface to Mercurial.
 </p><h4>Signals</h4>
 <dl>
-<dt>committed()</dt>
+<dt>activeExtensionsChanged()</dt>
+<dd>
+emitted when the list of active extensions
+            has changed
+</dd><dt>committed()</dt>
 <dd>
 emitted after the commit action has completed
 </dd>
--- a/Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py	Tue May 31 10:31:06 2011 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py	Tue May 31 11:25:52 2011 +0200
@@ -892,13 +892,15 @@
         bisectMenu.addAction(self.hgBisectResetAct)
         self.subMenus.append(bisectMenu)
         
-        extensionsMenu = QMenu(self.trUtf8("Extensions"), menu)
-        extensionsMenu.aboutToShow.connect(self.__showExtensionMenu)
+        self.__extensionsMenu = QMenu(self.trUtf8("Extensions"), menu)
+        self.__extensionsMenu.setTearOffEnabled(True)
+        self.__extensionsMenu.aboutToShow.connect(self.__showExtensionMenu)
         self.extensionMenus = {}
         for extensionMenuTitle in sorted(self.__extensionMenuTitles):
             extensionName = self.__extensionMenuTitles[extensionMenuTitle]
-            self.extensionMenus[extensionName] = extensionsMenu.addMenu(
-                self.__extensions[extensionName].initMenu(extensionsMenu))
+            self.extensionMenus[extensionName] = self.__extensionsMenu.addMenu(
+                self.__extensions[extensionName].initMenu(self.__extensionsMenu))
+        self.vcs.activeExtensionsChanged.connect(self.__showExtensionMenu)
         
         act = menu.addAction(
             UI.PixmapCache.getIcon(
@@ -919,7 +921,7 @@
         menu.addSeparator()
         menu.addMenu(bundleMenu)
         menu.addSeparator()
-        menu.addMenu(extensionsMenu)
+        menu.addMenu(self.__extensionsMenu)
         menu.addSeparator()
         menu.addAction(self.vcsNewAct)
         menu.addAction(self.vcsExportAct)
@@ -968,6 +970,8 @@
         """
         Public method to perform shutdown actions.
         """
+        self.vcs.activeExtensionsChanged.disconnect(self.__showExtensionMenu)
+        
         # close torn off sub menus
         for menu in self.subMenus:
             if menu.isTearOffMenuVisible():
@@ -978,6 +982,9 @@
             menu = self.extensionMenus[extensionName].menu()
             if menu.isTearOffMenuVisible():
                 menu.hideTearOffMenu()
+        
+        if self.__extensionsMenu.isTearOffMenuVisible():
+            self.__extensionsMenu.hideTearOffMenu()
     
     def __showExtensionMenu(self):
         """
@@ -986,6 +993,9 @@
         for extensionName in self.extensionMenus:
             self.extensionMenus[extensionName].setEnabled(
                 self.vcs.isExtensionActive(extensionName))
+            if not self.extensionMenus[extensionName].isEnabled() and \
+               self.extensionMenus[extensionName].menu().isTearOffMenuVisible():
+                self.extensionMenus[extensionName].menu().hideTearOffMenu()
     
     def __hgExtendedDiff(self):
         """
--- a/Plugins/VcsPlugins/vcsMercurial/hg.py	Tue May 31 10:31:06 2011 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/hg.py	Tue May 31 11:25:52 2011 +0200
@@ -64,8 +64,11 @@
     Class implementing the version control systems interface to Mercurial.
     
     @signal committed() emitted after the commit action has completed
+    @signal activeExtensionsChanged() emitted when the list of active extensions
+            has changed
     """
     committed = pyqtSignal()
+    activeExtensionsChanged = pyqtSignal()
     
     def __init__(self, plugin, parent=None, name=None):
         """
@@ -2253,6 +2256,7 @@
         """
         Private method to get the active extensions from Mercurial.
         """
+        activeExtensions = sorted(self.__activeExtensions)
         self.__activeExtensions = []
         
         process = QProcess()
@@ -2273,6 +2277,9 @@
         if self.versionStr >= "1.8":
             if "bookmarks" not in self.__activeExtensions:
                 self.__activeExtensions.append("bookmarks")
+        
+        if activeExtensions != sorted(self.__activeExtensions):
+            self.activeExtensionsChanged.emit()
     
     def isExtensionActive(self, extensionName):
         """

eric ide

mercurial