summaryrefslogtreecommitdiff
path: root/core/pim/today/today.cpp
Unidiff
Diffstat (limited to 'core/pim/today/today.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/today/today.cpp335
1 files changed, 335 insertions, 0 deletions
diff --git a/core/pim/today/today.cpp b/core/pim/today/today.cpp
new file mode 100644
index 0000000..381ae6b
--- a/dev/null
+++ b/core/pim/today/today.cpp
@@ -0,0 +1,335 @@
1/*
2 * today.cpp : main class
3 *
4 * ---------------------
5 *
6 * begin : Sun 10 17:20:00 CEST 2002
7 * copyright : (c) 2002 by Maximilian Reiß
8 * email : max.reiss@gmx.de
9 *
10 */
11/***************************************************************************
12 * *
13 * This program is free software; you can redistribute it and/or modify *
14 * it under the terms of the GNU General Public License as published by *
15 * the Free Software Foundation; either version 2 of the License, or *
16 * (at your option) any later version. *
17 * *
18 ***************************************************************************/
19
20#include "today.h"
21#include "minidom.h"
22#include "TodoItem.h"
23
24#include <qpushbutton.h>
25#include <qlabel.h>
26
27#include <qpe/datebookdb.h>
28#include <qpe/timestring.h>
29#include <qpe/config.h>
30
31#include <qpe/qprocess.h>
32#include <qdir.h>
33#include <qfile.h>
34#include <qdatetime.h>
35#include <qtextstream.h>
36#include <qcheckbox.h>
37#include <qspinbox.h>
38
39//#include <iostream.h>
40//#include <unistd.h>
41#include <stdlib.h>
42
43int MAX_LINES_TASK;
44int MAX_CHAR_CLIP;
45int MAX_LINES_MEET;
46int SHOW_LOCATION;
47int SHOW_NOTES;
48// show only later dates
49int ONLY_LATER = 1;
50/*
51 * Constructs a Example which is a child of 'parent', with the
52 * name 'name' and widget flags set to 'f'
53 */
54Today::Today( QWidget* parent, const char* name, WFlags fl )
55 : TodayBase( parent, name, fl )
56{
57 QObject::connect( (QObject*)PushButton1, SIGNAL( clicked() ), this, SLOT(startConfig() ) );
58 QObject::connect( (QObject*)TodoButton, SIGNAL( clicked() ), this, SLOT(startTodo() ) );
59 QObject::connect( (QObject*)DatesButton, SIGNAL( clicked() ), this, SLOT(startDatebook() ) );
60
61 QDate date = QDate::currentDate();
62 QString time = (date.toString());
63 TextLabel1->setText(time);
64 db = new DateBookDB;
65
66 init();
67 getDates();
68 getTodo();
69}
70
71
72void Today::init()
73{
74 // read config
75 Config cfg("today");
76 cfg.setGroup("BaseConfig");
77
78 // how many lines should be showed in the task section
79 MAX_LINES_TASK = cfg.readNumEntry("maxlinestask",5);
80 // after how many chars should the be cut off on tasks and notes
81 MAX_CHAR_CLIP = cfg.readNumEntry("maxcharclip",30);
82 // how many lines should be showed in the datebook section
83 MAX_LINES_MEET = cfg.readNumEntry("maxlinesmeet",5);
84 // If location is to be showed too, 1 to activate it.
85 SHOW_LOCATION = cfg.readNumEntry("showlocation",1);
86 // if notes should be shown
87 SHOW_NOTES = cfg.readNumEntry("shownotes",0);
88}
89
90void Today::startConfig()
91{
92 conf = new todayconfig ( this, "", true );
93
94
95 //Config cfg = new Config("today");
96
97 // read the config
98 Config cfg("today");
99 cfg.setGroup("BaseConfig");
100
101 //init();
102
103 conf->SpinBox1->setValue(MAX_LINES_MEET);
104 // location show box
105 conf->CheckBox1->setChecked(SHOW_LOCATION);
106 // notes show box
107 conf->CheckBox2->setChecked(SHOW_NOTES);
108 // task lines
109 conf->SpinBox2->setValue(MAX_LINES_TASK);
110 // clip when?
111 conf->SpinBox7->setValue(MAX_CHAR_CLIP);
112
113 conf->exec();
114
115 int maxlinestask = conf->SpinBox2->value();
116 int maxmeet = conf->SpinBox1->value();
117 int location = conf->CheckBox1->isChecked();
118 int notes = conf->CheckBox2->isChecked();
119 int maxcharclip = conf->SpinBox7->value();
120
121 cfg.writeEntry("maxlinestask",maxlinestask);
122 cfg.writeEntry("maxcharclip", maxcharclip);
123 cfg.writeEntry("maxlinesmeet",maxmeet);
124 cfg.writeEntry("showlocation",location);
125 cfg.writeEntry("shownotes", notes);
126 // sync it to "disk"
127 cfg.write();
128
129 init();
130 getDates();
131 getTodo();
132 //cout << location << endl;
133}
134
135
136/*
137 * Get all events that are in the datebook xml file for today
138 */
139void Today::getDates()
140{
141 QDate date = QDate::currentDate();
142 QTime time = QTime::currentTime();
143 QValueList<EffectiveEvent> list = db->getEffectiveEvents(date, date);
144
145 Config config( "qpe" );
146 // if 24 h format
147 // bool ampm = config.readBoolEntry( "AMPM", TRUE );
148
149 int count=0;
150
151 if ( list.count() > 0 ) {
152 QString msg;
153
154 for ( QValueList<EffectiveEvent>::ConstIterator it=list.begin();
155 it!=list.end(); ++it ) {
156
157 count++;
158
159 if ( count <= MAX_LINES_MEET )
160 {
161 //only get events past current time (start or end??)
162 //cout << time.toString() << endl;
163 //cout << TimeString::dateString((*it).event().end()) << endl;
164 // still some bug in here, 1 h off
165 if ((time.toString() <= TimeString::dateString((*it).event().end())) && ONLY_LATER )
166 {
167 msg += "<B>" + (*it).description() + "</B>";
168 // include location or not
169 if (SHOW_LOCATION == 1)
170 {
171 msg+= "<BR>" + (*it).location();
172 }
173 msg += "<BR>"
174 // start time of event
175 + TimeString::timeString(QTime((*it).event().start().time()) )
176 // end time of event
177 + "<b> - </b>" + TimeString::timeString(QTime((*it).event().end().time()) )
178 + "<BR>";
179 // include possible note or not
180 if (SHOW_NOTES == 1)
181 {
182 msg += " <i>note</i>:" +((*it).notes()).mid(0, MAX_CHAR_CLIP) + "<br>";
183 }
184 }
185 }
186 }
187 DatesField->setText(msg);
188 }
189}
190
191/*
192 *
193 *
194 */
195QList<TodoItem> Today::loadTodo(const char *filename)
196{
197 DOM *todo;
198 ELE *tasks;
199 ELE **tasklist;
200 ATT **attlist;
201 int i, j;
202 char *description;
203 int completed;
204 int priority;
205 TodoItem *tmp;
206 QList<TodoItem> loadtodolist;
207
208 todo = minidom_load(filename);
209
210 tasks = todo->el;
211 tasks = tasks->el[0]; /*!DOCTYPE-quickhack*/
212 if(tasks)
213 {
214 tasklist = tasks->el;
215 i = 0;
216 while((tasklist) && (tasklist[i]))
217 {
218 attlist = tasklist[i]->at;
219 j = 0;
220 description = NULL;
221 priority = -1;
222 completed = -1;
223 while((attlist) && (attlist[j]))
224 {
225 if(!attlist[i]->name) continue;
226 if(!strcmp(attlist[j]->name, "Description"))
227 {
228 description = attlist[j]->value;
229 }
230 // get Completed tag (0 or 1)
231 if(!strcmp(attlist[j]->name, "Completed"))
232 {
233 QString s = attlist[j]->name;
234 if(s == "Completed")
235 {
236 completed = QString(attlist[j]->value).toInt();
237 }
238 }
239 // get Priority (1 to 5)
240 if(!strcmp(attlist[j]->name, "Priority"))
241 {
242 QString s = attlist[j]->name;
243 if(s == "Priority")
244 {
245 priority = QString(attlist[j]->value).toInt();
246 }
247 }
248 j++;
249 }
250 if(description)
251 {
252 tmp = new TodoItem(description, completed, priority);
253 loadtodolist.append(tmp);
254 }
255 i++;
256 }
257 }
258
259 minidom_free(todo);
260
261 return loadtodolist;
262}
263
264
265/*
266 * Get the todos
267 *
268 */
269void Today::getTodo()
270{
271 QString output;
272 QString tmpout;
273 int count = 0;
274
275 QDir dir;
276 QString homedir = dir.homeDirPath ();
277 // see if todolist.xml does exist.
278 QFile f(homedir +"/Applications/todolist/todolist.xml");
279 if ( f.exists() )
280 {
281 QList<TodoItem> todolist = loadTodo(homedir +"/Applications/todolist/todolist.xml");
282
283 TodoItem *item;
284 for( item = todolist.first(); item; item = todolist.next())
285 {
286 if (!(item->getCompleted() == 1) )
287 {
288 count++;
289 if (count <= MAX_LINES_TASK)
290 {
291 tmpout += "<b>- </b>" + QString(((item)->getDescription().mid(0, MAX_CHAR_CLIP) + ("<br>")));
292 }
293 }
294 }
295 }
296
297 if (count > 0)
298 {
299 output = QString("There are <b> %1</b> active tasks: <br>").arg(count);
300 output += tmpout;
301 }
302 else
303 {
304 output = ("No active tasks");
305 }
306
307 TodoField->setText(output);
308}
309
310/*
311 * lanches datebook
312 */
313void Today::startDatebook()
314{
315 //ugly but working
316 system("/opt/QtPalmtop/bin/datebook");
317}
318
319/*
320 * lanches todolist
321 */
322void Today::startTodo()
323{
324 // QProcess *datelanch = new QProcess( this, "datebook");
325 //datelanch->start();
326 system("/opt/QtPalmtop/bin/todolist");
327}
328
329/*
330 * Destroys the object and frees any allocated resources
331 */
332Today::~Today()
333{
334 // no need to delete child widgets, Qt does it all for us
335}