138 def __initialize(self): |
138 def __initialize(self): |
139 """ |
139 """ |
140 Private slot to (re)initialize the plugin. |
140 Private slot to (re)initialize the plugin. |
141 """ |
141 """ |
142 self.__object = None |
142 self.__object = None |
|
143 self.__caObject = None |
143 |
144 |
144 self.__mainAct = None |
145 self.__mainAct = None |
145 self.__mainMenu = None |
146 self.__mainMenu = None |
146 self.__projectIsOpen = False |
147 self.__projectIsOpen = False |
147 |
148 |
178 |
179 |
179 global refactoringRopePluginObject |
180 global refactoringRopePluginObject |
180 refactoringRopePluginObject = self |
181 refactoringRopePluginObject = self |
181 |
182 |
182 from RefactoringRope.Refactoring import Refactoring |
183 from RefactoringRope.Refactoring import Refactoring |
|
184 from RefactoringRope.CodeAssist import CodeAssist |
|
185 |
|
186 self.__caObject = CodeAssist(self, self) |
183 |
187 |
184 self.__object = Refactoring(self, self.__ui) |
188 self.__object = Refactoring(self, self.__ui) |
185 self.__object.initActions() |
189 self.__object.initActions() |
186 e5App().registerPluginObject("RefactoringRope", self.__object) |
190 e5App().registerPluginObject("RefactoringRope", self.__object) |
187 try: |
191 try: |
349 lang = self.__determineLanguage() |
353 lang = self.__determineLanguage() |
350 |
354 |
351 enabled = e5App().getObject("Project").getProjectLanguage() in lang |
355 enabled = e5App().getObject("Project").getProjectLanguage() in lang |
352 self.__mainAct.setEnabled(enabled) |
356 self.__mainAct.setEnabled(enabled) |
353 self.__projectIsOpen = enabled |
357 self.__projectIsOpen = enabled |
354 |
|
355 for editor in self.__editors: |
|
356 if editor.getLanguage() in lang and \ |
|
357 self.__projectIsOpen: |
|
358 self.__connectEditor(editor) |
|
359 |
358 |
360 def __projectClosed(self): |
359 def __projectClosed(self): |
361 """ |
360 """ |
362 Private slot to handle the projectClosed signal. |
361 Private slot to handle the projectClosed signal. |
363 """ |
362 """ |
364 self.__mainAct.setEnabled(False) |
363 self.__mainAct.setEnabled(False) |
365 self.__projectIsOpen = False |
364 self.__projectIsOpen = False |
366 |
|
367 for editor in self.__editors: |
|
368 self.__editorClosed(editor) |
|
369 |
365 |
370 def __editorOpened(self, editor): |
366 def __editorOpened(self, editor): |
371 """ |
367 """ |
372 Private slot called, when a new editor was opened. |
368 Private slot called, when a new editor was opened. |
373 |
369 |
374 @param editor reference to the new editor (QScintilla.Editor) |
370 @param editor reference to the new editor (QScintilla.Editor) |
375 """ |
371 """ |
376 lang = self.__determineLanguage() |
372 lang = self.__determineLanguage() |
377 |
373 |
378 if self.__projectIsOpen: |
374 if editor.getLanguage() in lang: |
379 if editor.getLanguage() in lang: |
375 self.__connectEditor(editor) |
380 self.__connectEditor(editor) |
376 |
381 |
377 editor.languageChanged.connect(self.__editorLanguageChanged) |
382 editor.languageChanged.connect(self.__editorLanguageChanged) |
378 self.__editors.append(editor) |
383 self.__editors.append(editor) |
|
384 |
379 |
385 def __editorClosed(self, editor): |
380 def __editorClosed(self, editor): |
386 """ |
381 """ |
387 Private slot called, when an editor was closed. |
382 Private slot called, when an editor was closed. |
388 |
383 |
400 @param language programming language of the editor (string) |
395 @param language programming language of the editor (string) |
401 """ |
396 """ |
402 editor = self.sender() |
397 editor = self.sender() |
403 lang = self.__determineLanguage() |
398 lang = self.__determineLanguage() |
404 |
399 |
405 if language in lang and self.__projectIsOpen: |
400 if language in lang: |
406 self.__connectEditor(editor) |
401 self.__connectEditor(editor) |
407 else: |
402 else: |
408 self.__disconnectEditor(editor) |
403 self.__disconnectEditor(editor) |
409 |
404 |
410 def __connectEditor(self, editor): |
405 def __connectEditor(self, editor): |
505 |
500 |
506 def __codeAssist(self): |
501 def __codeAssist(self): |
507 """ |
502 """ |
508 Private slot to show a list with completion proposals. |
503 Private slot to show a list with completion proposals. |
509 """ |
504 """ |
510 from RefactoringRope.CodeAssist import CodeAssist |
|
511 from QScintilla.Editor import EditorAutoCompletionListID |
505 from QScintilla.Editor import EditorAutoCompletionListID |
512 |
506 |
513 if self.__currentEditor is not None: |
507 if self.__currentEditor is not None: |
514 if self.__currentEditor.isListActive(): |
508 if self.__currentEditor.isListActive(): |
515 self.__currentEditor.cancelList() |
509 self.__currentEditor.cancelList() |
516 ca = CodeAssist(self.__object, self.__currentEditor, self, self) |
510 completions = self.__caObject.getCompletions(self.__currentEditor) |
517 completions = ca.getCompletions() |
|
518 if len(completions) == 0 and \ |
511 if len(completions) == 0 and \ |
519 self.getPreferences("ShowQScintillaCompletions"): |
512 self.getPreferences("ShowQScintillaCompletions"): |
520 # try QScintilla autocompletion |
513 # try QScintilla autocompletion |
521 self.__currentEditor.autoCompleteQScintilla() |
514 self.__currentEditor.autoCompleteQScintilla() |
522 else: |
515 else: |
544 """ |
537 """ |
545 Private slot to activate SOA. |
538 Private slot to activate SOA. |
546 |
539 |
547 @param filename name of the file that was saved (string) |
540 @param filename name of the file that was saved (string) |
548 """ |
541 """ |
549 import rope.base.libutils |
542 # TODO: report change to the refactoring object as well |
550 |
543 if filename == self.__savedEditorName and self.__oldEditorText: |
551 try: |
544 self.__caObject.reportChanged(self.__savedEditorName, |
552 if filename == self.__savedEditorName and self.__oldEditorText: |
545 self.__oldEditorText) |
553 rope.base.libutils.report_change(self.__object.getProject(), |
546 else: |
554 self.__savedEditorName, self.__oldEditorText) |
547 self.__caObject.reportChanged(filename, "") |
555 elif self.__savedEditorName == "": |
|
556 rope.base.libutils.report_change(self.__object.getProject(), |
|
557 filename, "") |
|
558 except RuntimeError: |
|
559 # this could come from trying to do PyQt4/PyQt5 mixed stuff |
|
560 # simply ignore it |
|
561 pass |
|
562 |
548 |
563 def __setCalltipsHook(self, editor): |
549 def __setCalltipsHook(self, editor): |
564 """ |
550 """ |
565 Private method to set the calltip hook. |
551 Private method to set the calltip hook. |
566 |
552 |
584 @param pos position in the text for the calltip (integer) |
570 @param pos position in the text for the calltip (integer) |
585 @param commas minimum number of commas contained in the calltip |
571 @param commas minimum number of commas contained in the calltip |
586 (integer) |
572 (integer) |
587 @return list of possible calltips (list of strings) |
573 @return list of possible calltips (list of strings) |
588 """ |
574 """ |
589 from RefactoringRope.CodeAssist import CodeAssist |
575 cts = self.__caObject.getCallTips(pos, editor) |
590 ca = CodeAssist(self.__object, editor, self, self) |
|
591 cts = ca.getCallTips(pos) |
|
592 return cts |
576 return cts |