-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsak.h
244 lines (209 loc) · 7.27 KB
/
sak.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
/***************************************************************************
* Copyright (C) 2007 by Arrigo Zanette *
***************************************************************************/
#ifndef __SAK_H__
#define __SAK_H__
#include <QtGui>
#include <QFont>
#include <QList>
#include <QHash>
#include <QPair>
#include <QObject>
#include <QDateTime>
#include <QPixmap>
#include <QRectF>
#include <QDebug>
#include "task.h"
class SakWidget;
class SakSubWidget;
class SakMessageItem;
class PixmapViewer;
class Timeline;
class HitItem;
class Sak : public QObject
{
Q_OBJECT;
public:
Sak(QObject* parent = 0);
virtual ~Sak();
QHash<QString, Task>* tasks() { return &m_tasks; }
protected:
void timerEvent(QTimerEvent* e);
bool eventFilter(QObject* obj, QEvent* e);
bool taskTreeEventFilter(QEvent* e);
bool hitsListEventFilter(QEvent* e);
public slots:
void start();
void pause();
void stop();
Task loadTaskFromFile(const QString& filePath);
void flush();
void open(const QStringList& filePaths = QStringList());
// void saveAsDb();
void exportDbCsv();
void logInGmail();
void saveToGmail();
void importFromGmail();
protected slots:
void init();
void destroy();
// tasks
void addDefaultTask();
void exportHits();
void populateTasks();
// commit changes on current tasks for temporary previews
void commitCurrentTask();
// permanentely save changes on tasks
void saveTaskChanges();
// permanentely save changes on hits
void saveHitChanges();
void selectedTask();
void doubleClickedTask(QTreeWidgetItem* i, int column);
void selectColor();
void grabKeyboard(); // delayed grab of keayboard
// popup task selection
void popup();
// popup subtask selection
void popupSubtasks(const QString& taskname);
// save current selected hit (after popup)
void workingOnTask(const QString& taskname, const QString& subtask);
void focusedSubTask();
void clearView();
void trayIconActivated(QSystemTrayIcon::ActivationReason);
// create a list of hits merging tasks
QList<HitElement> createHitsList(const QDateTime& from = QDateTime(), const QDateTime& to = QDateTime());
QMap<double, QPair<Task*, QString> > createSummaryList(const QList<HitElement>& hits);
void selectedStartDate(const QDate& date);
void selectedEndDate(const QDate& date);
void hitsListItemChanged(QTreeWidgetItem*, int column);
void hitsSelectedInList(QTreeWidgetItem*, QTreeWidgetItem*);
void hitsSelectedInTimeline(HitItem*);
void populateHitsList(const QList<HitElement>&, QTreeWidget* t = 0);
void populateHitsTimeline(const QList<HitElement>&, Timeline* t = 0);
void addDefaultHit();
void interactiveMergeHits();
private:
int m_timerId, m_timeoutPopup, m_autoSaveTimer, m_getFocusTimer;
bool m_stopped;
QDateTime m_nextTimerEvent;
QMainWindow* m_settings;
QHash<QString, Task> m_tasks;
QHash<QString, Task> m_editedTasks;
QMultiMap<int, SakWidget*> m_widgets;
QMultiMap<int, SakSubWidget*> m_subwidgets;
class QGraphicsEllipseItem* m_marker;
QMap<int, SakWidget*>::iterator m_widgetsIterator;
QMap<int, SakSubWidget*>::iterator m_subwidgetsIterator;
int m_subWidgetRank;
QList<QString> m_taskSelectionHistory;
QHash< QString, QList< QString > > m_subtaskSelectionHistory;
QCompleter* m_subtaskCompleter;
int m_currentInterval;
QRect m_desktopRect;
bool m_previewing;
bool m_changedHit, m_changedTask;
bool m_subtaskView;
static int taskCounter;
QAction* m_addTaskAction;
QMenu* m_addTaskMenu;
QMenu* m_addHitMenu;
QAction* m_addHitAction;
QAction* m_exportDataAction;
QString currentTask, currentSubtask;
class GView* m_view;
class Backupper* m_backupper;
class Incremental* m_incremental;
class GmailPyInterface* m_gmail;
//BEGIN Settings data:
public:
void setVisible(bool visible);
private:
QRect Layouting( const QList<SakWidget*>& sortedWidgets);
void layoutSubTasks( const QMap<int, SakSubWidget*> sortedWidgets, int currentRank);
QTreeWidget* newHitsList();
QTreeWidget* newTaskSummaryList();
void setupSettingsWidget();
void createActions();
void scrollTasks(int npos);
void scrollSubTasks(int npos);
QTabWidget* tabs;
QWidget* tab1;
QWidget* tab2;
QWidget* tab3;
QWidget* tab4;
QPushButton* previewButton;
QPushButton* bgColorButton;
QPushButton* fgColorButton;
QLabel *durationLabel, *durationLabel1;
QLabel *durationWarningLabel;
QLabel *bodyLabel;
QSpinBox *durationSpinBox;
QTextEdit *bodyEdit;
QTreeWidget* tasksTree;
QComboBox* taskSelector;
QTreeWidget* hitsList, *summaryList;
Timeline* hitsTimeline;
QCalendarWidget* cal1, *cal2, *cal3, *cal4;
PixmapViewer* taskPixmapViewer;
QTextEdit* taskTextEditor;
QLineEdit* taskTitleEditor;
QSpinBox* estimatedHoursEditor;
QDateEdit* dueEditor;
QAction *minimizeAction;
QAction *maximizeAction;
QAction *restoreAction;
QAction *startAction;
QAction *stopAction;
QAction *flushAction;
QAction *quitAction;
QAction *saveAsDbAction;
QAction *openAction;
QAction *exportDbCsvAction;
QAction *gmailLoginAction;
QAction *saveToGmailAction;
QAction *sendByEmailAction;
QSystemTrayIcon *trayIcon;
QMenu *trayIconMenu;
};
class MyDateItemDelegate : public QItemDelegate
{
public:
MyDateItemDelegate(QObject *parent = 0);
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const;
void updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &index) const;
};
class TaskItemDelegate : public QItemDelegate
{
public:
TaskItemDelegate(Sak* sak, QObject *parent = 0);
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const;
void updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &index) const;
private:
Sak* m_sak;
};
class SubTaskItemDelegate : public QItemDelegate
{
public:
SubTaskItemDelegate(Sak* sak, QObject *parent = 0);
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const;
void updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &index) const;
private:
Sak* m_sak;
};
#endif