]> git.sven.stormbind.net Git - sven/vym.git/blob - task.cpp
588f28023e8354e6fe9bde45b563f42b3854b223
[sven/vym.git] / task.cpp
1 #include "task.h"
2
3 #include <QDebug>
4
5 #include "branchitem.h"
6 #include "taskmodel.h"
7 #include "vymmodel.h"
8
9
10 Task::Task(TaskModel *tm)
11 {
12 //    qDebug()<<"Constr. Task";
13     status=NotStarted;
14     awake=Task::WideAwake;
15     branch=NULL;
16     prio='X';
17     model=tm;
18     date_creation=QDateTime::currentDateTime();
19     date_sleep=QDate::currentDate();
20 }
21
22 Task::~Task()
23 {
24 //    qDebug()<<"Destr. Task";
25     if (branch) branch->setTask (NULL);
26 }
27
28 void Task::setModel (TaskModel* tm)
29 {
30     model=tm;
31 }
32
33 void Task::cycleStatus(bool reverse)
34 {
35     if (awake==Morning)
36     {
37         setAwake (WideAwake);
38         return;
39     }
40     int i=status;
41     reverse ?  i-- : i++;
42
43     if (i<0) i=2;
44     if (i>2) i=0;
45
46     setStatus ( (Task::Status) i );
47
48     if (branch) branch->updateTaskFlag ();
49 }
50
51 void Task::setStatus(const QString &s)
52 {
53     if (s=="NotStarted")
54         setStatus(NotStarted);
55     else if (s=="WIP")
56         setStatus(WIP);
57     else if (s=="Finished")
58         setStatus(Finished);
59     else
60         qWarning()<<"Task::setStatus Unknown value: "<<s;
61 }
62
63 void Task::setStatus(Status s)
64 {
65     if (s==status) return;
66     status=s;
67     if (branch) branch->updateTaskFlag();
68 }
69
70 Task::Status Task::getStatus()
71 {
72     return status;
73 }
74
75 QString Task::getStatusString()     
76 {
77     switch (status)
78     {
79         case NotStarted: return "NotStarted";
80         case WIP: return "WIP";
81         case Finished: return "Finished";
82     }
83     return "Undefined";
84 }
85
86 QString Task::getIconString()
87 {
88     QString s;
89     switch (status) 
90     {
91         case NotStarted: 
92             s="task-new";
93             break;
94         case WIP: 
95             s="task-wip";
96             break;
97         case Finished: 
98             s="task-finished";
99         break;
100     }
101     if (status != Finished)
102         switch (awake) 
103         {
104             case Sleeping: 
105                 s+="-sleeping";
106                 break;
107             case Morning: 
108                 s+="-morning";
109                 break;
110             default: break;
111         }
112     return s;
113 }
114
115 void Task::setAwake(const QString &s)
116 {
117     if (s=="Sleeping")
118         setAwake(Sleeping);
119     else if (s=="Morning")
120         setAwake(Morning);
121     else if (s=="WideAwake")
122         setAwake(WideAwake);
123     else
124         qWarning()<<"Task::setAwake Unknown value: "<<s;
125 }
126
127 void Task::setAwake(Task::Awake a)
128 {
129     if (a==awake) return;
130     awake=a;
131     recalcAwake();
132     if (branch) branch->updateTaskFlag();
133 }
134
135 Task::Awake Task::getAwake()
136 {
137     return awake;
138 }
139
140 QString Task::getAwakeString()      
141 {
142     switch (getAwake() )
143     {
144         case Sleeping: return "Sleeping";
145         case Morning: return "Morning";
146         case WideAwake: return "WideAwake";
147     }
148     return "Undefined";
149 }
150
151 void Task::recalcAwake()
152 {
153     if ( getDaysSleep() <= 0 && awake==Task::Sleeping)
154         setAwake(Task::Morning);
155 }
156
157 void Task::setPriority (int p)
158 {
159     prio=p;
160 }
161
162 int Task::getPriority()
163 {
164     return prio;
165 }
166
167 int Task::getAgeCreation()
168 {
169     return date_creation.daysTo (QDateTime::currentDateTime() );
170 }
171
172 int Task::getAgeModified()
173 {
174     if (date_modified.isValid() )
175         return date_modified.daysTo (QDateTime::currentDateTime() );
176     else
177         return getAgeCreation();
178 }
179
180 void Task::setDateCreation (const QString &s)
181 {
182     date_creation=QDateTime().fromString (s,Qt::ISODate);
183 }
184
185
186 void Task::setDateModified()
187 {
188     date_modified=QDateTime::currentDateTime();
189 }
190
191 void Task::setDateModified(const QString &s)
192 {
193     date_modified=QDateTime().fromString (s,Qt::ISODate);
194 }
195
196 void Task::setDateSleep(int n)
197 {
198     setDateSleep ( QDate::currentDate().addDays (n).toString(Qt::ISODate) );
199 }
200
201 void Task::setDateSleep(const QString &s)
202 {
203     date_sleep=QDate().fromString (s,Qt::ISODate);
204     if (getDaysSleep()>0) 
205         setAwake(Sleeping);
206     else
207         setAwake (Morning);
208     if (status == Finished) setStatus(WIP); 
209 }
210
211 int Task::getDaysSleep()
212 {
213     int d=0;
214     if (date_sleep.isValid() )
215         d=QDate::currentDate().daysTo (date_sleep);
216     return d;
217 }
218
219 void Task::setBranch (BranchItem *bi)
220 {
221     branch=bi;
222     mapName=bi->getModel()->getMapName();
223 }
224
225 BranchItem* Task::getBranch ()
226 {
227     return branch;
228 }
229
230 QString Task::getName ()
231 {
232     if (branch)
233         return branch->getHeadingPlain();
234     else
235     {
236         qWarning()<<"Task::getName  no branch!";
237         return "UNDEFINED";
238     }
239 }
240
241 QString Task::getMapName ()
242 {
243     return mapName;
244 }
245
246 QString Task::saveToDir()
247 {
248     QString sleepAttr;
249     if (getDaysSleep()>0)
250         sleepAttr = attribut ("date_sleep",date_sleep.toString (Qt::ISODate) );
251     return singleElement ("task",
252         attribut ("status",getStatusString() ) +
253         attribut ("awake",getAwakeString() ) +
254         attribut ("date_creation",date_creation.toString (Qt::ISODate) ) +
255         attribut ("date_modified",date_modified.toString (Qt::ISODate) ) +
256         sleepAttr
257      );
258 }
259