PluginProjectDjangoTagsMenu.py

Sun, 02 Feb 2014 18:03:21 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 02 Feb 2014 18:03:21 +0100
changeset 1
b2f26d630942
parent 0
5ea8f371ff16
child 2
4be31b0908c7
permissions
-rw-r--r--

Implemented the basic framework.

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

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

"""
Module implementing the Django tags menu plugin.
"""

from __future__ import unicode_literals    # __IGNORE_WARNING__

import os

from PyQt4.QtCore import QObject, QTranslator
from PyQt4.QtGui import QMenu

from E5Gui.E5Application import e5App

# Start-of-Header
name = "Django Tags Menu Plugin"
author = "Detlev Offenbach <detlev@die-offenbachs.de>"
autoactivate = True
deactivateable = True
version = "0.1.0"
className = "ProjectDjangoTagsMenuPlugin"
packageName = "ProjectDjangoTagsMenu"
shortDescription = "Tags menu for Django projects."
longDescription = \
    """This plug-in adds a menu to select various tag templates to the""" \
    """ Django menu."""
needsRestart = False
pyqtApi = 2
# End-of-Header

error = ""


class ProjectDjangoTagsMenuPlugin(QObject):
    """
    Class implementing the Django tags menu plugin.
    """
    def __init__(self, ui):
        """
        Constructor
        
        @param ui reference to the user interface object (UI.UserInterface)
        """
        QObject.__init__(self, ui)
        self.__ui = ui
        
        self.__initMenu()
    
    def __initMenu(self):
        """
        Private slot to initialize the tags menu.
        """
        self.__menuAttached = False
        self.__menuAction = None
        self.__menuSeparator = None
        
        self.__menu = QMenu(self.tr("Template Tags"))
    
    def __attachMenu(self):
        """
        Private method to attach the menu to the Django menu.
        """
        if not self.__menuAttached:
            try:
                pluginObject = e5App().getPluginObject("ProjectDjango")
            except KeyError:
                pluginObject = None
            
            if pluginObject:
                djangoMenu = pluginObject.getMenu("main")
                djangoDatabaseMenuAction = \
                    pluginObject.getMenu("database").menuAction()
                self.__menuAction = djangoMenu.insertMenu(
                    djangoDatabaseMenuAction, self.__menu)
                self.__menuSeparator = djangoMenu.insertSeparator(
                    djangoDatabaseMenuAction)
                self.__menuAttached = True
    
    def __detachMenu(self):
        """
        Private method to detach the menu from the Django menu.
        """
        if self.__menuAttached:
            try:
                pluginObject = e5App().getPluginObject("ProjectDjango")
            except KeyError:
                pluginObject = None
            
            if pluginObject:
                djangoMenu = pluginObject.getMenu("main")
                djangoMenu.removeAction(self.__menuAction)
                djangoMenu.removeAction(self.__menuSeparator)
                
                self.__menuAction = None
                self.__menuSeparator = None
                self.__menuAttached = False
    
    def activate(self):
        """
        Public method to activate this plugin.
        
        @return tuple of None and activation status (boolean)
        """
        pluginManager = e5App().getObject("PluginManager")
        pluginManager.pluginActivated.connect(self.__pluginActivated)
        pluginManager.pluginAboutToBeDeactivated.connect(
            self.__pluginAboutToBeDeactivated)
        
        if pluginManager.isPluginActive("PluginProjectDjango"):
            self.__attachMenu()
        
        return None, True
    
    def deactivate(self):
        """
        Public method to deactivate this plugin.
        """
        self.__detachMenu()
        
        pluginManager = e5App().getObject("PluginManager")
        pluginManager.pluginActivated.disconnect(self.__pluginActivated)
        pluginManager.pluginAboutToBeDeactivated.disconnect(
            self.__pluginAboutToBeDeactivated)
    
    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__), "ProjectDjangoTagsMenu", "i18n")
                translation = "djangotagsmenu_%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 __pluginActivated(self, moduleName, pluginObject):
        """
        Private slot to react on plugin activation of the Django plugin.
        
        @param moduleName name of the module activated (string)
        @param pluginObject reference to the activated plug-in object (object)
        """
        if moduleName == "PluginProjectDjango":
            self.__attachMenu()
    
    def __pluginAboutToBeDeactivated(self, moduleName, pluginObject):
        """
        Private slot to react on the Django plugin about to be deactivated.
        
        @param moduleName name of the module about to be deactivated (string)
        @param pluginObject reference to the about to be deactivated
            plug-in object (object)
        """
        if moduleName == "PluginProjectDjango":
            self.__detachMenu()

eric ide

mercurial