PluginRefactoringRope.py

Sun, 30 Jan 2011 19:19:40 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 30 Jan 2011 19:19:40 +0100
changeset 20
83b71483e198
parent 1
9f687137a929
child 31
0389d4a924cc
permissions
-rw-r--r--

Made the code PEP-8 compliant.

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