summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt1
-rw-r--r--korganizer/koeventviewer.cpp16
-rw-r--r--korganizer/koeventviewerdialog.cpp3
3 files changed, 19 insertions, 1 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index da33d12..ccebf58 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,393 +1,394 @@
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 1.9.17 ************ 3********** VERSION 1.9.17 ************
4 4
5KO/Pi: 5KO/Pi:
6Fixed that tooltips were not updated after moving an item in agenda view. 6Fixed that tooltips were not updated after moving an item in agenda view.
7Fixed a bug in sorting start date for recurring events in list view. 7Fixed a bug in sorting start date for recurring events in list view.
8Changed the left button in todo viewer from "Agenda" to "Set completed". 8Changed the left button in todo viewer from "Agenda" to "Set completed".
9This makes it possible to change a todo in the What's Next View quickly to the completed state without leaving the What's Next View. 9This makes it possible to change a todo in the What's Next View quickly to the completed state without leaving the What's Next View.
10Added more info in the todo viewer: Startdate, parent/sub todos.
10 11
11 12
12KA/Pi: 13KA/Pi:
13All fields search does now actually search all the (possible) fields, 14All fields search does now actually search all the (possible) fields,
14not only those listed in the contact list. 15not only those listed in the contact list.
15Made is possible to inline a picture in a vcard on the Z. 16Made is possible to inline a picture in a vcard on the Z.
16This was only possible on the desktop, now is it possible on the Z as well. 17This was only possible on the desktop, now is it possible on the Z as well.
17Fixed of missing save settings after filter configuration. 18Fixed of missing save settings after filter configuration.
18Made saving of addressbook much faster. 19Made saving of addressbook much faster.
19Fixed extension widget layout problem. 20Fixed extension widget layout problem.
20Fixed saving of default formatted name settings. 21Fixed saving of default formatted name settings.
21Fixed formatted name handling in edit dialog. 22Fixed formatted name handling in edit dialog.
22Added an option for changing formatted names of many contacts 23Added an option for changing formatted names of many contacts
23(menu: File - Change - Set formatted name). 24(menu: File - Change - Set formatted name).
24 25
25QWhatsThis was not working on the Z ( only black rectangle was shown). 26QWhatsThis was not working on the Z ( only black rectangle was shown).
26This is Fixed. 27This is Fixed.
27 28
28KDE-Sync: 29KDE-Sync:
29Now readonly KDE resources are synced as well. 30Now readonly KDE resources are synced as well.
30(They are not changed in KDE itself, of course). 31(They are not changed in KDE itself, of course).
31 32
32 33
33 34
34********** VERSION 1.9.16 ************ 35********** VERSION 1.9.16 ************
35 36
36KO/Pi: 37KO/Pi:
37Fixed search dialog size on Z 6000 (480x640 display). 38Fixed search dialog size on Z 6000 (480x640 display).
38Added setting to hide/show time in agenda items. 39Added setting to hide/show time in agenda items.
39Added setting to hide not running todos in todo view. 40Added setting to hide not running todos in todo view.
40Added columns for start date/time in todo view. 41Added columns for start date/time in todo view.
41Replaced the solid half-hour lines in agenda view by dot lines. 42Replaced the solid half-hour lines in agenda view by dot lines.
42Added possibility of printing the What's Next View on the desktop 43Added possibility of printing the What's Next View on the desktop
43(i.e. Windows and Linux). 44(i.e. Windows and Linux).
44Fixed a crash in KO/Pi when starting KO/Pi with What's Next view. 45Fixed a crash in KO/Pi when starting KO/Pi with What's Next view.
45Added tooltips in month view.(Tooltips only available on desktop) 46Added tooltips in month view.(Tooltips only available on desktop)
46 47
47Fixed a strange problem in KO/Pi alarm applet. 48Fixed a strange problem in KO/Pi alarm applet.
48Did not find the actual problem, 49Did not find the actual problem,
49such that now Qtopia reboots again if deinstalling the alarm applet. 50such that now Qtopia reboots again if deinstalling the alarm applet.
50But the alarm applet should work again. 51But the alarm applet should work again.
51 52
52KA/Pi: 53KA/Pi:
53Fixed the problem, that internal pictures were not saved. 54Fixed the problem, that internal pictures were not saved.
54 55
55Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes. 56Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes.
56 57
57Fixed some minor problems. (Like word wrap in help text windows). 58Fixed some minor problems. (Like word wrap in help text windows).
58 59
59Fixed a compiling problem in microkde/kresources. 60Fixed a compiling problem in microkde/kresources.
60 61
61KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM. 62KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM.
62This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9) 63This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9)
63such that now syncing KO/Pi with Sharp DTM should work on the 64such that now syncing KO/Pi with Sharp DTM should work on the
64Zaurus C 3000 model. 65Zaurus C 3000 model.
65 66
66********** VERSION 1.9.15 ************ 67********** VERSION 1.9.15 ************
67 68
68Usebilty enhancements in KO/Pi: 69Usebilty enhancements in KO/Pi:
69When clicking on the date in a month view cell, the day view is shown. 70When clicking on the date in a month view cell, the day view is shown.
70Old behaviour was, that the "new event" dialog popped up. 71Old behaviour was, that the "new event" dialog popped up.
71 72
72Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu). 73Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu).
73That means, you can restore the latest 74That means, you can restore the latest
74event/todo/journal you have deleted. 75event/todo/journal you have deleted.
75A journal is deleted, if you clear all the text of the journal. 76A journal is deleted, if you clear all the text of the journal.
76 77
77Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14. 78Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14.
78 79
79KA/Pi starting in 480x640 resolution: 80KA/Pi starting in 480x640 resolution:
80Hide the filter action in toolbar 81Hide the filter action in toolbar
81and added icons for undo/delete/redo in toolbar. 82and added icons for undo/delete/redo in toolbar.
82 83
83Change in OM/Pi ViewMail dialog: 84Change in OM/Pi ViewMail dialog:
84When clicking on the "delete" icon the mail is deleted after confirmation as usual. 85When clicking on the "delete" icon the mail is deleted after confirmation as usual.
85But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any). 86But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any).
86 87
87Fixed a crash when deleting mail-accounts in OM/Pi. 88Fixed a crash when deleting mail-accounts in OM/Pi.
88 89
89 90
90********** VERSION 1.9.14 ************ 91********** VERSION 1.9.14 ************
91 92
92Fixed some problems with the dialog sizes when switching 93Fixed some problems with the dialog sizes when switching
93portrait/landscape mode on 640x480 PDA display. 94portrait/landscape mode on 640x480 PDA display.
94 95
95Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi. 96Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi.
96 97
97Fixed an ugly bug in KOpieMail: 98Fixed an ugly bug in KOpieMail:
98KOpieMail was not able to write files (mails) to MSDOS file system, 99KOpieMail was not able to write files (mails) to MSDOS file system,
99like on an usual preformatted SD card. That should work now. 100like on an usual preformatted SD card. That should work now.
100To save your mail data on the Sd card do the following: 101To save your mail data on the Sd card do the following:
101Create a dir on the SD card: 102Create a dir on the SD card:
102mkdir /mnt/card/localmail 103mkdir /mnt/card/localmail
103Go to your home dir: 104Go to your home dir:
104cd 105cd
105Go to kopiemail data storage dir: 106Go to kopiemail data storage dir:
106cd kdepim/apps/kopiemail 107cd kdepim/apps/kopiemail
107Create a symlink to the SD card: 108Create a symlink to the SD card:
108ls -s /mnt/card/localmail 109ls -s /mnt/card/localmail
109Now KOpieMail will store all mails on the SD card. 110Now KOpieMail will store all mails on the SD card.
110 111
111KO/Pi Monthview: 112KO/Pi Monthview:
112Now "Go to Today" selects the current month from day 1-end, 113Now "Go to Today" selects the current month from day 1-end,
113not the current date + some days. 114not the current date + some days.
114I.e. "Go to Today" shows now always 115I.e. "Go to Today" shows now always
115the current month with first day of month in the first row. 116the current month with first day of month in the first row.
116 117
117Added missing German translation. 118Added missing German translation.
118 119
119Fixed icons of executeable on Wintendo. 120Fixed icons of executeable on Wintendo.
120 121
121Added a "Show next Mail" button to the OM/Pi 122Added a "Show next Mail" button to the OM/Pi
122mail viewer such that the mail below the current mail 123mail viewer such that the mail below the current mail
123in the mail list view of the current folder 124in the mail list view of the current folder
124can be read with a single click. 125can be read with a single click.
125 126
126 127
127********** VERSION 1.9.13 ************ 128********** VERSION 1.9.13 ************
128 129
129Fixed nasty PwM/Pi file reading bug, when 130Fixed nasty PwM/Pi file reading bug, when
130the used hash algo of file is different then the global 131the used hash algo of file is different then the global
131hash algo. 132hash algo.
132 133
133Added KA/Pi support for opie mailit mailapplication. 134Added KA/Pi support for opie mailit mailapplication.
134 135
135Fixed some bugs in OM/Pi. 136Fixed some bugs in OM/Pi.
136Now character conversion tables are available for the Zaurus 137Now character conversion tables are available for the Zaurus
137to make OM/Pi working properly. 138to make OM/Pi working properly.
138To get the character conversion in OM/Pi working, please download 139To get the character conversion in OM/Pi working, please download
139at the sourceforge project site the package 140at the sourceforge project site the package
140sr-character-conversion_SharpROM_arm.ipk.zip 141sr-character-conversion_SharpROM_arm.ipk.zip
141(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms) 142(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms)
142from the section "general files for KDE/Pim" 143from the section "general files for KDE/Pim"
143Instructions how to install this package are in a ReadMe in this file. 144Instructions how to install this package are in a ReadMe in this file.
144 145
145 146
146Fixed the orientation change problem in KA/Pi when switching 147Fixed the orientation change problem in KA/Pi when switching
147portrait/landscape mode. 148portrait/landscape mode.
148 149
149French translation available for KA/Pi and OM/Pi. 150French translation available for KA/Pi and OM/Pi.
150 151
151Fixed some problems with categories in KO/Pi in DTM sync. 152Fixed some problems with categories in KO/Pi in DTM sync.
152 153
153Added selection dialog for export to phone in KA/Pi. 154Added selection dialog for export to phone in KA/Pi.
154 155
155If in KO/Pi is an attendee selected to add to a meeting and this 156If in KO/Pi is an attendee selected to add to a meeting and this
156attendee is already in the list of attendees, this person is not added 157attendee is already in the list of attendees, this person is not added
157again. 158again.
158 159
159Some menu cleanup in KA/Pi. 160Some menu cleanup in KA/Pi.
160 161
161********** VERSION 1.9.12 ************ 162********** VERSION 1.9.12 ************
162 163
163Fix for the bug in KO/Pi What's Next view of version 1.9.11. 164Fix for the bug in KO/Pi What's Next view of version 1.9.11.
164 165
165Bugfix: Licence file is now shown again. 166Bugfix: Licence file is now shown again.
166 167
167OM/Pi now supports Unicode (utf8 charset). 168OM/Pi now supports Unicode (utf8 charset).
168Fixed some bugs in OM/Pi. 169Fixed some bugs in OM/Pi.
169 170
170KA/Pi has more German translation. 171KA/Pi has more German translation.
171 172
172 173
173********** VERSION 1.9.11 ************ 174********** VERSION 1.9.11 ************
174 175
175Fixed several problems in PWM/Pi, like 176Fixed several problems in PWM/Pi, like
176asking the user, if unsaved changed are pending 177asking the user, if unsaved changed are pending
177when closing the app. 178when closing the app.
178And PwM/Pi handles now different texts for the 179And PwM/Pi handles now different texts for the
179fields Description, Username, Password, configurable per category. 180fields Description, Username, Password, configurable per category.
180 181
181Fixed a crash in KO/Pi , when importing/loading vcs files 182Fixed a crash in KO/Pi , when importing/loading vcs files
182which have an entry with an attendee with state: 183which have an entry with an attendee with state:
183NEEDS ACTION 184NEEDS ACTION
184 185
185Fixed some problems in the German translation of OM/Pi, 186Fixed some problems in the German translation of OM/Pi,
186which makes some dialogs not fitting on the screen 187which makes some dialogs not fitting on the screen
187of the Z 5500. 188of the Z 5500.
188 189
189Fixed Qtopia crash, when disabling/deinstalling 190Fixed Qtopia crash, when disabling/deinstalling
190KO/Pi alarm applet. 191KO/Pi alarm applet.
191 192
192Implemented direct KDE<->KA/Pi sync for KA/Pi running 193Implemented direct KDE<->KA/Pi sync for KA/Pi running
193on Linux desktop. 194on Linux desktop.
194 195
195Added feature "remove sync info" to sync menu. 196Added feature "remove sync info" to sync menu.
196 197
197Tweaked the KO/Pi What's next view a bit, added 198Tweaked the KO/Pi What's next view a bit, added
198setting to hide events that are done. 199setting to hide events that are done.
199 200
200Disabled "beam receive enabled" on startup to 201Disabled "beam receive enabled" on startup to
201avoid problems if Fastload is enabled. 202avoid problems if Fastload is enabled.
202Please set "beam receive enabled", 203Please set "beam receive enabled",
203if you want to receive data via IR. 204if you want to receive data via IR.
204 205
205Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running 206Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running
206on Linux desktop. 207on Linux desktop.
207 208
208Made in KA/Pi scrolling possible, if details view is selected. 209Made in KA/Pi scrolling possible, if details view is selected.
209(The keyboard focus is set automatically to the search line) 210(The keyboard focus is set automatically to the search line)
210 211
211Fixed a bug in DMT sync, that a new entry in DTM was added 212Fixed a bug in DMT sync, that a new entry in DTM was added
212on every sync to Kx/Pi. 213on every sync to Kx/Pi.
213 214
214Fixed missing writing of KA/Pi categories to DMT entries when syncing. 215Fixed missing writing of KA/Pi categories to DMT entries when syncing.
215 216
216Fixed a bug in DMT sync with todos created in KO/Pi containing 217Fixed a bug in DMT sync with todos created in KO/Pi containing
217non-latin1 characters. 218non-latin1 characters.
218 219
219Rearranged package contents of Sharp-ipks and made all 220Rearranged package contents of Sharp-ipks and made all
220packages installable on SD again. 221packages installable on SD again.
221 222
222Fixed the writing of addressbook data in DTM sync. 223Fixed the writing of addressbook data in DTM sync.
223Empty fields in KA/Pi were not removed. 224Empty fields in KA/Pi were not removed.
224 225
225Added better category handling in KA/Pi: 226Added better category handling in KA/Pi:
226Added item 227Added item
227Edit Categories and 228Edit Categories and
228Manage new categories 229Manage new categories
229to the settings menu. 230to the settings menu.
230Possible to configure a view to display categories. 231Possible to configure a view to display categories.
231 232
232Added detailed "KDE Sync Howto" and "Multi Sync Howto" to Help menu. 233Added detailed "KDE Sync Howto" and "Multi Sync Howto" to Help menu.
233 234
234Fixed displaying of "free" days and time in KO Monthview and Agendaview. 235Fixed displaying of "free" days and time in KO Monthview and Agendaview.
235 236
236... and many other bugfixes. 237... and many other bugfixes.
237 238
238********** VERSION 1.9.10 ************ 239********** VERSION 1.9.10 ************
239 240
240Many internal small bugfixes. 241Many internal small bugfixes.
241And fix of the "big" bug in KO/Pi, 242And fix of the "big" bug in KO/Pi,
242that after Syncing the appointments had an offset by several hours. 243that after Syncing the appointments had an offset by several hours.
243That was a problem with the internal timezone setting, 244That was a problem with the internal timezone setting,
244introduced by the changed timezone configuration settings. 245introduced by the changed timezone configuration settings.
245 246
246German translation for OM/Pi is now available. 247German translation for OM/Pi is now available.
247 248
248 249
249********** VERSION 1.9.9 ************ 250********** VERSION 1.9.9 ************
250 251
251KDE-Pim/Pi has a new Member! 252KDE-Pim/Pi has a new Member!
252It is called PWM/Pi (Passwordmanager/platform-independent) 253It is called PWM/Pi (Passwordmanager/platform-independent)
253and it is available for the Zaurus. 254and it is available for the Zaurus.
254It is planned, that it will be available later for Windows. 255It is planned, that it will be available later for Windows.
255(And for Linux, of course). 256(And for Linux, of course).
256It is a port of the Passwordmanager of KDE. 257It is a port of the Passwordmanager of KDE.
257It will need the MicroKDElibs to run. 258It will need the MicroKDElibs to run.
258 259
259Made loading of addressbooks in KA/Pi up to 7 times faster! 260Made loading of addressbooks in KA/Pi up to 7 times faster!
260The bigger your addressbook file, the more starting speed 261The bigger your addressbook file, the more starting speed
261will you gain. (relatively) 262will you gain. (relatively)
262 263
263The Qtopia addressbook connector is now platform independend 264The Qtopia addressbook connector is now platform independend
264as well and should work on any platform for importing/exporting 265as well and should work on any platform for importing/exporting
265Qtopia and Opie XML files. 266Qtopia and Opie XML files.
266 267
267Added a +30min feature to the timezone settings to make 268Added a +30min feature to the timezone settings to make
268KDE-Pim/Pi useable in Australia and other parts on the 269KDE-Pim/Pi useable in Australia and other parts on the
269world with strange timezones ;-) 270world with strange timezones ;-)
270 271
271German "Umlaute" should now be sorted correctly on the Z in KA/Pi. 272German "Umlaute" should now be sorted correctly on the Z in KA/Pi.
272 273
273It is now possible to disable the 274It is now possible to disable the
274"receive data via infrared" feature, such that syncing with 275"receive data via infrared" feature, such that syncing with
275Outlook is now possible again with Kx/Pi runing. 276Outlook is now possible again with Kx/Pi runing.
276Please disable it, before syncing Sharp DTM with Outlook. 277Please disable it, before syncing Sharp DTM with Outlook.
277For your convenience, the "receive data via infrared" feature 278For your convenience, the "receive data via infrared" feature
278is disabled automatically, if you sync Kx/Pi with DTM. 279is disabled automatically, if you sync Kx/Pi with DTM.
279You have to enable it again manually after syncing. 280You have to enable it again manually after syncing.
280Enabling this feature makes it impossible to start the 281Enabling this feature makes it impossible to start the
281Sharp DTM apps. If this feature is enabled, you will only get the 282Sharp DTM apps. If this feature is enabled, you will only get the
282alarm notification from KO/Pi and not from the Sharp calendar. 283alarm notification from KO/Pi and not from the Sharp calendar.
283This is very useful if you sync KO/Pi with Sharp DTM, 284This is very useful if you sync KO/Pi with Sharp DTM,
284because after syncing you usually would get notified about 285because after syncing you usually would get notified about
285an alarm by KO/Pi and the Sharp Calendar. 286an alarm by KO/Pi and the Sharp Calendar.
286 287
287Together with the Linux desktop version of KO/Pi 288Together with the Linux desktop version of KO/Pi
288it is now possible to sync KO/Pi on the Zaurus 289it is now possible to sync KO/Pi on the Zaurus
289with the complete KDE-desktop (3.3 or later) 290with the complete KDE-desktop (3.3 or later)
290calendar data easily. 291calendar data easily.
291That makes it possible to sync the Z with one 292That makes it possible to sync the Z with one
292click of a mouse with the KDE-Desktop. 293click of a mouse with the KDE-Desktop.
293This feature it available for all Zaurus platforms KO/Pi 294This feature it available for all Zaurus platforms KO/Pi
294is running on. 295is running on.
295The only thing needed is a running KO/Pi on Linux and 296The only thing needed is a running KO/Pi on Linux and
296a compiled version of the small 297a compiled version of the small
297KDE-Pim/Pi<->KDE-Desktop access command line program, 298KDE-Pim/Pi<->KDE-Desktop access command line program,
298which is in the KDE-Pim/Pi sources available. 299which is in the KDE-Pim/Pi sources available.
299 300
300The "KDE-desktop" syncing feature for KA/Pi will follow 301The "KDE-desktop" syncing feature for KA/Pi will follow
301in the next releases. 302in the next releases.
302 303
303Fixed the vcard export bug, which had the version 1.9.8. 304Fixed the vcard export bug, which had the version 1.9.8.
304 305
305Added missing GERMAN translation to KO/Pi. 306Added missing GERMAN translation to KO/Pi.
306Hi PsionX, could you add the missing french translation?Thx! 307Hi PsionX, could you add the missing french translation?Thx!
307 308
308Translation files for KA/Pi are available as well. 309Translation files for KA/Pi are available as well.
309GERMAN translation will be available in the next release. 310GERMAN translation will be available in the next release.
310PsionX ( yres, you again ;-) ), could you start translating 311PsionX ( yres, you again ;-) ), could you start translating
311KA/Pi? Thx! 312KA/Pi? Thx!
312 313
313You can download the version 1.9.9 at 314You can download the version 1.9.9 at
314 315
315http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604 316http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604
316 317
317Note: 318Note:
318To run the mail program OM/Pi you need libopenssl. 319To run the mail program OM/Pi you need libopenssl.
319A link to a download loaction is available at 320A link to a download loaction is available at
320ZSI at www.killefiz.de 321ZSI at www.killefiz.de
321 322
322 323
323********** VERSION 1.9.8 ************ 324********** VERSION 1.9.8 ************
324 325
325Fixed character decoding in OM/Pi. 326Fixed character decoding in OM/Pi.
326(e.g. German "Umlaute" were not displayed properly.) 327(e.g. German "Umlaute" were not displayed properly.)
327 328
328Made is possible to reparent todos in KO/Pi. 329Made is possible to reparent todos in KO/Pi.
329Use contextmenu or keys (look at Help-Keys + Colors) for that. 330Use contextmenu or keys (look at Help-Keys + Colors) for that.
330 331
331Added the missing Sync-Howto and WhatsNew to the packages. 332Added the missing Sync-Howto and WhatsNew to the packages.
332 333
333KO/Pi on Linux desktop can now sync with KDE desktop. 334KO/Pi on Linux desktop can now sync with KDE desktop.
334That means: When using KO/Pi on Linux desktop for syncing with 335That means: When using KO/Pi on Linux desktop for syncing with
335KDE desktop and the Zaurus, the Zaurus can be synced now 336KDE desktop and the Zaurus, the Zaurus can be synced now
336with all KDE-Calendar resources, not only with one local file. 337with all KDE-Calendar resources, not only with one local file.
337(That makes it possible to sync the Zaurus with the 338(That makes it possible to sync the Zaurus with the
338calendar data on a Kolab server) 339calendar data on a Kolab server)
339 340
340KA/Pi syncing with KDE desktop will be available in the next version. 341KA/Pi syncing with KDE desktop will be available in the next version.
341 342
342 343
343********** VERSION 1.9.7 ************ 344********** VERSION 1.9.7 ************
344 345
345KO/Pi - KA/Pi on Windows: 346KO/Pi - KA/Pi on Windows:
346Now a directory can be defined by the user, where the 347Now a directory can be defined by the user, where the
347application/config data should be saved. 348application/config data should be saved.
348 Define your desired path in the evironment variable 349 Define your desired path in the evironment variable
349 MICROKDEHOME 350 MICROKDEHOME
350 before starting KO/Pi or KA/Pi. 351 before starting KO/Pi or KA/Pi.
351 352
352An easy Kx/Pi to Kx/Pi syncing is now possible 353An easy Kx/Pi to Kx/Pi syncing is now possible
353(it is called Pi-Sync) via network. 354(it is called Pi-Sync) via network.
354Please look at the Sync Howto. 355Please look at the Sync Howto.
355 356
356Exporting of calendar data and contacts to mobile phones is now possible. 357Exporting of calendar data and contacts to mobile phones is now possible.
357The SyncHowto is updated with information howto 358The SyncHowto is updated with information howto
358access/sync mobile phones. 359access/sync mobile phones.
359Please look at the Sync Howto. 360Please look at the Sync Howto.
360 361
361Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly. 362Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly.
362Please disable Fastload for the original contact/calendar applications 363Please disable Fastload for the original contact/calendar applications
363and close them. 364and close them.
364KO/Pi and KA/Pi must be running in order to receive the data. 365KO/Pi and KA/Pi must be running in order to receive the data.
365(KO/Pi and KA/Pi are always running if Fastload for them is enabled!) 366(KO/Pi and KA/Pi are always running if Fastload for them is enabled!)
366 367
367In the KA/Pi details view are now the preferred tel. numbers displayed on top 368In the KA/Pi details view are now the preferred tel. numbers displayed on top
368of the other data ( emails/tel.numbers/addresses) 369of the other data ( emails/tel.numbers/addresses)
369 370
370Fixed some syncing problems in KA/Pi. 371Fixed some syncing problems in KA/Pi.
371 372
372Added font settings for the KA/Pi details view. 373Added font settings for the KA/Pi details view.
373Added fields "children's name" and "gender" to KA/Pi. 374Added fields "children's name" and "gender" to KA/Pi.
374 375
375Made searching in KA/Pi better: 376Made searching in KA/Pi better:
376Now the first item in a view is selected after a search automatically and 377Now the first item in a view is selected after a search automatically and
377the views can be scrolled up/down when the search input field has the keyboard focus. 378the views can be scrolled up/down when the search input field has the keyboard focus.
378 379
379And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi. 380And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi.
380 381
381 382
382********** VERSION 1.9.6 ************ 383********** VERSION 1.9.6 ************
383 384
384Changes in the external application communication on the Zaurus 385Changes in the external application communication on the Zaurus
385in order to use less RAM when the apps are running. 386in order to use less RAM when the apps are running.
386First syncing of addressbooks (KA/Pi) is possible. 387First syncing of addressbooks (KA/Pi) is possible.
387 388
388 389
389********** VERSION 1.9.5a ************ 390********** VERSION 1.9.5a ************
390 391
391Fixed a bug in KO/Pi in the SharpDTM sync of version 1.9.5. 392Fixed a bug in KO/Pi in the SharpDTM sync of version 1.9.5.
392Fixed some small bugs. 393Fixed some small bugs.
393KA/Pi shows now the birthday in summary view. 394KA/Pi shows now the birthday in summary view.
diff --git a/korganizer/koeventviewer.cpp b/korganizer/koeventviewer.cpp
index 1fcc977..cee0466 100644
--- a/korganizer/koeventviewer.cpp
+++ b/korganizer/koeventviewer.cpp
@@ -1,581 +1,595 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18*/ 18*/
19 19
20#include <qcstring.h> 20#include <qcstring.h>
21#include <qwhatsthis.h> 21#include <qwhatsthis.h>
22#include <qdialog.h> 22#include <qdialog.h>
23#include <qapplication.h> 23#include <qapplication.h>
24#include <qlabel.h> 24#include <qlabel.h>
25#include <qlayout.h> 25#include <qlayout.h>
26 26
27#include <klocale.h> 27#include <klocale.h>
28#include <kapplication.h> 28#include <kapplication.h>
29#include <libkcal/event.h> 29#include <libkcal/event.h>
30#include <libkcal/todo.h> 30#include <libkcal/todo.h>
31#include <kdebug.h> 31#include <kdebug.h>
32#include <kiconloader.h> 32#include <kiconloader.h>
33#include <krun.h> 33#include <krun.h>
34#include <kglobal.h> 34#include <kglobal.h>
35#include <kprocess.h> 35#include <kprocess.h>
36#include "koprefs.h" 36#include "koprefs.h"
37 37
38#include <kabc/stdaddressbook.h> 38#include <kabc/stdaddressbook.h>
39 39
40#ifndef KORG_NODCOP 40#ifndef KORG_NODCOP
41#include <dcopclient.h> 41#include <dcopclient.h>
42#include "korganizer.h" 42#include "korganizer.h"
43#include "koprefs.h" 43#include "koprefs.h"
44#include "actionmanager.h" 44#include "actionmanager.h"
45#endif 45#endif
46 46
47#include "koeventviewer.h" 47#include "koeventviewer.h"
48//#ifndef KORG_NOKABC 48//#ifndef KORG_NOKABC
49//#include <kabc/stdaddressbook.h> 49//#include <kabc/stdaddressbook.h>
50//#define size count 50//#define size count
51//#endif 51//#endif
52 52
53#ifdef DESKTOP_VERSION 53#ifdef DESKTOP_VERSION
54#include <kabc/addresseedialog.h> 54#include <kabc/addresseedialog.h>
55#include <kabc/addresseeview.h> 55#include <kabc/addresseeview.h>
56#else //DESKTOP_VERSION 56#else //DESKTOP_VERSION
57#include <externalapphandler.h> 57#include <externalapphandler.h>
58#include <qtopia/qcopenvelope_qws.h> 58#include <qtopia/qcopenvelope_qws.h>
59#endif //DESKTOP_VERSION 59#endif //DESKTOP_VERSION
60 60
61KOEventViewer::KOEventViewer(QWidget *parent,const char *name) 61KOEventViewer::KOEventViewer(QWidget *parent,const char *name)
62 : QTextBrowser(parent,name) 62 : QTextBrowser(parent,name)
63{ 63{
64 mSyncMode = false; 64 mSyncMode = false;
65 mColorMode = 0; 65 mColorMode = 0;
66} 66}
67 67
68KOEventViewer::~KOEventViewer() 68KOEventViewer::~KOEventViewer()
69{ 69{
70} 70}
71 71
72void KOEventViewer::setSource(const QString& n) 72void KOEventViewer::setSource(const QString& n)
73{ 73{
74 74
75 if ( n.left(3) == "uid" ) 75 if ( n.left(3) == "uid" )
76#ifdef DESKTOP_VERSION 76#ifdef DESKTOP_VERSION
77 { 77 {
78 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 78 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
79 KABC::AddressBook::Iterator it; 79 KABC::AddressBook::Iterator it;
80 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 80 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
81 // LR I do not understand, why the uid string is different on zaurus and desktop 81 // LR I do not understand, why the uid string is different on zaurus and desktop
82 QString uid = "uid://"+(*it).uid(); 82 QString uid = "uid://"+(*it).uid();
83 83
84 //qDebug("for *%s* +%s+ ", n.latin1(), uid.latin1()); 84 //qDebug("for *%s* +%s+ ", n.latin1(), uid.latin1());
85 if (n == uid ) { 85 if (n == uid ) {
86 //qDebug("found %s ",(*it).mobileHomePhone().latin1() ); 86 //qDebug("found %s ",(*it).mobileHomePhone().latin1() );
87 QDialog dia( this,"dia123", true ); 87 QDialog dia( this,"dia123", true );
88 dia.setCaption( i18n("Details of attendee") ); 88 dia.setCaption( i18n("Details of attendee") );
89 QVBoxLayout lay ( &dia ); 89 QVBoxLayout lay ( &dia );
90 KPIM::AddresseeView av ( &dia ); 90 KPIM::AddresseeView av ( &dia );
91 av.setAddressee( (*it) ); 91 av.setAddressee( (*it) );
92 lay.addWidget( &av ); 92 lay.addWidget( &av );
93 if ( QApplication::desktop()->width() < 480 ) 93 if ( QApplication::desktop()->width() < 480 )
94 dia.resize( 220, 240); 94 dia.resize( 220, 240);
95 else { 95 else {
96 dia.resize( 400,400); 96 dia.resize( 400,400);
97 } 97 }
98 dia.exec(); 98 dia.exec();
99 break; 99 break;
100 } 100 }
101 } 101 }
102 return; 102 return;
103 } 103 }
104#else 104#else
105 { 105 {
106 if ( "uid:organizer" == n ) { 106 if ( "uid:organizer" == n ) {
107 ExternalAppHandler::instance()->requestDetailsFromKAPI("", mCurrentIncidence->organizer(),""); 107 ExternalAppHandler::instance()->requestDetailsFromKAPI("", mCurrentIncidence->organizer(),"");
108 return; 108 return;
109 } 109 }
110 QPtrList<Attendee> attendees = mCurrentIncidence->attendees(); 110 QPtrList<Attendee> attendees = mCurrentIncidence->attendees();
111 if (attendees.count()) { 111 if (attendees.count()) {
112 Attendee *a; 112 Attendee *a;
113 for(a=attendees.first();a;a=attendees.next()) { 113 for(a=attendees.first();a;a=attendees.next()) {
114 if ( "uid:"+a->uid() == n ) { 114 if ( "uid:"+a->uid() == n ) {
115 bool res = ExternalAppHandler::instance()->requestDetailsFromKAPI(a->name(), a->email(), a->uid()); 115 bool res = ExternalAppHandler::instance()->requestDetailsFromKAPI(a->name(), a->email(), a->uid());
116 return; 116 return;
117 } 117 }
118 } 118 }
119 } 119 }
120 return; 120 return;
121 } 121 }
122 //requestNameEmailUidListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); 122 //requestNameEmailUidListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/);
123 // the result should now arrive through method insertAttendees 123 // the result should now arrive through method insertAttendees
124 //QString uid = "uid:"+(*it).uid(); 124 //QString uid = "uid:"+(*it).uid();
125#endif 125#endif
126 if ( n.left(6) == "mailto" ) { 126 if ( n.left(6) == "mailto" ) {
127 // qDebug("KOEventViewer::setSource %s ", n.mid(7).latin1()); 127 // qDebug("KOEventViewer::setSource %s ", n.mid(7).latin1());
128#ifndef DESKTOP_VERSION 128#ifndef DESKTOP_VERSION
129 QCopEnvelope e("QPE/Application/ompi", "newMail(QString)" ); 129 QCopEnvelope e("QPE/Application/ompi", "newMail(QString)" );
130 e << n.mid(7); 130 e << n.mid(7);
131#endif 131#endif
132 132
133 } 133 }
134 134
135 135
136#ifndef KORG_NODCOP 136#ifndef KORG_NODCOP
137 kdDebug() << "KOEventViewer::setSource(): " << n << endl; 137 kdDebug() << "KOEventViewer::setSource(): " << n << endl;
138 QString tmpStr; 138 QString tmpStr;
139 if (n.startsWith("mailto:")) { 139 if (n.startsWith("mailto:")) {
140 KApplication::kApplication()->invokeMailer(n.mid(7),QString::null); 140 KApplication::kApplication()->invokeMailer(n.mid(7),QString::null);
141 //emit showIncidence(n); 141 //emit showIncidence(n);
142 return; 142 return;
143 } else if (n.startsWith("uid:")) { 143 } else if (n.startsWith("uid:")) {
144 DCOPClient *client = KApplication::kApplication()->dcopClient(); 144 DCOPClient *client = KApplication::kApplication()->dcopClient();
145 const QByteArray noParamData; 145 const QByteArray noParamData;
146 const QByteArray paramData; 146 const QByteArray paramData;
147 QByteArray replyData; 147 QByteArray replyData;
148 QCString replyTypeStr; 148 QCString replyTypeStr;
149#define PING_ABBROWSER (client->call("kaddressbook", "KAddressBookIface", "interfaces()", noParamData, replyTypeStr, replyData)) 149#define PING_ABBROWSER (client->call("kaddressbook", "KAddressBookIface", "interfaces()", noParamData, replyTypeStr, replyData))
150 bool foundAbbrowser = PING_ABBROWSER; 150 bool foundAbbrowser = PING_ABBROWSER;
151 151
152 if (foundAbbrowser) { 152 if (foundAbbrowser) {
153 //KAddressbook is already running, so just DCOP to it to bring up the contact editor 153 //KAddressbook is already running, so just DCOP to it to bring up the contact editor
154 //client->send("kaddressbook","KAddressBookIface", 154 //client->send("kaddressbook","KAddressBookIface",
155 QDataStream arg(paramData, IO_WriteOnly); 155 QDataStream arg(paramData, IO_WriteOnly);
156 arg << n.mid(6); 156 arg << n.mid(6);
157 client->send("kaddressbook", "KAddressBookIface", "showContactEditor( QString )", paramData); 157 client->send("kaddressbook", "KAddressBookIface", "showContactEditor( QString )", paramData);
158 return; 158 return;
159 } else { 159 } else {
160 /* 160 /*
161 KaddressBook is not already running. Pass it the UID of the contact via the command line while starting it - its neater. 161 KaddressBook is not already running. Pass it the UID of the contact via the command line while starting it - its neater.
162 We start it without its main interface 162 We start it without its main interface
163 */ 163 */
164 KIconLoader* iconLoader = new KIconLoader(); 164 KIconLoader* iconLoader = new KIconLoader();
165 QString iconPath = iconLoader->iconPath("go",KIcon::Small); 165 QString iconPath = iconLoader->iconPath("go",KIcon::Small);
166 ActionManager::setStartedKAddressBook(true); 166 ActionManager::setStartedKAddressBook(true);
167 tmpStr = "kaddressbook --editor-only --uid "; 167 tmpStr = "kaddressbook --editor-only --uid ";
168 tmpStr += KProcess::quote(n.mid(6)); 168 tmpStr += KProcess::quote(n.mid(6));
169 KRun::runCommand(tmpStr,"KAddressBook",iconPath); 169 KRun::runCommand(tmpStr,"KAddressBook",iconPath);
170 return; 170 return;
171 } 171 }
172 } else { 172 } else {
173 //QTextBrowser::setSource(n); 173 //QTextBrowser::setSource(n);
174 } 174 }
175#endif 175#endif
176} 176}
177 177
178void KOEventViewer::addTag(const QString & tag,const QString & text) 178void KOEventViewer::addTag(const QString & tag,const QString & text)
179{ 179{
180 int number=text.contains("\n"); 180 int number=text.contains("\n");
181 QString str = "<" + tag + ">"; 181 QString str = "<" + tag + ">";
182 QString tmpText=text; 182 QString tmpText=text;
183 QString tmpStr=str; 183 QString tmpStr=str;
184 if(number !=-1) 184 if(number !=-1)
185 { 185 {
186 if (number > 0) { 186 if (number > 0) {
187 int pos=0; 187 int pos=0;
188 QString tmp; 188 QString tmp;
189 for(int i=0;i<=number;i++) { 189 for(int i=0;i<=number;i++) {
190 pos=tmpText.find("\n"); 190 pos=tmpText.find("\n");
191 tmp=tmpText.left(pos); 191 tmp=tmpText.left(pos);
192 tmpText=tmpText.right(tmpText.length()-pos-1); 192 tmpText=tmpText.right(tmpText.length()-pos-1);
193 tmpStr+=tmp+"<br>"; 193 tmpStr+=tmp+"<br>";
194 } 194 }
195 } 195 }
196 else tmpStr += tmpText; 196 else tmpStr += tmpText;
197 tmpStr+="</" + tag + ">"; 197 tmpStr+="</" + tag + ">";
198 mText.append(tmpStr); 198 mText.append(tmpStr);
199 } 199 }
200 else 200 else
201 { 201 {
202 str += text + "</" + tag + ">"; 202 str += text + "</" + tag + ">";
203 mText.append(str); 203 mText.append(str);
204 } 204 }
205} 205}
206 206
207void KOEventViewer::setColorMode( int m ) 207void KOEventViewer::setColorMode( int m )
208{ 208{
209 mColorMode = m; 209 mColorMode = m;
210} 210}
211void KOEventViewer::appendEvent(Event *event, int mode ) 211void KOEventViewer::appendEvent(Event *event, int mode )
212{ 212{
213 mMailSubject = ""; 213 mMailSubject = "";
214 mCurrentIncidence = event; 214 mCurrentIncidence = event;
215 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 215 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
216 topLevelWidget()->setCaption(i18n("Event Viewer")); 216 topLevelWidget()->setCaption(i18n("Event Viewer"));
217 if ( mode == 0 ) { 217 if ( mode == 0 ) {
218 addTag("h2",event->summary()); 218 addTag("h2",event->summary());
219 } 219 }
220 else { 220 else {
221 if ( mColorMode == 1 ) { 221 if ( mColorMode == 1 ) {
222 mText +="<font color=\"#00A000\">"; 222 mText +="<font color=\"#00A000\">";
223 } 223 }
224 if ( mColorMode == 2 ) { 224 if ( mColorMode == 2 ) {
225 mText +="<font color=\"#C00000\">"; 225 mText +="<font color=\"#C00000\">";
226 } 226 }
227 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>"; 227 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>";
228 if ( mode == 1 ) { 228 if ( mode == 1 ) {
229 addTag("h2",i18n( "Local: " ) +event->summary()); 229 addTag("h2",i18n( "Local: " ) +event->summary());
230 } else { 230 } else {
231 addTag("h2",i18n( "Remote: " ) +event->summary()); 231 addTag("h2",i18n( "Remote: " ) +event->summary());
232 } 232 }
233 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 233 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
234 if ( mColorMode ) 234 if ( mColorMode )
235 mText += "</font>"; 235 mText += "</font>";
236 } 236 }
237 mMailSubject += i18n( "Meeting " )+ event->summary(); 237 mMailSubject += i18n( "Meeting " )+ event->summary();
238 if (event->cancelled ()) { 238 if (event->cancelled ()) {
239 mText +="<font color=\"#B00000\">"; 239 mText +="<font color=\"#B00000\">";
240 addTag("i",i18n("This event has been cancelled!")); 240 addTag("i",i18n("This event has been cancelled!"));
241 mText.append("<br>"); 241 mText.append("<br>");
242 mText += "</font>"; 242 mText += "</font>";
243 mMailSubject += i18n("(cancelled)"); 243 mMailSubject += i18n("(cancelled)");
244 } 244 }
245 if (!event->location().isEmpty()) { 245 if (!event->location().isEmpty()) {
246 addTag("b",i18n("Location: ")); 246 addTag("b",i18n("Location: "));
247 mText.append(event->location()+"<br>"); 247 mText.append(event->location()+"<br>");
248 mMailSubject += i18n(" at ") + event->location(); 248 mMailSubject += i18n(" at ") + event->location();
249 } 249 }
250 if (event->doesFloat()) { 250 if (event->doesFloat()) {
251 if (event->isMultiDay()) { 251 if (event->isMultiDay()) {
252 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>") 252 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>")
253 .arg(event->dtStartDateStr(shortDate)) 253 .arg(event->dtStartDateStr(shortDate))
254 .arg(event->dtEndDateStr(shortDate))); 254 .arg(event->dtEndDateStr(shortDate)));
255 } else { 255 } else {
256 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate ))); 256 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate )));
257 } 257 }
258 } else { 258 } else {
259 if (event->isMultiDay()) { 259 if (event->isMultiDay()) {
260 mText.append(i18n("<p><b>From:</b> %1</p> ") 260 mText.append(i18n("<p><b>From:</b> %1</p> ")
261 .arg(event->dtStartStr( shortDate))); 261 .arg(event->dtStartStr( shortDate)));
262 mText.append(i18n("<p><b>To:</b> %1</p>") 262 mText.append(i18n("<p><b>To:</b> %1</p>")
263 .arg(event->dtEndStr(shortDate))); 263 .arg(event->dtEndStr(shortDate)));
264 } else { 264 } else {
265 mText.append(i18n("<p><b>On:</b> %1</p> ") 265 mText.append(i18n("<p><b>On:</b> %1</p> ")
266 .arg(event->dtStartDateStr( shortDate ))); 266 .arg(event->dtStartDateStr( shortDate )));
267 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>") 267 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>")
268 .arg(event->dtStartTimeStr()) 268 .arg(event->dtStartTimeStr())
269 .arg(event->dtEndTimeStr())); 269 .arg(event->dtEndTimeStr()));
270 } 270 }
271 } 271 }
272 272
273 if (event->recurrence()->doesRecur()) { 273 if (event->recurrence()->doesRecur()) {
274 274
275 QString recurText = event->recurrence()->recurrenceText(); 275 QString recurText = event->recurrence()->recurrenceText();
276 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>"); 276 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>");
277 bool last; 277 bool last;
278 QDate start = QDate::currentDate(); 278 QDate start = QDate::currentDate();
279 QDate next; 279 QDate next;
280 next = event->recurrence()->getPreviousDate( start , &last ); 280 next = event->recurrence()->getPreviousDate( start , &last );
281 if ( !last ) { 281 if ( !last ) {
282 next = event->recurrence()->getNextDate( start.addDays( - 1 ) ); 282 next = event->recurrence()->getNextDate( start.addDays( - 1 ) );
283 addTag("p",i18n("<b>Next recurrence is on:</b>") ); 283 addTag("p",i18n("<b>Next recurrence is on:</b>") );
284 addTag("p", KGlobal::locale()->formatDate( next, shortDate )); 284 addTag("p", KGlobal::locale()->formatDate( next, shortDate ));
285 QDateTime nextdt = QDateTime( next, event->dtStart().time()); 285 QDateTime nextdt = QDateTime( next, event->dtStart().time());
286 mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( nextdt, true ); 286 mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( nextdt, true );
287 287
288 } else { 288 } else {
289 addTag("p",i18n("<b>Last recurrence was on:</b>") ); 289 addTag("p",i18n("<b>Last recurrence was on:</b>") );
290 addTag("p", KGlobal::locale()->formatDate( next, shortDate )); 290 addTag("p", KGlobal::locale()->formatDate( next, shortDate ));
291 } 291 }
292 } else { 292 } else {
293 mMailSubject += i18n(" - " )+event->dtStartStr( true ); 293 mMailSubject += i18n(" - " )+event->dtStartStr( true );
294 294
295 } 295 }
296 296
297 297
298 if (event->isAlarmEnabled()) { 298 if (event->isAlarmEnabled()) {
299 Alarm *alarm =event->alarms().first() ; 299 Alarm *alarm =event->alarms().first() ;
300 QDateTime t = alarm->time(); 300 QDateTime t = alarm->time();
301 int min = t.secsTo( event->dtStart() )/60; 301 int min = t.secsTo( event->dtStart() )/60;
302 QString s =i18n("( %1 min before )").arg( min ); 302 QString s =i18n("( %1 min before )").arg( min );
303 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"); 303 addTag("p",i18n("<b>Alarm on: ") + s +" </b>");
304 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); 304 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate ));
305 //addTag("p",s); 305 //addTag("p",s);
306 } 306 }
307 307
308 addTag("b",i18n("Access: ")); 308 addTag("b",i18n("Access: "));
309 mText.append(event->secrecyStr()+"<br>"); 309 mText.append(event->secrecyStr()+"<br>");
310 if (!event->description().isEmpty()) { 310 if (!event->description().isEmpty()) {
311 addTag("p",i18n("<b>Details: </b>")); 311 addTag("p",i18n("<b>Details: </b>"));
312 addTag("p",event->description()); 312 addTag("p",event->description());
313 } 313 }
314 314
315 formatCategories(event); 315 formatCategories(event);
316 316
317 formatReadOnly(event); 317 formatReadOnly(event);
318 formatAttendees(event); 318 formatAttendees(event);
319 319
320 setText(mText); 320 setText(mText);
321 //QWhatsThis::add(this,mText); 321 //QWhatsThis::add(this,mText);
322 322
323} 323}
324 324
325void KOEventViewer::appendTodo(Todo *event, int mode ) 325void KOEventViewer::appendTodo(Todo *event, int mode )
326{ 326{
327 mMailSubject = ""; 327 mMailSubject = "";
328 mCurrentIncidence = event; 328 mCurrentIncidence = event;
329 topLevelWidget()->setCaption(i18n("Todo Viewer")); 329 topLevelWidget()->setCaption(i18n("Todo Viewer"));
330 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 330 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
331 if (mode == 0 ) 331 if (mode == 0 )
332 addTag("h2",event->summary()); 332 addTag("h2",event->summary());
333 else { 333 else {
334 if ( mColorMode == 1 ) { 334 if ( mColorMode == 1 ) {
335 mText +="<font color=\"#00A000\">"; 335 mText +="<font color=\"#00A000\">";
336 } 336 }
337 if ( mColorMode == 2 ) { 337 if ( mColorMode == 2 ) {
338 mText +="<font color=\"#B00000\">"; 338 mText +="<font color=\"#B00000\">";
339 } 339 }
340 if ( mode == 1 ) { 340 if ( mode == 1 ) {
341 addTag("h2",i18n( "Local: " ) +event->summary()); 341 addTag("h2",i18n( "Local: " ) +event->summary());
342 } else { 342 } else {
343 addTag("h2",i18n( "Remote: " ) +event->summary()); 343 addTag("h2",i18n( "Remote: " ) +event->summary());
344 } 344 }
345 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 345 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
346 if ( mColorMode ) 346 if ( mColorMode )
347 mText += "</font>"; 347 mText += "</font>";
348 } 348 }
349 mMailSubject += i18n( "Todo " )+ event->summary(); 349 mMailSubject += i18n( "Todo " )+ event->summary();
350 if (event->cancelled ()) { 350 if (event->cancelled ()) {
351 mText +="<font color=\"#B00000\">"; 351 mText +="<font color=\"#B00000\">";
352 addTag("i",i18n("This todo has been cancelled!")); 352 addTag("i",i18n("This todo has been cancelled!"));
353 mText.append("<br>"); 353 mText.append("<br>");
354 mText += "</font>"; 354 mText += "</font>";
355 mMailSubject += i18n("(cancelled)"); 355 mMailSubject += i18n("(cancelled)");
356 } 356 }
357 357
358 if (!event->location().isEmpty()) { 358 if (!event->location().isEmpty()) {
359 addTag("b",i18n("Location: ")); 359 addTag("b",i18n("Location: "));
360 mText.append(event->location()+"<br>"); 360 mText.append(event->location()+"<br>");
361 mMailSubject += i18n(" at ") + event->location(); 361 mMailSubject += i18n(" at ") + event->location();
362 } 362 }
363 if (event->hasStartDate()) {
364 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer)));
365 }
363 if (event->hasDueDate()) { 366 if (event->hasDueDate()) {
364 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer))); 367 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer)));
365 mMailSubject += i18n(" - " )+event->dtDueStr( true ); 368 mMailSubject += i18n(" - " )+event->dtDueStr( true );
366 } 369 }
367 addTag("b",i18n("Access: ")); 370 addTag("b",i18n("Access: "));
368 mText.append(event->secrecyStr()+"<br>"); 371 mText.append(event->secrecyStr()+"<br>");
369 if (!event->description().isEmpty()) { 372 if (!event->description().isEmpty()) {
370 addTag("p",i18n("<b>Details: </b>")); 373 addTag("p",i18n("<b>Details: </b>"));
371 addTag("p",event->description()); 374 addTag("p",event->description());
372 } 375 }
373 376
374 formatCategories(event); 377 formatCategories(event);
375 378
376 mText.append(i18n("<p><b>Priority:</b> %2</p>") 379 mText.append(i18n("<p><b>Priority:</b> %2</p>")
377 .arg(QString::number(event->priority()))); 380 .arg(QString::number(event->priority())));
378 381
379 mText.append(i18n("<p><i>%1 % completed</i></p>") 382 mText.append(i18n("<p><i>%1 % completed</i></p>")
380 .arg(event->percentComplete())); 383 .arg(event->percentComplete()));
381 384
382 formatReadOnly(event); 385 formatReadOnly(event);
383 formatAttendees(event); 386 formatAttendees(event);
384 387 if ( event->relatedTo() ) {
388 addTag("b",i18n("Parent todo: "));
389 mText.append(event->relatedTo()->summary()+" [" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] <br>");
390 }
391 QPtrList<Incidence> Relations = event->relations();
392 Incidence *to;
393 if ( Relations.first() )
394 addTag("b",i18n("Sub todos:<br>"));
395 for (to=Relations.first();to;to=Relations.next()) {
396 mText.append( to->summary()+" [" +QString::number(to->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%]<br>");
397
398 }
385 setText(mText); 399 setText(mText);
386} 400}
387 401
388void KOEventViewer::formatCategories(Incidence *event) 402void KOEventViewer::formatCategories(Incidence *event)
389{ 403{
390 if (!event->categoriesStr().isEmpty()) { 404 if (!event->categoriesStr().isEmpty()) {
391 if (event->categories().count() == 1) { 405 if (event->categories().count() == 1) {
392 addTag("h3",i18n("Category")); 406 addTag("h3",i18n("Category"));
393 } else { 407 } else {
394 addTag("h3",i18n("Categories")); 408 addTag("h3",i18n("Categories"));
395 } 409 }
396 addTag("p",event->categoriesStr()); 410 addTag("p",event->categoriesStr());
397 } 411 }
398} 412}
399void KOEventViewer::formatAttendees(Incidence *event) 413void KOEventViewer::formatAttendees(Incidence *event)
400{ 414{
401 QPtrList<Attendee> attendees = event->attendees(); 415 QPtrList<Attendee> attendees = event->attendees();
402 if (attendees.count()) { 416 if (attendees.count()) {
403 417
404 418
405 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small); 419 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small);
406 addTag("h3",i18n("Organizer")); 420 addTag("h3",i18n("Organizer"));
407 mText.append("<ul><li>"); 421 mText.append("<ul><li>");
408#ifndef KORG_NOKABC 422#ifndef KORG_NOKABC
409 423
410#ifdef DESKTOP_VERSION 424#ifdef DESKTOP_VERSION
411 KABC::AddressBook *add_book = KABC::StdAddressBook::self(); 425 KABC::AddressBook *add_book = KABC::StdAddressBook::self();
412 KABC::Addressee::List addressList; 426 KABC::Addressee::List addressList;
413 addressList = add_book->findByEmail(event->organizer()); 427 addressList = add_book->findByEmail(event->organizer());
414 KABC::Addressee o = addressList.first(); 428 KABC::Addressee o = addressList.first();
415 if (!o.isEmpty() && addressList.size()<2) { 429 if (!o.isEmpty() && addressList.size()<2) {
416 mText += "<a href=\"uid:" + o.uid() + "\">"; 430 mText += "<a href=\"uid:" + o.uid() + "\">";
417 mText += o.formattedName(); 431 mText += o.formattedName();
418 mText += "</a>\n"; 432 mText += "</a>\n";
419 } else { 433 } else {
420 mText.append(event->organizer()); 434 mText.append(event->organizer());
421 } 435 }
422#else //DESKTOP_VERSION 436#else //DESKTOP_VERSION
423 mText += "<a href=\"uid:organizer\">"; 437 mText += "<a href=\"uid:organizer\">";
424 mText += event->organizer(); 438 mText += event->organizer();
425 mText += "</a>\n"; 439 mText += "</a>\n";
426#endif //DESKTOP_VERSION 440#endif //DESKTOP_VERSION
427 441
428 442
429#else 443#else
430 mText.append(event->organizer()); 444 mText.append(event->organizer());
431#endif 445#endif
432 446
433 if (iconPath) { 447 if (iconPath) {
434 mText += " <a href=\"mailto:" + event->organizer() + "\">"; 448 mText += " <a href=\"mailto:" + event->organizer() + "\">";
435 mText += "<IMG src=\"" + iconPath + "\">"; 449 mText += "<IMG src=\"" + iconPath + "\">";
436 mText += "</a>\n"; 450 mText += "</a>\n";
437 } 451 }
438 mText.append("</li></ul>"); 452 mText.append("</li></ul>");
439 453
440 addTag("h3",i18n("Attendees")); 454 addTag("h3",i18n("Attendees"));
441 Attendee *a; 455 Attendee *a;
442 mText.append("<ul>"); 456 mText.append("<ul>");
443 for(a=attendees.first();a;a=attendees.next()) { 457 for(a=attendees.first();a;a=attendees.next()) {
444#ifndef KORG_NOKABC 458#ifndef KORG_NOKABC
445#ifdef DESKTOP_VERSION 459#ifdef DESKTOP_VERSION
446 if (a->name().isEmpty()) { 460 if (a->name().isEmpty()) {
447 addressList = add_book->findByEmail(a->email()); 461 addressList = add_book->findByEmail(a->email());
448 KABC::Addressee o = addressList.first(); 462 KABC::Addressee o = addressList.first();
449 if (!o.isEmpty() && addressList.size()<2) { 463 if (!o.isEmpty() && addressList.size()<2) {
450 mText += "<a href=\"uid:" + o.uid() + "\">"; 464 mText += "<a href=\"uid:" + o.uid() + "\">";
451 mText += o.formattedName(); 465 mText += o.formattedName();
452 mText += "</a>\n"; 466 mText += "</a>\n";
453 } else { 467 } else {
454 mText += "<li>"; 468 mText += "<li>";
455 mText.append(a->email()); 469 mText.append(a->email());
456 mText += "\n"; 470 mText += "\n";
457 } 471 }
458 } else { 472 } else {
459 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 473 mText += "<li><a href=\"uid:" + a->uid() + "\">";
460 if (!a->name().isEmpty()) mText += a->name(); 474 if (!a->name().isEmpty()) mText += a->name();
461 else mText += a->email(); 475 else mText += a->email();
462 mText += "</a>\n"; 476 mText += "</a>\n";
463 } 477 }
464#else //DESKTOP_VERSION 478#else //DESKTOP_VERSION
465 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 479 mText += "<li><a href=\"uid:" + a->uid() + "\">";
466 if (!a->name().isEmpty()) mText += a->name(); 480 if (!a->name().isEmpty()) mText += a->name();
467 else mText += a->email(); 481 else mText += a->email();
468 mText += "</a>\n"; 482 mText += "</a>\n";
469#endif //DESKTOP_VERSION 483#endif //DESKTOP_VERSION
470#else 484#else
471 //qDebug("nokabc "); 485 //qDebug("nokabc ");
472 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 486 mText += "<li><a href=\"uid:" + a->uid() + "\">";
473 if (!a->name().isEmpty()) mText += a->name(); 487 if (!a->name().isEmpty()) mText += a->name();
474 else mText += a->email(); 488 else mText += a->email();
475 mText += "</a>\n"; 489 mText += "</a>\n";
476#endif 490#endif
477 491
478 492
479 if (!a->email().isEmpty()) { 493 if (!a->email().isEmpty()) {
480 if (iconPath) { 494 if (iconPath) {
481 mText += "<a href=\"mailto:" + a->name() +" <" + a->email() + ">:" + mMailSubject + "\">"; 495 mText += "<a href=\"mailto:" + a->name() +" <" + a->email() + ">:" + mMailSubject + "\">";
482 mText += "<IMG src=\"" + iconPath + "\">"; 496 mText += "<IMG src=\"" + iconPath + "\">";
483 mText += "</a>\n"; 497 mText += "</a>\n";
484 } 498 }
485 } 499 }
486 if (a->status() != Attendee::NeedsAction ) 500 if (a->status() != Attendee::NeedsAction )
487 mText +="[" + a->statusStr() + "] "; 501 mText +="[" + a->statusStr() + "] ";
488 if (a->role() == Attendee::Chair ) 502 if (a->role() == Attendee::Chair )
489 mText +="(" + a->roleStr().left(1) + ".)"; 503 mText +="(" + a->roleStr().left(1) + ".)";
490 } 504 }
491 mText.append("</li></ul>"); 505 mText.append("</li></ul>");
492 } 506 }
493 507
494} 508}
495void KOEventViewer::appendJournal(Journal *jour, int mode ) 509void KOEventViewer::appendJournal(Journal *jour, int mode )
496{ 510{
497 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 511 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
498 if (mode == 0 ) { 512 if (mode == 0 ) {
499 addTag("h2",i18n("Journal from: ")); 513 addTag("h2",i18n("Journal from: "));
500 } 514 }
501 else { 515 else {
502 if ( mode == 1 ) { 516 if ( mode == 1 ) {
503 addTag("h2",i18n( "Local: " ) +i18n("Journal from: ")); 517 addTag("h2",i18n( "Local: " ) +i18n("Journal from: "));
504 } else { 518 } else {
505 addTag("h2",i18n( "Remote: " ) +i18n("Journal from: ")); 519 addTag("h2",i18n( "Remote: " ) +i18n("Journal from: "));
506 } 520 }
507 } 521 }
508 topLevelWidget()->setCaption("Journal Viewer"); 522 topLevelWidget()->setCaption("Journal Viewer");
509 mText.append(i18n("<h3> %1 </h3> ").arg(jour->dtStartDateStr(KOPrefs::instance()->mShortDateInViewer))); 523 mText.append(i18n("<h3> %1 </h3> ").arg(jour->dtStartDateStr(KOPrefs::instance()->mShortDateInViewer)));
510 addTag("b",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(jour->lastModified(),shortDate ) ); 524 addTag("b",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(jour->lastModified(),shortDate ) );
511 if (!jour->description().isEmpty()) { 525 if (!jour->description().isEmpty()) {
512 addTag("p",jour->description()); 526 addTag("p",jour->description());
513 } 527 }
514 setText(mText); 528 setText(mText);
515} 529}
516 530
517void KOEventViewer::formatReadOnly(Incidence *event) 531void KOEventViewer::formatReadOnly(Incidence *event)
518{ 532{
519 if (event->isReadOnly()) { 533 if (event->isReadOnly()) {
520 addTag("p","<em>(" + i18n("read-only") + ")</em>"); 534 addTag("p","<em>(" + i18n("read-only") + ")</em>");
521 } 535 }
522} 536}
523void KOEventViewer::setSyncMode( bool b ) 537void KOEventViewer::setSyncMode( bool b )
524{ 538{
525 mSyncMode = b; 539 mSyncMode = b;
526} 540}
527 541
528 542
529void KOEventViewer::setTodo(Todo *event, bool clearV ) 543void KOEventViewer::setTodo(Todo *event, bool clearV )
530{ 544{
531 if ( clearV ) 545 if ( clearV )
532 clearEvents(); 546 clearEvents();
533 if ( mSyncMode ) { 547 if ( mSyncMode ) {
534 if ( clearV ) 548 if ( clearV )
535 appendTodo(event,1 ); 549 appendTodo(event,1 );
536 else 550 else
537 appendTodo(event,2); 551 appendTodo(event,2);
538 } else 552 } else
539 appendTodo(event); 553 appendTodo(event);
540} 554}
541void KOEventViewer::setJournal(Journal *event, bool clearV ) 555void KOEventViewer::setJournal(Journal *event, bool clearV )
542{ 556{
543 if ( clearV ) 557 if ( clearV )
544 clearEvents(); 558 clearEvents();
545 if ( mSyncMode ) { 559 if ( mSyncMode ) {
546 if ( clearV ) 560 if ( clearV )
547 appendJournal(event, 1); 561 appendJournal(event, 1);
548 else 562 else
549 appendJournal(event, 2); 563 appendJournal(event, 2);
550 } else 564 } else
551 appendJournal(event); 565 appendJournal(event);
552} 566}
553 567
554void KOEventViewer::setEvent(Event *event) 568void KOEventViewer::setEvent(Event *event)
555{ 569{
556 clearEvents(); 570 clearEvents();
557 if ( mSyncMode ) 571 if ( mSyncMode )
558 appendEvent(event, 1); 572 appendEvent(event, 1);
559 else 573 else
560 appendEvent(event); 574 appendEvent(event);
561} 575}
562 576
563void KOEventViewer::addEvent(Event *event) 577void KOEventViewer::addEvent(Event *event)
564{ 578{
565 if ( mSyncMode ) 579 if ( mSyncMode )
566 appendEvent(event, 2); 580 appendEvent(event, 2);
567 else 581 else
568 appendEvent(event); 582 appendEvent(event);
569} 583}
570 584
571void KOEventViewer::clearEvents(bool now) 585void KOEventViewer::clearEvents(bool now)
572{ 586{
573 mText = ""; 587 mText = "";
574 if (now) setText(mText); 588 if (now) setText(mText);
575} 589}
576 590
577void KOEventViewer::addText(QString text) 591void KOEventViewer::addText(QString text)
578{ 592{
579 mText.append(text); 593 mText.append(text);
580 setText(mText); 594 setText(mText);
581} 595}
diff --git a/korganizer/koeventviewerdialog.cpp b/korganizer/koeventviewerdialog.cpp
index 772fd95..3979ed2 100644
--- a/korganizer/koeventviewerdialog.cpp
+++ b/korganizer/koeventviewerdialog.cpp
@@ -1,256 +1,259 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18*/ 18*/
19 19
20#include <klocale.h> 20#include <klocale.h>
21 21
22#include <libkcal/event.h> 22#include <libkcal/event.h>
23#include <qpushbutton.h> 23#include <qpushbutton.h>
24 24
25#include "koeventviewer.h" 25#include "koeventviewer.h"
26#include "koprefs.h" 26#include "koprefs.h"
27#include <libkcal/todo.h> 27#include <libkcal/todo.h>
28#include "qapp.h" 28#include "qapp.h"
29 29
30#include "koeventviewerdialog.h" 30#include "koeventviewerdialog.h"
31extern int globalFlagBlockAgenda; 31extern int globalFlagBlockAgenda;
32 32
33KOEventViewerDialog::KOEventViewerDialog(QWidget *parent,const char *name) 33KOEventViewerDialog::KOEventViewerDialog(QWidget *parent,const char *name)
34 : KDialogBase(parent,name, 34 : KDialogBase(parent,name,
35#ifndef DESKTOP_VERSION 35#ifndef DESKTOP_VERSION
36 true , 36 true ,
37#else 37#else
38 false, 38 false,
39#endif 39#endif
40 i18n("Event Viewer"),Ok|User1|Close,Close, false, i18n("Agenda")) 40 i18n("Event Viewer"),Ok|User1|Close,Close, false, i18n("Agenda"))
41{ 41{
42 42
43 mEventViewer = new KOEventViewer(this); 43 mEventViewer = new KOEventViewer(this);
44 mEventViewer->setFont( KOPrefs::instance()->mEventViewFont ); 44 mEventViewer->setFont( KOPrefs::instance()->mEventViewFont );
45 setMainWidget(mEventViewer); 45 setMainWidget(mEventViewer);
46 setButtonText(Ok, i18n("Edit") ); 46 setButtonText(Ok, i18n("Edit") );
47 47
48 QObject::connect(findButton( Ok ),SIGNAL(clicked()), 48 QObject::connect(findButton( Ok ),SIGNAL(clicked()),
49 SLOT(editIncidence())); 49 SLOT(editIncidence()));
50 QObject::connect(this,SIGNAL(user1Clicked()), 50 QObject::connect(this,SIGNAL(user1Clicked()),
51 SLOT(showIncidence())); 51 SLOT(showIncidence()));
52 mIncidence = 0; 52 mIncidence = 0;
53 // TODO: Set a sensible size (based on the content?). 53 // TODO: Set a sensible size (based on the content?).
54 //showMaximized(); 54 //showMaximized();
55 //qDebug("++++++++++++KOEventViewerDialog() "); 55 //qDebug("++++++++++++KOEventViewerDialog() ");
56 // if ( KOPrefs::instance()->mCompactDialogs ) { 56 // if ( KOPrefs::instance()->mCompactDialogs ) {
57// setFixedSize( 240,284 ); 57// setFixedSize( 240,284 );
58// move( 0, 15 ); 58// move( 0, 15 );
59// } else { 59// } else {
60// setMinimumSize(300,200); 60// setMinimumSize(300,200);
61// resize(320,300); 61// resize(320,300);
62// } 62// }
63 mSyncMode = false; 63 mSyncMode = false;
64 mSyncResult = 0; 64 mSyncResult = 0;
65 65
66} 66}
67 67
68KOEventViewerDialog::~KOEventViewerDialog() 68KOEventViewerDialog::~KOEventViewerDialog()
69{ 69{
70 //qDebug("-------~KOEventViewerDialog() "); 70 //qDebug("-------~KOEventViewerDialog() ");
71} 71}
72void KOEventViewerDialog::showMe() 72void KOEventViewerDialog::showMe()
73{ 73{
74 74
75#ifdef DESKTOP_VERSION 75#ifdef DESKTOP_VERSION
76 show(); 76 show();
77#else 77#else
78 showMaximized(); 78 showMaximized();
79#endif 79#endif
80 setFocus(); 80 setFocus();
81 setActiveWindow(); 81 setActiveWindow();
82 82
83} 83}
84void KOEventViewerDialog::setSyncMode( bool b ) 84void KOEventViewerDialog::setSyncMode( bool b )
85{ 85{
86 mSyncMode = b; 86 mSyncMode = b;
87 //qDebug("KOEventViewerDialog::setSyncMode %d ",mSyncMode ); 87 //qDebug("KOEventViewerDialog::setSyncMode %d ",mSyncMode );
88 if ( mSyncMode ) { 88 if ( mSyncMode ) {
89 findButton( Close )->setText( i18n("Cancel Sync")); 89 findButton( Close )->setText( i18n("Cancel Sync"));
90 findButton( Ok )->setText( i18n("Remote")); 90 findButton( Ok )->setText( i18n("Remote"));
91 findButton( User1 )->setText( i18n("Local")); 91 findButton( User1 )->setText( i18n("Local"));
92 } else { 92 } else {
93 findButton( Close )->setText( i18n("Close")); 93 findButton( Close )->setText( i18n("Close"));
94 findButton( Ok )->setText( i18n("Edit")); 94 findButton( Ok )->setText( i18n("Edit"));
95 findButton( User1 )->setText( i18n("Agenda")); 95 findButton( User1 )->setText( i18n("Agenda"));
96 } 96 }
97 mEventViewer->setSyncMode( b ); 97 mEventViewer->setSyncMode( b );
98} 98}
99void KOEventViewerDialog::setColorMode( int m ) 99void KOEventViewerDialog::setColorMode( int m )
100{ 100{
101 mEventViewer->setColorMode( m ); 101 mEventViewer->setColorMode( m );
102} 102}
103int KOEventViewerDialog::executeS( bool local ) 103int KOEventViewerDialog::executeS( bool local )
104{ 104{
105 mSyncResult = 3; 105 mSyncResult = 3;
106 if ( local ) 106 if ( local )
107 findButton( User1 )->setFocus(); 107 findButton( User1 )->setFocus();
108 else 108 else
109 findButton( Ok )->setFocus(); 109 findButton( Ok )->setFocus();
110 exec(); 110 exec();
111 return mSyncResult; 111 return mSyncResult;
112} 112}
113 113
114void KOEventViewerDialog::updateConfig() 114void KOEventViewerDialog::updateConfig()
115{ 115{
116 mEventViewer->setFont( KOPrefs::instance()->mEventViewFont ); 116 mEventViewer->setFont( KOPrefs::instance()->mEventViewFont );
117 117
118} 118}
119void KOEventViewerDialog::setEvent(Event *event) 119void KOEventViewerDialog::setEvent(Event *event)
120{ 120{
121 mEventViewer->setEvent(event); 121 mEventViewer->setEvent(event);
122 mIncidence = event; 122 mIncidence = event;
123 findButton( Close )->setFocus(); 123 findButton( Close )->setFocus();
124 if ( !mSyncMode ) {
125 findButton( User1 )->setText( i18n("Agenda"));
126 }
124} 127}
125void KOEventViewerDialog::setIncidence(Incidence *in ) 128void KOEventViewerDialog::setIncidence(Incidence *in )
126{ 129{
127 if ( in->type() == "Event" ) 130 if ( in->type() == "Event" )
128 setEvent( (Event*) in ); 131 setEvent( (Event*) in );
129 else if ( in->type() =="Todo" ) 132 else if ( in->type() =="Todo" )
130 setTodo( (Todo*) in ); 133 setTodo( (Todo*) in );
131 else if ( in->type() =="Journal" ) 134 else if ( in->type() =="Journal" )
132 setJournal( (Journal*) in ); 135 setJournal( (Journal*) in );
133} 136}
134void KOEventViewerDialog::addIncidence(Incidence *in) 137void KOEventViewerDialog::addIncidence(Incidence *in)
135{ 138{
136 if ( in->type() == "Event" ) 139 if ( in->type() == "Event" )
137 addEvent( (Event*) in ); 140 addEvent( (Event*) in );
138 else if ( in->type() =="Todo" ) 141 else if ( in->type() =="Todo" )
139 mEventViewer->setTodo( (Todo*) in, false ); 142 mEventViewer->setTodo( (Todo*) in, false );
140 else if ( in->type() =="Journal" ) 143 else if ( in->type() =="Journal" )
141 mEventViewer->setJournal( (Journal*) in, false ); 144 mEventViewer->setJournal( (Journal*) in, false );
142 if ( mSyncMode ) { 145 if ( mSyncMode ) {
143 findButton( User1 )->setFocus(); 146 findButton( User1 )->setFocus();
144 setCaption(i18n("Conflict! Please choose entry")); 147 setCaption(i18n("Conflict! Please choose entry"));
145 } 148 }
146} 149}
147 150
148void KOEventViewerDialog::addEvent(Event *event) 151void KOEventViewerDialog::addEvent(Event *event)
149{ 152{
150 mEventViewer->addEvent(event); 153 mEventViewer->addEvent(event);
151 mIncidence = event; 154 mIncidence = event;
152 findButton( Close )->setFocus(); 155 findButton( Close )->setFocus();
153 if ( !mSyncMode ) { 156 if ( !mSyncMode ) {
154 findButton( User1 )->setText( i18n("Agenda")); 157 findButton( User1 )->setText( i18n("Agenda"));
155 } 158 }
156} 159}
157 160
158void KOEventViewerDialog::setTodo(Todo *event) 161void KOEventViewerDialog::setTodo(Todo *event)
159{ 162{
160 mEventViewer->setTodo(event); 163 mEventViewer->setTodo(event);
161 mIncidence = (Incidence*)event; 164 mIncidence = (Incidence*)event;
162 findButton( Close )->setFocus(); 165 findButton( Close )->setFocus();
163 if ( !mSyncMode ) { 166 if ( !mSyncMode ) {
164 findButton( User1 )->setText( i18n("Set complete")); 167 findButton( User1 )->setText( i18n("Set complete"));
165 } 168 }
166} 169}
167void KOEventViewerDialog::setJournal(Journal *j) 170void KOEventViewerDialog::setJournal(Journal *j)
168{ 171{
169 mEventViewer->setJournal(j); 172 mEventViewer->setJournal(j);
170 mIncidence = (Incidence*)j; 173 mIncidence = (Incidence*)j;
171 findButton( Close )->setFocus(); 174 findButton( Close )->setFocus();
172 if ( !mSyncMode ) { 175 if ( !mSyncMode ) {
173 findButton( User1 )->setText( i18n("Agenda")); 176 findButton( User1 )->setText( i18n("Agenda"));
174 } 177 }
175} 178}
176 179
177void KOEventViewerDialog::addText(QString text) 180void KOEventViewerDialog::addText(QString text)
178{ 181{
179 mEventViewer->addText(text); 182 mEventViewer->addText(text);
180 findButton( Close )->setFocus(); 183 findButton( Close )->setFocus();
181} 184}
182void KOEventViewerDialog::editIncidence() 185void KOEventViewerDialog::editIncidence()
183{ 186{
184 if ( mSyncMode ) { 187 if ( mSyncMode ) {
185 mSyncResult = 2; 188 mSyncResult = 2;
186 accept(); 189 accept();
187 return; 190 return;
188 } 191 }
189 if ( mIncidence ){ 192 if ( mIncidence ){
190#ifndef DESKTOP_VERSION 193#ifndef DESKTOP_VERSION
191 hide(); 194 hide();
192#endif 195#endif
193 emit editIncidence( mIncidence ); 196 emit editIncidence( mIncidence );
194 } 197 }
195} 198}
196void KOEventViewerDialog::showIncidence() 199void KOEventViewerDialog::showIncidence()
197{ 200{
198 201
199 if ( mSyncMode ) { 202 if ( mSyncMode ) {
200 mSyncResult = 1; 203 mSyncResult = 1;
201 accept(); 204 accept();
202 return; 205 return;
203 } 206 }
204 207
205 if ( mIncidence ){ 208 if ( mIncidence ){
206#ifndef DESKTOP_VERSION 209#ifndef DESKTOP_VERSION
207 hide(); 210 hide();
208#endif 211#endif
209 QDate date; 212 QDate date;
210 if ( mIncidence->type() == "Todo" ) { 213 if ( mIncidence->type() == "Todo" ) {
211 /* 214 /*
212 if ( ((Todo*)mIncidence)->hasDueDate() ) 215 if ( ((Todo*)mIncidence)->hasDueDate() )
213 date = ((Todo*)mIncidence)->dtDue().date(); 216 date = ((Todo*)mIncidence)->dtDue().date();
214 else { 217 else {
215 globalFlagBlockAgenda = 2; 218 globalFlagBlockAgenda = 2;
216 emit showAgendaView( false ); 219 emit showAgendaView( false );
217 return; 220 return;
218 } 221 }
219 */ 222 */
220 ((Todo*)mIncidence)->setCompleted( true ); 223 ((Todo*)mIncidence)->setCompleted( true );
221 hide(); 224 hide();
222 emit todoCompleted(((Todo*)mIncidence)); 225 emit todoCompleted(((Todo*)mIncidence));
223 return; 226 return;
224 227
225 } else 228 } else
226 date = mIncidence->dtStart().date(); 229 date = mIncidence->dtStart().date();
227 globalFlagBlockAgenda = 1; 230 globalFlagBlockAgenda = 1;
228 emit showAgendaView( false ); 231 emit showAgendaView( false );
229 globalFlagBlockAgenda = 2; 232 globalFlagBlockAgenda = 2;
230 emit jumpToTime( date ); 233 emit jumpToTime( date );
231 } 234 }
232} 235}
233void KOEventViewerDialog::keyPressEvent ( QKeyEvent * e ) 236void KOEventViewerDialog::keyPressEvent ( QKeyEvent * e )
234{ 237{
235 switch ( e->key() ) { 238 switch ( e->key() ) {
236 239
237 case Qt::Key_A : 240 case Qt::Key_A :
238 case Qt::Key_L : 241 case Qt::Key_L :
239 showIncidence(); 242 showIncidence();
240 break; 243 break;
241 case Qt::Key_E : 244 case Qt::Key_E :
242 case Qt::Key_R : 245 case Qt::Key_R :
243 editIncidence(); 246 editIncidence();
244 break; 247 break;
245 case Qt::Key_C: 248 case Qt::Key_C:
246 case Qt::Key_Escape: 249 case Qt::Key_Escape:
247 close(); 250 close();
248 break; 251 break;
249 case Qt::Key_I: 252 case Qt::Key_I:
250 accept(); 253 accept();
251 break; 254 break;
252 default: 255 default:
253 break; 256 break;
254 } 257 }
255 258
256} 259}