--- a/PluginRefactoringRope.py Sun Nov 11 19:43:10 2018 +0100 +++ b/PluginRefactoringRope.py Sun Nov 11 19:43:56 2018 +0100 @@ -23,7 +23,7 @@ author = "Detlev Offenbach <detlev@die-offenbachs.de>" autoactivate = True deactivateable = True -version = "6.6.1" +version = "6.7.0" className = "RefactoringRopePlugin" packageName = "RefactoringRope" internalPackages = "rope" @@ -274,21 +274,34 @@ Preferences.Prefs.settings.setValue( self.PreferencesKey + "/" + key, value) - if key in ["CodeAssistEnabled", "CodeAssistCalltipsEnabled", - "MouseClickEnabled"]: - if value: - if e5App().getObject("Project").isOpen(): - for editor in e5App().getObject("ViewManager")\ - .getOpenEditors(): - if editor not in self.__editors: - self.__editorOpened(editor) - else: - for editor in self.__editors[:]: - self.__editorClosed(editor) - elif key in ["MouseClickGotoModifiers", "MouseClickGotoButton"]: +## if key in ["CodeAssistEnabled", "CodeAssistCalltipsEnabled", +## "MouseClickEnabled"]: +## if value: +## for editor in e5App().getObject("ViewManager")\ +## .getOpenEditors(): +## if editor not in self.__editors: +## self.__editorOpened(editor) +## else: +## for editor in self.__editors[:]: +## self.__editorClosed(editor) + if key in ["MouseClickGotoModifiers", "MouseClickGotoButton"]: for editor in self.__editors: - self.__refactoringServer.disconnectEditor(editor) - self.__refactoringServer.connectEditor(editor) + self.__disconnectMouseClickHandler(editor) + self.__connectMouseClickHandler(editor) +## for editor in self.__editors: +## # TODO: change these once mouse click has been moved to code assist +## self.__refactoringServer.disconnectEditor(editor) +## self.__refactoringServer.connectEditor(editor) + + def __determineLanguage(self): + """ + Private method to determine the valid language strings. + + @return list of valid language strings + @rtype list of str + """ + return ["Python", "Python2", "Python3", "Pygments|Python", + "Pygments|Python 3"] def __editorOpened(self, editor): """ @@ -297,7 +310,10 @@ @param editor reference to the new editor @type QScintilla.Editor.Editor """ - self.__connectEditor(editor) + languages = self.__determineLanguage() + + if editor.getLanguage() in languages: + self.__connectEditor(editor) editor.languageChanged.connect(self.__editorLanguageChanged) self.__editors.append(editor) @@ -322,9 +338,11 @@ @type str """ editor = self.sender() + languages = self.__determineLanguage() self.__disconnectEditor(editor) - self.__connectEditor(editor) + if language in languages: + self.__connectEditor(editor) def __connectEditor(self, editor): """ @@ -336,8 +354,14 @@ editor.editorAboutToBeSaved.connect(self.__editorAboutToBeSaved) editor.editorSaved.connect(self.__editorSaved) - self.__codeAssistServer.connectEditor(editor) - self.__refactoringServer.connectEditor(editor) + self.__setAutoCompletionHook(editor) + self.__setCalltipsHook(editor) + + self.__connectMouseClickHandler(editor) +## self.__codeAssistServer.connectEditor(editor) +## # TODO: delete these once mouse click has been moved to code assist +## if e5App().getObject("Project").isOpen(): +## self.__refactoringServer.connectEditor(editor) def __disconnectEditor(self, editor): """ @@ -353,8 +377,81 @@ # just ignore it pass - self.__codeAssistServer.disconnectEditor(editor) - self.__refactoringServer.disconnectEditor(editor) + self.__unsetAutoCompletionHook(editor) + self.__unsetCalltipsHook(editor) + + self.__disconnectMouseClickHandler(editor) +## self.__codeAssistServer.disconnectEditor(editor) +## # TODO: delete these once mouse click has been moved to code assist +## self.__refactoringServer.disconnectEditor(editor) + + def __connectMouseClickHandler(self, editor): + """ + Private method to connect the mouse click handler to an editor. + + @param editor reference to the editor + @type QScintilla.Editor + """ + if self.getPreferences("MouseClickGotoButton"): + editor.setMouseClickHandler( + "rope", + self.getPreferences("MouseClickGotoModifiers"), + self.getPreferences("MouseClickGotoButton"), + self.__codeAssistServer.gotoDefinition + ) + + def __disconnectMouseClickHandler(self, editor): + """ + Private method to disconnect the mouse click handler from an editor. + + @param editor reference to the editor + @type QScintilla.Editor + """ + editor.removeMouseClickHandlers("rope") + + def __setAutoCompletionHook(self, editor): + """ + Private method to set the autocompletion hook. + + @param editor reference to the editor + @type QScintilla.Editor + """ + try: + editor.addCompletionListHook( + "rope", self.__codeAssistServer.requestCompletions, True) + self.__codeAssistServer.setAsyncCompletions(True) + except TypeError: + # interface before 17.11 + editor.addCompletionListHook( + "rope", self.__codeAssistServer.getCompletions) + self.__codeAssistServer.setAsyncCompletions(False) + + def __unsetAutoCompletionHook(self, editor): + """ + Private method to unset the autocompletion hook. + + @param editor reference to the editor + @type QScintilla.Editor + """ + editor.removeCompletionListHook("rope") + + def __setCalltipsHook(self, editor): + """ + Private method to set the calltip hook. + + @param editor reference to the editor + @type QScintilla.Editor + """ + editor.addCallTipHook("rope", self.__codeAssistServer.getCallTips) + + def __unsetCalltipsHook(self, editor): + """ + Private method to unset the calltip hook. + + @param editor reference to the editor + @type QScintilla.Editor + """ + editor.removeCallTipHook("rope") def __editorAboutToBeSaved(self, filename): """