TimeTracker/TimeTracker.py

Sun, 25 Apr 2021 17:29:38 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 25 Apr 2021 17:29:38 +0200
changeset 94
a3d936304e51
parent 93
7ffe7ae4947d
child 98
693e42176007
permissions
-rw-r--r--

Implemented some code simplifications.

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
92
81b63c2dc40c Updated copyright for 2021.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 91
diff changeset
3 # Copyright (c) 2012 - 2021 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 object.
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
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import os
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11
51
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
12 from PyQt5.QtCore import Qt, QObject
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
13 from PyQt5.QtGui import QKeySequence
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 from E5Gui.E5Application import e5App
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 from E5Gui import E5MessageBox
21
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
17 from E5Gui.E5Action import E5Action
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
2
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
19 import UI.PixmapCache
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 class TimeTracker(QObject):
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 Class implementing the time tracker object.
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 FileName = "TimeTracker.txt"
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27
85
246e51cc11ae Replaced pixmap icons by vector icons.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 84
diff changeset
28 def __init__(self, plugin, iconSuffix, parent=None):
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 Constructor
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31
85
246e51cc11ae Replaced pixmap icons by vector icons.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 84
diff changeset
32 @param plugin reference to the plugin object
246e51cc11ae Replaced pixmap icons by vector icons.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 84
diff changeset
33 @type TimeTrackerPlugin
246e51cc11ae Replaced pixmap icons by vector icons.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 84
diff changeset
34 @param iconSuffix suffix for the icons
246e51cc11ae Replaced pixmap icons by vector icons.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 84
diff changeset
35 @type str
246e51cc11ae Replaced pixmap icons by vector icons.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 84
diff changeset
36 @param parent parent
246e51cc11ae Replaced pixmap icons by vector icons.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 84
diff changeset
37 @type QObject
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 QObject.__init__(self, parent)
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 self.__plugin = plugin
85
246e51cc11ae Replaced pixmap icons by vector icons.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 84
diff changeset
42 self.__iconSuffix = iconSuffix
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 self.__ui = parent
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 self.__e5project = e5App().getObject("Project")
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 def __initialize(self):
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 """
51
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
49 Private slot to initialize some member variables.
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 self.__projectPath = ''
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 self.__trackerFilePath = ''
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 self.__projectOpen = False
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54
4
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
55 self.__entries = {} # key: entry ID, value tracker entry
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 self.__currentEntry = None
2
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
57
058c6a316ca8 Implemented the next step.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 1
diff changeset
58 self.__widget.clear()
12
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
59 self.__widget.setEnabled(False)
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60
21
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
61 def activate(self):
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
62 """
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
63 Public method to activate the time tracker.
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
64 """
33
a8706d6bd932 Modified the code to do lazy import.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 31
diff changeset
65 from .TimeTrackerWidget import TimeTrackerWidget
a8706d6bd932 Modified the code to do lazy import.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 31
diff changeset
66
21
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
67 self.__widget = TimeTrackerWidget(self)
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
68 self.__ui.addSideWidget(
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
69 self.__ui.BottomSide, self.__widget,
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
70 UI.PixmapCache.getIcon(
85
246e51cc11ae Replaced pixmap icons by vector icons.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 84
diff changeset
71 os.path.join("TimeTracker", "icons",
246e51cc11ae Replaced pixmap icons by vector icons.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 84
diff changeset
72 "clock-{0}".format(self.__iconSuffix))
246e51cc11ae Replaced pixmap icons by vector icons.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 84
diff changeset
73 ),
21
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
74 self.tr("Time Tracker"))
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
75
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
76 self.__activateAct = E5Action(
51
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
77 self.tr('Time Tracker'),
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
78 self.tr('T&ime Tracker'),
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
79 QKeySequence(self.tr("Alt+Shift+I")),
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
80 0, self,
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
81 'time_tracker_activate')
51
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
82 self.__activateAct.setStatusTip(self.tr(
21
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
83 "Switch the input focus to the Time Tracker window."))
51
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
84 self.__activateAct.setWhatsThis(self.tr(
21
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
85 """<b>Activate Time Tracker</b>"""
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
86 """<p>This switches the input focus to the Time Tracker"""
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
87 """ window.</p>"""
21
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
88 ))
51
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
89 self.__activateAct.triggered.connect(self.__activateWidget)
21
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
90
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
91 self.__ui.addE5Actions([self.__activateAct], 'ui')
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
92 menu = self.__ui.getMenu("subwindow")
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
93 menu.addAction(self.__activateAct)
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
94
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
95 self.__initialize()
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
96
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
97 def deactivate(self):
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
98 """
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
99 Public method to deactivate the time tracker.
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
100 """
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
101 menu = self.__ui.getMenu("subwindow")
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
102 menu.removeAction(self.__activateAct)
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
103 self.__ui.removeE5Actions([self.__activateAct], 'ui')
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
104 self.__ui.removeSideWidget(self.__widget)
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
105
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 def projectOpened(self):
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 Public slot to handle the projectOpened signal.
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 if self.__projectOpen:
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 self.projectClosed()
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 self.__projectOpen = True
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 self.__projectPath = self.__e5project.getProjectPath()
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 self.__trackerFilePath = os.path.join(
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 self.__e5project.getProjectManagementDir(),
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 TimeTracker.FileName)
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 self.__readTrackerEntries()
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
120 self.__widget.showTrackerEntries(sorted(self.__entries.values(),
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
121 reverse=True))
12
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
122 self.__widget.setEnabled(True)
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123
4
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
124 self.startTrackerEntry()
1
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 def projectClosed(self):
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 Public slot to handle the projectClosed signal.
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 """
21
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
130 if self.__projectOpen:
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
131 self.stopTrackerEntry()
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
132 self.saveTrackerEntries()
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 self.__initialize()
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 def __readTrackerEntries(self):
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 Private slot to read the time tracker entries from a file.
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 if os.path.exists(self.__trackerFilePath):
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 try:
89
e38b60832145 Changed calls of exec_() into exec().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 87
diff changeset
141 with open(self.__trackerFilePath, "r", encoding="utf-8") as f:
e38b60832145 Changed calls of exec_() into exec().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 87
diff changeset
142 data = f.read()
91
3051e6733cda Changed code to not use the OSError aliases (IOError, EnvironmentError, socket.error and select.error) anymore.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 89
diff changeset
143 except OSError as err:
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
144 E5MessageBox.critical(
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
145 self.__ui,
51
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
146 self.tr("Read Time Tracker File"),
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
147 self.tr("""<p>The time tracker file <b>{0}</b> could"""
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
148 """ not be read.</p><p>Reason: {1}</p>""")
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
149 .format(self.__trackerFilePath, str(err)))
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 return
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151
33
a8706d6bd932 Modified the code to do lazy import.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 31
diff changeset
152 from .TimeTrackEntry import TimeTrackEntry
a8706d6bd932 Modified the code to do lazy import.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 31
diff changeset
153
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 invalidCount = 0
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 for line in data.splitlines():
8
17d90f9425fc Made some behavior dependent of configuration parameters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
156 entry = TimeTrackEntry(self.__plugin)
4
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
157 eid = entry.fromString(line.strip())
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
158 if eid > -1:
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
159 self.__entries[eid] = entry
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 else:
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 invalidCount += 1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 if invalidCount:
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
164 E5MessageBox.information(
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
165 self.__ui,
51
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
166 self.tr("Read Time Tracker File"),
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
167 self.tr("""<p>The time tracker file <b>{0}</b>"""
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
168 """ contained %n invalid entries. These"""
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
169 """ have been discarded.</p>""", "",
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
170 invalidCount).format(self.__trackerFilePath))
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171
69
021ac1e44e32 Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 68
diff changeset
172 def saveTrackerEntries(self, filePath="", ids=None):
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 """
5
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
174 Public slot to save the tracker entries to a file.
6
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
175
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
176 @keyparam filePath path and name of the file to write the entries to
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
177 (string)
6
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
178 @keyparam ids list of entry IDs to be written (list of integer)
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 """
6
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
180 if not filePath:
be12cde5813f Completed the export functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
181 filePath = self.__trackerFilePath
94
a3d936304e51 Implemented some code simplifications.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 93
diff changeset
182 entriesList = (
a3d936304e51 Implemented some code simplifications.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 93
diff changeset
183 [self.__entries[eid] for eid in ids if eid in self.__entries]
a3d936304e51 Implemented some code simplifications.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 93
diff changeset
184 if ids else
a3d936304e51 Implemented some code simplifications.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 93
diff changeset
185 self.__entries.values()
a3d936304e51 Implemented some code simplifications.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 93
diff changeset
186 )
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 try:
89
e38b60832145 Changed calls of exec_() into exec().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 87
diff changeset
188 with open(filePath, "w", encoding="utf-8") as f:
e38b60832145 Changed calls of exec_() into exec().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 87
diff changeset
189 for entry in entriesList:
e38b60832145 Changed calls of exec_() into exec().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 87
diff changeset
190 if entry.isValid():
e38b60832145 Changed calls of exec_() into exec().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 87
diff changeset
191 f.write(entry.toString() + "\n")
91
3051e6733cda Changed code to not use the OSError aliases (IOError, EnvironmentError, socket.error and select.error) anymore.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 89
diff changeset
192 except OSError as err:
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
193 E5MessageBox.critical(
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
194 self.__ui,
51
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
195 self.tr("Save Time Tracker File"),
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
196 self.tr("""<p>The time tracker file <b>{0}</b> could"""
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
197 """ not be saved.</p><p>Reason: {1}</p>""")
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
198 .format(self.__trackerFilePath, str(err)))
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199
9
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
200 def importTrackerEntries(self, fname):
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
201 """
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
202 Public slot to import tracker entries from a file.
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
203
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
204 @param fname name of the file to import (string)
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
205 """
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
206 try:
89
e38b60832145 Changed calls of exec_() into exec().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 87
diff changeset
207 with open(fname, "r", encoding="utf-8") as f:
e38b60832145 Changed calls of exec_() into exec().
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 87
diff changeset
208 data = f.read()
91
3051e6733cda Changed code to not use the OSError aliases (IOError, EnvironmentError, socket.error and select.error) anymore.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 89
diff changeset
209 except OSError as err:
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
210 E5MessageBox.critical(
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
211 self.__ui,
51
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
212 self.tr("Import Time Tracker File"),
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
213 self.tr("""<p>The time tracker file <b>{0}</b> could"""
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
214 """ not be read.</p><p>Reason: {1}</p>""")
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
215 .format(fname, str(err)))
9
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
216 return
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
217
33
a8706d6bd932 Modified the code to do lazy import.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 31
diff changeset
218 from .TimeTrackEntry import TimeTrackEntry
a8706d6bd932 Modified the code to do lazy import.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 31
diff changeset
219
9
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
220 invalidCount = 0
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
221 duplicateCount = 0
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
222 entries = []
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
223 for line in data.splitlines():
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
224 entry = TimeTrackEntry(self.__plugin)
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
225 eid = entry.fromString(line.strip())
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
226 if eid > -1:
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
227 entries.append(entry)
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
228 else:
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
229 invalidCount += 1
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
230
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
231 if not self.__plugin.getPreferences("AllowDuplicates"):
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
232 startDateTimes = [
51
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
233 e.getStartDateTime() for e in self.__entries.values()]
9
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
234 for entry in entries[:]:
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
235 if entry.getStartDateTime() in startDateTimes:
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
236 entries.remove(entry)
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
237 duplicateCount += 1
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
238
94
a3d936304e51 Implemented some code simplifications.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 93
diff changeset
239 start = (
a3d936304e51 Implemented some code simplifications.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 93
diff changeset
240 max(self.__entries.keys()) + 1
a3d936304e51 Implemented some code simplifications.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 93
diff changeset
241 if len(self.__entries.keys()) else
a3d936304e51 Implemented some code simplifications.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 93
diff changeset
242 0
a3d936304e51 Implemented some code simplifications.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 93
diff changeset
243 )
a3d936304e51 Implemented some code simplifications.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 93
diff changeset
244 for nextID, entry in enumerate(entries, start=start):
9
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
245 entry.setID(nextID)
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
246 self.__entries[nextID] = entry
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
247
11
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
248 if self.__plugin.getPreferences("AutoSave"):
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
249 self.saveTrackerEntries()
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
250
9
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
251 if invalidCount != 0 or duplicateCount != 0:
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
252 if invalidCount != 0 and duplicateCount != 0:
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
253 msg = self.tr(
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
254 """<p>The time tracker file <b>{0}</b> contained"""
9
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
255 """ %n invalid entries.""",
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
256 "", invalidCount).format(fname)
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
257 msg += " " + self.tr(
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
258 """ %n duplicate entries were detected.""", "",
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
259 duplicateCount)
9
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
260 elif duplicateCount != 0:
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
261 msg = self.tr(
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
262 """<p>The time tracker file <b>{0}</b> contained"""
9
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
263 """ %n duplicate entries.""",
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
264 "", duplicateCount).format(fname)
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
265 elif invalidCount != 0:
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
266 msg = self.tr(
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
267 """<p>The time tracker file <b>{0}</b> contained"""
9
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
268 """ %n invalid entries.""",
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
269 "", invalidCount).format(fname)
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
270 msg += " " + self.tr(
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
271 """ %n entries have been ignored.</p>""",
15
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
272 "", invalidCount + duplicateCount)
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
273 E5MessageBox.information(
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
274 self.__ui,
51
d0afa82c3deb Ported to PyQt5 and eric6.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
275 self.tr("Import Time Tracker File"),
9
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
276 msg)
10
64acf4452ac0 Completed the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
277
64acf4452ac0 Completed the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
278 self.__widget.clear()
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
279 self.__widget.showTrackerEntries(sorted(self.__entries.values(),
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
280 reverse=True))
10
64acf4452ac0 Completed the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
281 self.__widget.setCurrentEntry(self.__currentEntry)
9
1c7fd3151ba2 Implemented the import functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
282
15
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
283 def addTrackerEntry(self, startDateTime, duration, task, comment):
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
284 """
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
285 Public method to add a new tracker entry based on the given data.
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
286
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
287 @param startDateTime start date and time (QDateTime)
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
288 @param duration duration in minutes (integer)
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
289 @param task task description (string)
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
290 @param comment comment (string)
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
291 """
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
292 if not self.__plugin.getPreferences("AllowDuplicates"):
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
293 startDateTimes = [
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
294 entry.getStartDateTime() for entry in self.__entries.values()]
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
295 if startDateTime in startDateTimes:
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
296 return
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
297
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
298 if duration < self.__plugin.getPreferences("MinimumDuration"):
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
299 return
15
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
300
94
a3d936304e51 Implemented some code simplifications.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 93
diff changeset
301 nextID = (
a3d936304e51 Implemented some code simplifications.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 93
diff changeset
302 max(self.__entries.keys()) + 1
a3d936304e51 Implemented some code simplifications.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 93
diff changeset
303 if len(self.__entries.keys()) else
a3d936304e51 Implemented some code simplifications.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 93
diff changeset
304 0
a3d936304e51 Implemented some code simplifications.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 93
diff changeset
305 )
15
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
306
33
a8706d6bd932 Modified the code to do lazy import.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 31
diff changeset
307 from .TimeTrackEntry import TimeTrackEntry
a8706d6bd932 Modified the code to do lazy import.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 31
diff changeset
308
15
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
309 entry = TimeTrackEntry(self.__plugin)
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
310 entry.setID(nextID)
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
311 entry.setStartDateTime(startDateTime)
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
312 entry.setDuration(duration)
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
313 entry.setTask(task)
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
314 entry.setComment(comment)
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
315 self.__entries[nextID] = entry
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
316
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
317 self.__widget.clear()
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
318 self.__widget.showTrackerEntries(sorted(self.__entries.values(),
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
319 reverse=True))
15
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
320 self.__widget.setCurrentEntry(self.__currentEntry)
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
321
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 def pauseTrackerEntry(self):
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 Public method to pause the current tracker entry.
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 self.__currentEntry.pause()
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 def continueTrackerEntry(self):
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 Public method to continue the current tracker entry.
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 self.__currentEntry.continue_()
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333
4
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
334 def stopTrackerEntry(self):
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
335 """
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
336 Public method to stop the current tracker entry.
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
337
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
338 @return tuple of the ID assigned to the stopped tracker entry and
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
339 the duration (integer, integer)
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
340 """
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
341 duration = 0
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
342 nextID = -1
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
343 if self.__currentEntry is not None:
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
344 self.__currentEntry.stop()
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
345 if self.__currentEntry.isValid():
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
346 if len(self.__entries.keys()):
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
347 nextID = max(self.__entries.keys()) + 1
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
348 else:
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
349 nextID = 0
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
350 self.__currentEntry.setID(nextID)
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
351 self.__entries[nextID] = self.__currentEntry
8
17d90f9425fc Made some behavior dependent of configuration parameters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
352 if self.__plugin.getPreferences("AutoSave"):
17d90f9425fc Made some behavior dependent of configuration parameters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
353 self.saveTrackerEntries()
4
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
354 duration = self.__currentEntry.getDuration()
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
355 self.__currentEntry = None
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
356
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
357 return nextID, duration
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
358
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
359 def startTrackerEntry(self):
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
360 """
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
361 Public method to start a new tracker entry.
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
362 """
33
a8706d6bd932 Modified the code to do lazy import.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 31
diff changeset
363 from .TimeTrackEntry import TimeTrackEntry
a8706d6bd932 Modified the code to do lazy import.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 31
diff changeset
364
8
17d90f9425fc Made some behavior dependent of configuration parameters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
365 self.__currentEntry = TimeTrackEntry(self.__plugin)
4
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
366 self.__currentEntry.start()
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
367 self.__widget.setCurrentEntry(self.__currentEntry)
c67abfea9955 Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2
diff changeset
368
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369 def getCurrentEntry(self):
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371 Public method to get a reference to the current tracker entry.
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
372
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
373 @return reference to the current entry (TimeTrackEntry)
1
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 """
a0beac325e5a Added a few source files.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 return self.__currentEntry
5
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
376
12
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
377 def getEntry(self, eid):
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
378 """
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
379 Public method to get a tracker entry given its ID.
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
380
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
381 @param eid ID of the tracker entry (integer)
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
382 @return entry for the given ID (TimeTrackEntry) or None
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
383 """
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
384 if eid in self.__entries:
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
385 return self.__entries[eid]
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
386 else:
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
387 return None
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
388
5
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
389 def deleteTrackerEntry(self, eid):
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
390 """
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
391 Public method to delete a tracker entry given its ID.
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
392
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
393 @param eid ID of the tracker entry (integer)
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
394 """
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
395 if eid in self.__entries:
6633e2836f8f Implemented some more of the TimeTrackerWidget.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
396 del self.__entries[eid]
11
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
397
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
398 def removeDuplicateTrackerEntries(self):
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
399 """
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
400 Public slot to remove duplicate time tracker entries.
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
401
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
402 If entries with the identical start date and time are found, the one
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
403 with the longest duration is kept.
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
404 """
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
405 entries = {}
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
406 for entry in self.__entries.values():
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
407 dt = entry.getStartDateTime()
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
408 if dt in entries:
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
409 if entry.getDuration() > entries[dt].getDuration():
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
410 entries[dt] = entry
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
411 else:
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
412 entries[dt] = entry
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
413
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
414 self.__entries = {}
94
a3d936304e51 Implemented some code simplifications.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 93
diff changeset
415 for nextID, entry in enumerate(sorted(entries.values())):
11
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
416 entry.setID(nextID)
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
417 self.__entries[nextID] = entry
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
418
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
419 if self.__plugin.getPreferences("AutoSave"):
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
420 self.saveTrackerEntries()
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
421
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
422 self.__widget.clear()
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
423 self.__widget.showTrackerEntries(sorted(self.__entries.values(),
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
424 reverse=True))
11
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
425 self.__widget.setCurrentEntry(self.__currentEntry)
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
426
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
427 def mergeDuplicateTrackerEntries(self):
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
428 """
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
429 Public slot to merge duplicate time tracker entries.
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
430
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
431 If entries with the identical start date and time are found, the
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
432 durations of these entries are added.
11
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
433 """
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
434 entries = {}
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
435 for entry in self.__entries.values():
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
436 dt = entry.getStartDateTime()
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
437 if dt in entries:
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
438 entries[dt].addDuration(entry.getDuration())
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
439 else:
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
440 entries[dt] = entry
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
441
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
442 self.__entries = {}
94
a3d936304e51 Implemented some code simplifications.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 93
diff changeset
443 for nextID, entry in enumerate(sorted(entries.values())):
11
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
444 entry.setID(nextID)
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
445 self.__entries[nextID] = entry
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
446
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
447 if self.__plugin.getPreferences("AutoSave"):
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
448 self.saveTrackerEntries()
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
449
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
450 self.__widget.clear()
42
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
451 self.__widget.showTrackerEntries(sorted(self.__entries.values(),
37049a04b8fa Fixed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 36
diff changeset
452 reverse=True))
11
1eabdd26c44e Implemented the remove and merge duplicate entries actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
453 self.__widget.setCurrentEntry(self.__currentEntry)
12
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
454
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
455 def entryChanged(self):
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
456 """
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
457 Public method to indicate an external change to any of the entries.
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
458 """
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
459 if self.__plugin.getPreferences("AutoSave"):
6c91abc72022 Implemented the 'edit entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
460 self.saveTrackerEntries()
15
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
461
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
462 def getPreferences(self, key):
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
463 """
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
464 Public method to retrieve the various settings.
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
465
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
466 @param key the key of the value to get
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
467 @return the requested setting
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
468 """
645506ab3376 Implemented the 'add entry' action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
469 return self.__plugin.getPreferences(key)
21
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
470
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
471 def __activateWidget(self):
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
472 """
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
473 Private slot to handle the activation of the project browser.
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
474 """
93
7ffe7ae4947d Removed support for outdated eric6 versions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 92
diff changeset
475 uiLayoutType = self.__ui.getLayoutType()
75
d88d2d4943de TimeTRacker: fixed an issue switching to the time tracker via the keyboard shortcut.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 73
diff changeset
476
d88d2d4943de TimeTRacker: fixed an issue switching to the time tracker via the keyboard shortcut.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 73
diff changeset
477 if uiLayoutType == "Toolboxes":
21
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
478 self.__ui.hToolboxDock.show()
77
ade3656b8ad3 TimeTracker: fixed another issue switching to the time tracker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 75
diff changeset
479 self.__ui.hToolbox.setCurrentWidget(self.__widget)
75
d88d2d4943de TimeTRacker: fixed an issue switching to the time tracker via the keyboard shortcut.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 73
diff changeset
480 elif uiLayoutType == "Sidebars":
21
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
481 self.__ui.bottomSidebar.show()
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
482 self.__ui.bottomSidebar.setCurrentWidget(self.__widget)
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
483 else:
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
484 self.__widget.show()
28b7956c9608 Fixed a few bugs and added actions to activate the time tracker window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 15
diff changeset
485 self.__widget.setFocus(Qt.ActiveWindowFocusReason)

eric ide

mercurial