summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/today/changelog4
-rw-r--r--core/pim/today/opie-today.control2
-rw-r--r--core/pim/today/today.cpp12
3 files changed, 11 insertions, 7 deletions
diff --git a/core/pim/today/changelog b/core/pim/today/changelog
index c687cea..93bbcac 100644
--- a/core/pim/today/changelog
+++ b/core/pim/today/changelog
@@ -1,64 +1,68 @@
10.3.4
2
3* Several bugfixes regarding todo section.
4
10.3.3 50.3.3
2 6
3* Changed the logo so it better scales to bigger display and also 7* Changed the logo so it better scales to bigger display and also
4 made the "Today" string translatable. 8 made the "Today" string translatable.
5* some am/pm fixes 9* some am/pm fixes
6* clickable labels now in libopie 10* clickable labels now in libopie
7 11
80.3.2 120.3.2
9 13
10* Autostart is now more configurable. You can decide how long 14* Autostart is now more configurable. You can decide how long
11 the ipaq has to has been suspended, before autostart is triggered.(Opie 15 the ipaq has to has been suspended, before autostart is triggered.(Opie
12 only) 16 only)
13* am/pm time optinal (autodetect) 17* am/pm time optinal (autodetect)
14 18
150.3.1 190.3.1
16 20
17* fixed the wrong color of the buttons 21* fixed the wrong color of the buttons
18* better translation (thanks carsten and others) 22* better translation (thanks carsten and others)
19* fixes memory leaks 23* fixes memory leaks
20* bugfixes in calendar part, now location and note are working again. 24* bugfixes in calendar part, now location and note are working again.
21 25
220.3.0 260.3.0
23 27
24* today uses now tododb from libopie. So major changes in the todo part: 28* today uses now tododb from libopie. So major changes in the todo part:
25 - overdue items on top 29 - overdue items on top
26 - then sorted by date, then by priority 30 - then sorted by date, then by priority
27* some cleanups 31* some cleanups
28* speed optimisations 32* speed optimisations
29 33
300.2.9 340.2.9
31 35
32* Many bugfixes. 36* Many bugfixes.
33* Today now apparently sorts the dates _allways_ right, i would assume it 37* Today now apparently sorts the dates _allways_ right, i would assume it
34to be a qt bug 38to be a qt bug
35 39
360.2.8 400.2.8
37 41
38* Appointments are now clickable (connection to datebook still missing) 42* Appointments are now clickable (connection to datebook still missing)
39* autostart support (opie only) 43* autostart support (opie only)
40 44
410.2.7 450.2.7
42 46
43* check if todolist.xml was changed before parsing it 47* check if todolist.xml was changed before parsing it
44* check only every 30 sec for changes. 48* check only every 30 sec for changes.
45* some visual stuff 49* some visual stuff
46* as usual many little improvements .-) 50* as usual many little improvements .-)
47 51
480.2.6 520.2.6
49 53
50* added scrollbars to dates and todo 54* added scrollbars to dates and todo
51* all day detection 55* all day detection
52* some smaller bugfixes 56* some smaller bugfixes
53 57
540.2.5 580.2.5
55 59
56* some other minor fixes regarding autoupdate 60* some other minor fixes regarding autoupdate
57* fixed segfault with todolist > 7 entries 61* fixed segfault with todolist > 7 entries
58* fixed the "ugly grey border around buttons" issue 62* fixed the "ugly grey border around buttons" issue
59* fixed the "empty calendar field" "bug" 63* fixed the "empty calendar field" "bug"
60* shown only later appointments as option 64* shown only later appointments as option
61 65
62 66
630.2.4 670.2.4
64 68
diff --git a/core/pim/today/opie-today.control b/core/pim/today/opie-today.control
index da9d9fa..46c0d71 100644
--- a/core/pim/today/opie-today.control
+++ b/core/pim/today/opie-today.control
@@ -1,16 +1,16 @@
1Files: bin/today apps/Applications/today.desktop pics/today/* 1Files: bin/today apps/Applications/today.desktop pics/today/*
2Priority: optional 2Priority: optional
3Section: opie/applications 3Section: opie/applications
4Maintainer: Maximilian Reiß <max.reiss@gmx.de> 4Maintainer: Maximilian Reiß <max.reiss@gmx.de>
5Architecture: arm 5Architecture: arm
6Version: 0.3.3-$SUB_VERSION 6Version: 0.3.4-$SUB_VERSION
7Depends: opie-base ($QPE_VERSION), libopie ($QPE_VERSION) 7Depends: opie-base ($QPE_VERSION), libopie ($QPE_VERSION)
8License: GPL 8License: GPL
9Description: today screen 9Description: today screen
10 This today screen app gives an overview of appointments 10 This today screen app gives an overview of appointments
11 and todos. 11 and todos.
12 It also shows incoming and outgoing mails from opiemail. 12 It also shows incoming and outgoing mails from opiemail.
13 When using Opie (opie.handhelds.org) today can be autostarted 13 When using Opie (opie.handhelds.org) today can be autostarted
14 on resume. 14 on resume.
15 It is highly configurable. 15 It is highly configurable.
16 16
diff --git a/core/pim/today/today.cpp b/core/pim/today/today.cpp
index 0f4cbdb..4368201 100644
--- a/core/pim/today/today.cpp
+++ b/core/pim/today/today.cpp
@@ -21,201 +21,201 @@
21 21
22#include <qpe/timestring.h> 22#include <qpe/timestring.h>
23#include <qpe/config.h> 23#include <qpe/config.h>
24#include <qpe/qcopenvelope_qws.h> 24#include <qpe/qcopenvelope_qws.h>
25//#include <qpe/qprocess.h> 25//#include <qpe/qprocess.h>
26#include <qpe/resource.h> 26#include <qpe/resource.h>
27#include <qpe/contact.h> 27#include <qpe/contact.h>
28#include <qpe/global.h> 28#include <qpe/global.h>
29#include <qpe/qpeapplication.h> 29#include <qpe/qpeapplication.h>
30 30
31#include <qdir.h> 31#include <qdir.h>
32#include <qfile.h> 32#include <qfile.h>
33#include <qdatetime.h> 33#include <qdatetime.h>
34#include <qtextstream.h> 34#include <qtextstream.h>
35#include <qcheckbox.h> 35#include <qcheckbox.h>
36#include <qspinbox.h> 36#include <qspinbox.h>
37#include <qpushbutton.h> 37#include <qpushbutton.h>
38#include <qlabel.h> 38#include <qlabel.h>
39#include <qtimer.h> 39#include <qtimer.h>
40#include <qpixmap.h> 40#include <qpixmap.h>
41//#include <qfileinfo.h> 41//#include <qfileinfo.h>
42#include <qlayout.h> 42#include <qlayout.h>
43#include <qtl.h> 43#include <qtl.h>
44 44
45 45
46//#include <iostream.h> 46//#include <iostream.h>
47#include <unistd.h> 47#include <unistd.h>
48#include <stdlib.h> 48#include <stdlib.h>
49 49
50int MAX_LINES_TASK; 50int MAX_LINES_TASK;
51int MAX_CHAR_CLIP; 51int MAX_CHAR_CLIP;
52int MAX_LINES_MEET; 52int MAX_LINES_MEET;
53int SHOW_LOCATION; 53int SHOW_LOCATION;
54int SHOW_NOTES; 54int SHOW_NOTES;
55// show only later dates 55// show only later dates
56int ONLY_LATER; 56int ONLY_LATER;
57int AUTOSTART; 57int AUTOSTART;
58int NEW_START=1; 58int NEW_START=1;
59QString AUTOSTART_TIMER; 59QString AUTOSTART_TIMER;
60 60
61/* 61/*
62 * Constructs a Example which is a child of 'parent', with the 62 * Constructs a Example which is a child of 'parent', with the
63 * name 'name' and widget flags set to 'f' 63 * name 'name' and widget flags set to 'f'
64 */ 64 */
65Today::Today( QWidget* parent, const char* name, WFlags fl ) 65Today::Today( QWidget* parent, const char* name, WFlags fl )
66 : TodayBase( parent, name, fl ), AllDateBookEvents(NULL) { 66 : TodayBase( parent, name, fl ), AllDateBookEvents(NULL) {
67 QObject::connect( (QObject*)PushButton1, SIGNAL( clicked() ), this, SLOT(startConfig() ) ); 67 QObject::connect( (QObject*)PushButton1, SIGNAL( clicked() ), this, SLOT(startConfig() ) );
68 QObject::connect( (QObject*)TodoButton, SIGNAL( clicked() ), this, SLOT(startTodo() ) ); 68 QObject::connect( (QObject*)TodoButton, SIGNAL( clicked() ), this, SLOT(startTodo() ) );
69 QObject::connect( (QObject*)DatesButton, SIGNAL( clicked() ), this, SLOT(startDatebook() ) ); 69 QObject::connect( (QObject*)DatesButton, SIGNAL( clicked() ), this, SLOT(startDatebook() ) );
70 QObject::connect( (QObject*)MailButton, SIGNAL( clicked() ), this, SLOT(startMail() ) ); 70 QObject::connect( (QObject*)MailButton, SIGNAL( clicked() ), this, SLOT(startMail() ) );
71 71
72#if defined(Q_WS_QWS) 72#if defined(Q_WS_QWS)
73#if !defined(QT_NO_COP) 73#if !defined(QT_NO_COP)
74 QCopChannel *todayChannel = new QCopChannel("QPE/Today" , this ); 74 QCopChannel *todayChannel = new QCopChannel("QPE/Today" , this );
75 connect (todayChannel, SIGNAL( received(const QCString &, const QByteArray &)), 75 connect (todayChannel, SIGNAL( received(const QCString &, const QByteArray &)),
76 this, SLOT ( channelReceived(const QCString &, const QByteArray &)) ); 76 this, SLOT ( channelReceived(const QCString &, const QByteArray &)) );
77#endif 77#endif
78#endif 78#endif
79 79
80 80
81 81
82 db = NULL; 82 db = NULL;
83 setOwnerField(); 83 setOwnerField();
84 todo = new ToDoDB; 84 todo = new ToDoDB;
85 getTodo();
86 draw(); 85 draw();
86 getTodo();
87 autoStart(); 87 autoStart();
88} 88}
89 89
90/* 90/*
91 * Qcop receive method. 91 * Qcop receive method.
92 */ 92 */
93void Today::channelReceived(const QCString &msg, const QByteArray & data) { 93void Today::channelReceived(const QCString &msg, const QByteArray & data) {
94 QDataStream stream(data, IO_ReadOnly ); 94 QDataStream stream(data, IO_ReadOnly );
95 if ( msg == "message(QString)" ) { 95 if ( msg == "message(QString)" ) {
96 QString message; 96 QString message;
97 stream >> message; 97 stream >> message;
98 setOwnerField(message); 98 setOwnerField(message);
99 } 99 }
100 100
101} 101}
102 102
103/* 103/*
104 * Initialises the owner field with the default value, the username 104 * Initialises the owner field with the default value, the username
105 */ 105 */
106void Today::setOwnerField() { 106void Today::setOwnerField() {
107 QString file = Global::applicationFileName("addressbook", "businesscard.vcf"); 107 QString file = Global::applicationFileName("addressbook", "businesscard.vcf");
108 if (QFile::exists(file)) { 108 if (QFile::exists(file)) {
109 Contact cont = Contact::readVCard(file)[0]; 109 Contact cont = Contact::readVCard(file)[0];
110 QString returnString = cont.fullName(); 110 QString returnString = cont.fullName();
111 OwnerField->setText( "<b>" +tr ("Owned by ") + returnString + "</b>"); 111 OwnerField->setText( "<b>" +tr ("Owned by ") + returnString + "</b>");
112 } else { 112 } else {
113 OwnerField->setText( "<b>" + tr ("Please fill out the business card")+" </b>"); 113 OwnerField->setText( "<b>" + tr ("Please fill out the business card")+" </b>");
114 } 114 }
115} 115}
116 116
117/* 117/*
118 * Set the owner field with a given QString, for example per qcop. 118 * Set the owner field with a given QString, for example per qcop.
119 */ 119 */
120void Today::setOwnerField(QString &message) { 120void Today::setOwnerField(QString &message) {
121 if (!message.isEmpty()) { 121 if (!message.isEmpty()) {
122 OwnerField->setText("<b>" + message + "</b>"); 122 OwnerField->setText("<b>" + message + "</b>");
123 } 123 }
124} 124}
125 125
126/* 126/*
127 * Autostart, uses the new (opie only) autostart method in the launcher code. 127 * Autostart, uses the new (opie only) autostart method in the launcher code.
128 * If registered against that today ist started on each resume. 128 * If registered against that today ist started on each resume.
129 */ 129 */
130void Today::autoStart() { 130void Today::autoStart() {
131 Config cfg("today"); 131 Config cfg("today");
132 cfg.setGroup("Autostart"); 132 cfg.setGroup("Autostart");
133 int AUTOSTART = cfg.readNumEntry("autostart",1); 133 int AUTOSTART = cfg.readNumEntry("autostart",1);
134// qDebug(QString("%1").arg(AUTOSTART)); 134// qDebug(QString("%1").arg(AUTOSTART));
135 if (AUTOSTART) { 135 if (AUTOSTART) {
136 QCopEnvelope e("QPE/System", "autoStart(QString, QString, QString)"); 136 QCopEnvelope e("QPE/System", "autoStart(QString, QString, QString)");
137 e << QString("add"); 137 e << QString("add");
138 e << QString("today"); 138 e << QString("today");
139 e << AUTOSTART_TIMER; 139 e << AUTOSTART_TIMER;
140 } else { 140 } else {
141 qDebug("Nun in else bei autostart"); 141 qDebug("Nun in else bei autostart");
142 QCopEnvelope e("QPE/System", "autoStart(QString, QString)"); 142 QCopEnvelope e("QPE/System", "autoStart(QString, QString)");
143 e << QString("remove"); 143 e << QString("remove");
144 e << QString("today"); 144 e << QString("today");
145 } 145 }
146} 146}
147 147
148/* 148/*
149 * Repaint method. Reread all fields. 149 * Repaint method. Reread all fields.
150 */ 150 */
151void Today::draw() { 151void Today::draw() {
152 init(); 152 init();
153 getDates(); 153 getDates();
154 getMail(); 154 getMail();
155 155
156 // if the todolist.xml file was not modified in between, do not parse it. 156 // if the todolist.xml file was not modified in between, do not parse it.
157 if (checkIfModified()) { 157 if (checkIfModified() || NEW_START==1) {
158 if (todo) delete todo; 158 if (todo) delete todo;
159 todo = new ToDoDB; 159 todo = new ToDoDB;
160 getTodo(); 160 getTodo();
161 } 161 }
162 162
163 // how often refresh 163 // how often refresh
164 QTimer::singleShot( 20*1000, this, SLOT(draw() ) ); 164 QTimer::singleShot( 20*1000, this, SLOT(draw() ) );
165} 165}
166 166
167/* 167/*
168 * Check if the todolist.xml was modified (if there are new entries. 168 * Check if the todolist.xml was modified (if there are new entries.
169 * Returns true if it was modified. 169 * Returns true if it was modified.
170 */ 170 */
171bool Today::checkIfModified() { 171bool Today::checkIfModified() {
172 172
173 QDir dir; 173 QDir dir;
174 QString homedir = dir.homeDirPath (); 174 QString homedir = dir.homeDirPath ();
175 QString time; 175 QString time;
176 176
177 Config cfg("today"); 177 Config cfg("today");
178 cfg.setGroup("Files"); 178 cfg.setGroup("Files");
179 time = cfg.readEntry("todolisttimestamp", ""); 179 time = cfg.readEntry("todolisttimestamp", "");
180 180
181 QFileInfo file = (homedir +"/Applications/todolist/todolist.xml"); 181 QFileInfo file = (homedir +"/Applications/todolist/todolist.xml");
182 QDateTime fileTime = file.lastModified(); 182 QDateTime fileTime = file.lastModified();
183 if (time.compare(fileTime.toString()) == 0) { 183 if (time.compare(fileTime.toString()) == 0) {
184 return false; 184 return false;
185 } else { 185 } else {
186 cfg.writeEntry("todolisttimestamp", fileTime.toString() ); 186 cfg.writeEntry("todolisttimestamp", fileTime.toString() );
187 cfg.write(); 187 cfg.write();
188 return true; 188 return true;
189 } 189 }
190} 190}
191 191
192 192
193/* 193/*
194 * Init stuff needed for today. Reads the config file. 194 * Init stuff needed for today. Reads the config file.
195 */ 195 */
196void Today::init() { 196void Today::init() {
197 QDate date = QDate::currentDate(); 197 QDate date = QDate::currentDate();
198 QString time = (tr( date.toString()) ); 198 QString time = (tr( date.toString()) );
199 199
200 TextLabel1->setText(QString("<font color=#FFFFFF>" + time + "</font>")); 200 TextLabel1->setText(QString("<font color=#FFFFFF>" + time + "</font>"));
201 201
202 // read config 202 // read config
203 Config cfg("today"); 203 Config cfg("today");
204 cfg.setGroup("BaseConfig"); 204 cfg.setGroup("BaseConfig");
205 205
206 // -- config file section -- 206 // -- config file section --
207 // how many lines should be showed in the task section 207 // how many lines should be showed in the task section
208 MAX_LINES_TASK = cfg.readNumEntry("maxlinestask",5); 208 MAX_LINES_TASK = cfg.readNumEntry("maxlinestask",5);
209 // after how many chars should the be cut off on tasks and notes 209 // after how many chars should the be cut off on tasks and notes
210 MAX_CHAR_CLIP = cfg.readNumEntry("maxcharclip",40); 210 MAX_CHAR_CLIP = cfg.readNumEntry("maxcharclip",40);
211 // how many lines should be showed in the datebook section 211 // how many lines should be showed in the datebook section
212 MAX_LINES_MEET = cfg.readNumEntry("maxlinesmeet",5); 212 MAX_LINES_MEET = cfg.readNumEntry("maxlinesmeet",5);
213 // If location is to be showed too, 1 to activate it. 213 // If location is to be showed too, 1 to activate it.
214 SHOW_LOCATION = cfg.readNumEntry("showlocation",1); 214 SHOW_LOCATION = cfg.readNumEntry("showlocation",1);
215 // if notes should be shown 215 // if notes should be shown
216 SHOW_NOTES = cfg.readNumEntry("shownotes",0); 216 SHOW_NOTES = cfg.readNumEntry("shownotes",0);
217 // should only later appointments be shown or all for the current day. 217 // should only later appointments be shown or all for the current day.
218 ONLY_LATER = cfg.readNumEntry("onlylater",1); 218 ONLY_LATER = cfg.readNumEntry("onlylater",1);
219 219
220 cfg.setGroup("Autostart"); 220 cfg.setGroup("Autostart");
221 AUTOSTART = cfg.readNumEntry("autostart",1); 221 AUTOSTART = cfg.readNumEntry("autostart",1);
@@ -328,132 +328,132 @@ void Today::getDates() {
328 } else if ((time.toString() <= TimeString::dateString((*it).event().end())) ) { 328 } else if ((time.toString() <= TimeString::dateString((*it).event().end())) ) {
329 count++; 329 count++;
330 330
331 // show only later appointments 331 // show only later appointments
332 DateBookEventLater *l=new DateBookEventLater(*it, AllDateBookEvents, SHOW_LOCATION, SHOW_NOTES); 332 DateBookEventLater *l=new DateBookEventLater(*it, AllDateBookEvents, SHOW_LOCATION, SHOW_NOTES);
333 layoutDates->addWidget(l); 333 layoutDates->addWidget(l);
334 connect (l, SIGNAL(editEvent(const Event &)), 334 connect (l, SIGNAL(editEvent(const Event &)),
335 this, SLOT(editEvent(const Event &))); 335 this, SLOT(editEvent(const Event &)));
336 } 336 }
337 } 337 }
338 } 338 }
339 if (ONLY_LATER && count==0) { 339 if (ONLY_LATER && count==0) {
340 QLabel* noMoreEvents = new QLabel(AllDateBookEvents); 340 QLabel* noMoreEvents = new QLabel(AllDateBookEvents);
341 noMoreEvents->setText(tr("No more appointments today")); 341 noMoreEvents->setText(tr("No more appointments today"));
342 layoutDates->addWidget(noMoreEvents); 342 layoutDates->addWidget(noMoreEvents);
343 } 343 }
344 } else { 344 } else {
345 QLabel* noEvents = new QLabel(AllDateBookEvents); 345 QLabel* noEvents = new QLabel(AllDateBookEvents);
346 noEvents->setText(tr("No appointments today")); 346 noEvents->setText(tr("No appointments today"));
347 layoutDates->addWidget(noEvents); 347 layoutDates->addWidget(noEvents);
348 } 348 }
349 349
350 layoutDates->addItem(new QSpacerItem(1,1, QSizePolicy::Minimum, QSizePolicy::Expanding)); 350 layoutDates->addItem(new QSpacerItem(1,1, QSizePolicy::Minimum, QSizePolicy::Expanding));
351 sv1->addChild(AllDateBookEvents); 351 sv1->addChild(AllDateBookEvents);
352 AllDateBookEvents->show(); 352 AllDateBookEvents->show();
353} 353}
354 354
355 355
356void Today::getMail() { 356void Today::getMail() {
357 Config cfg("opiemail"); 357 Config cfg("opiemail");
358 cfg.setGroup("today"); 358 cfg.setGroup("today");
359 359
360 // how many lines should be showed in the task section 360 // how many lines should be showed in the task section
361 int NEW_MAILS = cfg.readNumEntry("newmails",0); 361 int NEW_MAILS = cfg.readNumEntry("newmails",0);
362 int OUTGOING = cfg.readNumEntry("outgoing",0); 362 int OUTGOING = cfg.readNumEntry("outgoing",0);
363 363
364 QString output = tr("<b>%1</b> new mail(s), <b>%2</b> outgoing").arg(NEW_MAILS).arg(OUTGOING); 364 QString output = tr("<b>%1</b> new mail(s), <b>%2</b> outgoing").arg(NEW_MAILS).arg(OUTGOING);
365 365
366 MailField->setText(output); 366 MailField->setText(output);
367} 367}
368 368
369 369
370/* 370/*
371 * Get the todos 371 * Get the todos
372 */ 372 */
373void Today::getTodo() { 373void Today::getTodo() {
374 374
375 QString output; 375 QString output;
376 QString tmpout; 376 QString tmpout;
377 int count = 0; 377 int count = 0;
378 int ammount = 0; 378 int ammount = 0;
379 379
380 // get overdue todos first 380 // get overdue todos first
381 QValueList<ToDoEvent> overDueList = todo->overDue(); 381 QValueList<ToDoEvent> overDueList = todo->overDue();
382 qBubbleSort(overDueList); 382 qBubbleSort(overDueList);
383 for ( QValueList<ToDoEvent>::Iterator it=overDueList.begin(); 383 for ( QValueList<ToDoEvent>::Iterator it=overDueList.begin();
384 it!=overDueList.end(); ++it ) { 384 it!=overDueList.end(); ++it ) {
385 if (!(*it).isCompleted() && ( ammount < MAX_LINES_TASK) ) { 385 if (!(*it).isCompleted() && ( ammount < MAX_LINES_TASK) ) {
386 tmpout += "<font color=#e00000><b>-" +((*it).description()).mid(0, MAX_CHAR_CLIP) + "</b></font><br>"; 386 tmpout += "<font color=#e00000><b>-" +((*it).description()).mid(0, MAX_CHAR_CLIP) + "</b></font><br>";
387 ammount++; 387 ammount++;
388 } 388 }
389 } 389 }
390 390
391 // get total number of still open todos 391 // get total number of still open todos
392 QValueList<ToDoEvent> open = todo->rawToDos(); 392 QValueList<ToDoEvent> openTodo = todo->rawToDos();
393 qBubbleSort(open); 393 qBubbleSort(openTodo);
394 for ( QValueList<ToDoEvent>::Iterator it=open.begin(); 394 for ( QValueList<ToDoEvent>::Iterator it=openTodo.begin();
395 it!=open.end(); ++it ) { 395 it!=openTodo.end(); ++it ) {
396 if (!(*it).isCompleted()){ 396 if (!(*it).isCompleted()){
397 count +=1; 397 count +=1;
398 // not the overdues, we allready got them, and not if we are 398 // not the overdues, we allready got them, and not if we are
399 // over the maxlines 399 // over the maxlines
400 if (!(*it).isOverdue() && ( ammount < MAX_LINES_TASK) ) { 400 if (!(*it).isOverdue() && ( ammount < MAX_LINES_TASK) ) {
401 tmpout += "<b>-</b>" + ((*it).description()).mid(0, MAX_CHAR_CLIP) + "<br>"; 401 tmpout += "<b>-</b>" + ((*it).description()).mid(0, MAX_CHAR_CLIP) + "<br>";
402 ammount++; 402 ammount++;
403 } 403 }
404 } 404 }
405 } 405 }
406 406
407 407
408 if (count > 0) { 408 if (count > 0) {
409 if( count == 1 ) { 409 if( count == 1 ) {
410 output = tr("There is <b> 1</b> active task: <br>" ); 410 output = tr("There is <b> 1</b> active task: <br>" );
411 } else { 411 } else {
412 output = tr("There are <b> %1</b> active tasks: <br>").arg(count); 412 output = tr("There are <b> %1</b> active tasks: <br>").arg(count);
413 } 413 }
414 output += tmpout; 414 output += tmpout;
415 } else { 415 } else {
416 output = tr("No active tasks"); 416 output = tr("No active tasks");
417 } 417 }
418 418
419 TodoField->setText(tr(output)); 419 TodoField->setText(tr(output));
420} 420}
421 421
422/* 422/*
423 * launches datebook 423 * launches datebook
424 */ 424 */
425void Today::startDatebook() { 425void Today::startDatebook() {
426 QCopEnvelope e("QPE/System", "execute(QString)"); 426 QCopEnvelope e("QPE/System", "execute(QString)");
427 e << QString("datebook"); 427 e << QString("datebook");
428} 428}
429 429
430/* 430/*
431 * starts the edit dialog as known from datebook 431 * starts the edit dialog as known from datebook
432 */ 432 */
433 433
434extern QPEApplication *todayApp; 434extern QPEApplication *todayApp;
435 435
436void Today::editEvent(const Event &e) { 436void Today::editEvent(const Event &e) {
437 startDatebook(); 437 startDatebook();
438 438
439 while(!QCopChannel::isRegistered("QPE/Datebook")) todayApp->processEvents(); 439 while(!QCopChannel::isRegistered("QPE/Datebook")) todayApp->processEvents();
440 QCopEnvelope env("QPE/Datebook", "editEvent(int)"); 440 QCopEnvelope env("QPE/Datebook", "editEvent(int)");
441 env << e.uid(); 441 env << e.uid();
442} 442}
443 443
444/* 444/*
445 * launches todolist 445 * launches todolist
446 */ 446 */
447void Today::startTodo() { 447void Today::startTodo() {
448 QCopEnvelope e("QPE/System", "execute(QString)"); 448 QCopEnvelope e("QPE/System", "execute(QString)");
449 e << QString("todolist"); 449 e << QString("todolist");
450} 450}
451 451
452/* 452/*
453 * launch opiemail 453 * launch opiemail
454 */ 454 */
455void Today::startMail() { 455void Today::startMail() {
456 QCopEnvelope e("QPE/System", "execute(QString)"); 456 QCopEnvelope e("QPE/System", "execute(QString)");
457 e << QString("opiemail"); 457 e << QString("opiemail");
458//Right now start both, maybe decide which to rum via config file .. 458//Right now start both, maybe decide which to rum via config file ..
459 QCopEnvelope f("QPE/System", "execute(QString)"); 459 QCopEnvelope f("QPE/System", "execute(QString)");