PluginAssistantEric.py

Sun, 17 Jan 2010 19:22:18 +0000

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 17 Jan 2010 19:22:18 +0000
changeset 2
89cbc07f4bf0
child 5
e1a56c9a9c9d
permissions
-rw-r--r--

First commit after porting to Python3.

# -*- coding: utf-8 -*-

# Copyright (c) 2008 - 2010 Detlev Offenbach <detlev@die-offenbachs.de>
#

"""
Module implementing the Eric assistant plugin.
"""

import sys
import os

from PyQt4.QtCore import QObject, SIGNAL, QTranslator
from PyQt4.QtGui import QApplication

from E5Gui.E5Application import e5App

import Preferences

from AssistantEric.Assistant import AcsAPIs, AcsProject

# Start-Of-Header
name = "Assistant Eric Plugin"
author = "Detlev Offenbach <detlev@die-offenbachs.de>"
autoactivate = True
deactivateable = True
version = "2.0.0"
className = "AssistantEricPlugin"
packageName = "AssistantEric"
shortDescription = "Alternative autocompletion and calltips provider."
longDescription = """This plugin implements an alternative autocompletion and""" \
    """ calltips provider."""
needsRestart = True
pyqtApi = 2
# End-Of-Header

error = ""

assistantEricPluginObject = None

def createAutoCompletionPage(configDlg):
    """
    Module function to create the autocompletion configuration page.
    
    @return reference to the configuration page
    """
    global assistantEricPluginObject
    from AssistantEric.ConfigurationPages.AutoCompletionEricPage \
        import AutoCompletionEricPage
    page = AutoCompletionEricPage(assistantEricPluginObject)
    return page
    
def createCallTipsPage(configDlg):
    """
    Module function to create the calltips configuration page.
    
    @return reference to the configuration page
    """
    global assistantEricPluginObject
    from AssistantEric.ConfigurationPages.CallTipsEricPage \
        import CallTipsEricPage
    page = CallTipsEricPage(assistantEricPluginObject)
    return page
    
def getConfigData():
    """
    Module function returning data as required by the configuration dialog.
    
    @return dictionary containing the relevant data
    """
    return {
        "ericAutoCompletionPage" : \
            [QApplication.translate("AssistantEricPlugin", "Eric"), 
             os.path.join("AssistantEric", "ConfigurationPages", 
                          "eric.png"),
             createAutoCompletionPage, "editorAutocompletionPage", None],
        "ericCallTipsPage" : \
            [QApplication.translate("AssistantEricPlugin", "Eric"), 
             os.path.join("AssistantEric", "ConfigurationPages", 
                          "eric.png"),
             createCallTipsPage, "editorCalltipsPage", None],
    }

def prepareUninstall():
    """
    Module function to prepare for an uninstallation.
    """
    assistant = AssistantEricPlugin(None)
    assistant.prepareUninstall()
    
class AssistantEricPlugin(QObject):
    """
    Class implementing the Eric assistant 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.__defaults = {
            "AutoCompletionEnabled" : False, 
            "AutoCompletionSource" : AcsAPIs | AcsProject, 
            "CalltipsEnabled" : False, 
            "CallTipsContextShown" : 1, 
        }
        
        self.__translator = None
        self.__loadTranslator()
    
    def __initialize(self):
        """
        Private slot to (re)initialize the plugin.
        """
        self.__object = None
    
    def __checkQSql(self):
        """
        Private method to perform some checks on QSql.
        
        @return flag indicating QSql is ok (boolean)
        """
        global error
        
        try:
            from PyQt4.QtSql import QSqlDatabase
        except ImportError:
            error = self.trUtf8("PyQt4.QtSql is not available.")
            return False
        
        drivers = QSqlDatabase.drivers()
        if "QSQLITE" in drivers:
            return True
        else:
            error = self.trUtf8("The SQLite database driver is not available.")
            return False
    
    def activate(self):
        """
        Public method to activate this plugin.
        
        @return tuple of None and activation status (boolean)
        """
        global error
        error = ""     # clear previous error
        
        if not self.__checkQSql():
            return None, False
        
        global assistantEricPluginObject
        assistantEricPluginObject = self
        
        from AssistantEric.Assistant import Assistant
        
        self.__object = Assistant(self, self.__ui)
        e5App().registerPluginObject("AssistantEric", self.__object)
        
        self.__object.activate()
        
        return None, True
    
    def deactivate(self):
        """
        Public method to deactivate this plugin.
        """
        e5App().unregisterPluginObject("AssistantEric")
        
        self.__object.deactivate()
        
        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__), "AssistantEric", "i18n")
                translation = "assistant_%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 '%s' could not be loaded." % \
                        translation)
                    print("Using default.")
    
    def getPreferences(self, key):
        """
        Public method to retrieve the various refactoring settings.
        
        @param key the key of the value to get
        @param prefClass preferences class used as the storage area
        @return the requested refactoring setting
        """
        if key in ["AutoCompletionEnabled", "CalltipsEnabled"]:
            return Preferences.toBool(Preferences.Prefs.settings.value(
                "AssistantEric/" + key, self.__defaults[key]))
        else:
            return int(Preferences.Prefs.settings.value("AssistantEric/" + key,
                self.__defaults[key]))
    
    def setPreferences(self, key, value):
        """
        Public method to store the various refactoring settings.
        
        @param key the key of the setting to be set (string)
        @param value the value to be set
        @param prefClass preferences class used as the storage area
        """
        Preferences.Prefs.settings.setValue("AssistantEric/" + key, value)
        
        if key in ["AutoCompletionEnabled", "CalltipsEnabled"]:
            self.__object.setEnabled(key, value)
    
    def prepareUninstall(self):
        """
        Public method to prepare for an uninstallation.
        """
        Preferences.Prefs.settings.remove("AssistantEric")
    

eric ide

mercurial