diff -r ad42404ad714 -r 97dd3b380cfd PluginSplitMergeCamelCase.py --- 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.