summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt3
-rw-r--r--korganizer/koeventviewer.cpp10
2 files changed, 13 insertions, 0 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 62c8447..06aa5f6 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,202 +1,205 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 2.0.8 ************ 3********** VERSION 2.0.8 ************
4 4
5Fixed a problem in dependency info in the ipk files for the Zaurus. 5Fixed a problem in dependency info in the ipk files for the Zaurus.
6 6
7Added icon for the stealth new week view and made navigation more user friendly in monthview by adding a prev/next week button to the navigator bar. 7Added icon for the stealth new week view and made navigation more user friendly in monthview by adding a prev/next week button to the navigator bar.
8 8
9Added a "go today" button to the datepicker. 9Added a "go today" button to the datepicker.
10 10
11Added "created" and "last modified" to event/todo viewer (and What'sThis viewer)
12and made it configureable to show these values.
13
11 14
12********** VERSION 2.0.7 ************ 15********** VERSION 2.0.7 ************
13 16
14Added global application font settings 17Added global application font settings
15(for all KDE-Pim/Pi apps) to the general settings. 18(for all KDE-Pim/Pi apps) to the general settings.
16 19
17Fixed a problem in OM/Pi when trying to login to some IMAP servers 20Fixed a problem in OM/Pi when trying to login to some IMAP servers
18(like the IMAP server of Apple: mail.mac.com ) 21(like the IMAP server of Apple: mail.mac.com )
19 22
20Added recurring todos to KO/Pi. 23Added recurring todos to KO/Pi.
21 24
22 25
23********** VERSION 2.0.6 ************ 26********** VERSION 2.0.6 ************
24 27
25Some bugfixes in the pi-sync mode. 28Some bugfixes in the pi-sync mode.
26Added German translation for pi-sync mode. 29Added German translation for pi-sync mode.
27 30
28KO/Pi: 31KO/Pi:
29Made the todolist using alternate background. 32Made the todolist using alternate background.
30 33
31Other minor fixes in KO/Pi. 34Other minor fixes in KO/Pi.
32 35
33 36
34********** VERSION 2.0.5 ************ 37********** VERSION 2.0.5 ************
35 38
36Bugfixes in KO/Pi. 39Bugfixes in KO/Pi.
37 40
38********** VERSION 2.0.4 ************ 41********** VERSION 2.0.4 ************
39 42
40KO/Pi: 43KO/Pi:
41Fixed problem loading translations for summary/location edit boxes in event/todo editor. 44Fixed problem loading translations for summary/location edit boxes in event/todo editor.
42 45
43Added a general "select week number" to the toolbar. 46Added a general "select week number" to the toolbar.
44 47
45Fixed some small problem of the new features introduced in version 2.0.3. 48Fixed some small problem of the new features introduced in version 2.0.3.
46 49
47Made it possible to specify one specific category as category color, 50Made it possible to specify one specific category as category color,
48if more than one categories are selected. 51if more than one categories are selected.
49 52
50Fixed a bug in saving colors for categories with non-ascii characters. 53Fixed a bug in saving colors for categories with non-ascii characters.
51(Like, e.g. German Umlauts). 54(Like, e.g. German Umlauts).
52Propably you have to set your colors again for those categories. 55Propably you have to set your colors again for those categories.
53 56
54 57
55********** VERSION 2.0.3 ************ 58********** VERSION 2.0.3 ************
56 59
57KO/Pi: 60KO/Pi:
58Added feature for changing alarm settings for many items at once: 61Added feature for changing alarm settings for many items at once:
59Open list view (or search dialog), select the desired items and choose in 62Open list view (or search dialog), select the desired items and choose in
60the popup menu: Set alarm for selected... 63the popup menu: Set alarm for selected...
61 64
62Added to the event/todo viewer the option to send an email to 65Added to the event/todo viewer the option to send an email to
63all attendees or all selected (with RSVP) attendees. 66all attendees or all selected (with RSVP) attendees.
64 67
65Made the week-month mode changing in month view faster. 68Made the week-month mode changing in month view faster.
66 69
67Made month view better useable with keyboard. 70Made month view better useable with keyboard.
68Now TAB key jumps to next cell with an event/todo. 71Now TAB key jumps to next cell with an event/todo.
69Scroll in cell with coursor keys, scroll in time (next week) with 72Scroll in cell with coursor keys, scroll in time (next week) with
70Shift/Control + coursorkeys. 73Shift/Control + coursorkeys.
71 74
72Fixed bug that the todo view flat mode was reset after first view update. 75Fixed bug that the todo view flat mode was reset after first view update.
73 76
74If a todo is displayed closed in the todo view, 77If a todo is displayed closed in the todo view,
75it is now displayed in overdue/due today color depending on the subtodos overdue/due today properties. 78it is now displayed in overdue/due today color depending on the subtodos overdue/due today properties.
76 79
77Added info about the numbers of years to the caption (title) information about a birthday event. 80Added info about the numbers of years to the caption (title) information about a birthday event.
78 81
79Made completion date in todo editor editable. 82Made completion date in todo editor editable.
80 83
81Added possibility to save/load templates for journals. 84Added possibility to save/load templates for journals.
82(Which is just a simple "save text to file" or "insert text from file". 85(Which is just a simple "save text to file" or "insert text from file".
83 86
84********** VERSION 2.0.2 ************ 87********** VERSION 2.0.2 ************
85 88
86KO/Pi: 89KO/Pi:
87Fixed the layout problem of the day label buttons 90Fixed the layout problem of the day label buttons
88of the agenda view introduced in version 2.0.1. 91of the agenda view introduced in version 2.0.1.
89 92
90Added WhatsThis support for the todo view and the list view. 93Added WhatsThis support for the todo view and the list view.
91 94
92Added a quite useful feature to the montview. 95Added a quite useful feature to the montview.
93Just click on the week numbers on the left. 96Just click on the week numbers on the left.
94And in the top right corner of month view/agenda view 97And in the top right corner of month view/agenda view
95there is now a "week number quick selector". 98there is now a "week number quick selector".
96(Click on the black triangle). 99(Click on the black triangle).
97 100
98Made the quite difficult timezone change in KO/Pi easy. 101Made the quite difficult timezone change in KO/Pi easy.
99 102
100OM/Pi: 103OM/Pi:
101Fixed too small icons on desktop. 104Fixed too small icons on desktop.
102Fixed non visible icons in mainwindow on Z with fastload enabled. 105Fixed non visible icons in mainwindow on Z with fastload enabled.
103Added signature file setting to smtp account config. 106Added signature file setting to smtp account config.
104And the signature can be edited and saved in the edit mail dialog. 107And the signature can be edited and saved in the edit mail dialog.
105That does mean: 108That does mean:
106Simply edit the signature for the selected smtp account in the 109Simply edit the signature for the selected smtp account in the
107edit new mail dialog and press the "save signature" button there. 110edit new mail dialog and press the "save signature" button there.
108Then the signature is saved to the file specified in the smtp account settings. 111Then the signature is saved to the file specified in the smtp account settings.
109If there is no file specified, it is saved automatically to the file 112If there is no file specified, it is saved automatically to the file
110kdepim/apps/kopiemail/<accountname>.sig. 113kdepim/apps/kopiemail/<accountname>.sig.
111 114
112 115
113 116
114********** VERSION 2.0.1 ************ 117********** VERSION 2.0.1 ************
115 118
116Oooops ... I forgot to test on the Zaurus 5500 ... 119Oooops ... I forgot to test on the Zaurus 5500 ...
117 120
118Fixed many problems of new (english) strings (and german translations) 121Fixed many problems of new (english) strings (and german translations)
119introduced in the latest versions, where the text was not fitting on the 122introduced in the latest versions, where the text was not fitting on the
120240x320 display of the Zaurus 5500. 123240x320 display of the Zaurus 5500.
121 124
122KO/Pi: 125KO/Pi:
123Added a popup menu ( press pen and hold to get popup ) to the agenda view 126Added a popup menu ( press pen and hold to get popup ) to the agenda view
124with many useful items (add event/todo, show next week, two weeks, month, journal). 127with many useful items (add event/todo, show next week, two weeks, month, journal).
125 128
126Added items to the todolist popup menu for: 129Added items to the todolist popup menu for:
127Display all opened, all closed or all todos flat. 130Display all opened, all closed or all todos flat.
128The "flat" view makes is possible to sort all todos after ,e.g., prio or date. 131The "flat" view makes is possible to sort all todos after ,e.g., prio or date.
129Made the reparenting of todos on the desktop possible via Drag&Drop. 132Made the reparenting of todos on the desktop possible via Drag&Drop.
130Fixed several bugs in setting the completed datetime for todos. 133Fixed several bugs in setting the completed datetime for todos.
131Added info about completed datetime of todos to the todo viewer. 134Added info about completed datetime of todos to the todo viewer.
132Now displaying a completed todo (with completed datetime set) in the agenda view 135Now displaying a completed todo (with completed datetime set) in the agenda view
133at the time of the completion. Such that now it is possible to see in the agenda view 136at the time of the completion. Such that now it is possible to see in the agenda view
134when what todo was completed. 137when what todo was completed.
135Fixed behaviour of automatic setting completion of todos with sub-todos/parent todos. 138Fixed behaviour of automatic setting completion of todos with sub-todos/parent todos.
136Now the behaviour is: 139Now the behaviour is:
137Setting a parent to complete sets all (sub)childs to complete. 140Setting a parent to complete sets all (sub)childs to complete.
138Setting a parent to uncomplete does not change the childs. 141Setting a parent to uncomplete does not change the childs.
139Setting a child to uncomplete sets all parent to uncomplete. 142Setting a child to uncomplete sets all parent to uncomplete.
140Setting a child to complete does not change the parents. 143Setting a child to complete does not change the parents.
141 144
142Smart updating and double buffering of the daymatrix. 145Smart updating and double buffering of the daymatrix.
143Showing holidays in the day matrix. 146Showing holidays in the day matrix.
144Many other small performance updates. 147Many other small performance updates.
145 148
146Made day labels in agenda clickable. By clicking a label, the day is displayed in single day mode. 149Made day labels in agenda clickable. By clicking a label, the day is displayed in single day mode.
147 150
148Now the translation file usertranslation.txt is supposed to be in utf8 format. 151Now the translation file usertranslation.txt is supposed to be in utf8 format.
149If you want to translate a language from western europe, just change the germantranslation.txt file. Please read the updated Usertranslation HowTo in KO/Pi Help menu. 152If you want to translate a language from western europe, just change the germantranslation.txt file. Please read the updated Usertranslation HowTo in KO/Pi Help menu.
150 153
151 154
152********** VERSION 2.0.0 ************ 155********** VERSION 2.0.0 ************
153 156
154Stable release 2.0.0! 157Stable release 2.0.0!
155 158
156KO/Pi: 159KO/Pi:
157Fixed problem in edit dialog recreation at startup. 160Fixed problem in edit dialog recreation at startup.
158Made "toggle view*" menu items enabled context sensitive. 161Made "toggle view*" menu items enabled context sensitive.
159Changed agenda size menu to items 1-10. 162Changed agenda size menu to items 1-10.
160Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down. 163Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down.
161Usebility enhancements in the KO/Pi menus. 164Usebility enhancements in the KO/Pi menus.
162Birthday import now adds year to summary. 165Birthday import now adds year to summary.
163What's Next view shows age in years for birthday. 166What's Next view shows age in years for birthday.
164 167
165OM/Pi: 168OM/Pi:
166Added three info lines to display subject, from and to of selected mails. 169Added three info lines to display subject, from and to of selected mails.
167 170
168KA/Pi: 171KA/Pi:
169Fixed jump bar behaviour on Zaurus. 172Fixed jump bar behaviour on Zaurus.
170Now KA/Pi search field supports searching for a range of starting characters. 173Now KA/Pi search field supports searching for a range of starting characters.
171E.g. to search for all contact beginning with b to n, type 174E.g. to search for all contact beginning with b to n, type
172b-n 175b-n
173in the search field. 176in the search field.
174 177
175********** VERSION 1.9.20 ************ 178********** VERSION 1.9.20 ************
176 179
177KO/Pi: 180KO/Pi:
178Added for the "dislplay one day" agenda mode 181Added for the "dislplay one day" agenda mode
179info in the caption and in the day lables: 182info in the caption and in the day lables:
180Now it is displayed, if the selected day is from "day before yesterday" 183Now it is displayed, if the selected day is from "day before yesterday"
181to "day after tomorrow". 184to "day after tomorrow".
182Made it possible to delete a Todo, which has sub-todos. 185Made it possible to delete a Todo, which has sub-todos.
183Fixed two small problems in the todo view. 186Fixed two small problems in the todo view.
184Added missing German translation for filter edit and print dialog. 187Added missing German translation for filter edit and print dialog.
185Made search dialog closeable by cancel key. 188Made search dialog closeable by cancel key.
186 189
187Made it possible to select in the date picker the (ligt grey ) 190Made it possible to select in the date picker the (ligt grey )
188dates of the prev./next month with the mouse. 191dates of the prev./next month with the mouse.
189 192
190OM/Pi: 193OM/Pi:
191"Delete mail" icon in main window now deletes all selected mails. 194"Delete mail" icon in main window now deletes all selected mails.
192Fixed the problem, that the state flag of imap mails was ignored. 195Fixed the problem, that the state flag of imap mails was ignored.
193Now mails with "FLAG_SEEN" on the imap server get no icon in the list view 196Now mails with "FLAG_SEEN" on the imap server get no icon in the list view
194to indecate that they are already seen. 197to indecate that they are already seen.
195Fixed the problem that the body of some mails was not displayed in the 198Fixed the problem that the body of some mails was not displayed in the
196mail viewer when fetching them from the imap server directly to read them. 199mail viewer when fetching them from the imap server directly to read them.
197Made it (configurable) possible to show the "To:" field in the list view. 200Made it (configurable) possible to show the "To:" field in the list view.
198Added to the mail viewer the option "View Source" to make it possible to see the raw mail data. 201Added to the mail viewer the option "View Source" to make it possible to see the raw mail data.
199Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the 202Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the
200local storage folder (specified in account settings) of the account of the mail. 203local storage folder (specified in account settings) of the account of the mail.
201Removed some memory leaks in OM/Pi. 204Removed some memory leaks in OM/Pi.
202 205
diff --git a/korganizer/koeventviewer.cpp b/korganizer/koeventviewer.cpp
index d87938a..417d89c 100644
--- a/korganizer/koeventviewer.cpp
+++ b/korganizer/koeventviewer.cpp
@@ -268,384 +268,394 @@ void KOEventViewer::appendEvent(Event *event, int mode )
268 mText +="<font color=\"#B00000\">"; 268 mText +="<font color=\"#B00000\">";
269 addTag("i",i18n("This event has been cancelled!")); 269 addTag("i",i18n("This event has been cancelled!"));
270 mText.append("<br>"); 270 mText.append("<br>");
271 mText += "</font>"; 271 mText += "</font>";
272 mMailSubject += i18n("(cancelled)"); 272 mMailSubject += i18n("(cancelled)");
273 } 273 }
274 if (!event->location().isEmpty()) { 274 if (!event->location().isEmpty()) {
275 addTag("b",i18n("Location: ")); 275 addTag("b",i18n("Location: "));
276 mText.append(event->location()+"<br>"); 276 mText.append(event->location()+"<br>");
277 mMailSubject += i18n(" at ") + event->location(); 277 mMailSubject += i18n(" at ") + event->location();
278 } 278 }
279 if (event->doesFloat()) { 279 if (event->doesFloat()) {
280 if (event->isMultiDay()) { 280 if (event->isMultiDay()) {
281 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>") 281 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>")
282 .arg(event->dtStartDateStr(shortDate)) 282 .arg(event->dtStartDateStr(shortDate))
283 .arg(event->dtEndDateStr(shortDate))); 283 .arg(event->dtEndDateStr(shortDate)));
284 } else { 284 } else {
285 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate ))); 285 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate )));
286 } 286 }
287 } else { 287 } else {
288 if (event->isMultiDay()) { 288 if (event->isMultiDay()) {
289 mText.append(i18n("<p><b>From:</b> %1</p> ") 289 mText.append(i18n("<p><b>From:</b> %1</p> ")
290 .arg(event->dtStartStr( shortDate))); 290 .arg(event->dtStartStr( shortDate)));
291 mText.append(i18n("<p><b>To:</b> %1</p>") 291 mText.append(i18n("<p><b>To:</b> %1</p>")
292 .arg(event->dtEndStr(shortDate))); 292 .arg(event->dtEndStr(shortDate)));
293 } else { 293 } else {
294 mText.append(i18n("<p><b>On:</b> %1</p> ") 294 mText.append(i18n("<p><b>On:</b> %1</p> ")
295 .arg(event->dtStartDateStr( shortDate ))); 295 .arg(event->dtStartDateStr( shortDate )));
296 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>") 296 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>")
297 .arg(event->dtStartTimeStr()) 297 .arg(event->dtStartTimeStr())
298 .arg(event->dtEndTimeStr())); 298 .arg(event->dtEndTimeStr()));
299 } 299 }
300 } 300 }
301 301
302 if (event->recurrence()->doesRecur()) { 302 if (event->recurrence()->doesRecur()) {
303 303
304 QString recurText = event->recurrence()->recurrenceText(); 304 QString recurText = event->recurrence()->recurrenceText();
305 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>"); 305 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>");
306 bool ok; 306 bool ok;
307 QDate start = QDate::currentDate(); 307 QDate start = QDate::currentDate();
308 QDateTime next; 308 QDateTime next;
309 next = event->getNextOccurence( QDateTime::currentDateTime() , &ok ); 309 next = event->getNextOccurence( QDateTime::currentDateTime() , &ok );
310 if ( ok ) { 310 if ( ok ) {
311 addTag("p",i18n("<b>Next recurrence is on:</b>") ); 311 addTag("p",i18n("<b>Next recurrence is on:</b>") );
312 addTag("p", KGlobal::locale()->formatDate( next.date(), shortDate )); 312 addTag("p", KGlobal::locale()->formatDate( next.date(), shortDate ));
313 mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( next, true ); 313 mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( next, true );
314 314
315 } else { 315 } else {
316 bool last; 316 bool last;
317 QDate nextd; 317 QDate nextd;
318 nextd = event->recurrence()->getPreviousDate( QDate::currentDate() , &last ); 318 nextd = event->recurrence()->getPreviousDate( QDate::currentDate() , &last );
319 if ( last ) { 319 if ( last ) {
320 addTag("p",i18n("<b>Last recurrence was on:</b>") ); 320 addTag("p",i18n("<b>Last recurrence was on:</b>") );
321 addTag("p", KGlobal::locale()->formatDate( nextd, shortDate )); 321 addTag("p", KGlobal::locale()->formatDate( nextd, shortDate ));
322 } 322 }
323 } 323 }
324 } else { 324 } else {
325 mMailSubject += i18n(" - " )+event->dtStartStr( true ); 325 mMailSubject += i18n(" - " )+event->dtStartStr( true );
326 326
327 } 327 }
328 328
329 329
330 if (event->isAlarmEnabled()) { 330 if (event->isAlarmEnabled()) {
331 Alarm *alarm =event->alarms().first() ; 331 Alarm *alarm =event->alarms().first() ;
332 QDateTime t = alarm->time(); 332 QDateTime t = alarm->time();
333 int min = t.secsTo( event->dtStart() )/60; 333 int min = t.secsTo( event->dtStart() )/60;
334 QString s =i18n("( %1 min before )").arg( min ); 334 QString s =i18n("( %1 min before )").arg( min );
335 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"); 335 addTag("p",i18n("<b>Alarm on: ") + s +" </b>");
336 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); 336 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate ));
337 //addTag("p",s); 337 //addTag("p",s);
338 } 338 }
339 339
340 addTag("b",i18n("Access: ")); 340 addTag("b",i18n("Access: "));
341 mText.append(event->secrecyStr()+"<br>"); 341 mText.append(event->secrecyStr()+"<br>");
342 342
343 343
344 if ( KOPrefs::instance()->mEVshowDetails ) { 344 if ( KOPrefs::instance()->mEVshowDetails ) {
345 if (!event->description().isEmpty()) { 345 if (!event->description().isEmpty()) {
346 addTag("p",i18n("<b>Details: </b>")); 346 addTag("p",i18n("<b>Details: </b>"));
347 addTag("p",event->description()); 347 addTag("p",event->description());
348 } 348 }
349 } 349 }
350 formatCategories(event); 350 formatCategories(event);
351 351
352 formatReadOnly(event); 352 formatReadOnly(event);
353 formatAttendees(event); 353 formatAttendees(event);
354 354
355 if ( KOPrefs::instance()->mEVshowCreated ) { 355 if ( KOPrefs::instance()->mEVshowCreated ) {
356 addTag("p",i18n("<b>Created: ") +" </b>"); 356 addTag("p",i18n("<b>Created: ") +" </b>");
357 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate )); 357 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate ));
358 358
359 } 359 }
360 if ( KOPrefs::instance()->mEVshowChanged ) { 360 if ( KOPrefs::instance()->mEVshowChanged ) {
361 addTag("p",i18n("<b>Last modified: ") +" </b>"); 361 addTag("p",i18n("<b>Last modified: ") +" </b>");
362 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate )); 362 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ));
363 363
364 } 364 }
365 setText(mText); 365 setText(mText);
366 //QWhatsThis::add(this,mText); 366 //QWhatsThis::add(this,mText);
367 367
368} 368}
369 369
370void KOEventViewer::appendTodo(Todo *event, int mode ) 370void KOEventViewer::appendTodo(Todo *event, int mode )
371{ 371{
372 mMailSubject = ""; 372 mMailSubject = "";
373 mCurrentIncidence = event; 373 mCurrentIncidence = event;
374 topLevelWidget()->setCaption(i18n("Todo Viewer")); 374 topLevelWidget()->setCaption(i18n("Todo Viewer"));
375 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 375 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
376 if (mode == 0 ) 376 if (mode == 0 )
377 addTag("h2",event->summary()); 377 addTag("h2",event->summary());
378 else { 378 else {
379 if ( mColorMode == 1 ) { 379 if ( mColorMode == 1 ) {
380 mText +="<font color=\"#00A000\">"; 380 mText +="<font color=\"#00A000\">";
381 } 381 }
382 if ( mColorMode == 2 ) { 382 if ( mColorMode == 2 ) {
383 mText +="<font color=\"#B00000\">"; 383 mText +="<font color=\"#B00000\">";
384 } 384 }
385 if ( mode == 1 ) { 385 if ( mode == 1 ) {
386 addTag("h2",i18n( "Local: " ) +event->summary()); 386 addTag("h2",i18n( "Local: " ) +event->summary());
387 } else { 387 } else {
388 addTag("h2",i18n( "Remote: " ) +event->summary()); 388 addTag("h2",i18n( "Remote: " ) +event->summary());
389 } 389 }
390 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 390 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
391 if ( mColorMode ) 391 if ( mColorMode )
392 mText += "</font>"; 392 mText += "</font>";
393 } 393 }
394 mMailSubject += i18n( "Todo " )+ event->summary(); 394 mMailSubject += i18n( "Todo " )+ event->summary();
395 395
396 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) { 396 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) {
397 mText +="<font color=\"#B00000\">"; 397 mText +="<font color=\"#B00000\">";
398 addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(KOPrefs::instance()->mShortDateInViewer) ) ); 398 addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(KOPrefs::instance()->mShortDateInViewer) ) );
399 mText += "</font>"; 399 mText += "</font>";
400 } else { 400 } else {
401 mText.append(i18n("<p><i>%1 % completed</i></p>") 401 mText.append(i18n("<p><i>%1 % completed</i></p>")
402 .arg(event->percentComplete())); 402 .arg(event->percentComplete()));
403 } 403 }
404 404
405 if (event->cancelled ()) { 405 if (event->cancelled ()) {
406 mText +="<font color=\"#B00000\">"; 406 mText +="<font color=\"#B00000\">";
407 addTag("i",i18n("This todo has been cancelled!")); 407 addTag("i",i18n("This todo has been cancelled!"));
408 mText.append("<br>"); 408 mText.append("<br>");
409 mText += "</font>"; 409 mText += "</font>";
410 mMailSubject += i18n("(cancelled)"); 410 mMailSubject += i18n("(cancelled)");
411 } 411 }
412 412
413 if (!event->location().isEmpty()) { 413 if (!event->location().isEmpty()) {
414 addTag("b",i18n("Location: ")); 414 addTag("b",i18n("Location: "));
415 mText.append(event->location()+"<br>"); 415 mText.append(event->location()+"<br>");
416 mMailSubject += i18n(" at ") + event->location(); 416 mMailSubject += i18n(" at ") + event->location();
417 } 417 }
418 418
419 if (event->recurrence()->doesRecur()) { 419 if (event->recurrence()->doesRecur()) {
420 420
421 QString recurText = event->recurrence()->recurrenceText(); 421 QString recurText = event->recurrence()->recurrenceText();
422 addTag("p","<em>" + i18n("This is a %1 recurring todo.").arg(recurText ) + "</em>"); 422 addTag("p","<em>" + i18n("This is a %1 recurring todo.").arg(recurText ) + "</em>");
423 423
424 } 424 }
425 if (event->hasStartDate()) { 425 if (event->hasStartDate()) {
426 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer))); 426 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer)));
427 } 427 }
428 if (event->hasDueDate()) { 428 if (event->hasDueDate()) {
429 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer))); 429 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer)));
430 mMailSubject += i18n(" - " )+event->dtDueStr( true ); 430 mMailSubject += i18n(" - " )+event->dtDueStr( true );
431 } 431 }
432 addTag("b",i18n("Access: ")); 432 addTag("b",i18n("Access: "));
433 mText.append(event->secrecyStr()+"<br>"); 433 mText.append(event->secrecyStr()+"<br>");
434 if ( KOPrefs::instance()->mEVshowDetails ) { 434 if ( KOPrefs::instance()->mEVshowDetails ) {
435 if (!event->description().isEmpty()) { 435 if (!event->description().isEmpty()) {
436 addTag("p",i18n("<b>Details: </b>")); 436 addTag("p",i18n("<b>Details: </b>"));
437 addTag("p",event->description()); 437 addTag("p",event->description());
438 } 438 }
439 } 439 }
440 440
441 formatCategories(event); 441 formatCategories(event);
442 442
443 mText.append(i18n("<p><b>Priority:</b> %2</p>") 443 mText.append(i18n("<p><b>Priority:</b> %2</p>")
444 .arg(QString::number(event->priority()))); 444 .arg(QString::number(event->priority())));
445 445
446 formatReadOnly(event); 446 formatReadOnly(event);
447 formatAttendees(event); 447 formatAttendees(event);
448 if ( event->relatedTo() ) { 448 if ( event->relatedTo() ) {
449 addTag("b",i18n("Parent todo:<br>")); 449 addTag("b",i18n("Parent todo:<br>"));
450 mText.append(event->relatedTo()->summary()+" [" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] <br>"); 450 mText.append(event->relatedTo()->summary()+" [" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] <br>");
451 } 451 }
452 QPtrList<Incidence> Relations = event->relations(); 452 QPtrList<Incidence> Relations = event->relations();
453 Incidence *to; 453 Incidence *to;
454 if ( Relations.first() ) 454 if ( Relations.first() )
455 addTag("b",i18n("Sub todos:<br>")); 455 addTag("b",i18n("Sub todos:<br>"));
456 for (to=Relations.first();to;to=Relations.next()) { 456 for (to=Relations.first();to;to=Relations.next()) {
457 mText.append( to->summary()+" [" +QString::number(to->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%]<br>"); 457 mText.append( to->summary()+" [" +QString::number(to->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%]<br>");
458 458
459 } 459 }
460 if ( KOPrefs::instance()->mEVshowCreated ) {
461 addTag("p",i18n("<b>Created: ") +" </b>");
462 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate ));
463
464 }
465 if ( KOPrefs::instance()->mEVshowChanged ) {
466 addTag("p",i18n("<b>Last modified: ") +" </b>");
467 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ));
468
469 }
460 setText(mText); 470 setText(mText);
461} 471}
462 472
463void KOEventViewer::formatCategories(Incidence *event) 473void KOEventViewer::formatCategories(Incidence *event)
464{ 474{
465 if (!event->categoriesStr().isEmpty()) { 475 if (!event->categoriesStr().isEmpty()) {
466 if (event->categories().count() == 1) { 476 if (event->categories().count() == 1) {
467 addTag("h3",i18n("Category")); 477 addTag("h3",i18n("Category"));
468 } else { 478 } else {
469 addTag("h3",i18n("Categories")); 479 addTag("h3",i18n("Categories"));
470 } 480 }
471 addTag("p",event->categoriesStr()); 481 addTag("p",event->categoriesStr());
472 } 482 }
473} 483}
474void KOEventViewer::formatAttendees(Incidence *event) 484void KOEventViewer::formatAttendees(Incidence *event)
475{ 485{
476 QPtrList<Attendee> attendees = event->attendees(); 486 QPtrList<Attendee> attendees = event->attendees();
477 if (attendees.count()) { 487 if (attendees.count()) {
478 488
479 489
480 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small); 490 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small);
481 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small); 491 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small);
482 addTag("h3",i18n("Organizer")); 492 addTag("h3",i18n("Organizer"));
483 mText.append("<ul><li>"); 493 mText.append("<ul><li>");
484#ifndef KORG_NOKABC 494#ifndef KORG_NOKABC
485 495
486#ifdef DESKTOP_VERSION 496#ifdef DESKTOP_VERSION
487 KABC::AddressBook *add_book = KABC::StdAddressBook::self(); 497 KABC::AddressBook *add_book = KABC::StdAddressBook::self();
488 KABC::Addressee::List addressList; 498 KABC::Addressee::List addressList;
489 addressList = add_book->findByEmail(event->organizer()); 499 addressList = add_book->findByEmail(event->organizer());
490 KABC::Addressee o = addressList.first(); 500 KABC::Addressee o = addressList.first();
491 if (!o.isEmpty() && addressList.size()<2) { 501 if (!o.isEmpty() && addressList.size()<2) {
492 mText += "<a href=\"uid:" + o.uid() + "\">"; 502 mText += "<a href=\"uid:" + o.uid() + "\">";
493 mText += o.formattedName(); 503 mText += o.formattedName();
494 mText += "</a>\n"; 504 mText += "</a>\n";
495 } else { 505 } else {
496 mText.append(event->organizer()); 506 mText.append(event->organizer());
497 } 507 }
498#else //DESKTOP_VERSION 508#else //DESKTOP_VERSION
499 mText += "<a href=\"uid:organizer\">"; 509 mText += "<a href=\"uid:organizer\">";
500 mText += event->organizer(); 510 mText += event->organizer();
501 mText += "</a>\n"; 511 mText += "</a>\n";
502#endif //DESKTOP_VERSION 512#endif //DESKTOP_VERSION
503 513
504 514
505#else 515#else
506 mText.append(event->organizer()); 516 mText.append(event->organizer());
507#endif 517#endif
508 518
509 if (iconPath) { 519 if (iconPath) {
510 mText += " <a href=\"mailto:" + event->organizer() + "\">"; 520 mText += " <a href=\"mailto:" + event->organizer() + "\">";
511 mText += "<IMG src=\"" + iconPath + "\">"; 521 mText += "<IMG src=\"" + iconPath + "\">";
512 mText += "</a>\n"; 522 mText += "</a>\n";
513 } 523 }
514 mText.append("</li></ul>"); 524 mText.append("</li></ul>");
515 525
516 addTag("h3",i18n("Attendees")); 526 addTag("h3",i18n("Attendees"));
517 Attendee *a; 527 Attendee *a;
518 mText.append("<ul>"); 528 mText.append("<ul>");
519 int a_count = 0; 529 int a_count = 0;
520 int a_count_nr = 0; 530 int a_count_nr = 0;
521 531
522 for(a=attendees.first();a;a=attendees.next()) { 532 for(a=attendees.first();a;a=attendees.next()) {
523#ifndef KORG_NOKABC 533#ifndef KORG_NOKABC
524#ifdef DESKTOP_VERSION 534#ifdef DESKTOP_VERSION
525 if (a->name().isEmpty()) { 535 if (a->name().isEmpty()) {
526 addressList = add_book->findByEmail(a->email()); 536 addressList = add_book->findByEmail(a->email());
527 KABC::Addressee o = addressList.first(); 537 KABC::Addressee o = addressList.first();
528 if (!o.isEmpty() && addressList.size()<2) { 538 if (!o.isEmpty() && addressList.size()<2) {
529 mText += "<a href=\"uid:" + o.uid() + "\">"; 539 mText += "<a href=\"uid:" + o.uid() + "\">";
530 mText += o.formattedName(); 540 mText += o.formattedName();
531 mText += "</a>\n"; 541 mText += "</a>\n";
532 } else { 542 } else {
533 mText += "<li>"; 543 mText += "<li>";
534 mText.append(a->email()); 544 mText.append(a->email());
535 mText += "\n"; 545 mText += "\n";
536 } 546 }
537 } else { 547 } else {
538 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 548 mText += "<li><a href=\"uid:" + a->uid() + "\">";
539 if (!a->name().isEmpty()) mText += a->name(); 549 if (!a->name().isEmpty()) mText += a->name();
540 else mText += a->email(); 550 else mText += a->email();
541 mText += "</a>\n"; 551 mText += "</a>\n";
542 } 552 }
543#else //DESKTOP_VERSION 553#else //DESKTOP_VERSION
544 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 554 mText += "<li><a href=\"uid:" + a->uid() + "\">";
545 if (!a->name().isEmpty()) mText += a->name(); 555 if (!a->name().isEmpty()) mText += a->name();
546 else mText += a->email(); 556 else mText += a->email();
547 mText += "</a>\n"; 557 mText += "</a>\n";
548#endif //DESKTOP_VERSION 558#endif //DESKTOP_VERSION
549#else 559#else
550 //qDebug("nokabc "); 560 //qDebug("nokabc ");
551 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 561 mText += "<li><a href=\"uid:" + a->uid() + "\">";
552 if (!a->name().isEmpty()) mText += a->name(); 562 if (!a->name().isEmpty()) mText += a->name();
553 else mText += a->email(); 563 else mText += a->email();
554 mText += "</a>\n"; 564 mText += "</a>\n";
555#endif 565#endif
556 566
557 567
558 if (!a->email().isEmpty()) { 568 if (!a->email().isEmpty()) {
559 if (iconPath) { 569 if (iconPath) {
560 mText += "<a href=\"mailto:" + a->name() +" <" + a->email() + ">:" + mMailSubject + "\">"; 570 mText += "<a href=\"mailto:" + a->name() +" <" + a->email() + ">:" + mMailSubject + "\">";
561 if ( a->RSVP() ) { 571 if ( a->RSVP() ) {
562 ++a_count_nr; 572 ++a_count_nr;
563 mText += "<IMG src=\"" + iconPath + "\">"; 573 mText += "<IMG src=\"" + iconPath + "\">";
564 } 574 }
565 else { 575 else {
566 ++a_count; 576 ++a_count;
567 mText += "<IMG src=\"" + NOiconPath + "\">"; 577 mText += "<IMG src=\"" + NOiconPath + "\">";
568 } 578 }
569 mText += "</a>\n"; 579 mText += "</a>\n";
570 } 580 }
571 } 581 }
572 if (a->status() != Attendee::NeedsAction ) 582 if (a->status() != Attendee::NeedsAction )
573 mText +="[" + a->statusStr() + "] "; 583 mText +="[" + a->statusStr() + "] ";
574 if (a->role() == Attendee::Chair ) 584 if (a->role() == Attendee::Chair )
575 mText +="(" + a->roleStr().left(1) + ".)"; 585 mText +="(" + a->roleStr().left(1) + ".)";
576 } 586 }
577 mText.append("</li></ul>"); 587 mText.append("</li></ul>");
578 if ( (a_count+a_count_nr) > 1 ) { 588 if ( (a_count+a_count_nr) > 1 ) {
579 mText += "<a href=\"mailto:ALL\">"; 589 mText += "<a href=\"mailto:ALL\">";
580 mText += i18n( "Mail to all" ); 590 mText += i18n( "Mail to all" );
581 mText += "</a> ( "; 591 mText += "</a> ( ";
582 mText += "<IMG src=\"" + iconPath + "\">"; 592 mText += "<IMG src=\"" + iconPath + "\">";
583 mText += i18n( " and " ); 593 mText += i18n( " and " );
584 mText += "<IMG src=\"" + NOiconPath + "\"> )"; 594 mText += "<IMG src=\"" + NOiconPath + "\"> )";
585 mText += "<br>\n"; 595 mText += "<br>\n";
586 596
587 597
588 } 598 }
589 if ( a_count_nr > 1 ) { 599 if ( a_count_nr > 1 ) {
590 mText += "<a href=\"mailto:RSVP\">"; 600 mText += "<a href=\"mailto:RSVP\">";
591 mText += i18n( "Mail to selected" ); 601 mText += i18n( "Mail to selected" );
592 mText += "</a> ( "; 602 mText += "</a> ( ";
593 mText += i18n( "<IMG src=\"%1\"> only )").arg ( iconPath ); 603 mText += i18n( "<IMG src=\"%1\"> only )").arg ( iconPath );
594 mText += "<br>\n"; 604 mText += "<br>\n";
595 } 605 }
596 } 606 }
597 607
598} 608}
599void KOEventViewer::appendJournal(Journal *jour, int mode ) 609void KOEventViewer::appendJournal(Journal *jour, int mode )
600{ 610{
601 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 611 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
602 if (mode == 0 ) { 612 if (mode == 0 ) {
603 addTag("h2",i18n("Journal from: ")); 613 addTag("h2",i18n("Journal from: "));
604 } 614 }
605 else { 615 else {
606 if ( mode == 1 ) { 616 if ( mode == 1 ) {
607 addTag("h2",i18n( "Local: " ) +i18n("Journal from: ")); 617 addTag("h2",i18n( "Local: " ) +i18n("Journal from: "));
608 } else { 618 } else {
609 addTag("h2",i18n( "Remote: " ) +i18n("Journal from: ")); 619 addTag("h2",i18n( "Remote: " ) +i18n("Journal from: "));
610 } 620 }
611 } 621 }
612 topLevelWidget()->setCaption("Journal Viewer"); 622 topLevelWidget()->setCaption("Journal Viewer");
613 mText.append(i18n("<h3> %1 </h3> ").arg(jour->dtStartDateStr(KOPrefs::instance()->mShortDateInViewer))); 623 mText.append(i18n("<h3> %1 </h3> ").arg(jour->dtStartDateStr(KOPrefs::instance()->mShortDateInViewer)));
614 addTag("b",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(jour->lastModified(),shortDate ) ); 624 addTag("b",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(jour->lastModified(),shortDate ) );
615 if (!jour->description().isEmpty()) { 625 if (!jour->description().isEmpty()) {
616 addTag("p",jour->description()); 626 addTag("p",jour->description());
617 } 627 }
618 setText(mText); 628 setText(mText);
619} 629}
620 630
621void KOEventViewer::formatReadOnly(Incidence *event) 631void KOEventViewer::formatReadOnly(Incidence *event)
622{ 632{
623 if (event->isReadOnly()) { 633 if (event->isReadOnly()) {
624 addTag("p","<em>(" + i18n("read-only") + ")</em>"); 634 addTag("p","<em>(" + i18n("read-only") + ")</em>");
625 } 635 }
626} 636}
627void KOEventViewer::setSyncMode( bool b ) 637void KOEventViewer::setSyncMode( bool b )
628{ 638{
629 mSyncMode = b; 639 mSyncMode = b;
630} 640}
631 641
632 642
633void KOEventViewer::setTodo(Todo *event, bool clearV ) 643void KOEventViewer::setTodo(Todo *event, bool clearV )
634{ 644{
635 if ( clearV ) 645 if ( clearV )
636 clearEvents(); 646 clearEvents();
637 if ( mSyncMode ) { 647 if ( mSyncMode ) {
638 if ( clearV ) 648 if ( clearV )
639 appendTodo(event,1 ); 649 appendTodo(event,1 );
640 else 650 else
641 appendTodo(event,2); 651 appendTodo(event,2);
642 } else 652 } else
643 appendTodo(event); 653 appendTodo(event);
644} 654}
645void KOEventViewer::setJournal(Journal *event, bool clearV ) 655void KOEventViewer::setJournal(Journal *event, bool clearV )
646{ 656{
647 if ( clearV ) 657 if ( clearV )
648 clearEvents(); 658 clearEvents();
649 if ( mSyncMode ) { 659 if ( mSyncMode ) {
650 if ( clearV ) 660 if ( clearV )
651 appendJournal(event, 1); 661 appendJournal(event, 1);