TimeTracker/TimeTrackerWidget.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 pyqtSlot, QPoint, Qt, QDate, QTime, QFileInfo 14 from PyQt5.QtCore import pyqtSlot, QPoint, Qt, QDate, QTime, QFileInfo
15 from PyQt4.QtGui import QWidget, QMenu, QTreeWidgetItem, QCursor, QDialog 15 from PyQt5.QtGui import QCursor
16 from PyQt5.QtWidgets import QWidget, QMenu, QTreeWidgetItem, QDialog
16 17
17 from E5Gui import E5MessageBox, E5FileDialog 18 from E5Gui import E5MessageBox, E5FileDialog
18 19
19 from .Ui_TimeTrackerWidget import Ui_TimeTrackerWidget 20 from .Ui_TimeTrackerWidget import Ui_TimeTrackerWidget
20 21
125 126
126 @param pos position the menu should be shown at (QPoint) 127 @param pos position the menu should be shown at (QPoint)
127 """ 128 """
128 menu = QMenu() 129 menu = QMenu()
129 130
130 menu.addAction(self.tr("Edit"), self.__editEntry).setEnabled( 131 act = menu.addAction(self.tr("Edit"), self.__editEntry)
131 len(self.entriesList.selectedItems()) == 1) 132 act.setEnabled(
133 len(self.entriesList.selectedItems()) == 1 and
134 self.entriesList.selectedItems()[0].data(0, Qt.UserRole) > -1
135 )
132 menu.addAction(self.tr("Add"), self.__addEntry) 136 menu.addAction(self.tr("Add"), self.__addEntry)
133 menu.addAction(self.tr("Delete"), self.__deleteSelectedEntries) 137 act = menu.addAction(self.tr("Delete"), self.__deleteSelectedEntries)
138 act.setEnabled(
139 (len(self.entriesList.selectedItems()) == 1 and
140 self.entriesList.selectedItems()[0].data(0, Qt.UserRole) > -1) or
141 len(self.entriesList.selectedItems()) > 1
142 )
134 menu.addSeparator() 143 menu.addSeparator()
135 menu.addAction(self.tr("Save"), self.__saveEntries) 144 menu.addAction(self.tr("Save"), self.__saveEntries)
136 menu.addSeparator() 145 menu.addSeparator()
137 menu.addAction(self.tr("Import"), self.__importEntries) 146 menu.addAction(self.tr("Import"), self.__importEntries)
138 menu.addAction(self.tr("Export Selected"), 147 menu.addAction(self.tr("Export Selected"),
202 """ 211 """
203 Private slot to delete the selected tracker entries. 212 Private slot to delete the selected tracker entries.
204 """ 213 """
205 res = E5MessageBox.yesNo( 214 res = E5MessageBox.yesNo(
206 self, 215 self,
207 self.trUtf8("Delete Selected Entries"), 216 self.tr("Delete Selected Entries"),
208 self.trUtf8("""Do you really want to delete the selected""" 217 self.tr("""Do you really want to delete the selected"""
209 """ entries?""")) 218 """ entries?"""))
210 if res: 219 if res:
211 for item in self.entriesList.selectedItems(): 220 for item in self.entriesList.selectedItems():
212 eid = item.data(0, Qt.UserRole) 221 eid = item.data(0, Qt.UserRole)
213 if eid > -1: 222 if eid > -1:
214 # the current entry must not be deleted 223 # the current entry must not be deleted
229 """ 238 """
230 path = Preferences.getMultiProject("Workspace") or \ 239 path = Preferences.getMultiProject("Workspace") or \
231 Utilities.getHomeDir() 240 Utilities.getHomeDir()
232 fname = E5FileDialog.getOpenFileName( 241 fname = E5FileDialog.getOpenFileName(
233 None, 242 None,
234 self.trUtf8("Import Tracker Entries"), 243 self.tr("Import Tracker Entries"),
235 path, 244 path,
236 self.trUtf8("Text Files (*.txt);;All Files (*)")) 245 self.tr("Text Files (*.txt);;All Files (*)"))
237 if fname: 246 if fname:
238 fname = Utilities.toNativeSeparators(fname) 247 fname = Utilities.toNativeSeparators(fname)
239 if not os.path.exists(fname): 248 if not os.path.exists(fname):
240 E5MessageBox.critical( 249 E5MessageBox.critical(
241 self, 250 self,
242 self.trUtf8("Import Tracker Entries"), 251 self.tr("Import Tracker Entries"),
243 self.trUtf8("<p>The file <b>{0}</b> does not exist.</p>") 252 self.tr("<p>The file <b>{0}</b> does not exist.</p>")
244 .format(fname)) 253 .format(fname))
245 return 254 return
246 255
247 self.__tracker.importTrackerEntries(fname) 256 self.__tracker.importTrackerEntries(fname)
248 257
254 """ 263 """
255 path = Preferences.getMultiProject("Workspace") or \ 264 path = Preferences.getMultiProject("Workspace") or \
256 Utilities.getHomeDir() 265 Utilities.getHomeDir()
257 fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( 266 fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
258 self, 267 self,
259 self.trUtf8("Export Tracker Entries"), 268 self.tr("Export Tracker Entries"),
260 path, 269 path,
261 self.tr("Text Files (*.txt);;All Files (*)"), 270 self.tr("Text Files (*.txt);;All Files (*)"),
262 None, 271 None,
263 E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite)) 272 E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
264 if fname: 273 if fname:
268 if ex: 277 if ex:
269 fname += ex 278 fname += ex
270 if QFileInfo(fname).exists(): 279 if QFileInfo(fname).exists():
271 res = E5MessageBox.yesNo( 280 res = E5MessageBox.yesNo(
272 self, 281 self,
273 self.trUtf8("Export Tracker Entries"), 282 self.tr("Export Tracker Entries"),
274 self.trUtf8("<p>The file <b>{0}</b> already exists." 283 self.tr("<p>The file <b>{0}</b> already exists."
275 " Overwrite it?</p>").format(fname), 284 " Overwrite it?</p>").format(fname),
276 icon=E5MessageBox.Warning) 285 icon=E5MessageBox.Warning)
277 if not res: 286 if not res:
278 return 287 return
279 fname = Utilities.toNativeSeparators(fname) 288 fname = Utilities.toNativeSeparators(fname)
280 self.__tracker.saveTrackerEntries(filePath=fname, ids=ids) 289 self.__tracker.saveTrackerEntries(filePath=fname, ids=ids)
296 """ 305 """
297 Private slot to remove duplicate entries. 306 Private slot to remove duplicate entries.
298 """ 307 """
299 res = E5MessageBox.yesNo( 308 res = E5MessageBox.yesNo(
300 self, 309 self,
301 self.trUtf8("Remove Duplicate Tracker Entries"), 310 self.tr("Remove Duplicate Tracker Entries"),
302 self.trUtf8("""Are you sure you want to remove duplicate""" 311 self.tr("""Are you sure you want to remove duplicate"""
303 """ tracker entries? Only the one with the longest""" 312 """ tracker entries? Only the one with the longest"""
304 """ duration will be kept.""")) 313 """ duration will be kept."""))
305 if res: 314 if res:
306 self.__tracker.removeDuplicateTrackerEntries() 315 self.__tracker.removeDuplicateTrackerEntries()
307 316
308 def __mergeDuplicates(self): 317 def __mergeDuplicates(self):
309 """ 318 """
310 Private slot to merge duplicate entries. 319 Private slot to merge duplicate entries.
311 """ 320 """
312 res = E5MessageBox.yesNo( 321 res = E5MessageBox.yesNo(
313 self, 322 self,
314 self.trUtf8("Merge Duplicate Tracker Entries"), 323 self.tr("Merge Duplicate Tracker Entries"),
315 self.trUtf8("""Are you sure you want to merge duplicate""" 324 self.tr("""Are you sure you want to merge duplicate"""
316 """ tracker entries? The durations of duplicate""" 325 """ tracker entries? The durations of duplicate"""
317 """ ones will be added.""")) 326 """ ones will be added."""))
318 if res: 327 if res:
319 self.__tracker.mergeDuplicateTrackerEntries() 328 self.__tracker.mergeDuplicateTrackerEntries()
320 329
321 def __insertEntry(self, entry, index=-1): 330 def __insertEntry(self, entry, index=-1):
322 """ 331 """

eric ide

mercurial