summaryrefslogtreecommitdiffstats
path: root/karm/taskview.h
diff options
context:
space:
mode:
Diffstat (limited to 'karm/taskview.h')
-rw-r--r--karm/taskview.h238
1 files changed, 238 insertions, 0 deletions
diff --git a/karm/taskview.h b/karm/taskview.h
new file mode 100644
index 00000000..f1cf7807
--- /dev/null
+++ b/karm/taskview.h
@@ -0,0 +1,238 @@
+#ifndef KARM_TASK_VIEW_H
+#define KARM_TASK_VIEW_H
+
+#include <qdict.h>
+#include <qptrlist.h>
+#include <qptrstack.h>
+
+#include <klistview.h>
+
+#include "desktoplist.h"
+#include "resourcecalendar.h"
+#include "karmstorage.h"
+#include "mainwindow.h"
+#include "reportcriteria.h"
+#include <qtimer.h>
+//#include "desktoptracker.h"
+
+//#include "karmutility.h"
+
+class QListBox;
+class QString;
+class QTextStream;
+class QTimer;
+
+class KMenuBar;
+class KToolBar;
+
+class DesktopTracker;
+class EditTaskDialog;
+class IdleTimeDetector;
+class Preferences;
+class Task;
+class KarmStorage;
+class HistoryEvent;
+
+using namespace KCal;
+
+/**
+ * Container and interface for the tasks.
+ */
+
+class TaskView : public KListView
+{
+ Q_OBJECT
+
+ public:
+ TaskView( QWidget *parent = 0, const char *name = 0, const QString &icsfile = "" );
+ virtual ~TaskView();
+
+ /** Return the first item in the view, cast to a Task pointer. */
+ Task* first_child() const;
+
+ /** Return the current item in the view, cast to a Task pointer. */
+ Task* current_item() const;
+
+ /** Return the i'th item (zero-based), cast to a Task pointer. */
+ Task* item_at_index(int i);
+
+ /** Load the view from storage. */
+ void load( QString filename="" );
+
+ /** Close the storage and release lock. */
+ void closeStorage();
+
+ /** Reset session time to zero for all tasks. */
+ void startNewSession();
+
+ /** Reset session and total time to zero for all tasks. */
+ void resetTimeForAllTasks();
+
+ /** Return the total number if items in the view. */
+ long count();
+
+ /** Return list of start/stop events for given date range. */
+ QValueList<HistoryEvent> getHistory(const QDate& from, const QDate& to) const;
+
+ /** Schedule that we should save very soon */
+ void scheduleSave();
+
+ /** Return preferences user selected on settings dialog. **/
+ Preferences *preferences();
+
+ /** Add a task to view and storage. */
+ QString addTask( const QString& taskame, long total, long session, const DesktopList& desktops,
+ Task* parent = 0 );
+
+ public slots:
+ /** Save to persistent storage. */
+ QString save();
+
+ /** Start the timer on the current item (task) in view. */
+ void startCurrentTimer();
+
+ /** Stop the timer for the current item in the view. */
+ void stopCurrentTimer();
+
+ /** Stop all running timers. */
+ void stopAllTimers();
+
+ /** Stop all running timers as if it was qdt */
+ void stopAllTimersAt(QDateTime qdt);
+
+ /** Calls newTask dialog with caption "New Task". */
+ void newTask();
+
+ /** Display edit task dialog and create a new task with results. */
+ void newTask( QString caption, Task* parent );
+
+ /** Used to refresh (e.g. after import) */
+ void refresh();
+
+ /** Used to import a legacy file format. */
+ void loadFromFlatFile();
+
+ /** used to import tasks from imendio planner */
+ QString importPlanner( QString fileName="" );
+
+ /** call export function for csv totals or history */
+ QString report( const ReportCriteria &rc );
+
+ /** Export comma separated values format for task time totals. */
+ void exportcsvFile();
+
+ /** Export comma-separated values format for task history. */
+ QString exportcsvHistory();
+
+ /** Calls newTask dialog with caption "New Sub Task". */
+ void newSubTask();
+
+ void editTask();
+
+ /**
+ * Returns a pointer to storage object.
+ *
+ * This is poor object oriented design--the task view should
+ * expose wrappers around the storage methods we want to access instead of
+ * giving clients full access to objects that we own.
+ *
+ * Hopefully, this will be redesigned as part of the Qt4 migration.
+ */
+ KarmStorage* storage();
+
+ /**
+ * Delete task (and children) from view.
+ *
+ * @param markingascomplete If false (the default), deletes history for
+ * current task and all children. If markingascomplete is true, then sets
+ * percent complete to 100 and removes task and all it's children from the
+ * list view.
+ */
+ void deleteTask(bool markingascomplete=false);
+
+ /** Reinstates the current task as incomplete.
+ * @param completion The percentage complete to mark the task as. */
+ void reinstateTask(int completion);
+// void addCommentToTask();
+ void markTaskAsComplete();
+ void markTaskAsIncomplete();
+
+ /** Subtracts time from all active tasks, and does not log event.
+ * The time is stored in memory and in X-KDE-karm-duration. It is
+ * increased automatically every minute to display the right duration.
+ */
+ void extractTime( int minutes );
+ void taskTotalTimesChanged( long session, long total)
+ { emit totalTimesChanged( session, total); };
+ void adaptColumns();
+ /** receiving signal that a task is being deleted */
+ void deletingTask(Task* deletedTask);
+
+ /** starts timer for task.
+ * @param task task to start timer of
+ * @param startTime if taskview has been modified by another program, we
+ have to set the starting time to not-now. */
+ void startTimerFor( Task* task, QDateTime startTime = QDateTime::currentDateTime() );
+ void stopTimerFor( Task* task );
+
+ /** clears all active tasks. Needed e.g. if iCal file was modified by
+ another program and taskview is cleared without stopping tasks
+ IF YOU DO NOT KNOW WHAT YOU ARE DOING, CALL stopAllTimers INSTEAD */
+ void clearActiveTasks();
+
+ /** User might have picked a new iCalendar file on preferences screen.
+ Verify the file is not the same as before and load the new one.
+ This is not iCalFileModified. */
+ void iCalFileChanged(QString file);
+
+ /** Copy totals for current and all sub tasks to clipboard. */
+ void clipTotals();
+
+ /** Copy session times for current and all sub tasks to clipboard */
+ void clipSession();
+
+ /** Copy history for current and all sub tasks to clipboard. */
+ void clipHistory();
+
+ signals:
+ void totalTimesChanged( long session, long total );
+ void updateButtons();
+ void timersActive();
+ void timersInactive();
+ void tasksChanged( QPtrList<Task> activeTasks );
+ void setStatusBar( QString );
+
+ private: // member variables
+ IdleTimeDetector *_idleTimeDetector;
+ QTimer *_minuteTimer;
+ QTimer *_autoSaveTimer;
+ QTimer *_manualSaveTimer;
+ Preferences *_preferences;
+ QPtrList<Task> activeTasks;
+ int previousColumnWidths[4];
+ DesktopTracker* _desktopTracker;
+ bool _isloading;
+
+ //KCal::CalendarLocal _calendar;
+ KarmStorage * _storage;
+
+ private:
+ void contentsMousePressEvent ( QMouseEvent * e );
+ void contentsMouseDoubleClickEvent ( QMouseEvent * e );
+ void updateParents( Task* task, long totalDiff, long sesssionDiff);
+ void deleteChildTasks( Task *item );
+ void addTimeToActiveTasks( int minutes, bool save_data = true );
+ /** item state stores if a task is expanded so you can see the subtasks */
+ void restoreItemState( QListViewItem *item );
+
+ protected slots:
+ void autoSaveChanged( bool );
+ void autoSavePeriodChanged( int period );
+ void minuteUpdate();
+ /** item state stores if a task is expanded so you can see the subtasks */
+ void itemStateChanged( QListViewItem *item );
+ /** React on another process having modified the iCal file we rely on. */
+ void iCalFileModified(ResourceCalendar *);
+};
+
+#endif // KARM_TASK_VIEW