--- 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