PluginTimeTracker.py

Sat, 12 Jul 2014 16:29:25 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 12 Jul 2014 16:29:25 +0200
changeset 51
d0afa82c3deb
parent 47
f201a23a8cd7
child 57
02b9538f4095
permissions
-rw-r--r--

Ported to PyQt5 and eric6.

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

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

"""
Module implementing the Time Tracker plugin.
"""

from __future__ import unicode_literals

import os

from PyQt5.QtCore import QObject, QTranslator, QCoreApplication

from E5Gui.E5Application import e5App

import Preferences

from TimeTracker.TimeTracker import TimeTracker

# Start-Of-Header
name = "Time Tracker Plugin"
author = "Detlev Offenbach <detlev@die-offenbachs.de>"
autoactivate = True
deactivateable = True
version = "2.0.0"
className = "TimeTrackerPlugin"
packageName = "TimeTracker"
shortDescription = "Time Tracker to keep track of the project time."
longDescription = \
    """This plug-in implements a time tracker to keep track""" \
    """ of the time used for a project. The time can be subdivided""" \
    """ into tasks."""
needsRestart = False
pyqtApi = 2
python2Compatible = True
# End-Of-Header

error = ""

timeTrackerPluginObject = None
    

def createTimeTrackerPage(configDlg):
    """
    Module function to create the Time Tracker configuration page.
    
    @param configDlg reference to the configuration dialog
    @return reference to the configuration page
    """
    global timeTrackerPluginObject
    from TimeTracker.ConfigurationPage.TimeTrackerPage import TimeTrackerPage
    page = TimeTrackerPage(timeTrackerPluginObject)
    return page
    

def getConfigData():
    """
    Module function returning data as required by the configuration dialog.
    
    @return dictionary containing the relevant data
    """
    if e5App().getObject("UserInterface").versionIsNewer('5.2.99', '20121012'):
        return {
            "timeTrackerPage": [
                QCoreApplication.translate("TimeTrackerPlugin",
                                           "Time Tracker"),
                os.path.join("TimeTracker", "icons", "clock.png"),
                createTimeTrackerPage, None, None],
        }
    else:
        return {}


def prepareUninstall():
    """
    Module function to prepare for an uninstallation.
    """
    Preferences.Prefs.settings.remove(TimeTrackerPlugin.PreferencesKey)


class TimeTrackerPlugin(QObject):
    """
    Class implementing the Eric assistant plugin.
    """
    PreferencesKey = "TimeTracker"
    
    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 = {
            "MinimumDuration": 2,
            "AutoSave": False,
            "AllowDuplicates": False,
        }
        
        self.__translator = None
        self.__loadTranslator()
    
    def __initialize(self):
        """
        Private slot to (re)initialize the plugin.
        """
        self.__object = None
        
        self.__e5project = e5App().getObject("Project")
    
    def __checkVersions(self):
        """
        Private function to check that the eric6 version is ok.
        
        @return flag indicating version is ok (boolean)
        """
        global error
        
        if self.__ui.versionIsNewer('5.99.99', '20140701'):
            error = ""
        else:
            error = self.tr("eric6 version is too old, {0}, {1} or newer"
                            " needed.").format("6.0.0", "20140701")
            return False
        
        return True
    
    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.__checkVersions():
            return None, False
        
        global timeTrackerPluginObject
        timeTrackerPluginObject = self
        
        self.__object = TimeTracker(self, self.__ui)
        self.__object.activate()
        e5App().registerPluginObject("TimeTracker", self.__object)
        
        if self.__e5project.isOpen():
            self.__object.projectOpened()
        
        self.__e5project.newProject.connect(self.__object.projectOpened)
        self.__e5project.projectOpened.connect(self.__object.projectOpened)
        self.__e5project.projectClosed.connect(self.__object.projectClosed)
        
        return None, True
    
    def deactivate(self):
        """
        Public method to deactivate this plugin.
        """
        e5App().unregisterPluginObject("TimeTracker")
        self.__object.deactivate()
        
        self.__e5project.newProject.disconnect(self.__object.projectOpened)
        self.__e5project.projectOpened.disconnect(self.__object.projectOpened)
        self.__e5project.projectClosed.disconnect(self.__object.projectClosed)
        
        self.__object.projectClosed()
        
        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__), "TimeTracker", "i18n")
                translation = "timetracker_{0}".format(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 getPreferences(self, key):
        """
        Public method to retrieve the various settings.
        
        @param key the key of the value to get
        @return the requested setting
        """
        if key in ["MinimumDuration"]:
            return int(Preferences.Prefs.settings.value(
                self.PreferencesKey + "/" + key, self.__defaults[key]))
        elif key in ["AutoSave", "AllowDuplicates"]:
            return Preferences.toBool(
                Preferences.Prefs.settings.value(
                    self.PreferencesKey + "/" + key, self.__defaults[key]))
        else:
            return Preferences.Prefs.settings.value(
                self.PreferencesKey + "/" + key, self.__defaults[key])
    
    def setPreferences(self, key, value):
        """
        Public method to store the various settings.
        
        @param key the key of the setting to be set (string)
        @param value the value to be set
        """
        Preferences.Prefs.settings.setValue(
            self.PreferencesKey + "/" + key, value)

eric ide

mercurial