TimeTracker/TimeTrackerWidget.py

Fri, 19 Oct 2012 15:54:12 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 19 Oct 2012 15:54:12 +0200
changeset 2
058c6a316ca8
parent 1
a0beac325e5a
child 3
ce9309868f8a
permissions
-rw-r--r--

Implemented the next step.

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

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

"""
Module implementing the time tracker widget.
"""

from PyQt4.QtCore import pyqtSlot, QPoint, Qt, QDate, QTime
from PyQt4.QtGui import QWidget, QMenu, QTreeWidgetItem, QCursor

from .Ui_TimeTrackerWidget import Ui_TimeTrackerWidget


class TimeTrackerWidget(QWidget, Ui_TimeTrackerWidget):
    """
    Class implementing the time tracker widget.
    """
    def __init__(self, tracker, parent=None):
        """
        Constructor
        
        @param tracker reference to the time tracker (TimeTracker)
        @param parent reference to the parent widget (QWidget)
        """
        super().__init__(parent)
        self.setupUi(self)
        
        self.__tracker = tracker
    
    @pyqtSlot(str)
    def on_taskCombo_editTextChanged(self, p0):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        raise NotImplementedError
    
    @pyqtSlot(str)
    def on_commentCombo_editTextChanged(self, p0):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        raise NotImplementedError
    
    @pyqtSlot(bool)
    def on_pauseButton_toggled(self, checked):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        raise NotImplementedError
    
    @pyqtSlot()
    def on_newButton_clicked(self):
        """
        Slot documentation goes here.
        """
        # TODO: not implemented yet
        raise NotImplementedError
    
    @pyqtSlot(QPoint)
    def on_entriesList_customContextMenuRequested(self, pos):
        """
        Private slot to create the context menu and show it.
        
        @param pos position the menu should be shown at (QPoint)
        """
        menu = QMenu()
        
        menu.addAction(self.tr("Edit"), self.__editEntry).setEnabled(
            len(self.entriesList.selectedItems()) == 1)
        menu.addAction(self.tr("Delete"), self.__deleteSelectedEntries)
        menu.addSeparator()
        menu.addAction(self.tr("Save"), self.__saveEntries)
        menu.addSeparator()
        menu.addAction(self.tr("Import"), self.__importEntries)
        menu.addAction(self.tr("Export Selected"), self.__exportSelectedEntries)
        menu.addAction(self.tr("Export All"), self.__exportAllEntries)
        menu.exec_(QCursor.pos())
    
    def __editEntry(self):
        """
        Private slot to edit the selected tracker entry.
        """
        # TODO: not implemented yet
        raise NotImplementedError
    
    def __deleteSelectedEntries(self):
        """
        Private slot to delete the selected tracker entries.
        """
        # TODO: not implemented yet
        raise NotImplementedError
    
    def __saveEntries(self):
        """
        Private slot to save the tracker entries.
        """
        # TODO: not implemented yet
        raise NotImplementedError
    
    def __importEntries(self):
        """
        Private slot to import tracker entries.
        """
        # TODO: not implemented yet
        raise NotImplementedError
    
    def __exportSelectedEntries(self):
        """
        Private slot to export the selected tracker entries.
        """
        # TODO: not implemented yet
        raise NotImplementedError
    
    def __exportAllEntries(self):
        """
        Private slot to export all tracker entries.
        """
        # TODO: not implemented yet
        raise NotImplementedError
    
    def __insertEntry(self, entry, index=-1):
        """
        Private method to insert a tracker entry into the list.
        
        @param entry reference to the tracker entry (TimeTrackEntry)
        @param index index the entry is to be inserted; -1 for at the end
            (integer)
        """
        date, time, duration, task, comment, paused = entry.getEntryData()
        itm = QTreeWidgetItem(
            ["{0}, {1}".format(date, time), str(duration), task, comment])
        itm.setTextAlignment(1, Qt.AlignRight)
        if index == -1:
            self.entriesList.addTopLevelItem(itm)
        else:
            self.entriesList.insertTopLevelItem(index, itm)
    
    def showTrackerEntries(self, entries):
        """
        Public method to show the tracker entries of the current project.
        
        @param entries list of tracker entries (list of TimeTrackEntry)
        """
        for entry in entries:
            self.__insertEntry(entry)
        for column in range(self.entriesList.columnCount()):
            self.entriesList.resizeColumnToContents(column)
    
    def setCurrentEntry(self, entry):
        """
        Public method to set the current entry.
        
        @param entry current entry (TimeTrackEntry)
        """
        self.__insertEntry(entry, 0)
        date, time, duration, task, comment, paused = entry.getEntryData()
        self.startDateTimeEdit.setDateTime(entry.getStartDateTime())
        self.durationSpinBox.setValue(duration)
        self.taskCombo.setEditText(task)
        self.commentCombo.setEditText(comment)
    
    def clear(self):
        """
        Public method to clear all the data.
        """
        self.entriesList.clear()
        self.startDateTimeEdit.setDate(QDate(2000, 1, 1))
        self.startDateTimeEdit.setTime(QTime(0, 0, 0))
        self.durationSpinBox.setValue(0)
        self.taskCombo.clear()
        self.commentCombo.clear()

eric ide

mercurial