PluginRefactoringRope.py

changeset 1
9f687137a929
parent 0
e3924615f9a3
child 20
83b71483e198
diff -r e3924615f9a3 -r 9f687137a929 PluginRefactoringRope.py
--- a/PluginRefactoringRope.py	Sun Jan 23 15:31:35 2011 +0100
+++ b/PluginRefactoringRope.py	Sun Jan 23 19:55:56 2011 +0100
@@ -0,0 +1,202 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2011 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the Rope refactoring plugin.
+"""
+
+import os
+
+from PyQt4.QtCore import QObject, QTranslator, SIGNAL
+
+from E5Gui.E5Application import e5App
+
+from Preferences.Shortcuts import readShortcuts
+
+# Start-Of-Header
+name = "Refactoring Rope Plugin"
+author = "Detlev Offenbach <detlev@die-offenbachs.de>"
+autoactivate = True
+deactivateable = True
+version = "2.0.0"
+className = "RefactoringRopePlugin"
+packageName = "RefactoringRope"
+internalPackages = "rope"
+shortDescription = "Refactoring using the Rope library."
+longDescription = """This plugin implements refactoring functionality""" \
+    """ using the Rope refactoring library."""
+pyqtApi = 2
+# End-Of-Header
+
+error = ""
+
+class RefactoringRopePlugin(QObject):
+    """
+    Class implementing the Rope refactoring plugin.
+    """
+    def __init__(self, ui):
+        """
+        Constructor
+        
+        @param ui reference to the user interface object (UI.UserInterface)
+        """
+        QObject.__init__(self, ui)
+        self.__ui = ui
+        self.__initialize()
+        
+        self.__newStyle = ui.versionIsNewer("5.0.99", "20100811")
+        
+        self.__translator = None
+        self.__loadTranslator()
+    
+    def __initialize(self):
+        """
+        Private slot to (re)initialize the plugin.
+        """
+        self.__object = None
+        
+        self.__mainAct = None
+        self.__mainMenu = None
+        self.__projectIsOpen = False
+    
+    def activate(self):
+        """
+        Public method to activate this plugin.
+        
+        @return tuple of None and activation status (boolean)
+        """
+        from RefactoringRope.Refactoring import Refactoring
+        
+        self.__object = Refactoring(self, self.__ui)
+        self.__object.initActions()
+        e5App().registerPluginObject("RefactoringRope", self.__object)
+        try:
+            readShortcuts(pluginName = "RefactoringRope")
+        except TypeError:
+            # backwards comaytibility, ignore
+            pass
+        
+        self.__mainMenu = self.__object.initMenu()
+        extrasAct = self.__ui.getMenuBarAction("extras")
+        self.__mainAct = self.__ui.menuBar().insertMenu(
+            extrasAct, self.__mainMenu)
+        
+        if e5App().getObject("Project").isOpen():
+            self.__mainAct.setEnabled(True)
+            self.__object.projectOpened()
+        else:
+            self.__mainAct.setEnabled(False)
+        
+        if self.__newStyle:
+            e5App().getObject("Project").projectOpened.connect(
+                self.__object.projectOpened)
+            e5App().getObject("Project").projectClosed.connect(
+                self.__object.projectClosed)
+            e5App().getObject("Project").newProject.connect(
+                self.__object.projectOpened)
+            
+            e5App().getObject("Project").projectOpened.connect(
+                self.__projectOpened)
+            e5App().getObject("Project").projectClosed.connect(
+                self.__projectClosed)
+            e5App().getObject("Project").newProject.connect(
+                self.__projectOpened)
+        else:
+            self.connect(e5App().getObject("Project"), SIGNAL('projectOpened'),
+                         self.__object.projectOpened)
+            self.connect(e5App().getObject("Project"), SIGNAL('projectClosed'),
+                         self.__object.projectClosed)
+            self.connect(e5App().getObject("Project"), SIGNAL('newProject'),
+                         self.__object.projectOpened)
+            
+            self.connect(e5App().getObject("Project"), SIGNAL('projectOpened'),
+                         self.__projectOpened)
+            self.connect(e5App().getObject("Project"), SIGNAL('projectClosed'),
+                         self.__projectClosed)
+            self.connect(e5App().getObject("Project"), SIGNAL('newProject'),
+                         self.__projectOpened)
+        
+        return None, True
+    
+    def deactivate(self):
+        """
+        Public method to deactivate this plugin.
+        """
+        e5App().unregisterPluginObject("RefactoringRope")
+        
+        if self.__newStyle:
+            e5App().getObject("Project").projectOpened.disconnect(
+                self.__object.projectOpened)
+            e5App().getObject("Project").projectClosed.disconnect(
+                self.__object.projectClosed)
+            e5App().getObject("Project").newProject.disconnect(
+                self.__object.projectOpened)
+            
+            e5App().getObject("Project").projectOpened.disconnect(
+                self.__projectOpened)
+            e5App().getObject("Project").projectClosed.disconnect(
+                self.__projectClosed)
+            e5App().getObject("Project").newProject.disconnect(
+                self.__projectOpened)
+        else:
+            self.disconnect(e5App().getObject("Project"), 
+                            SIGNAL('projectOpened'),
+                            self.__object.projectOpened)
+            self.disconnect(e5App().getObject("Project"), 
+                            SIGNAL('projectClosed'),
+                            self.__object.projectClosed)
+            self.disconnect(e5App().getObject("Project"), 
+                            SIGNAL('newProject'),
+                            self.__object.projectOpened)
+            
+            self.disconnect(e5App().getObject("Project"), 
+                            SIGNAL('projectOpened'),
+                            self.__projectOpened)
+            self.disconnect(e5App().getObject("Project"), 
+                            SIGNAL('projectClosed'),
+                            self.__projectClosed)
+            self.disconnect(e5App().getObject("Project"), 
+                            SIGNAL('newProject'),
+                            self.__projectOpened)
+        
+        self.__ui.menuBar().removeAction(self.__mainAct)
+        
+        self.__initialize()
+    
+    def __loadTranslator(self):
+        """
+        Private method to load the translation file.
+        """
+        if self.__ui is not None:
+            loc = self.__ui.getLocale()
+            if loc and loc != "C":
+                locale_dir = \
+                    os.path.join(os.path.dirname(__file__), 
+                                 "RefactoringRope", "i18n")
+                translation = "rope_%s" % loc
+                translator = QTranslator(None)
+                loaded = translator.load(translation, locale_dir)
+                if loaded:
+                    self.__translator = translator
+                    e5App().installTranslator(self.__translator)
+                else:
+                    print("Warning: translation file '{0}' could not"
+                          " be loaded.".format(translation))
+                    print("Using default.")
+    
+    def __projectOpened(self):
+        """
+        Public slot to handle the projectOpened signal.
+        """
+        if e5App().getObject("Project").getProjectLanguage() in ["Python3"]:
+            self.__mainAct.setEnabled(True)
+            self.__projectIsOpen = True
+    
+    def __projectClosed(self):
+        """
+        Public slot to handle the projectClosed signal.
+        """
+        self.__mainAct.setEnabled(False)
+        self.__projectIsOpen = False

eric ide

mercurial