PluginSplitMergeCamelCase.py

changeset 10
97dd3b380cfd
parent 6
98590f1781bc
child 13
78a70b22b350
--- a/PluginSplitMergeCamelCase.py	Mon Dec 23 15:59:23 2013 +0100
+++ b/PluginSplitMergeCamelCase.py	Mon Dec 23 19:02:04 2013 +0100
@@ -20,7 +20,7 @@
 author = "Detlev Offenbach <detlev@die-offenbachs.de>"
 autoactivate = True
 deactivateable = True
-version = "0.2.0"
+version = "0.3.0"
 className = "SplitMergeCamelCasePlugin"
 packageName = "SplitMergeCamelCase"
 shortDescription = "Split, merge or convert camel case text"
@@ -53,6 +53,8 @@
         self.__loadTranslator()
         
         self.__initMenu()
+        
+        self.__editors = {}
     
     def activate(self):
         """
@@ -65,6 +67,14 @@
         
         self.__ui.showMenu.connect(self.__populateMenu)
         
+        e5App().getObject("ViewManager").editorOpenedEd.connect(
+            self.__editorOpened)
+        e5App().getObject("ViewManager").editorClosedEd.connect(
+            self.__editorClosed)
+        
+        for editor in e5App().getObject("ViewManager").getOpenEditors():
+            self.__editorOpened(editor)
+        
         return None, True
     
     def deactivate(self):
@@ -72,6 +82,18 @@
         Public method to deactivate this plugin.
         """
         self.__ui.showMenu.disconnect(self.__populateMenu)
+        
+        e5App().getObject("ViewManager").editorOpenedEd.disconnect(
+            self.__editorOpened)
+        e5App().getObject("ViewManager").editorClosedEd.disconnect(
+            self.__editorClosed)
+        
+        for editor, act in self.__editors.items():
+            editor.showMenu.disconnect(self.__editorShowMenu)
+            menu = editor.getMenu("Tools")
+            if menu is not None:
+                menu.removeAction(act)
+        self.__editors = {}
     
     def __loadTranslator(self):
         """
@@ -130,6 +152,41 @@
         act = menu.addMenu(self.__menu)
         act.setEnabled(editor.hasSelectedText())
     
+    def __editorOpened(self, editor):
+        """
+        Private slot called, when a new editor was opened.
+        
+        @param editor reference to the new editor (QScintilla.Editor)
+        """
+        menu = editor.getMenu("Tools")
+        if menu is not None:
+            act = menu.addMenu(self.__menu)
+            editor.showMenu.connect(self.__editorShowMenu)
+            self.__editors[editor] = act
+    
+    def __editorClosed(self, editor):
+        """
+        Private slot called, when an editor was closed.
+        
+        @param editor reference to the editor (QScintilla.Editor)
+        """
+        try:
+            del self.__editors[editor]
+        except KeyError:
+            pass
+    
+    def __editorShowMenu(self, menuName, menu, editor):
+        """
+        Private slot called, when the the editor context menu or a submenu is
+        about to be shown.
+        
+        @param menuName name of the menu to be shown (string)
+        @param menu reference to the menu (QMenu)
+        @param editor reference to the editor
+        """
+        if menuName == "Tools":
+            self.__menu.setEnabled(editor.hasSelectedText())
+    
     def __applyChange(self, newText, editor):
         """
         Private method to change the selected text.

eric ide

mercurial