Implemented the next step.

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

Implemented the next step.

.hgignore file | annotate | diff | comparison | revisions
PluginTimeTracker.e4p file | annotate | diff | comparison | revisions
TimeTracker/TimeTrackEntry.py file | annotate | diff | comparison | revisions
TimeTracker/TimeTracker.py file | annotate | diff | comparison | revisions
TimeTracker/TimeTrackerWidget.py file | annotate | diff | comparison | revisions
TimeTracker/icons/clock.png file | annotate | diff | comparison | revisions
--- a/.hgignore	Fri Oct 19 13:06:56 2012 +0200
+++ b/.hgignore	Fri Oct 19 15:54:12 2012 +0200
@@ -15,3 +15,4 @@
 glob:tmp
 glob:__pycache__
 glob:**.DS_Store
+glob:Ui_*.py
--- a/PluginTimeTracker.e4p	Fri Oct 19 13:06:56 2012 +0200
+++ b/PluginTimeTracker.e4p	Fri Oct 19 15:54:12 2012 +0200
@@ -148,5 +148,6 @@
     <FiletypeAssociation pattern="*.ts" type="TRANSLATIONS"/>
     <FiletypeAssociation pattern="*.ui" type="FORMS"/>
     <FiletypeAssociation pattern="*.ui.h" type="FORMS"/>
+    <FiletypeAssociation pattern="Ui_*.py" type="__IGNORE__"/>
   </FiletypeAssociations>
 </Project>
--- a/TimeTracker/TimeTrackEntry.py	Fri Oct 19 13:06:56 2012 +0200
+++ b/TimeTracker/TimeTrackEntry.py	Fri Oct 19 15:54:12 2012 +0200
@@ -31,6 +31,14 @@
         self.__continueDateTime = QDateTime()
         self.__paused = False
     
+    def __lt__(self, other):
+        """
+        Special method implementing the less than function.
+        
+        @param other reference to the other object (TimeTrackEntry)
+        """
+        return self.__startDateTime < other.getStartDateTime()
+    
     def toString(self):
         """
         Public method to get a string representation of the entry.
@@ -188,3 +196,11 @@
             self.__comment,
             self.__paused,
         )
+    
+    def getStartDateTime(self):
+        """
+        Public method to get the start date and time.
+        
+        @return start date and time (QDateTime)
+        """
+        return self.__startDateTime
--- a/TimeTracker/TimeTracker.py	Fri Oct 19 13:06:56 2012 +0200
+++ b/TimeTracker/TimeTracker.py	Fri Oct 19 15:54:12 2012 +0200
@@ -9,20 +9,21 @@
 
 import os
 
-from PyQt4.QtCore import pyqtSignal, QObject
+from PyQt4.QtCore import QObject
 
 from E5Gui.E5Application import e5App
 from E5Gui import E5MessageBox
 
 from .TimeTrackEntry import TimeTrackEntry
+from .TimeTrackerWidget import TimeTrackerWidget
+
+import UI.PixmapCache
 
 
 class TimeTracker(QObject):
     """
     Class implementing the time tracker object.
     """
-    currentEntryChanged = pyqtSignal()
-    
     FileName = "TimeTracker.txt"
     
     def __init__(self, plugin, parent=None):
@@ -39,6 +40,11 @@
         
         self.__e5project = e5App().getObject("Project")
         
+        self.__widget = TimeTrackerWidget(self)
+        self.__ui.addSideWidget(self.__ui.BottomSide, self.__widget,
+            UI.PixmapCache.getIcon(os.path.join("TimeTracker", "icons", "clock.png")),
+            self.tr("Time Tracker"))
+        
         self.__initialize()
     
     def __initialize(self):
@@ -51,6 +57,8 @@
         
         self.__entries = []
         self.__currentEntry = None
+        
+        self.__widget.clear()
     
     def projectOpened(self):
         """
@@ -66,10 +74,11 @@
             TimeTracker.FileName)
         
         self.__readTrackerEntries()
+        self.__widget.showTrackerEntries(sorted(self.__entries, reverse=True))
         
         self.__currentEntry = TimeTrackEntry()
         self.__currentEntry.start()
-        self.currentEntryChanged.emit()
+        self.__widget.setCurrentEntry(self.__currentEntry)
     
     def projectClosed(self):
         """
@@ -167,4 +176,3 @@
         # start a new time tracker entry
         self.__currentEntry = TimeTrackEntry()
         self.__currentEntry.start()
-        self.currentEntryChanged.emit()
--- a/TimeTracker/TimeTrackerWidget.py	Fri Oct 19 13:06:56 2012 +0200
+++ b/TimeTracker/TimeTrackerWidget.py	Fri Oct 19 15:54:12 2012 +0200
@@ -7,8 +7,8 @@
 Module implementing the time tracker widget.
 """
 
-from PyQt4.QtCore import pyqtSlot, QPoint
-from PyQt4.QtGui import QWidget, QMenu
+from PyQt4.QtCore import pyqtSlot, QPoint, Qt, QDate, QTime
+from PyQt4.QtGui import QWidget, QMenu, QTreeWidgetItem, QCursor
 
 from .Ui_TimeTrackerWidget import Ui_TimeTrackerWidget
 
@@ -79,6 +79,7 @@
         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):
         """
@@ -121,3 +122,55 @@
         """
         # 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()
Binary file TimeTracker/icons/clock.png has changed

eric ide

mercurial