TimeTracker/TimeTrackerWidget.py

changeset 6
be12cde5813f
parent 5
6633e2836f8f
child 9
1c7fd3151ba2
--- 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):
         """

eric ide

mercurial