--- a/TimeTracker/TimeTrackerWidget.py Sat Oct 20 12:49:34 2012 +0200 +++ b/TimeTracker/TimeTrackerWidget.py Sat Oct 20 20:01:33 2012 +0200 @@ -7,13 +7,16 @@ Module implementing the time tracker widget. """ -from PyQt4.QtCore import pyqtSlot, QPoint, Qt, QDate, QTime +from PyQt4.QtCore import pyqtSlot, QPoint, Qt, QDate, QTime, QFileInfo from PyQt4.QtGui import QWidget, QMenu, QTreeWidgetItem, QCursor -from E5Gui import E5MessageBox +from E5Gui import E5MessageBox, E5FileDialog from .Ui_TimeTrackerWidget import Ui_TimeTrackerWidget +import Preferences +import Utilities + class TimeTrackerWidget(QWidget, Ui_TimeTrackerWidget): """ @@ -89,9 +92,13 @@ """ # stop the current tracker eid, duration = self.__tracker.stopTrackerEntry() - itm = self.entriesList.topLevelItem(0) - itm.setText(self.DurationColumn, self.tr("{0} min").format(duration)) - itm.setData(0, Qt.UserRole, eid) + if eid > -1: + itm = self.entriesList.topLevelItem(0) + itm.setText(self.DurationColumn, self.tr("{0} min").format(duration)) + itm.setData(0, Qt.UserRole, eid) + else: + itm = self.entriesList.takeTopLevelItem(0) + del itm self.entriesList.resizeColumnToContents(self.CommentColumn) # start a new one @@ -114,7 +121,7 @@ menu.addSeparator() menu.addAction(self.tr("Import"), self.__importEntries) menu.addAction(self.tr("Export Selected"), self.__exportSelectedEntries) - menu.addAction(self.tr("Export All"), self.__exportAllEntries) + menu.addAction(self.tr("Export All"), self.__exportEntries) menu.exec_(QCursor.pos()) def __editEntry(self): @@ -154,19 +161,49 @@ # TODO: not implemented yet raise NotImplementedError + def __exportEntries(self, ids=[]): + """ + Private method to export all or selected entries. + + @keyparam ids list of IDs to export or all if empty (list of integer) + """ + path = Preferences.getMultiProject("Workspace") or Utilities.getHomeDir() + fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( + self, + self.trUtf8("Export Tracker Entries"), + path, + self.tr("Text Files (*.txt);;All Files (*)"), + None, + E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite)) + if fname: + ext = QFileInfo(fname).suffix() + if not ext: + ex = selectedFilter.split("(*")[1].split(")")[0] + if ex: + fname += ex + if QFileInfo(fname).exists(): + res = E5MessageBox.yesNo(self, + self.trUtf8("Export Tracker Entries"), + self.trUtf8("<p>The file <b>{0}</b> already exists." + " Overwrite it?</p>").format(fname), + icon=E5MessageBox.Warning) + if not res: + return + fname = Utilities.toNativeSeparators(fname) + self.__tracker.saveTrackerEntries(filePath=fname, ids=ids) + def __exportSelectedEntries(self): """ Private slot to export the selected tracker entries. """ - # TODO: not implemented yet - raise NotImplementedError - - def __exportAllEntries(self): - """ - Private slot to export all tracker entries. - """ - # TODO: not implemented yet - raise NotImplementedError + ids = [] + for itm in self.entriesList.selectedItems(): + eid = itm.data(0, Qt.UserRole) + if eid > -1: + ids.append(eid) + + if ids: + self.__exportEntries(ids=ids) def __insertEntry(self, entry, index=-1): """