PluginRefactoringRope.py

changeset 293
dd1c7ed6d880
parent 287
09afe26b734c
child 294
78e4a6823a98
diff -r 3ead66c44f3f -r dd1c7ed6d880 PluginRefactoringRope.py
--- 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):
         """

eric ide

mercurial