TimeTracker/TimeTracker.py

changeset 51
d0afa82c3deb
parent 47
f201a23a8cd7
child 57
02b9538f4095
equal deleted inserted replaced
48:ad21e6a32d82 51:d0afa82c3deb
9 9
10 from __future__ import unicode_literals 10 from __future__ import unicode_literals
11 11
12 import os 12 import os
13 13
14 from PyQt4.QtCore import Qt, QObject 14 from PyQt5.QtCore import Qt, QObject
15 from PyQt4.QtGui import QKeySequence 15 from PyQt5.QtGui import QKeySequence
16 16
17 from E5Gui.E5Application import e5App 17 from E5Gui.E5Application import e5App
18 from E5Gui import E5MessageBox 18 from E5Gui import E5MessageBox
19 from E5Gui.E5Action import E5Action 19 from E5Gui.E5Action import E5Action
20 20
41 41
42 self.__e5project = e5App().getObject("Project") 42 self.__e5project = e5App().getObject("Project")
43 43
44 def __initialize(self): 44 def __initialize(self):
45 """ 45 """
46 Public slot to initialize some member variables. 46 Private slot to initialize some member variables.
47 """ 47 """
48 self.__projectPath = '' 48 self.__projectPath = ''
49 self.__trackerFilePath = '' 49 self.__trackerFilePath = ''
50 self.__projectOpen = False 50 self.__projectOpen = False
51 51
67 UI.PixmapCache.getIcon( 67 UI.PixmapCache.getIcon(
68 os.path.join("TimeTracker", "icons", "clock.png")), 68 os.path.join("TimeTracker", "icons", "clock.png")),
69 self.tr("Time Tracker")) 69 self.tr("Time Tracker"))
70 70
71 self.__activateAct = E5Action( 71 self.__activateAct = E5Action(
72 self.trUtf8('Time Tracker'), 72 self.tr('Time Tracker'),
73 self.trUtf8('T&ime Tracker'), 73 self.tr('T&ime Tracker'),
74 QKeySequence(self.trUtf8("Alt+Shift+I")), 74 QKeySequence(self.tr("Alt+Shift+I")),
75 0, self, 75 0, self,
76 'time_tracker_activate') 76 'time_tracker_activate')
77 self.__activateAct.setStatusTip(self.trUtf8( 77 self.__activateAct.setStatusTip(self.tr(
78 "Switch the input focus to the Time Tracker window.")) 78 "Switch the input focus to the Time Tracker window."))
79 self.__activateAct.setWhatsThis(self.trUtf8( 79 self.__activateAct.setWhatsThis(self.tr(
80 """<b>Activate Time Tracker</b>""" 80 """<b>Activate Time Tracker</b>"""
81 """<p>This switches the input focus to the Time Tracker""" 81 """<p>This switches the input focus to the Time Tracker"""
82 """ window.</p>""" 82 """ window.</p>"""
83 )) 83 ))
84 self.__activateAct.triggered[()].connect(self.__activateWidget) 84 self.__activateAct.triggered.connect(self.__activateWidget)
85 85
86 self.__ui.addE5Actions([self.__activateAct], 'ui') 86 self.__ui.addE5Actions([self.__activateAct], 'ui')
87 menu = self.__ui.getMenu("subwindow") 87 menu = self.__ui.getMenu("subwindow")
88 menu.addAction(self.__activateAct) 88 menu.addAction(self.__activateAct)
89 89
137 data = f.read() 137 data = f.read()
138 f.close() 138 f.close()
139 except (IOError, OSError) as err: 139 except (IOError, OSError) as err:
140 E5MessageBox.critical( 140 E5MessageBox.critical(
141 self.__ui, 141 self.__ui,
142 self.trUtf8("Read Time Tracker File"), 142 self.tr("Read Time Tracker File"),
143 self.trUtf8("""<p>The time tracker file <b>{0}</b> could""" 143 self.tr("""<p>The time tracker file <b>{0}</b> could"""
144 """ not be read.</p><p>Reason: {1}</p>""") 144 """ not be read.</p><p>Reason: {1}</p>""")
145 .format(self.__trackerFilePath, str(err))) 145 .format(self.__trackerFilePath, str(err)))
146 return 146 return
147 147
148 from .TimeTrackEntry import TimeTrackEntry 148 from .TimeTrackEntry import TimeTrackEntry
149 149
157 invalidCount += 1 157 invalidCount += 1
158 158
159 if invalidCount: 159 if invalidCount:
160 E5MessageBox.information( 160 E5MessageBox.information(
161 self.__ui, 161 self.__ui,
162 self.trUtf8("Read Time Tracker File"), 162 self.tr("Read Time Tracker File"),
163 self.trUtf8("""<p>The time tracker file <b>{0}</b>""" 163 self.tr("""<p>The time tracker file <b>{0}</b>"""
164 """ contained %n invalid entries. These""" 164 """ contained %n invalid entries. These"""
165 """ have been discarded.</p>""", "", 165 """ have been discarded.</p>""", "",
166 invalidCount).format(self.__trackerFilePath)) 166 invalidCount).format(self.__trackerFilePath))
167 167
168 def saveTrackerEntries(self, filePath="", ids=[]): 168 def saveTrackerEntries(self, filePath="", ids=[]):
169 """ 169 """
170 Public slot to save the tracker entries to a file. 170 Public slot to save the tracker entries to a file.
171 171
187 f.write(entry.toString() + "\n") 187 f.write(entry.toString() + "\n")
188 f.close() 188 f.close()
189 except (IOError, OSError) as err: 189 except (IOError, OSError) as err:
190 E5MessageBox.critical( 190 E5MessageBox.critical(
191 self.__ui, 191 self.__ui,
192 self.trUtf8("Save Time Tracker File"), 192 self.tr("Save Time Tracker File"),
193 self.trUtf8("""<p>The time tracker file <b>{0}</b> could""" 193 self.tr("""<p>The time tracker file <b>{0}</b> could"""
194 """ not be saved.</p><p>Reason: {1}</p>""") 194 """ not be saved.</p><p>Reason: {1}</p>""")
195 .format(self.__trackerFilePath, str(err))) 195 .format(self.__trackerFilePath, str(err)))
196 196
197 def importTrackerEntries(self, fname): 197 def importTrackerEntries(self, fname):
198 """ 198 """
199 Public slot to import tracker entries from a file. 199 Public slot to import tracker entries from a file.
205 data = f.read() 205 data = f.read()
206 f.close() 206 f.close()
207 except (IOError, OSError) as err: 207 except (IOError, OSError) as err:
208 E5MessageBox.critical( 208 E5MessageBox.critical(
209 self.__ui, 209 self.__ui,
210 self.trUtf8("Import Time Tracker File"), 210 self.tr("Import Time Tracker File"),
211 self.trUtf8("""<p>The time tracker file <b>{0}</b> could""" 211 self.tr("""<p>The time tracker file <b>{0}</b> could"""
212 """ not be read.</p><p>Reason: {1}</p>""") 212 """ not be read.</p><p>Reason: {1}</p>""")
213 .format(fname, str(err))) 213 .format(fname, str(err)))
214 return 214 return
215 215
216 from .TimeTrackEntry import TimeTrackEntry 216 from .TimeTrackEntry import TimeTrackEntry
217 217
226 else: 226 else:
227 invalidCount += 1 227 invalidCount += 1
228 228
229 if not self.__plugin.getPreferences("AllowDuplicates"): 229 if not self.__plugin.getPreferences("AllowDuplicates"):
230 startDateTimes = [ 230 startDateTimes = [
231 entry.getStartDateTime() for entry in self.__entries.values()] 231 e.getStartDateTime() for e in self.__entries.values()]
232 for entry in entries[:]: 232 for entry in entries[:]:
233 if entry.getStartDateTime() in startDateTimes: 233 if entry.getStartDateTime() in startDateTimes:
234 entries.remove(entry) 234 entries.remove(entry)
235 duplicateCount += 1 235 duplicateCount += 1
236 236
268 msg += " " + self.tr( 268 msg += " " + self.tr(
269 """ %n entries have been ignored.</p>""", 269 """ %n entries have been ignored.</p>""",
270 "", invalidCount + duplicateCount) 270 "", invalidCount + duplicateCount)
271 E5MessageBox.information( 271 E5MessageBox.information(
272 self.__ui, 272 self.__ui,
273 self.trUtf8("Import Time Tracker File"), 273 self.tr("Import Time Tracker File"),
274 msg) 274 msg)
275 275
276 self.__widget.clear() 276 self.__widget.clear()
277 self.__widget.showTrackerEntries(sorted(self.__entries.values(), 277 self.__widget.showTrackerEntries(sorted(self.__entries.values(),
278 reverse=True)) 278 reverse=True))

eric ide

mercurial