TimeTracker/TimeTrackerWidget.py

Wed, 23 Apr 2014 23:25:17 +0200

author
T.Rzepka <Tobias.Rzepka@gmail.com>
date
Wed, 23 Apr 2014 23:25:17 +0200
changeset 47
f201a23a8cd7
parent 44
fe7ddb709c6a
child 50
0856ce4ba3d6
child 51
d0afa82c3deb
permissions
-rw-r--r--

python2Compatible flag added.

1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
44
fe7ddb709c6a Updated copyright for 2014.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 42
diff changeset
3 # Copyright (c) 2012 - 2014 Detlev Offenbach <detlev@die-offenbachs.de>
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the time tracker widget.
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
47
f201a23a8cd7 python2Compatible flag added.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 44
diff changeset
10 from __future__ import unicode_literals
36
d3312087bb1d Python 2 compatibility for Eric 5
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 33
diff changeset
11
9
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
12 import os
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
13
6
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
14 from PyQt4.QtCore import pyqtSlot, QPoint, Qt, QDate, QTime, QFileInfo
12
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
15 from PyQt4.QtGui import QWidget, QMenu, QTreeWidgetItem, QCursor, QDialog
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
6
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
17 from E5Gui import E5MessageBox, E5FileDialog
5
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
18
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 from .Ui_TimeTrackerWidget import Ui_TimeTrackerWidget
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
6
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
21 import Preferences
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
22 import Utilities
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
23
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 class TimeTrackerWidget(QWidget, Ui_TimeTrackerWidget):
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 Class implementing the time tracker widget.
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 """
3
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
29 DurationColumn = 1
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
30 TaskColumn = 2
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
31 CommentColumn = 3
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
32
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 def __init__(self, tracker, parent=None):
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 Constructor
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 @param tracker reference to the time tracker (TimeTracker)
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 @param parent reference to the parent widget (QWidget)
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 """
36
d3312087bb1d Python 2 compatibility for Eric 5
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 33
diff changeset
40 super(TimeTrackerWidget, self).__init__(parent)
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 self.setupUi(self)
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 self.__tracker = tracker
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 @pyqtSlot(str)
3
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
46 def on_taskCombo_editTextChanged(self, txt):
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
47 """
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
48 Private slot handling changes of the task description of the current
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
49 entry.
3
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
50
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
51 @param txt new task description (string)
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 """
3
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
53 itm = self.entriesList.topLevelItem(0)
39
82593471100f Fixed an issue occurring spuriously when uninstalling the plug-in.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
54 if itm:
82593471100f Fixed an issue occurring spuriously when uninstalling the plug-in.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
55 itm.setText(self.TaskColumn, txt)
82593471100f Fixed an issue occurring spuriously when uninstalling the plug-in.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
56 self.entriesList.resizeColumnToContents(self.TaskColumn)
3
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
57
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
58 entry = self.__tracker.getCurrentEntry()
39
82593471100f Fixed an issue occurring spuriously when uninstalling the plug-in.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
59 if entry:
82593471100f Fixed an issue occurring spuriously when uninstalling the plug-in.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
60 entry.setTask(txt)
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 @pyqtSlot(str)
3
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
63 def on_commentCombo_editTextChanged(self, txt):
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
64 """
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
65 Private slot handling changes of the comment of the current entry.
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
66
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
67 @param txt new comment (string)
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 """
3
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
69 itm = self.entriesList.topLevelItem(0)
39
82593471100f Fixed an issue occurring spuriously when uninstalling the plug-in.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
70 if itm:
82593471100f Fixed an issue occurring spuriously when uninstalling the plug-in.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
71 itm.setText(self.CommentColumn, txt)
82593471100f Fixed an issue occurring spuriously when uninstalling the plug-in.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
72 self.entriesList.resizeColumnToContents(self.CommentColumn)
3
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
73
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
74 entry = self.__tracker.getCurrentEntry()
39
82593471100f Fixed an issue occurring spuriously when uninstalling the plug-in.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
75 if entry:
82593471100f Fixed an issue occurring spuriously when uninstalling the plug-in.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
76 entry.setComment(txt)
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 @pyqtSlot(bool)
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 def on_pauseButton_toggled(self, checked):
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 """
3
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
81 Private slot to pause the current timing.
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
82
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
83 @param checked flag indicating the checked status of the button
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
84 (boolean)
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 """
3
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
86 if checked:
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
87 self.__tracker.pauseTrackerEntry()
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
88
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
89 entry = self.__tracker.getCurrentEntry()
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
90 duration = entry.getDuration()
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
91
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
92 itm = self.entriesList.topLevelItem(0)
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
93 itm.setText(self.DurationColumn,
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
94 self.tr("{0} min").format(duration))
13
402a0962c225 Corrected the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
95 self.entriesList.resizeColumnToContents(self.DurationColumn)
4
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
96
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
97 self.durationSpinBox.setValue(duration)
3
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
98 else:
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
99 self.__tracker.continueTrackerEntry()
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 @pyqtSlot()
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 def on_newButton_clicked(self):
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 """
4
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
104 Private slot to end the current timer and start a new one.
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 """
4
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
106 # stop the current tracker
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
107 eid, duration = self.__tracker.stopTrackerEntry()
6
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
108 if eid > -1:
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
109 itm = self.entriesList.topLevelItem(0)
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
110 itm.setText(self.DurationColumn,
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
111 self.tr("{0} min").format(duration))
6
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
112 itm.setData(0, Qt.UserRole, eid)
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
113 else:
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
114 itm = self.entriesList.takeTopLevelItem(0)
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
115 del itm
13
402a0962c225 Corrected the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
116 self.__resizeColumns()
4
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
117
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
118 # start a new one
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
119 self.__tracker.startTrackerEntry()
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 @pyqtSlot(QPoint)
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 def on_entriesList_customContextMenuRequested(self, pos):
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 Private slot to create the context menu and show it.
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 @param pos position the menu should be shown at (QPoint)
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 menu = QMenu()
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 menu.addAction(self.tr("Edit"), self.__editEntry).setEnabled(
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 len(self.entriesList.selectedItems()) == 1)
12
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
132 menu.addAction(self.tr("Add"), self.__addEntry)
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 menu.addAction(self.tr("Delete"), self.__deleteSelectedEntries)
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 menu.addSeparator()
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 menu.addAction(self.tr("Save"), self.__saveEntries)
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 menu.addSeparator()
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 menu.addAction(self.tr("Import"), self.__importEntries)
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
138 menu.addAction(self.tr("Export Selected"),
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
139 self.__exportSelectedEntries)\
9
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
140 .setEnabled(len(self.entriesList.selectedItems()) != 0)
6
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
141 menu.addAction(self.tr("Export All"), self.__exportEntries)
11
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
142 menu.addSeparator()
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
143 menu.addAction(self.tr("Remove duplicates"), self.__removeDuplicates)
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
144 menu.addAction(self.tr("Merge duplicates"), self.__mergeDuplicates)
2
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
145 menu.exec_(QCursor.pos())
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146
12
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
147 def __addEntry(self):
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
148 """
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
149 Private slot to manually add an entry.
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
150 """
33
a8706d6bd932 Modified the code to do lazy import.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 31
diff changeset
151 from .TimeTrackerEntryDialog import TimeTrackerEntryDialog
a8706d6bd932 Modified the code to do lazy import.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 31
diff changeset
152
15
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 14
diff changeset
153 tasks = []
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 14
diff changeset
154 for index in range(self.taskCombo.count()):
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 14
diff changeset
155 tasks.append(self.taskCombo.itemText(index))
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 14
diff changeset
156 comments = []
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 14
diff changeset
157 for index in range(self.commentCombo.count()):
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 14
diff changeset
158 comments.append(self.commentCombo.itemText(index))
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 14
diff changeset
159 dlg = TimeTrackerEntryDialog(self.__tracker, None, tasks, comments)
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 14
diff changeset
160 if dlg.exec_() == QDialog.Accepted:
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 14
diff changeset
161 self.__tracker.addTrackerEntry(*dlg.getData())
12
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
162
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 def __editEntry(self):
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 Private slot to edit the selected tracker entry.
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 """
13
402a0962c225 Corrected the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
167 itm = self.entriesList.selectedItems()[0]
402a0962c225 Corrected the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
168 eid = itm.data(0, Qt.UserRole)
12
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
169 if eid > -1:
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
170 # the current entry is edited via the elements of this widget
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
171 entry = self.__tracker.getEntry(eid)
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
172 if entry is not None:
33
a8706d6bd932 Modified the code to do lazy import.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 31
diff changeset
173 from .TimeTrackerEntryDialog import TimeTrackerEntryDialog
a8706d6bd932 Modified the code to do lazy import.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 31
diff changeset
174
12
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
175 tasks = []
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
176 for index in range(self.taskCombo.count()):
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
177 tasks.append(self.taskCombo.itemText(index))
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
178 comments = []
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
179 for index in range(self.commentCombo.count()):
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
180 comments.append(self.commentCombo.itemText(index))
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
181 dlg = TimeTrackerEntryDialog(self.__tracker, entry, tasks,
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
182 comments)
14
25f7323b308d Corrected the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
183 if dlg.exec_() == QDialog.Accepted:
25f7323b308d Corrected the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
184 start, duration, task, comment = dlg.getData()
25f7323b308d Corrected the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
185
25f7323b308d Corrected the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
186 entry.setStartDateTime(start)
25f7323b308d Corrected the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
187 entry.setDuration(duration)
25f7323b308d Corrected the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
188 entry.setTask(task)
25f7323b308d Corrected the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
189 entry.setComment(comment)
25f7323b308d Corrected the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
190 self.__tracker.entryChanged()
25f7323b308d Corrected the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
191
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
192 date, time, duration, task, comment = \
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
193 entry.getEntryData()[1:-1]
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
194 itm.setText(0, self.tr("{0}, {1}", "date, time")
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
195 .format(date, time))
14
25f7323b308d Corrected the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
196 itm.setText(1, self.tr("{0} min").format(duration))
25f7323b308d Corrected the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
197 itm.setText(2, task)
25f7323b308d Corrected the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
198 itm.setText(3, comment)
25f7323b308d Corrected the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
199 self.__resizeColumns()
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 def __deleteSelectedEntries(self):
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 Private slot to delete the selected tracker entries.
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 """
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
205 res = E5MessageBox.yesNo(
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
206 self,
5
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
207 self.trUtf8("Delete Selected Entries"),
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
208 self.trUtf8("""Do you really want to delete the selected"""
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
209 """ entries?"""))
5
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
210 if res:
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
211 for item in self.entriesList.selectedItems():
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
212 eid = item.data(0, Qt.UserRole)
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
213 if eid > -1:
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
214 # the current entry must not be deleted
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
215 self.entriesList.takeTopLevelItem(
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
216 self.entriesList.indexOfTopLevelItem(item))
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
217 self.__tracker.deleteTrackerEntry(eid)
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
218 del item
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 def __saveEntries(self):
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 Private slot to save the tracker entries.
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 """
5
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
224 self.__tracker.saveTrackerEntries()
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 def __importEntries(self):
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 Private slot to import tracker entries.
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 """
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
230 path = Preferences.getMultiProject("Workspace") or \
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
231 Utilities.getHomeDir()
9
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
232 fname = E5FileDialog.getOpenFileName(
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
233 None,
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
234 self.trUtf8("Import Tracker Entries"),
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
235 path,
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
236 self.trUtf8("Text Files (*.txt);;All Files (*)"))
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
237 if fname:
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
238 fname = Utilities.toNativeSeparators(fname)
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
239 if not os.path.exists(fname):
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
240 E5MessageBox.critical(
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
241 self,
9
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
242 self.trUtf8("Import Tracker Entries"),
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
243 self.trUtf8("<p>The file <b>{0}</b> does not exist.</p>")
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
244 .format(fname))
9
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
245 return
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
246
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
247 self.__tracker.importTrackerEntries(fname)
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248
6
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
249 def __exportEntries(self, ids=[]):
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
250 """
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
251 Private method to export all or selected entries.
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
252
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
253 @keyparam ids list of IDs to export or all if empty (list of integer)
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
254 """
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
255 path = Preferences.getMultiProject("Workspace") or \
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
256 Utilities.getHomeDir()
6
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
257 fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
258 self,
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
259 self.trUtf8("Export Tracker Entries"),
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
260 path,
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
261 self.tr("Text Files (*.txt);;All Files (*)"),
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
262 None,
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
263 E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
264 if fname:
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
265 ext = QFileInfo(fname).suffix()
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
266 if not ext:
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
267 ex = selectedFilter.split("(*")[1].split(")")[0]
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
268 if ex:
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
269 fname += ex
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
270 if QFileInfo(fname).exists():
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
271 res = E5MessageBox.yesNo(
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
272 self,
6
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
273 self.trUtf8("Export Tracker Entries"),
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
274 self.trUtf8("<p>The file <b>{0}</b> already exists."
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
275 " Overwrite it?</p>").format(fname),
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
276 icon=E5MessageBox.Warning)
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
277 if not res:
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
278 return
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
279 fname = Utilities.toNativeSeparators(fname)
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
280 self.__tracker.saveTrackerEntries(filePath=fname, ids=ids)
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
281
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 def __exportSelectedEntries(self):
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 Private slot to export the selected tracker entries.
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 """
6
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
286 ids = []
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
287 for itm in self.entriesList.selectedItems():
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
288 eid = itm.data(0, Qt.UserRole)
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
289 if eid > -1:
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
290 ids.append(eid)
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
291
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
292 if ids:
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
293 self.__exportEntries(ids=ids)
2
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
294
11
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
295 def __removeDuplicates(self):
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
296 """
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
297 Private slot to remove duplicate entries.
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
298 """
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
299 res = E5MessageBox.yesNo(
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
300 self,
11
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
301 self.trUtf8("Remove Duplicate Tracker Entries"),
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
302 self.trUtf8("""Are you sure you want to remove duplicate"""
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
303 """ tracker entries? Only the one with the longest"""
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
304 """ duration will be kept."""))
11
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
305 if res:
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
306 self.__tracker.removeDuplicateTrackerEntries()
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
307
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
308 def __mergeDuplicates(self):
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
309 """
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
310 Private slot to merge duplicate entries.
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
311 """
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
312 res = E5MessageBox.yesNo(
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
313 self,
11
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
314 self.trUtf8("Merge Duplicate Tracker Entries"),
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
315 self.trUtf8("""Are you sure you want to merge duplicate"""
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
316 """ tracker entries? The durations of duplicate"""
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 39
diff changeset
317 """ ones will be added."""))
11
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
318 if res:
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
319 self.__tracker.mergeDuplicateTrackerEntries()
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
320
2
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
321 def __insertEntry(self, entry, index=-1):
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
322 """
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
323 Private method to insert a tracker entry into the list.
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
324
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
325 @param entry reference to the tracker entry (TimeTrackEntry)
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
326 @param index index the entry is to be inserted; -1 for at the end
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
327 (integer)
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
328 """
4
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
329 eid, date, time, duration, task, comment, paused = entry.getEntryData()
2
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
330 itm = QTreeWidgetItem(
4
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
331 [self.tr("{0}, {1}", "date, time").format(date, time),
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
332 self.tr("{0} min").format(duration), task, comment])
2
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
333 itm.setTextAlignment(1, Qt.AlignRight)
4
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
334 itm.setData(0, Qt.UserRole, eid)
2
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
335 if index == -1:
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
336 self.entriesList.addTopLevelItem(itm)
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
337 else:
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
338 self.entriesList.insertTopLevelItem(index, itm)
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
339
3
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
340 def __resizeColumns(self):
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
341 """
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
342 Private slot to resize the columns of the entries list.
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
343 """
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
344 for column in range(self.entriesList.columnCount()):
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
345 self.entriesList.resizeColumnToContents(column)
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
346
2
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
347 def showTrackerEntries(self, entries):
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
348 """
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
349 Public method to show the tracker entries of the current project.
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
350
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
351 @param entries list of tracker entries (list of TimeTrackEntry)
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
352 """
12
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
353 self.taskCombo.addItem("")
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
354 self.commentCombo.addItem("")
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
355
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
356 tasks = []
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
357 comments = []
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
358
2
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
359 for entry in entries:
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
360 self.__insertEntry(entry)
12
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
361 task = entry.getTask()
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
362 if task and task not in tasks:
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
363 tasks.append(task)
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
364 comment = entry.getComment()
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
365 if comment and comment not in comments:
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
366 comments.append(comment)
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
367
3
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
368 self.__resizeColumns()
12
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
369 if tasks:
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
370 self.taskCombo.addItems(sorted(tasks))
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
371 if comments:
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
372 self.commentCombo.addItems(sorted(comments))
2
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
373
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
374 def setCurrentEntry(self, entry):
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
375 """
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
376 Public method to set the current entry.
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
377
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
378 @param entry current entry (TimeTrackEntry)
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
379 """
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
380 self.__insertEntry(entry, 0)
3
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
381 self.__resizeColumns()
ce9309868f8a Implemented a bit more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
382
4
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
383 eid, date, time, duration, task, comment, paused = entry.getEntryData()
2
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
384 self.startDateTimeEdit.setDateTime(entry.getStartDateTime())
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
385 self.durationSpinBox.setValue(duration)
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
386 self.taskCombo.setEditText(task)
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
387 self.commentCombo.setEditText(comment)
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
388
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
389 def clear(self):
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
390 """
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
391 Public method to clear all the data.
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
392 """
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
393 self.entriesList.clear()
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
394 self.startDateTimeEdit.setDate(QDate(2000, 1, 1))
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
395 self.startDateTimeEdit.setTime(QTime(0, 0, 0))
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
396 self.durationSpinBox.setValue(0)
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
397 self.taskCombo.clear()
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
398 self.commentCombo.clear()

eric ide

mercurial