summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-04-17 16:49:25 (UTC)
committer zautrix <zautrix>2005-04-17 16:49:25 (UTC)
commit70b45fe97813c4fd336b7ca8fdedab13f9c2e039 (patch) (unidiff)
tree37e89cf6cc411af8c646003fcfb0d5975f38272c
parent02dc5d8173393d2069951a5f847db5bdf69137f6 (diff)
downloadkdepimpi-70b45fe97813c4fd336b7ca8fdedab13f9c2e039.zip
kdepimpi-70b45fe97813c4fd336b7ca8fdedab13f9c2e039.tar.gz
kdepimpi-70b45fe97813c4fd336b7ca8fdedab13f9c2e039.tar.bz2
fixes
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt274
-rw-r--r--changelog.txt136
-rw-r--r--desktop/rpm/kdepim_rpm2
-rw-r--r--korganizer/koeventviewer.cpp112
-rw-r--r--korganizer/kotodoview.cpp10
-rw-r--r--libkcal/incidence.cpp4
-rw-r--r--libkcal/incidence.h1
-rw-r--r--version2
8 files changed, 229 insertions, 312 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 03895fd..ef0bd8b 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,279 +1,41 @@
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.28 ************ 3********** VERSION 2.1.0 ************
4 4
5KO/Pi: 5Stable release 2.1.0!
6Fixed two problems in KO/Pi timetracking.
7Added context menu to month view for creating new events/todos.
8Fixed some other small bugs.
9 6
7Summary of changes/fixes compared to version 2.0.6:
10 8
11********** VERSION 2.0.27 ************ 9Many bugs of version 2.0.6 fixed.
10Most of them were small bugs, but some of them were important.
11It is recommended to use version 2.1.0 and not version 2.0.6.
12 12
13More bugfixes. 13Important changes:
14Added possibility to clone in KO/Pi a todo with all its subtodos.
15Added config option for alternate background in list views.
16
17Added a timetracker funtionality in KO/Pi for todos in the todo view.
18If a todo is set to started and then to stopped it is saving information about the runtime in
19<yourhome>/kdepim/apps/timetrackerdir.
20To read, display, print this information an external program is needed which will be developed.
21It will display the data in a Gantt timetable view with one row for each todo.
22It will have many possibilities sorting the data after category, parent todos, attendees, ... and for creating/printing status reports/summaries.
23Merging of data from different computers/users will be quite easy because every run is stored in a single file.
24
25********** VERSION 2.0.26 ************
26
27Added two more fields to the KA/Pi view config:
28A "Mobile (home)" and a "Mobile (work)" field.
29Fixed utf8 import (e.g. for Japaneese text) in KA/Pi.
30
31Some alarm applet enhancements, e.g. sound stops automatically if value of suspend spinbox changes.
32And again fixed some more small bugs.
33
34********** VERSION 2.0.25 ************
35
36And again fixed some bugs.
37
38********** VERSION 2.0.24 ************
39
40Fixed again a lot of small bugs.
41Some performance optimizations in date navigator.
42Month view displays now multi days events on top of each cell, such that it is more likely that all multi days items of one event are in the same row.
43
44********** VERSION 2.0.23 ************
45
46Fixed again a lot of small and strange bugs, e.g. the missing toolbar of KA/Pi after a new installation.
47Fixed the (agenda) layout of KO/Pi on 5500er.
48Some usebility enhancements (e.g. reselection the current item of the todo view after some changes).
49
50********** VERSION 2.0.22 ************
51
52KO/Pi:
53Fix for creating events/todos via the abgenda context menu.
54Added option to split toolbar to 3 toolbars.
55(Toolbar moving s disabled for this option due to a bug in Qt somewhere).
56Added option to show one small filter-view-toolbar.
57Added a print option to the desktop version:
58Now you can print out the view of the "Event Viewer".
59That means you can print all data of one particular event/todo.
60Added scaling options to printout of Event Viewer and What'sNext View.
61Fixed some problems in the month view in "week start sunday" mode.
62KA/Pi:
63Added two more config options.
64Fixed resizing problem of address request dialog when orientation was switched.
65Cleaned up the menu structure.
66Fixed some more problems.
67
68Fixed the annoying problem that scrolling continued after the key was released in KO/Pi Monthview and the KA/Pi views.
69
70And, this is a really cool option (Ben did suggest it):
71Now KO/Pi and KA/Pi can be run from a USB stick:
72All data is read from and written to the stick.
73You can enable this in the global configure option TAB with:
74Save using LOCAL storage.
75Just put KDE-Pim/Pi on a memory stick and you can access all your PIM data on every computer with Windows XP. It will work with the ME and Linux versions as well. I will put a memory stick version for teh next stable release online.
76
77********** VERSION 2.0.21 ************
78
79Fixed another SMTP problem in OM/Pi.
80Some small changed in the new datenavigator in KO/Pi.
81Changed default setting for new filter in KA/Pi to "exclude categories".
82Changed the default font size for 640x480 display .
83Changed popup menu behaviour in agenda and list view.
84Fixed some layout problems of the date label size in the month view.
85Made month view update faster.
86Made first datenavigator repainting faster.
87Changed the title of the event/todo edit dialogs.
88Timelabels in agenga changed from 22:00 to 22 oo. ( the oo higher, of course).
89Many small usebility fixes in KO/Pi.
90Pressing the "Calendar" button on the Z switches now to the next view in KO/Pi.
91The set of possible "next views" are the views you have toolbar buttons for.
92
93Made alarm sound working on Linux.
94
95KO/Pi alarm applet changed:
96Made buttons in alarm dialog much bigger.
97Made setting of timer more user friendly by showing the actual timer fire time and making the buttons in the timer settings much bigger.
98The goal was it to make it possible to use a finger tip ( and not the stylus ) on the touchscreen to adjust the settings.
99
100And because this version is realeased at Easter, I added an Easter-egg:
101With a new undocumented command you can get a message box about the next alarm.
102Good luck to find it!
103
104
105
106********** VERSION 2.0.20 ************
107
108Two small fixes in OM/Pi.
109
110Better resizing of the new datenavigator in KO/Pi.
111
112********** VERSION 2.0.19 ************
113KO/Pi:
114Enhancements and bugfixes in the new datenavigator.
115Bugfix in this changelog:
116The datenavigator was changed in version 2.0.18, not the datepicker.
117
118********** VERSION 2.0.18 ************
119KO/Pi:
120Fixed some minor problems.
121Cleaned up the KO/Pi config dialog.
122Fixed problem moving events in aganda view.
123Made datepicker scaleable, i.e. if the datenavigator shows now a
124datenavigator matrix depending on its size.
125Birthdays are now displayed green in the datenavigator.
126What'sThis Help in datenavigator shows all events of the day.
127
128OM/Pi:
129Updated the backend mail library to the latest version.
130Please backup your mail before using this version.
131
132********** VERSION 2.0.17 ************
133
134KO/Pi:
135Tooltips in month view were not sorted. Fixed.
136Daylabel in agenda view ( for display of one day ) was too short. Fixed.
137Conflict display dialog for syncing was not on top of other windows. Fixed.
138Fixed some minor problems.
139
140Fixed an endless loop when importing vcs file with RESOURCES entry.
141
142********** VERSION 2.0.16 ************
143OM/Pi:
144Fixed the SMTP account setting the option.
145Fixed something in mail sending.
146
147KO/Pi:
148Added possibility to export selected events/todos as vcal file.
149
150********** VERSION 2.0.15 ************
151
152PwM/Pi:
153Added keyboard shorcuts for
154- toggling summary view (space bar)
155- delete item (delete + backspace key)
156- add new item ( i + n key)
157Fixed length of info in the title.
158
159KO/Pi-KA/Pi:
160Changed "ME" menu bar entry to an icon.
161
162KO/Pi:
163Fixed two minor bugs in displaying todos.
164If in month view a cell is selected, the key shortcut "d" shows now that date.
165Added complete info for a todo in month view as an icon left of the text.
166Fixed problems of displaying data when "<" or ">" are used in summary/location/description.
167Fixed problem of search dialog size when switching displays.
168Cancel key now closes date picker.
169Rearranged KO/Pi file menu structure.
170
171OM/Pi:
172Added to the SMTP account setting the option
173"No secure connection".
174You have to configure your SMTP accounts again, sorry.
175
176KA/Pi:
177Added support for importing quoted-printable.
178Support was added by Peter P.. Thanks, Peter!
179
180
181********** VERSION 2.0.14 ************
182
183Made Passwordmanager PwM/Pi more userfriendly:
184Rearranged some toolbar icons, optimized setting of focus, fixed layout problems and more.
185Fixed bug in KO/Pi todo printing.
186Made Qtopia calendar import possible on desktop .
187
188********** VERSION 2.0.13 ************
189
190Fixed a problem in the addressee select dialog and made it more user friendly by adding a minimize splitter.
191
192In the search dialog you can switch now the focus from search line edit to the list view by pressing key "arrow down".
193
194OM/Pi:
195Fixed a refresh problem of outgoing/sent/sendfailed folders after sending mails.
196Added missing German translation.
197Added warning if path is specified in local folder settings of account config.
198
199********** VERSION 2.0.12 ************
200
201KO/Pi:
202Fixed a bug in todo start/due date handling for non recurring todos with a start and due date.
203Fixed some layout problems in the KO/Pi agenda view when there were many conflicting itmes.
204Fixed several problems of the keyboard focus in the desktop versions when opening the search dialog/event viewer.
205
206Fixed problem in pi-sync mode when wrong password was sent.
207
208OM/Pi:
209Fixed a crash when displaying mails with "Show mail as html" was checked in the config.
210Added a check before displaying the mail if the mail is in html format, if "Show mail as html" is enabled.
211
212********** VERSION 2.0.11 ************
213
214Fixed some problems in pi-sync mode
215(e.g. details of events were not synced properly)
216
217********** VERSION 2.0.10 ************
218
219KO/Pi:
220In the desktop versions the context menu in the search dialog was broken after introducing the What'sThis info for the list view.
221This is fixed.
222Changed the search dialog a bit to make it more user friendly.
223(E.g.: Removed message box about "no items found" and set key focus to search line edit after search).
224
225Added config option to hide the week number in KO/Pi toolbar.
226
227********** VERSION 2.0.9 ************
228
229Made month view icons for multiday events a bit nicer.
230Some minor fixes in KO/Pi
231(e.g. go to today did not work for new week view properly).
232
233
234********** VERSION 2.0.8 ************
235
236Fixed a problem in dependency info in the ipk files for the Zaurus.
237
238Added 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.
239
240Added a "go today" button to the datepicker.
241
242Added "created" and "last modified" to event/todo viewer (and What'sThis viewer)
243and made it configureable to show these values.
244
245Fixed a problem for events (from external iCal files) that do have a duration but no end date.
246
247
248********** VERSION 2.0.7 ************
249
250Added global application font settings
251(for all KDE-Pim/Pi apps) to the general settings.
252
253Fixed a problem in OM/Pi when trying to login to some IMAP servers
254(like the IMAP server of Apple: mail.mac.com )
255 14
256Added recurring todos to KO/Pi. 15Added recurring todos to KO/Pi.
257 16
17Added global application font settings (for all KDE-Pim/Pi apps) to the general settings.
18
19Made Passwordmanager PwM/Pi more userfriendly: Rearranged some toolbar icons, optimized setting of focus, fixed layout problems and more.
258 20
259********** VERSION 2.0.6 ************ 21Datenavigator can now display many months. Very useful on the desktop.
260 22
261Stable release 2.0.6! 23KO/Pi alarm applet changed: Made buttons in alarm dialog much bigger and other usebility enhancements.
262 24
263Some bugfixes in the pi-sync mode. 25Made alarm sound working on Linux desktop.
264Added German translation for pi-sync mode.
265 26
266KO/Pi: 27Made KO/Pi and KA/Pi running from a memory stick. Please read storage HowTo for details.
267Made the todolist using alternate background.
268 28
269Other minor fixes in KO/Pi. 29Added timetracking feature in KO/Pi todo view. Please read timetraker HowTo for details.
270 30
31Many other usebility enhancements.
32Special thanks to Ben for his suggestions!
271 33
272You can find the complete changelog 34You can find the complete changelog
273from version 1.7.7 to 2.0.5 35from version 1.7.7 to 2.1.0
274in the source package or on 36in the source package or on
275 37
276http://www.pi-sync.net/html/changelog.html 38http://www.pi-sync.net/html/changelog.html
277 39
278 40
279 41
diff --git a/changelog.txt b/changelog.txt
index 99be167..45e0322 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -1,36 +1,172 @@
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.1.0 ************
4
5Stable release 2.1.0!
6
7Summary of changes/fixes compared to version 2.0.6:
8
9Many bugs of version 2.0.6 fixed.
10Most of them were small bugs, but some of them were important.
11It is recommended to use version 2.1.0 and not version 2.0.6.
12
13Important changes:
14
15Added recurring todos to KO/Pi.
16
17Added global application font settings (for all KDE-Pim/Pi apps) to the general settings.
18
19Made Passwordmanager PwM/Pi more userfriendly: Rearranged some toolbar icons, optimized setting of focus, fixed layout problems and more.
20
21Datenavigator can now display many months. Very useful on the desktop.
22
23KO/Pi alarm applet changed: Made buttons in alarm dialog much bigger and other usebility enhancements.
24
25Made alarm sound working on Linux desktop.
26
27Made KO/Pi and KA/Pi running from a memory stick. Please read storage HowTo for details.
28
29Added timetracking feature in KO/Pi todo view. Please read timetraker HowTo for details.
30
31Many other usebility enhancements.
32Special thanks to Ben for his suggestions!
33
34You can find the complete changelog
35from version 1.7.7 to 2.1.0
36in the source package or on
37
38http://www.pi-sync.net/html/changelog.html
39
40********** VERSION 2.0.28 ************
41
42KO/Pi:
43Fixed two problems in KO/Pi timetracking.
44Added context menu to month view for creating new events/todos.
45Fixed some other small bugs.
46
47
48********** VERSION 2.0.27 ************
49
50More bugfixes.
51Added possibility to clone in KO/Pi a todo with all its subtodos.
52Added config option for alternate background in list views.
53
54Added a timetracker funtionality in KO/Pi for todos in the todo view.
55If a todo is set to started and then to stopped it is saving information about the runtime in
56<yourhome>/kdepim/apps/timetrackerdir.
57To read, display, print this information an external program is needed which will be developed.
58It will display the data in a Gantt timetable view with one row for each todo.
59It will have many possibilities sorting the data after category, parent todos, attendees, ... and for creating/printing status reports/summaries.
60Merging of data from different computers/users will be quite easy because every run is stored in a single file.
61
62********** VERSION 2.0.26 ************
63
64Added two more fields to the KA/Pi view config:
65A "Mobile (home)" and a "Mobile (work)" field.
66Fixed utf8 import (e.g. for Japaneese text) in KA/Pi.
67
68Some alarm applet enhancements, e.g. sound stops automatically if value of suspend spinbox changes.
69And again fixed some more small bugs.
70
71********** VERSION 2.0.25 ************
72
73And again fixed some bugs.
74
75********** VERSION 2.0.24 ************
76
77Fixed again a lot of small bugs.
78Some performance optimizations in date navigator.
79Month view displays now multi days events on top of each cell, such that it is more likely that all multi days items of one event are in the same row.
80
81********** VERSION 2.0.23 ************
82
83Fixed again a lot of small and strange bugs, e.g. the missing toolbar of KA/Pi after a new installation.
84Fixed the (agenda) layout of KO/Pi on 5500er.
85Some usebility enhancements (e.g. reselection the current item of the todo view after some changes).
86
87********** VERSION 2.0.22 ************
88
89KO/Pi:
90Fix for creating events/todos via the abgenda context menu.
91Added option to split toolbar to 3 toolbars.
92(Toolbar moving s disabled for this option due to a bug in Qt somewhere).
93Added option to show one small filter-view-toolbar.
94Added a print option to the desktop version:
95Now you can print out the view of the "Event Viewer".
96That means you can print all data of one particular event/todo.
97Added scaling options to printout of Event Viewer and What'sNext View.
98Fixed some problems in the month view in "week start sunday" mode.
99KA/Pi:
100Added two more config options.
101Fixed resizing problem of address request dialog when orientation was switched.
102Cleaned up the menu structure.
103Fixed some more problems.
104
105Fixed the annoying problem that scrolling continued after the key was released in KO/Pi Monthview and the KA/Pi views.
106
107And, this is a really cool option (Ben did suggest it):
108Now KO/Pi and KA/Pi can be run from a USB stick:
109All data is read from and written to the stick.
110You can enable this in the global configure option TAB with:
111Save using LOCAL storage.
112Just put KDE-Pim/Pi on a memory stick and you can access all your PIM data on every computer with Windows XP. It will work with the ME and Linux versions as well. I will put a memory stick version for teh next stable release online.
113
3********** VERSION 2.0.21 ************ 114********** VERSION 2.0.21 ************
4 115
116Fixed another SMTP problem in OM/Pi.
117Some small changed in the new datenavigator in KO/Pi.
118Changed default setting for new filter in KA/Pi to "exclude categories".
119Changed the default font size for 640x480 display .
120Changed popup menu behaviour in agenda and list view.
121Fixed some layout problems of the date label size in the month view.
122Made month view update faster.
123Made first datenavigator repainting faster.
124Changed the title of the event/todo edit dialogs.
125Timelabels in agenga changed from 22:00 to 22 oo. ( the oo higher, of course).
126Many small usebility fixes in KO/Pi.
127Pressing the "Calendar" button on the Z switches now to the next view in KO/Pi.
128The set of possible "next views" are the views you have toolbar buttons for.
129
130Made alarm sound working on Linux.
131
132KO/Pi alarm applet changed:
133Made buttons in alarm dialog much bigger.
134Made setting of timer more user friendly by showing the actual timer fire time and making the buttons in the timer settings much bigger.
135The goal was it to make it possible to use a finger tip ( and not the stylus ) on the touchscreen to adjust the settings.
136
137And because this version is realeased at Easter, I added an Easter-egg:
138With a new undocumented command you can get a message box about the next alarm.
139Good luck to find it!
140
5 141
6********** VERSION 2.0.20 ************ 142********** VERSION 2.0.20 ************
7 143
8Two small fixes in OM/Pi. 144Two small fixes in OM/Pi.
9 145
10Better resizing of the new datenavigator in KO/Pi. 146Better resizing of the new datenavigator in KO/Pi.
11 147
12********** VERSION 2.0.19 ************ 148********** VERSION 2.0.19 ************
13KO/Pi: 149KO/Pi:
14Enhancements and bugfixes in the new datenavigator. 150Enhancements and bugfixes in the new datenavigator.
15Bugfix in this changelog: 151Bugfix in this changelog:
16The datenavigator was changed in version 2.0.18, not the datepicker. 152The datenavigator was changed in version 2.0.18, not the datepicker.
17 153
18********** VERSION 2.0.18 ************ 154********** VERSION 2.0.18 ************
19KO/Pi: 155KO/Pi:
20Fixed some minor problems. 156Fixed some minor problems.
21Cleaned up the KO/Pi config dialog. 157Cleaned up the KO/Pi config dialog.
22Fixed problem moving events in aganda view. 158Fixed problem moving events in aganda view.
23Made datepicker scaleable, i.e. if the datenavigator shows now a 159Made datepicker scaleable, i.e. if the datenavigator shows now a
24datenavigator matrix depending on its size. 160datenavigator matrix depending on its size.
25Birthdays are now displayed green in the datenavigator. 161Birthdays are now displayed green in the datenavigator.
26What'sThis Help in datenavigator shows all events of the day. 162What'sThis Help in datenavigator shows all events of the day.
27 163
28OM/Pi: 164OM/Pi:
29Updated the backend mail library to the latest version. 165Updated the backend mail library to the latest version.
30Please backup your mail before using this version. 166Please backup your mail before using this version.
31 167
32********** VERSION 2.0.17 ************ 168********** VERSION 2.0.17 ************
33 169
34KO/Pi: 170KO/Pi:
35Tooltips in month view were not sorted. Fixed. 171Tooltips in month view were not sorted. Fixed.
36Daylabel in agenda view ( for display of one day ) was too short. Fixed. 172Daylabel in agenda view ( for display of one day ) was too short. Fixed.
diff --git a/desktop/rpm/kdepim_rpm b/desktop/rpm/kdepim_rpm
index 3889b6f..3b6b52e 100644
--- a/desktop/rpm/kdepim_rpm
+++ b/desktop/rpm/kdepim_rpm
@@ -1,35 +1,35 @@
1Summary: A collection of PIM programs 1Summary: A collection of PIM programs
2Name: KDE-Pim-Pi 2Name: KDE-Pim-Pi
3Version: 2.0.28 3Version: 2.1.0
4Release: SuSE_9.2 4Release: SuSE_9.2
5Copyright:GPL 5Copyright:GPL
6Group: Productivity/Pim 6Group: Productivity/Pim
7Source:http://sourceforge.net/projects/kdepimpi/ 7Source:http://sourceforge.net/projects/kdepimpi/
8URL:http://sourceforge.net/projects/kdepimpi/ 8URL:http://sourceforge.net/projects/kdepimpi/
9Packager: zautrix 9Packager: zautrix
10 10
11%description 11%description
12This package contains the platform-independent PIM programs from 12This package contains the platform-independent PIM programs from
13www.pi-sync.info, compiled for SuSE 9.2: 13www.pi-sync.info, compiled for SuSE 9.2:
14KTimeTacker/Pi 14KTimeTacker/Pi
15KPhone/Pi 15KPhone/Pi
16KAddressbook/Pi 16KAddressbook/Pi
17KOrganizer/Pi 17KOrganizer/Pi
18PasswordManager/Pi 18PasswordManager/Pi
19KOPieMail/Pi 19KOPieMail/Pi
20 20
21These applications do not need anything from the KDE-desktop 21These applications do not need anything from the KDE-desktop
22at all to run on Linux. However, there is a dependency from 22at all to run on Linux. However, there is a dependency from
23two KDE libs, because a small command line program is included 23two KDE libs, because a small command line program is included
24to make it possible to sync with the KDE-desktop applications. 24to make it possible to sync with the KDE-desktop applications.
25 25
26These applications are independent from the KDE-desktop 26These applications are independent from the KDE-desktop
27environment. That means, nothing of your existing 27environment. That means, nothing of your existing
28KDE-desktop setup will be changed, or any data 28KDE-desktop setup will be changed, or any data
29(calendar-addressbook) used by the KDE-desktop 29(calendar-addressbook) used by the KDE-desktop
30applications will be changed or accessed. 30applications will be changed or accessed.
31These applications stores their data and config in 31These applications stores their data and config in
32$HOME/kdepim/ 32$HOME/kdepim/
33However, because the same file format is used, 33However, because the same file format is used,
34an easy exchange of data with the KDE-desktop 34an easy exchange of data with the KDE-desktop
35is possible. 35is possible.
diff --git a/korganizer/koeventviewer.cpp b/korganizer/koeventviewer.cpp
index f39b5e1..c8c2f28 100644
--- a/korganizer/koeventviewer.cpp
+++ b/korganizer/koeventviewer.cpp
@@ -249,329 +249,341 @@ void KOEventViewer::addTag(const QString & tag,const QString & text)
249 if(number !=-1) 249 if(number !=-1)
250 { 250 {
251 if (number > 0) { 251 if (number > 0) {
252 int pos=0; 252 int pos=0;
253 QString tmp; 253 QString tmp;
254 for(int i=0;i<=number;i++) { 254 for(int i=0;i<=number;i++) {
255 pos=tmpText.find("\n"); 255 pos=tmpText.find("\n");
256 tmp=tmpText.left(pos); 256 tmp=tmpText.left(pos);
257 tmpText=tmpText.right(tmpText.length()-pos-1); 257 tmpText=tmpText.right(tmpText.length()-pos-1);
258 tmpStr+=tmp+"<br>"; 258 tmpStr+=tmp+"<br>";
259 } 259 }
260 } 260 }
261 else tmpStr += tmpText; 261 else tmpStr += tmpText;
262 tmpStr+="</" + tag + ">"; 262 tmpStr+="</" + tag + ">";
263 mText.append(tmpStr); 263 mText.append(tmpStr);
264 } 264 }
265 else 265 else
266 { 266 {
267 str += text + "</" + tag + ">"; 267 str += text + "</" + tag + ">";
268 mText.append(str); 268 mText.append(str);
269 } 269 }
270} 270}
271 271
272void KOEventViewer::setColorMode( int m ) 272void KOEventViewer::setColorMode( int m )
273{ 273{
274 mColorMode = m; 274 mColorMode = m;
275} 275}
276void KOEventViewer::appendEvent(Event *event, int mode ) 276void KOEventViewer::appendEvent(Event *event, int mode )
277{ 277{
278 mMailSubject = ""; 278 mMailSubject = "";
279 mCurrentIncidence = event; 279 mCurrentIncidence = event;
280 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 280 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
281 bool wideScreen = ( QApplication::desktop()->width() >= 640 );
281 topLevelWidget()->setCaption(i18n("Event Viewer")); 282 topLevelWidget()->setCaption(i18n("Event Viewer"));
282 if ( mode == 0 ) { 283 if ( mode == 0 ) {
283 addTag("h2",deTag(event->summary())); 284 addTag("h2",deTag(event->summary()));
284 } 285 }
285 else { 286 else {
286 if ( mColorMode == 1 ) { 287 if ( mColorMode == 1 ) {
287 mText +="<font color=\"#00A000\">"; 288 mText +="<font color=\"#00A000\">";
288 } 289 }
289 if ( mColorMode == 2 ) { 290 if ( mColorMode == 2 ) {
290 mText +="<font color=\"#C00000\">"; 291 mText +="<font color=\"#C00000\">";
291 } 292 }
292 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>"; 293 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>";
293 if ( mode == 1 ) { 294 if ( mode == 1 ) {
294 addTag("h2",i18n( "Local: " ) +deTag(event->summary())); 295 addTag("h2",i18n( "Local: " ) +deTag(event->summary()));
295 } else { 296 } else {
296 addTag("h2",i18n( "Remote: " ) +deTag(event->summary())); 297 addTag("h2",i18n( "Remote: " ) +deTag(event->summary()));
297 } 298 }
298 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 299 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
299 if ( mColorMode ) 300 if ( mColorMode )
300 mText += "</font>"; 301 mText += "</font>";
301 } 302 }
302 mMailSubject += i18n( "Meeting " )+ event->summary(); 303 mMailSubject += i18n( "Meeting " )+ event->summary();
303 if (event->cancelled ()) { 304 if (event->cancelled ()) {
304 mText +="<font color=\"#B00000\">"; 305 mText +="<font color=\"#B00000\">";
305 addTag("i",i18n("This event has been cancelled!")); 306 addTag("i",i18n("This event has been cancelled!"));
306 mText.append("<br>"); 307 mText.append("<br>");
307 mText += "</font>"; 308 mText += "</font>";
308 mMailSubject += i18n("(cancelled)"); 309 mMailSubject += i18n("(cancelled)");
309 } 310 }
310 311
311 if (event->doesFloat()) { 312 if (event->doesFloat()) {
312 if (event->isMultiDay()) { 313 if (event->isMultiDay()) {
313 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>") 314 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>")
314 .arg(event->dtStartDateStr(shortDate)) 315 .arg(event->dtStartDateStr(shortDate))
315 .arg(event->dtEndDateStr(shortDate))); 316 .arg(event->dtEndDateStr(shortDate)));
316 } else { 317 } else {
317 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate ))); 318 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate )));
318 } 319 }
319 } else { 320 } else {
320 if (event->isMultiDay()) { 321 if (event->isMultiDay()) {
321 mText.append(i18n("<p><b>From:</b> %1</p> ") 322 mText.append(i18n("<p><b>From:</b> %1</p> ")
322 .arg(event->dtStartStr( shortDate))); 323 .arg(event->dtStartStr( shortDate)));
323 mText.append(i18n("<p><b>To:</b> %1</p>") 324 mText.append(i18n("<p><b>To:</b> %1</p>")
324 .arg(event->dtEndStr(shortDate))); 325 .arg(event->dtEndStr(shortDate)));
325 } else { 326 } else {
326 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>") 327 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>")
327 .arg(event->dtStartTimeStr()) 328 .arg(event->dtStartTimeStr())
328 .arg(event->dtEndTimeStr())); 329 .arg(event->dtEndTimeStr()));
329 mText.append(i18n("<p><b>On:</b> %1</p> ") 330 mText.append(i18n("<p><b>On:</b> %1</p> ")
330 .arg(event->dtStartDateStr( shortDate ))); 331 .arg(event->dtStartDateStr( shortDate )));
331 } 332 }
332 } 333 }
333 if (!event->location().isEmpty()) { 334 if (!event->location().isEmpty()) {
334 addTag("b",i18n("Location: ")); 335 addTag("p","<b>"+i18n("Location: ")+"</b>"+ deTag(event->location() ) );
335 mText.append(deTag(event->location())+"<br>");
336 mMailSubject += i18n(" at ") + event->location(); 336 mMailSubject += i18n(" at ") + event->location();
337 } 337 }
338 if (event->recurrence()->doesRecur()) { 338 if (event->recurrence()->doesRecur()) {
339 339
340 QString recurText = event->recurrence()->recurrenceText(); 340 QString recurText = event->recurrence()->recurrenceText();
341 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>"); 341 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>");
342 bool ok; 342 bool ok;
343 QDate start = QDate::currentDate(); 343 QDate start = QDate::currentDate();
344 QDateTime next; 344 QDateTime next;
345 next = event->getNextOccurence( QDateTime::currentDateTime() , &ok ); 345 next = event->getNextOccurence( QDateTime::currentDateTime() , &ok );
346 if ( ok ) { 346 if ( ok ) {
347 addTag("p",i18n("<b>Next recurrence is on:</b>") ); 347 if ( wideScreen ){
348 addTag("p", KGlobal::locale()->formatDate( next.date(), shortDate )); 348 addTag("p",i18n("<b>Next recurrence is on:</b>") +" " + KGlobal::locale()->formatDate( next.date(), shortDate ) );
349 } else {
350 addTag("p",i18n("<b>Next recurrence is on:</b>") );
351 addTag("p", KGlobal::locale()->formatDate( next.date(), shortDate ));
352 }
349 mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( next, true ); 353 mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( next, true );
350 354
351 } else { 355 } else {
352 bool last; 356 bool last;
353 QDate nextd; 357 QDate nextd;
354 nextd = event->recurrence()->getPreviousDate( QDate::currentDate() , &last ); 358 nextd = event->recurrence()->getPreviousDate( QDate::currentDate() , &last );
355 if ( last ) { 359 if ( last ) {
356 addTag("p",i18n("<b>Last recurrence was on:</b>") ); 360 if ( wideScreen ){
357 addTag("p", KGlobal::locale()->formatDate( nextd, shortDate )); 361 addTag("p",i18n("<b>Last recurrence was on:</b>") +" " + KGlobal::locale()->formatDate( nextd, shortDate ));
362 } else{
363 addTag("p",i18n("<b>Last recurrence was on:</b>") );
364 addTag("p", KGlobal::locale()->formatDate( nextd, shortDate ));
365 }
358 } 366 }
359 } 367 }
360 } else { 368 } else {
361 mMailSubject += i18n(" - " )+event->dtStartStr( true ); 369 mMailSubject += i18n(" - " )+event->dtStartStr( true );
362 370
363 } 371 }
364 372
365 373
366 if (event->isAlarmEnabled()) { 374 if (event->isAlarmEnabled()) {
367 Alarm *alarm =event->alarms().first() ; 375 Alarm *alarm =event->alarms().first() ;
368 QDateTime t = alarm->time(); 376 QDateTime t = alarm->time();
369 QString s =i18n("( %1 before )").arg( alarm->offsetText() ); 377 QString s =i18n("( %1 before )").arg( alarm->offsetText() );
370 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"); 378 if(wideScreen ){
371 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); 379 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"+ KGlobal::locale()->formatDateTime( t, shortDate ));
380 }else{
381 addTag("p",i18n("<b>Alarm on: ") + s +" </b>");
382 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate ));
383 }
372 //addTag("p",s); 384 //addTag("p",s);
373 } 385 }
374 386
375 addTag("b",i18n("Access: ")); 387 addTag("p","<b>"+i18n("Access: ") + "</b>" + event->secrecyStr());
376 mText.append(event->secrecyStr()+"<br>");
377 388
378
379
380 formatCategories(event); 389 formatCategories(event);
381 390
382 formatReadOnly(event); 391 formatReadOnly(event);
383 formatAttendees(event); 392 formatAttendees(event);
384 393
385 if ( KOPrefs::instance()->mEVshowCreated ) { 394 if ( KOPrefs::instance()->mEVshowCreated ) {
386#ifdef DESKTOP_VERSION 395 if(wideScreen ){
387 addTag("p",i18n("<b>Created: ") +" </b>"+KGlobal::locale()->formatDateTime( event->created(), shortDate )); 396 addTag("p",i18n("<b>Created: ") +" </b>"+KGlobal::locale()->formatDateTime( event->created(), shortDate ));
388#else 397 }else{
389 addTag("p",i18n("<b>Created: ") +" </b>"); 398 addTag("p",i18n("<b>Created: ") +" </b>");
390 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate )); 399 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate ));
391#endif 400 }
401
392 402
393 } 403 }
394 if ( KOPrefs::instance()->mEVshowChanged ) { 404 if ( KOPrefs::instance()->mEVshowChanged ) {
395#ifdef DESKTOP_VERSION 405 if(wideScreen ){
396 addTag("p",i18n("<b>Last modified: ") +" </b>" + KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ) ); 406 addTag("p",i18n("<b>Last modified: ") +" </b>" + KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ) );
397#else 407 }else{
398 addTag("p",i18n("<b>Last modified: ") +" </b>"); 408 addTag("p",i18n("<b>Last modified: ") +" </b>");
399 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate )); 409 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ));
400#endif 410 }
401 411
402 } 412 }
403 if ( KOPrefs::instance()->mEVshowDetails ) { 413 if ( KOPrefs::instance()->mEVshowDetails ) {
404 if (!event->description().isEmpty()) { 414 if (!event->description().isEmpty()) {
405 addTag("p",i18n("<b>Details: </b>")); 415 addTag("p",i18n("<b>Details: </b>"));
406 addTag("p",deTag(event->description())); 416 addTag("p",deTag(event->description()));
407 } 417 }
408 } 418 }
409 setText(mText); 419 setText(mText);
410 //QWhatsThis::add(this,mText); 420 //QWhatsThis::add(this,mText);
411 421
412} 422}
413 423
414void KOEventViewer::appendTodo(Todo *event, int mode ) 424void KOEventViewer::appendTodo(Todo *event, int mode )
415{ 425{
416 mMailSubject = ""; 426 mMailSubject = "";
417 mCurrentIncidence = event; 427 mCurrentIncidence = event;
418 topLevelWidget()->setCaption(i18n("Todo Viewer")); 428 topLevelWidget()->setCaption(i18n("Todo Viewer"));
419 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 429 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
430 bool wideScreen = ( QApplication::desktop()->width() >= 640 );
420 if (mode == 0 ) 431 if (mode == 0 )
421 addTag("h2",deTag(event->summary())); 432 addTag("h2",deTag(event->summary()));
422 else { 433 else {
423 if ( mColorMode == 1 ) { 434 if ( mColorMode == 1 ) {
424 mText +="<font color=\"#00A000\">"; 435 mText +="<font color=\"#00A000\">";
425 } 436 }
426 if ( mColorMode == 2 ) { 437 if ( mColorMode == 2 ) {
427 mText +="<font color=\"#B00000\">"; 438 mText +="<font color=\"#B00000\">";
428 } 439 }
429 if ( mode == 1 ) { 440 if ( mode == 1 ) {
430 addTag("h2",i18n( "Local: " ) +deTag(event->summary())); 441 addTag("h2",i18n( "Local: " ) +deTag(event->summary()));
431 } else { 442 } else {
432 addTag("h2",i18n( "Remote: " ) +deTag(event->summary())); 443 addTag("h2",i18n( "Remote: " ) +deTag(event->summary()));
433 } 444 }
434 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 445 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
435 if ( mColorMode ) 446 if ( mColorMode )
436 mText += "</font>"; 447 mText += "</font>";
437 } 448 }
438 mMailSubject += i18n( "Todo " )+ event->summary(); 449 mMailSubject += i18n( "Todo " )+ event->summary();
439 450
440 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) { 451 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) {
441 mText +="<font color=\"#B00000\">"; 452 mText +="<font color=\"#B00000\">";
442 addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(KOPrefs::instance()->mShortDateInViewer) ) ); 453 addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(KOPrefs::instance()->mShortDateInViewer) ) );
443 mText += "</font>"; 454 mText += "</font>";
444 } else { 455 } else {
445 mText.append(i18n("<p><i>%1 % completed</i></p>") 456 mText.append(i18n("<p><i>%1 % completed</i></p>")
446 .arg(event->percentComplete())); 457 .arg(event->percentComplete()));
447 } 458 }
448 459
449 if (event->cancelled ()) { 460 if (event->cancelled ()) {
450 mText +="<font color=\"#B00000\">"; 461 mText +="<font color=\"#B00000\">";
451 addTag("i",i18n("This todo has been cancelled!")); 462 addTag("i",i18n("This todo has been cancelled!"));
452 mText.append("<br>"); 463 mText.append("<br>");
453 mText += "</font>"; 464 mText += "</font>";
454 mMailSubject += i18n("(cancelled)"); 465 mMailSubject += i18n("(cancelled)");
455 } 466 }
456 467
457 468
458 469
459 if (event->recurrence()->doesRecur()) { 470 if (event->recurrence()->doesRecur()) {
460 471
461 QString recurText = event->recurrence()->recurrenceText(); 472 QString recurText = event->recurrence()->recurrenceText();
462 addTag("p","<em>" + i18n("This is a %1 recurring todo.").arg(recurText ) + "</em>"); 473 addTag("p","<em>" + i18n("This is a %1 recurring todo.").arg(recurText ) + "</em>");
463 474
464 } 475 }
465 if (event->hasStartDate()) { 476 if (event->hasStartDate()) {
466 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer))); 477 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer)));
467 } 478 }
468 if (event->hasDueDate()) { 479 if (event->hasDueDate()) {
469 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer))); 480 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer)));
470 mMailSubject += i18n(" - " )+event->dtDueStr( true ); 481 mMailSubject += i18n(" - " )+event->dtDueStr( true );
471 } 482 }
472 if (!event->location().isEmpty()) { 483 if (!event->location().isEmpty()) {
473 addTag("b",i18n("Location: ")); 484 addTag("p","<b>"+i18n("Location: ")+"</b>"+ deTag(event->location() ) );
474 mText.append(deTag(event->location())+"<br>");
475 mMailSubject += i18n(" at ") + event->location(); 485 mMailSubject += i18n(" at ") + event->location();
476 } 486 }
477 mText.append(i18n("<p><b>Priority:</b> %2</p>") 487 mText.append(i18n("<p><b>Priority:</b> %2</p>")
478 .arg(QString::number(event->priority()))); 488 .arg(QString::number(event->priority())));
479 489
480 if (event->isAlarmEnabled()) { 490 if (event->isAlarmEnabled()) {
481 Alarm *alarm =event->alarms().first() ; 491 Alarm *alarm =event->alarms().first() ;
482 QDateTime t = alarm->time(); 492 QDateTime t = alarm->time();
483 QString s =i18n("( %1 before )").arg( alarm->offsetText() ); 493 QString s =i18n("( %1 before )").arg( alarm->offsetText() );
484 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"); 494 if ( wideScreen ) {
485 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); 495 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"+ KGlobal::locale()->formatDateTime( t, shortDate ));
486 //addTag("p",s); 496 } else {
497 addTag("p",i18n("<b>Alarm on: ") + s +" </b>");
498 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate ));
499 }
487 } 500 }
488 501
489 addTag("b",i18n("Access: ")); 502 addTag("p","<b>"+i18n("Access: ") + "</b>" + event->secrecyStr());
490 mText.append(event->secrecyStr()+"<br>");
491 503
492 formatCategories(event); 504 formatCategories(event);
493 505
494 formatReadOnly(event); 506 formatReadOnly(event);
495 formatAttendees(event); 507 formatAttendees(event);
496 508
497 if ( KOPrefs::instance()->mEVshowCreated ) { 509 if ( KOPrefs::instance()->mEVshowCreated ) {
498#ifdef DESKTOP_VERSION 510 if(wideScreen ){
499 addTag("p",i18n("<b>Created: ") +" </b>"+KGlobal::locale()->formatDateTime( event->created(), shortDate )); 511
500#else 512 addTag("p",i18n("<b>Created: ") +" </b>"+KGlobal::locale()->formatDateTime( event->created(), shortDate ));
501 addTag("p",i18n("<b>Created: ") +" </b>"); 513
502 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate )); 514 } else {
503#endif 515 addTag("p",i18n("<b>Created: ") +" </b>");
504 516 addTag("p", KGlobal::locale()->formatDateTime( event->created(), shortDate ));
517 }
505 } 518 }
506 if ( KOPrefs::instance()->mEVshowChanged ) { 519 if ( KOPrefs::instance()->mEVshowChanged ) {
507#ifdef DESKTOP_VERSION 520 if(wideScreen ){
508 addTag("p",i18n("<b>Last modified: ") +" </b>" +KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ) ); 521 addTag("p",i18n("<b>Last modified: ") +" </b>" +KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ) );
509#else 522
510 addTag("p",i18n("<b>Last modified: ") +" </b>"); 523 } else {
511 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate )); 524 addTag("p",i18n("<b>Last modified: ") +" </b>");
512#endif 525 addTag("p", KGlobal::locale()->formatDateTime( event->lastModified(), shortDate ));
513 526 }
514 } 527 }
515 if ( event->relatedTo() ) { 528 if ( event->relatedTo() ) {
516 addTag("b",i18n("Parent todo:<br>")); 529 addTag("b",i18n("Parent todo:<br>"));
517 mText.append(deTag(event->relatedTo()->summary())+" [" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] <br>"); 530 mText.append(deTag(event->relatedTo()->summary())+" [" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] <br>");
518 } 531 }
519 QPtrList<Incidence> Relations = event->relations(); 532 QPtrList<Incidence> Relations = event->relations();
520 Incidence *to; 533 Incidence *to;
521 if ( Relations.first() ) 534 if ( Relations.first() )
522 addTag("b",i18n("Sub todos:<br>")); 535 addTag("b",i18n("Sub todos:<br>"));
523 for (to=Relations.first();to;to=Relations.next()) { 536 for (to=Relations.first();to;to=Relations.next()) {
524 mText.append( deTag(to->summary())+" [" +QString::number(to->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%]<br>"); 537 mText.append( deTag(to->summary())+" [" +QString::number(to->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%]<br>");
525 538
526 } 539 }
527 540
528 if ( KOPrefs::instance()->mEVshowDetails ) { 541 if ( KOPrefs::instance()->mEVshowDetails ) {
529 if (!event->description().isEmpty()) { 542 if (!event->description().isEmpty()) {
530 addTag("p",i18n("<b>Details: </b>")); 543 addTag("p",i18n("<b>Details: </b>"));
531 addTag("p",deTag(event->description())); 544 addTag("p",deTag(event->description()));
532 } 545 }
533 } 546 }
534 setText(mText); 547 setText(mText);
535} 548}
536 549
537void KOEventViewer::formatCategories(Incidence *event) 550void KOEventViewer::formatCategories(Incidence *event)
538{ 551{
539 if (!event->categoriesStr().isEmpty()) { 552 if (!event->categoriesStr().isEmpty()) {
540 if (event->categories().count() == 1) { 553 if (event->categories().count() == 1) {
541 addTag("h3",i18n("Category")); 554 addTag("p","<b>"+i18n("Category") + ":</b> " + event->categoriesStrWithSpace());
542 } else { 555 } else {
543 addTag("h3",i18n("Categories")); 556 addTag("p","<b>"+i18n("Categories")+":</b> " + event->categoriesStrWithSpace() ) ;
544 } 557 }
545 addTag("p",event->categoriesStr());
546 } 558 }
547} 559}
548void KOEventViewer::formatAttendees(Incidence *event) 560void KOEventViewer::formatAttendees(Incidence *event)
549{ 561{
550 QPtrList<Attendee> attendees = event->attendees(); 562 QPtrList<Attendee> attendees = event->attendees();
551 if (attendees.count()) { 563 if (attendees.count()) {
552 564
553 565
554 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small); 566 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small);
555 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small); 567 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small);
556 addTag("h3",i18n("Organizer")); 568 addTag("h3",i18n("Organizer"));
557 mText.append("<ul><li>"); 569 mText.append("<ul><li>");
558#ifndef KORG_NOKABC 570#ifndef KORG_NOKABC
559 571
560#ifdef DESKTOP_VERSION 572#ifdef DESKTOP_VERSION
561 KABC::AddressBook *add_book = KABC::StdAddressBook::self(); 573 KABC::AddressBook *add_book = KABC::StdAddressBook::self();
562 KABC::Addressee::List addressList; 574 KABC::Addressee::List addressList;
563 addressList = add_book->findByEmail(event->organizer()); 575 addressList = add_book->findByEmail(event->organizer());
564 KABC::Addressee o = addressList.first(); 576 KABC::Addressee o = addressList.first();
565 if (!o.isEmpty() && addressList.size()<2) { 577 if (!o.isEmpty() && addressList.size()<2) {
566 mText += "<a href=\"uid:" + o.uid() + "\">"; 578 mText += "<a href=\"uid:" + o.uid() + "\">";
567 mText += o.formattedName(); 579 mText += o.formattedName();
568 mText += "</a>\n"; 580 mText += "</a>\n";
569 } else { 581 } else {
570 mText.append(event->organizer()); 582 mText.append(event->organizer());
571 } 583 }
572#else //DESKTOP_VERSION 584#else //DESKTOP_VERSION
573 mText += "<a href=\"uid:organizer\">"; 585 mText += "<a href=\"uid:organizer\">";
574 mText += event->organizer(); 586 mText += event->organizer();
575 mText += "</a>\n"; 587 mText += "</a>\n";
576#endif //DESKTOP_VERSION 588#endif //DESKTOP_VERSION
577 589
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp
index 0a608dc..25be63a 100644
--- a/korganizer/kotodoview.cpp
+++ b/korganizer/kotodoview.cpp
@@ -435,85 +435,87 @@ KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) :
435 mTodoListView->setItemsRenameable( true ); 435 mTodoListView->setItemsRenameable( true );
436 mTodoListView->setRenameable( 0 ); 436 mTodoListView->setRenameable( 0 );
437 mTodoListView->setColumnWidth( 0, 120 ); 437 mTodoListView->setColumnWidth( 0, 120 );
438 mTodoListView->setColumnWidthMode(0, QListView::Manual); 438 mTodoListView->setColumnWidthMode(0, QListView::Manual);
439 mTodoListView->setColumnWidthMode(1, QListView::Manual); 439 mTodoListView->setColumnWidthMode(1, QListView::Manual);
440 mTodoListView->setColumnWidthMode(2, QListView::Manual); 440 mTodoListView->setColumnWidthMode(2, QListView::Manual);
441 mTodoListView->setColumnWidthMode(3, QListView::Manual); 441 mTodoListView->setColumnWidthMode(3, QListView::Manual);
442 mTodoListView->setColumnWidthMode(4, QListView::Manual); 442 mTodoListView->setColumnWidthMode(4, QListView::Manual);
443 mTodoListView->setColumnWidthMode(5, QListView::Manual); 443 mTodoListView->setColumnWidthMode(5, QListView::Manual);
444 mTodoListView->setColumnWidthMode(6, QListView::Manual); 444 mTodoListView->setColumnWidthMode(6, QListView::Manual);
445 mTodoListView->setColumnWidthMode(7, QListView::Manual); 445 mTodoListView->setColumnWidthMode(7, QListView::Manual);
446 mTodoListView->setColumnWidthMode(8, QListView::Manual); 446 mTodoListView->setColumnWidthMode(8, QListView::Manual);
447 447
448 448
449 mKOTodoViewWhatsThis = new KOTodoViewWhatsThis(mTodoListView->viewport(),this); 449 mKOTodoViewWhatsThis = new KOTodoViewWhatsThis(mTodoListView->viewport(),this);
450 450
451 mPriorityPopupMenu = new QPopupMenu(this); 451 mPriorityPopupMenu = new QPopupMenu(this);
452 for (int i = 1; i <= 5; i++) { 452 for (int i = 1; i <= 5; i++) {
453 QString label = QString ("%1").arg (i); 453 QString label = QString ("%1").arg (i);
454 mPriority[mPriorityPopupMenu->insertItem (label)] = i; 454 mPriority[mPriorityPopupMenu->insertItem (label)] = i;
455 } 455 }
456 connect (mPriorityPopupMenu, SIGNAL(activated (int)), SLOT (setNewPriority(int))); 456 connect (mPriorityPopupMenu, SIGNAL(activated (int)), SLOT (setNewPriority(int)));
457 457
458 mPercentageCompletedPopupMenu = new QPopupMenu(this); 458 mPercentageCompletedPopupMenu = new QPopupMenu(this);
459 for (int i = 0; i <= 100; i+=20) { 459 for (int i = 0; i <= 100; i+=20) {
460 QString label = QString ("%1 %").arg (i); 460 QString label = QString ("%1 %").arg (i);
461 mPercentage[mPercentageCompletedPopupMenu->insertItem (label)] = i; 461 mPercentage[mPercentageCompletedPopupMenu->insertItem (label)] = i;
462 } 462 }
463 connect (mPercentageCompletedPopupMenu, SIGNAL (activated (int)), SLOT (setNewPercentage (int))); 463 connect (mPercentageCompletedPopupMenu, SIGNAL (activated (int)), SLOT (setNewPercentage (int)));
464 464
465 465
466 466
467 mItemPopupMenu = new QPopupMenu(this); 467 mItemPopupMenu = new QPopupMenu(this);
468 mItemPopupMenu->insertItem( i18n("Start/Stop todo..."), this,
469 SLOT (toggleRunningItem()));
470 mItemPopupMenu->insertSeparator();
468 mItemPopupMenu->insertItem(i18n("Show..."), this, 471 mItemPopupMenu->insertItem(i18n("Show..."), this,
469 SLOT (showTodo())); 472 SLOT (showTodo()));
470 mItemPopupMenu->insertItem(i18n("Edit..."), this, 473 mItemPopupMenu->insertItem(i18n("Edit..."), this,
471 SLOT (editTodo())); 474 SLOT (editTodo()));
472 mItemPopupMenu->insertItem( i18n("Delete"), this, 475 mItemPopupMenu->insertItem( i18n("Delete"), this,
473 SLOT (deleteTodo())); 476 SLOT (deleteTodo()));
474 mItemPopupMenu->insertItem( i18n("Clone..."), this, 477 mItemPopupMenu->insertItem( i18n("Clone..."), this,
475 SLOT (cloneTodo())); 478 SLOT (cloneTodo()));
476 mItemPopupMenu->insertItem( i18n("Move..."), this, 479 mItemPopupMenu->insertItem( i18n("Move..."), this,
477 SLOT (moveTodo())); 480 SLOT (moveTodo()));
478 mItemPopupMenu->insertItem( i18n("Beam..."), this, 481 mItemPopupMenu->insertItem( i18n("Beam..."), this,
479 SLOT (beamTodo())); 482 SLOT (beamTodo()));
480 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this, 483 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this,
481 SLOT (cancelTodo())); 484 SLOT (cancelTodo()));
482 mItemPopupMenu->insertSeparator(); 485 mItemPopupMenu->insertSeparator();
483 486 /*
484 mItemPopupMenu->insertItem( i18n("Start/Stop todo..."), this,
485 SLOT (toggleRunningItem()));
486 mItemPopupMenu->insertItem( i18n("New Todo..."), this, 487 mItemPopupMenu->insertItem( i18n("New Todo..."), this,
487 SLOT (newTodo())); 488 SLOT (newTodo()));
489 */
488 mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this, 490 mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this,
489 SLOT (newSubTodo())); 491 SLOT (newSubTodo()));
490 mItemPopupMenu->insertItem(i18n("Unparent Todo"), this, 492 mItemPopupMenu->insertItem(i18n("Unparent Todo"), this,
491 SLOT (unparentTodo()),0,21); 493 SLOT (unparentTodo()),0,21);
492 mItemPopupMenu->insertItem(i18n("Reparent Todo"), this, 494 mItemPopupMenu->insertItem(i18n("Reparent Todo"), this,
493 SLOT (reparentTodo()),0,22); 495 SLOT (reparentTodo()),0,22);
494 mItemPopupMenu->insertSeparator(); 496 mItemPopupMenu->insertSeparator();
495#if 0 497#if 0
496 mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed"), 498 mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed"),
497 this, SLOT( purgeCompleted() ) ); 499 this, SLOT( purgeCompleted() ) );
498 mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"), 500 mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"),
499 this, SLOT( toggleCompleted() ),0, 33 ); 501 this, SLOT( toggleCompleted() ),0, 33 );
500 mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), 502 mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"),
501 this, SLOT( toggleQuickTodo() ),0, 34 ); 503 this, SLOT( toggleQuickTodo() ),0, 34 );
502 mItemPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"), 504 mItemPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"),
503 this, SLOT( toggleRunning() ),0, 35 ); 505 this, SLOT( toggleRunning() ),0, 35 );
504 506
505#endif 507#endif
506 mPopupMenu = new QPopupMenu(this); 508 mPopupMenu = new QPopupMenu(this);
507 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this, 509 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this,
508 SLOT (newTodo()),0,1); 510 SLOT (newTodo()),0,1);
509 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed"), 511 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed"),
510 this, SLOT(purgeCompleted()),0,2); 512 this, SLOT(purgeCompleted()),0,2);
511 mPopupMenu->insertItem(i18n("Show Completed"), 513 mPopupMenu->insertItem(i18n("Show Completed"),
512 this, SLOT( toggleCompleted() ),0,3 ); 514 this, SLOT( toggleCompleted() ),0,3 );
513 mPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), 515 mPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"),
514 this, SLOT( toggleQuickTodo() ),0,4 ); 516 this, SLOT( toggleQuickTodo() ),0,4 );
515 mPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"), 517 mPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"),
516 this, SLOT( toggleRunning() ),0,5 ); 518 this, SLOT( toggleRunning() ),0,5 );
517 mPopupMenu->insertItem(i18n(" set all open","Display all opened"), 519 mPopupMenu->insertItem(i18n(" set all open","Display all opened"),
518 this, SLOT( setAllOpen() ),0,6 ); 520 this, SLOT( setAllOpen() ),0,6 );
519 mPopupMenu->insertItem(i18n(" set all close","Display all closed"), 521 mPopupMenu->insertItem(i18n(" set all close","Display all closed"),
diff --git a/libkcal/incidence.cpp b/libkcal/incidence.cpp
index 78fa24f..9c35b1d 100644
--- a/libkcal/incidence.cpp
+++ b/libkcal/incidence.cpp
@@ -351,64 +351,68 @@ void Incidence::setCategories(const QStringList &categories)
351 mCategories = categories; 351 mCategories = categories;
352 checkCategories(); 352 checkCategories();
353 updated(); 353 updated();
354} 354}
355 355
356// TODO: remove setCategories(QString) function 356// TODO: remove setCategories(QString) function
357void Incidence::setCategories(const QString &catStr) 357void Incidence::setCategories(const QString &catStr)
358{ 358{
359 if (mReadOnly) return; 359 if (mReadOnly) return;
360 mCategories.clear(); 360 mCategories.clear();
361 361
362 if (catStr.isEmpty()) return; 362 if (catStr.isEmpty()) return;
363 363
364 mCategories = QStringList::split(",",catStr); 364 mCategories = QStringList::split(",",catStr);
365 365
366 QStringList::Iterator it; 366 QStringList::Iterator it;
367 for(it = mCategories.begin();it != mCategories.end(); ++it) { 367 for(it = mCategories.begin();it != mCategories.end(); ++it) {
368 *it = (*it).stripWhiteSpace(); 368 *it = (*it).stripWhiteSpace();
369 } 369 }
370 checkCategories(); 370 checkCategories();
371 updated(); 371 updated();
372} 372}
373 373
374QStringList Incidence::categories() const 374QStringList Incidence::categories() const
375{ 375{
376 return mCategories; 376 return mCategories;
377} 377}
378 378
379QString Incidence::categoriesStr() 379QString Incidence::categoriesStr()
380{ 380{
381 return mCategories.join(","); 381 return mCategories.join(",");
382} 382}
383QString Incidence::categoriesStrWithSpace()
384{
385 return mCategories.join(", ");
386}
383 387
384void Incidence::setRelatedToUid(const QString &relatedToUid) 388void Incidence::setRelatedToUid(const QString &relatedToUid)
385{ 389{
386 if (mReadOnly) return; 390 if (mReadOnly) return;
387 mRelatedToUid = relatedToUid; 391 mRelatedToUid = relatedToUid;
388} 392}
389 393
390QString Incidence::relatedToUid() const 394QString Incidence::relatedToUid() const
391{ 395{
392 return mRelatedToUid; 396 return mRelatedToUid;
393} 397}
394 398
395void Incidence::setRelatedTo(Incidence *relatedTo) 399void Incidence::setRelatedTo(Incidence *relatedTo)
396{ 400{
397 //qDebug("Incidence::setRelatedTo %d ", relatedTo); 401 //qDebug("Incidence::setRelatedTo %d ", relatedTo);
398 //qDebug("setRelatedTo(Incidence *relatedTo) %s %s", summary().latin1(), relatedTo->summary().latin1() ); 402 //qDebug("setRelatedTo(Incidence *relatedTo) %s %s", summary().latin1(), relatedTo->summary().latin1() );
399 if (mReadOnly || mRelatedTo == relatedTo) return; 403 if (mReadOnly || mRelatedTo == relatedTo) return;
400 if(mRelatedTo) { 404 if(mRelatedTo) {
401 // updated(); 405 // updated();
402 mRelatedTo->removeRelation(this); 406 mRelatedTo->removeRelation(this);
403 } 407 }
404 mRelatedTo = relatedTo; 408 mRelatedTo = relatedTo;
405 if (mRelatedTo) { 409 if (mRelatedTo) {
406 mRelatedTo->addRelation(this); 410 mRelatedTo->addRelation(this);
407 mRelatedToUid = mRelatedTo->uid(); 411 mRelatedToUid = mRelatedTo->uid();
408 } else { 412 } else {
409 mRelatedToUid = ""; 413 mRelatedToUid = "";
410 } 414 }
411} 415}
412 416
413Incidence *Incidence::relatedTo() const 417Incidence *Incidence::relatedTo() const
414{ 418{
diff --git a/libkcal/incidence.h b/libkcal/incidence.h
index 60070a2..327e7dd 100644
--- a/libkcal/incidence.h
+++ b/libkcal/incidence.h
@@ -129,64 +129,65 @@ class Incidence : public IncidenceBase
129 void setCreated(QDateTime); 129 void setCreated(QDateTime);
130 /** return time and date of creation. */ 130 /** return time and date of creation. */
131 QDateTime created() const; 131 QDateTime created() const;
132 132
133 /** set the number of revisions this event has seen */ 133 /** set the number of revisions this event has seen */
134 void setRevision(int rev); 134 void setRevision(int rev);
135 /** return the number of revisions this event has seen */ 135 /** return the number of revisions this event has seen */
136 int revision() const; 136 int revision() const;
137 137
138 /** Set starting date/time. */ 138 /** Set starting date/time. */
139 virtual void setDtStart(const QDateTime &dtStart); 139 virtual void setDtStart(const QDateTime &dtStart);
140 /** Return the incidence's ending date/time as a QDateTime. */ 140 /** Return the incidence's ending date/time as a QDateTime. */
141 virtual QDateTime dtEnd() const { return QDateTime(); } 141 virtual QDateTime dtEnd() const { return QDateTime(); }
142 142
143 /** sets the event's lengthy description. */ 143 /** sets the event's lengthy description. */
144 void setDescription(const QString &description); 144 void setDescription(const QString &description);
145 /** returns a reference to the event's description. */ 145 /** returns a reference to the event's description. */
146 QString description() const; 146 QString description() const;
147 147
148 /** sets the event's short summary. */ 148 /** sets the event's short summary. */
149 void setSummary(const QString &summary); 149 void setSummary(const QString &summary);
150 /** returns a reference to the event's summary. */ 150 /** returns a reference to the event's summary. */
151 QString summary() const; 151 QString summary() const;
152 152
153 /** set event's applicable categories */ 153 /** set event's applicable categories */
154 void setCategories(const QStringList &categories); 154 void setCategories(const QStringList &categories);
155 /** set event's categories based on a comma delimited string */ 155 /** set event's categories based on a comma delimited string */
156 void setCategories(const QString &catStr); 156 void setCategories(const QString &catStr);
157 /** return categories in a list */ 157 /** return categories in a list */
158 QStringList categories() const; 158 QStringList categories() const;
159 /** return categories as a comma separated string */ 159 /** return categories as a comma separated string */
160 QString categoriesStr(); 160 QString categoriesStr();
161 QString categoriesStrWithSpace();
161 162
162 /** point at some other event to which the event relates. This function should 163 /** point at some other event to which the event relates. This function should
163 * only be used when constructing a calendar before the related Event 164 * only be used when constructing a calendar before the related Event
164 * exists. */ 165 * exists. */
165 void setRelatedToUid(const QString &); 166 void setRelatedToUid(const QString &);
166 /** what event does this one relate to? This function should 167 /** what event does this one relate to? This function should
167 * only be used when constructing a calendar before the related Event 168 * only be used when constructing a calendar before the related Event
168 * exists. */ 169 * exists. */
169 QString relatedToUid() const; 170 QString relatedToUid() const;
170 /** point at some other event to which the event relates */ 171 /** point at some other event to which the event relates */
171 void setRelatedTo(Incidence *relatedTo); 172 void setRelatedTo(Incidence *relatedTo);
172 /** what event does this one relate to? */ 173 /** what event does this one relate to? */
173 Incidence *relatedTo() const; 174 Incidence *relatedTo() const;
174 /** All events that are related to this event */ 175 /** All events that are related to this event */
175 QPtrList<Incidence> relations() const; 176 QPtrList<Incidence> relations() const;
176 /** Add an event which is related to this event */ 177 /** Add an event which is related to this event */
177 void addRelation(Incidence *); 178 void addRelation(Incidence *);
178 /** Remove event that is related to this event */ 179 /** Remove event that is related to this event */
179 void removeRelation(Incidence *); 180 void removeRelation(Incidence *);
180 181
181 /** returns the list of dates which are exceptions to the recurrence rule */ 182 /** returns the list of dates which are exceptions to the recurrence rule */
182 DateList exDates() const; 183 DateList exDates() const;
183 /** sets the list of dates which are exceptions to the recurrence rule */ 184 /** sets the list of dates which are exceptions to the recurrence rule */
184 void setExDates(const DateList &_exDates); 185 void setExDates(const DateList &_exDates);
185 void setExDates(const char *dates); 186 void setExDates(const char *dates);
186 /** Add a date to the list of exceptions of the recurrence rule. */ 187 /** Add a date to the list of exceptions of the recurrence rule. */
187 void addExDate(const QDate &date); 188 void addExDate(const QDate &date);
188 189
189 /** returns true if there is an exception for this date in the recurrence 190 /** returns true if there is an exception for this date in the recurrence
190 rule set, or false otherwise. */ 191 rule set, or false otherwise. */
191 bool isException(const QDate &qd) const; 192 bool isException(const QDate &qd) const;
192 193
diff --git a/version b/version
index a87e533..da7dcfc 100644
--- a/version
+++ b/version
@@ -1 +1 @@
version = "2.0.28"; version = "2.1.0";