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,713 +1,714 @@
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.
394Now OM/Pi and KA/Pi are using the date format defined in KO/Pi 395Now OM/Pi and KA/Pi are using the date format defined in KO/Pi
395for displaying dates. 396for displaying dates.
396 397
397 398
398********** VERSION 1.9.5 ************ 399********** VERSION 1.9.5 ************
399 400
400There is still no Addressbook syncing! 401There is still no Addressbook syncing!
401 402
402New in 1.9.5: 403New in 1.9.5:
403 404
404Many bugfixes. 405Many bugfixes.
405Better searching in KA/Pi. 406Better searching in KA/Pi.
406You can configure in KA/Pi if you want to search only after 407You can configure in KA/Pi if you want to search only after
407<return> key pressed. 408<return> key pressed.
408 409
409Better mail downloading in OM/Pi. 410Better mail downloading in OM/Pi.
410 411
411First experimental alpha version of sync of KO/Pi with mobile phones. 412First experimental alpha version of sync of KO/Pi with mobile phones.
412See gammu documentation for supported phones. 413See gammu documentation for supported phones.
413You need to install the package kammu_1.9.5_arm.ipk for sync of KO/Pi with mobile phones. kammu_1.9.5_arm.ipk needs libbluetooth and libsdp. 414You need to install the package kammu_1.9.5_arm.ipk for sync of KO/Pi with mobile phones. kammu_1.9.5_arm.ipk needs libbluetooth and libsdp.
414Quick hint how to use: 415Quick hint how to use:
415NOTE: MOBILE PHONE SYNC IS EXPERIMENTAL! 416NOTE: MOBILE PHONE SYNC IS EXPERIMENTAL!
416Install kammu_1.9.5_arm.ipk , libbluetooth and libsdp. 417Install kammu_1.9.5_arm.ipk , libbluetooth and libsdp.
417Create syncprofile - mobile device 418Create syncprofile - mobile device
418Remove entry for model. (Leave empty ). 419Remove entry for model. (Leave empty ).
419Enable infrared on Zaurus and your Phone. 420Enable infrared on Zaurus and your Phone.
420Sync. 421Sync.
421To get a more detailed log, start kopi from konsole. 422To get a more detailed log, start kopi from konsole.
422 423
423********** VERSION 1.9.4 ************ 424********** VERSION 1.9.4 ************
424 425
425This is the version 1.9.4 of KDE-Pim/Pi for the Zaurus. 426This is the version 1.9.4 of KDE-Pim/Pi for the Zaurus.
426 427
427WARNING: 428WARNING:
428PLEASE BACKUP ALL YOUR DATA! 429PLEASE BACKUP ALL YOUR DATA!
429We have changed a lot and maybe there are some unknown problems. 430We have changed a lot and maybe there are some unknown problems.
430 431
431SYNC HANDLING HAS CHANGED! 432SYNC HANDLING HAS CHANGED!
432Such that, if you sync now with an already synded device, you will duplicated entries after the first sync. 433Such that, if you sync now with an already synded device, you will duplicated entries after the first sync.
433(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks). 434(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks).
434 435
435You need the kmicrokdelibs_1.9.4_arm.ipk as a base for the other programs. 436You need the kmicrokdelibs_1.9.4_arm.ipk as a base for the other programs.
436If you get the error: "Install only possible in main memory", just try it again to install it on SD card. That worked for me. And it was reported that rebooting Qtopia did help in this case as well. 437If you get the error: "Install only possible in main memory", just try it again to install it on SD card. That worked for me. And it was reported that rebooting Qtopia did help in this case as well.
437 438
438As programs are available: 439As programs are available:
439KO/Pi (korganizer ipk) - a calendar program. 440KO/Pi (korganizer ipk) - a calendar program.
440KA/Pi (kaddressbook ipk ) - an addressbook 441KA/Pi (kaddressbook ipk ) - an addressbook
441OM/Pi (kopiemail ipk ) an email program with pop/smtp and IMAP support. 442OM/Pi (kopiemail ipk ) an email program with pop/smtp and IMAP support.
442 443
443An alarm notification program ( korganizer-alarm ipk ) for KO/Pi that notifies you about alarms, even if the Zaurus is in suspend mode. 444An alarm notification program ( korganizer-alarm ipk ) for KO/Pi that notifies you about alarms, even if the Zaurus is in suspend mode.
444(If you do not see an icon in the taskbar after installing korganizer-alarm, please restart Qtopia) 445(If you do not see an icon in the taskbar after installing korganizer-alarm, please restart Qtopia)
445 446
446All the applications are installed in a "Pim" TAB. 447All the applications are installed in a "Pim" TAB.
447If this TAB is new on your system, you can get an icon in this TAB by installing pim_TAB_icon_1.9.4_arm.ipk 448If this TAB is new on your system, you can get an icon in this TAB by installing pim_TAB_icon_1.9.4_arm.ipk
448 449
449All the application are integrated. 450All the application are integrated.
450Such that you can choose in KO/Pi the attendees of a meeting from the addresses in KA/Pi. When you click in KA/Pi on the email address, OM/Pi is started to write the mail. 451Such that you can choose in KO/Pi the attendees of a meeting from the addresses in KA/Pi. When you click in KA/Pi on the email address, OM/Pi is started to write the mail.
451 452
452HINT: 453HINT:
453If you install KPhone/Pi 0.9.7, it will be called, if you click in KA/Pi on a phone number. 454If you install KPhone/Pi 0.9.7, it will be called, if you click in KA/Pi on a phone number.
454 455
455What's new? 456What's new?
456 457
457SYNC HANDLING HAS CHANGED! 458SYNC HANDLING HAS CHANGED!
458Such that, if you sync now with an already synded device, you will duplicated entries after the first sync. 459Such that, if you sync now with an already synded device, you will duplicated entries after the first sync.
459(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks). 460(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks).
460 461
461New in OM/Pi: 462New in OM/Pi:
462When copying(i.e. downloading mails) , you can specify, that only mails of a given size should be downloaded. Added mail copy possibility for selected mails. 463When copying(i.e. downloading mails) , you can specify, that only mails of a given size should be downloaded. Added mail copy possibility for selected mails.
463 464
464New in KO/Pi: 465New in KO/Pi:
465French is now available for KO/Pi. 466French is now available for KO/Pi.
466Choose menu:Actions - Configure:TAB locale 467Choose menu:Actions - Configure:TAB locale
467Syncing has changed. 468Syncing has changed.
468Phone sync available soon. 469Phone sync available soon.
469Not much changes, I cannot remember them ... 470Not much changes, I cannot remember them ...
470 471
471New in KA/Pi: 472New in KA/Pi:
472Beaming possible. 473Beaming possible.
473Sharp DTM readonly access possible( create a new DTM resource ); 474Sharp DTM readonly access possible( create a new DTM resource );
474Better searching possible. 475Better searching possible.
475Search is performed only after pressing the return key. 476Search is performed only after pressing the return key.
476Use wildcard * to specify parts of a name. 477Use wildcard * to specify parts of a name.
477 478
478Better name/email selection dialog (called from KO/Pi or OM/Pi). In this dialog, now searching is possible. Like in KA/Pi, use return key and wildcard * . 479Better name/email selection dialog (called from KO/Pi or OM/Pi). In this dialog, now searching is possible. Like in KA/Pi, use return key and wildcard * .
479 480
480A big improvement is the new management of the contact access. 481A big improvement is the new management of the contact access.
481In version 1.9.3, every application was using their own addressbook access data. 482In version 1.9.3, every application was using their own addressbook access data.
482That means, the addressbook was loaded up to three times in the memory, when accessed by KA/Pi, KO/Pi and OM/Pi. 483That means, the addressbook was loaded up to three times in the memory, when accessed by KA/Pi, KO/Pi and OM/Pi.
483That was wasting of memory, if you had several hundreds of contacts. 484That was wasting of memory, if you had several hundreds of contacts.
484 485
485Now only KA/Pi accesses the addressbook. 486Now only KA/Pi accesses the addressbook.
486If KO/Pi or OM/Pi want to get some name/email data, they request KA/Pi to open the name/email selection dialog and send it back to them. 487If KO/Pi or OM/Pi want to get some name/email data, they request KA/Pi to open the name/email selection dialog and send it back to them.
487If you click on an attendee in a meeting, its contact data is displayed in KA/Pi directly. 488If you click on an attendee in a meeting, its contact data is displayed in KA/Pi directly.
488That means, if KO/Pi or OM/Pi want to access contact data, KA/Pi is started first. 489That means, if KO/Pi or OM/Pi want to access contact data, KA/Pi is started first.
489 490
490New in the KO/Pi alarm applet: 491New in the KO/Pi alarm applet:
491Configure your own timer popup menu! 492Configure your own timer popup menu!
492(Text and minutes for timer countdown) 493(Text and minutes for timer countdown)
493Just edit the file 494Just edit the file
494(yourhomedir)/.kopialarmtimerrc 495(yourhomedir)/.kopialarmtimerrc
495and start/stop a timer to get a new menu with the data of this file. 496and start/stop a timer to get a new menu with the data of this file.
496 497
497********** VERSION 1.9.3 ************ 498********** VERSION 1.9.3 ************
4981) 4991)
499Now KO/Pi on Windows imports directly the calendar data of 500Now KO/Pi on Windows imports directly the calendar data of
500an installed Outlook. Should work with OL version >= 2000. 501an installed Outlook. Should work with OL version >= 2000.
501 502
502********** VERSION 1.9.2 ************ 503********** VERSION 1.9.2 ************
5031) 5041)
504KDE-Pim/Pi has got a new member: 505KDE-Pim/Pi has got a new member:
505KmicroMail (KM/Pi) is a mail program, 506KmicroMail (KM/Pi) is a mail program,
506which can handle IMAP and POP mail access. 507which can handle IMAP and POP mail access.
507It is based on Opie-Mail v3. 508It is based on Opie-Mail v3.
508All dependencies to the Opie libraries ar removed, 509All dependencies to the Opie libraries ar removed,
509such that no additional Opie lib is needed. 510such that no additional Opie lib is needed.
510It is already integrated in KO/Pi and KA/Pi. 511It is already integrated in KO/Pi and KA/Pi.
511It it now available for the Zaurus,probably it 512It it now available for the Zaurus,probably it
512will be available for other platforms later. 513will be available for other platforms later.
513Hint: 514Hint:
514Create your own contact (name + email) 515Create your own contact (name + email)
515in KA/Pi, select this contact and choose menu: 516in KA/Pi, select this contact and choose menu:
516Settings - Set Who Am I. 517Settings - Set Who Am I.
517Now the settings of this contact are used as 518Now the settings of this contact are used as
518the sender data in KM/Pi. 519the sender data in KM/Pi.
5192) 5202)
520KDE-Pim/Pi is split up in five different 521KDE-Pim/Pi is split up in five different
521packages now precompiled for Sharp Zaurus: 522packages now precompiled for Sharp Zaurus:
522--kmicrokdelibs_1.9.2_arm.ipk 523--kmicrokdelibs_1.9.2_arm.ipk
523The libs are needed for any 524The libs are needed for any
524of the following programs: 525of the following programs:
525--kaddressbook_1.9.2_arm.ipk 526--kaddressbook_1.9.2_arm.ipk
526--kmicromail_1.9.2_arm.ipk 527--kmicromail_1.9.2_arm.ipk
527--korganizer_1.9.2_arm.ipk 528--korganizer_1.9.2_arm.ipk
528Independ from that, there is the alarm applet 529Independ from that, there is the alarm applet
529available for KO/Pi, which also offers 530available for KO/Pi, which also offers
530quick access for a new mail or 531quick access for a new mail or
531showing the addressbook.: 532showing the addressbook.:
532--korganizer-alarm_1.9.2_arm.ipk 533--korganizer-alarm_1.9.2_arm.ipk
533Independend means, that the alarm applet 534Independend means, that the alarm applet
534does not need any of the libs or programs above to run. 535does not need any of the libs or programs above to run.
535But it would be quite useless without these programs. 536But it would be quite useless without these programs.
536NOTE: 537NOTE:
537If you get a 538If you get a
538"This application depends on other programs" 539"This application depends on other programs"
539during installation of 540during installation of
540--kmicrokdelibs_1.9.2_arm.ipk 541--kmicrokdelibs_1.9.2_arm.ipk
541you probably do not have to care about that. 542you probably do not have to care about that.
542kmicrokdelibs_1.9.2 will come with some 543kmicrokdelibs_1.9.2 will come with some
543resource plugins, which needs additional libraries. 544resource plugins, which needs additional libraries.
544(E.g. libopie1, if you want to use the 545(E.g. libopie1, if you want to use the
545opie resource connector in KA/Pi). 546opie resource connector in KA/Pi).
546If you do not have this libraries installed, 547If you do not have this libraries installed,
547you simply cannot use the resource. 548you simply cannot use the resource.
548To make it clear: 549To make it clear:
549If the libraries are missing, the applications 550If the libraries are missing, the applications
550using kmicrokdelibs will start, 551using kmicrokdelibs will start,
551because the resources are plugins. 552because the resources are plugins.
5523) 5533)
553KO/Pi and friends are now installable on SD-Card! 554KO/Pi and friends are now installable on SD-Card!
554It is recommended to install all libs and apps 555It is recommended to install all libs and apps
555on the SD card or all in the internal storage. 556on the SD card or all in the internal storage.
556There may be problems, if this is mixed. 557There may be problems, if this is mixed.
5574) 5584)
558Fixed two bugs in the alarm notification on Windows. 559Fixed two bugs in the alarm notification on Windows.
5595) 5605)
560Great improvement! 561Great improvement!
561KO/Pi uses now the latest version of libical. 562KO/Pi uses now the latest version of libical.
562Libical is the library which actually reads 563Libical is the library which actually reads
563the calendar files and extract the data from it. 564the calendar files and extract the data from it.
564With the old version, there were problems 565With the old version, there were problems
565(crashes or program hangs) when licical did read 566(crashes or program hangs) when licical did read
566files, which were not stored from KO/Pi. 567files, which were not stored from KO/Pi.
567I do not know, if the new libical works perfect, 568I do not know, if the new libical works perfect,
568but actually it works much better than 569but actually it works much better than
569the old version. 570the old version.
570There are no problems with compatibility with 571There are no problems with compatibility with
571old calendar files of KO/Pi, of course! 572old calendar files of KO/Pi, of course!
5726) 5736)
573New in KA/Pi: 574New in KA/Pi:
574Opie addressbook resource connector available! 575Opie addressbook resource connector available!
575You will need libopie1 and the opie addressbook, 576You will need libopie1 and the opie addressbook,
576of course. 577of course.
577With the Opie addressbook resource connector, 578With the Opie addressbook resource connector,
578you can access the Opie addressbook readonly in KA/Pi. 579you can access the Opie addressbook readonly in KA/Pi.
579If you want to edit or import the data into KA/Pi, 580If you want to edit or import the data into KA/Pi,
580do this: 581do this:
581a) Create an Opie resource. 582a) Create an Opie resource.
582 (Menu: Settings-Configure Resources). 583 (Menu: Settings-Configure Resources).
583After configuration and restarting KA/Pi you should see 584After configuration and restarting KA/Pi you should see
584the Opie contacts in KA/Pi. 585the Opie contacts in KA/Pi.
585b) Select some or all Opie contacts. 586b) Select some or all Opie contacts.
586(NOTE: +++++ 587(NOTE: +++++
587To know exactly, what contacts are Opie contacts, 588To know exactly, what contacts are Opie contacts,
588do this: Choose menu: 589do this: Choose menu:
589View-Modify View - TAB Fields. 590View-Modify View - TAB Fields.
590Select in the above list "Resource" and click 591Select in the above list "Resource" and click
591down arrow to add it to the "Selected fields". 592down arrow to add it to the "Selected fields".
592Click OK. 593Click OK.
593Now you have a new column "Resource" in your list, 594Now you have a new column "Resource" in your list,
594where you can see, what an Opie resource is. 595where you can see, what an Opie resource is.
595++++ NOTE end.) 596++++ NOTE end.)
596Ok, we do have now some Opie contacts seleted. 597Ok, we do have now some Opie contacts seleted.
597(Use SHIFT or CTRL key in order to multiple select). 598(Use SHIFT or CTRL key in order to multiple select).
598c) Choose menu: Edit-Copy. 599c) Choose menu: Edit-Copy.
599d) Choose menu: Edit-Paste. 600d) Choose menu: Edit-Paste.
600e) Select the resource, you want to add the contacts to. 601e) Select the resource, you want to add the contacts to.
601Congrats! Now you have read/write access to the copied 602Congrats! Now you have read/write access to the copied
602opie contacts as "real" KA/Pi contacts. 603opie contacts as "real" KA/Pi contacts.
603 604
604 605
605********** VERSION 1.9.1 ************ 606********** VERSION 1.9.1 ************
6061) 6071)
607 +++ IMPORTANT 1 +++ 608 +++ IMPORTANT 1 +++
608 609
609The storing place of the default calendar 610The storing place of the default calendar
610file has changed! 611file has changed!
611The default calendar file was 612The default calendar file was
612Applications/korganizer/mycalendar.ics 613Applications/korganizer/mycalendar.ics
613on Zaurus and 614on Zaurus and
614(yourHomeDir)/korganizer/mycalendar.ics 615(yourHomeDir)/korganizer/mycalendar.ics
615on Windows/Linux desktop. Now it is 616on Windows/Linux desktop. Now it is
616(yourHomeDir)/kdepim/korganizer/mycalendar.ics 617(yourHomeDir)/kdepim/korganizer/mycalendar.ics
617on Zaurus, Windows and Linux. 618on Zaurus, Windows and Linux.
618To load the old file, choose menu 619To load the old file, choose menu
619File-Load calendar backup. 620File-Load calendar backup.
620(It should be loaded automatically 621(It should be loaded automatically
621at startup with a warning message displayed). 622at startup with a warning message displayed).
622The place of the configuration file has changed too. 623The place of the configuration file has changed too.
623If you want to use your old KO/Pi config, 624If you want to use your old KO/Pi config,
624copy it to 625copy it to
625(yourHomeDir)/kdepim/config/korganizerrc 626(yourHomeDir)/kdepim/config/korganizerrc
626Please read VERSION 1.9.0 - topic 3) as well! 627Please read VERSION 1.9.0 - topic 3) as well!
627 628
628 +++ IMPORTANT 2 +++ 629 +++ IMPORTANT 2 +++
629 630
630Because of the new paths, you will need 631Because of the new paths, you will need
631a new version of the KO/Pi alarm applet 632a new version of the KO/Pi alarm applet
632for Zaurus. 633for Zaurus.
633Use version >= 1.9.1 634Use version >= 1.9.1
634 635
6352) 6362)
636Now the QWhat'sThis Icon works for items 637Now the QWhat'sThis Icon works for items
637in the month view as well. 638in the month view as well.
638(See VERSION 1.7.8 Topic 1) ). 639(See VERSION 1.7.8 Topic 1) ).
6393) 6403)
640You can import birtsdays/anniversaries 641You can import birtsdays/anniversaries
641from KA/Pi into KO/Pi. 642from KA/Pi into KO/Pi.
642Choose menu File-Import birthdays. 643Choose menu File-Import birthdays.
643If you import twice, already imported items 644If you import twice, already imported items
644will not be imported again, if they 645will not be imported again, if they
645have not been changed in KO/Pi. 646have not been changed in KO/Pi.
6464) 6474)
647When syncing with sharp DTM, now a progress 648When syncing with sharp DTM, now a progress
648is shown, when the data is written back. 649is shown, when the data is written back.
649If there is much data in KO/Pi and no data 650If there is much data in KO/Pi and no data
650in DTM, that can take a long time. 651in DTM, that can take a long time.
651(But only for the first time ). 652(But only for the first time ).
6525) 6535)
653In the search dialog, you can search 654In the search dialog, you can search
654now for the name/email of an attendee 655now for the name/email of an attendee
655of an event/todo. 656of an event/todo.
656To get more space for displaying 657To get more space for displaying
657search results, the buttons 658search results, the buttons
658for "search" and "close" on the 659for "search" and "close" on the
659bottom are removed in the PDA version. 660bottom are removed in the PDA version.
660You have to click OK in the top right 661You have to click OK in the top right
661corner to do a search. 662corner to do a search.
6626) 6636)
663Now it is possible to disable the displaying 664Now it is possible to disable the displaying
664of todo items in the Allday part of the Agenda. 665of todo items in the Allday part of the Agenda.
665Choose Menu Action-Configure, 666Choose Menu Action-Configure,
666TAB Todo View, checkbox 667TAB Todo View, checkbox
667"Allday Agenda view shows todos" 668"Allday Agenda view shows todos"
6687) 6697)
669If FastLoad is enabled, now the settings and the 670If FastLoad is enabled, now the settings and the
670calendar data are saved, when KO/Pi is closed. 671calendar data are saved, when KO/Pi is closed.
671(If no Fastload is enabled, KO/Pi saves 672(If no Fastload is enabled, KO/Pi saves
672the data as well, of course) 673the data as well, of course)
6738) 6748)
674The Agenda View has a minimize-splitter now, 675The Agenda View has a minimize-splitter now,
675such that the height of the allday part can be 676such that the height of the allday part can be
676changed quickly. 677changed quickly.
677 678
678********** VERSION 1.9.0 ************ 679********** VERSION 1.9.0 ************
6791) 6801)
680KO/Pi is now merged with the new microKDE from KA/Pi. 681KO/Pi is now merged with the new microKDE from KA/Pi.
681KO/Pi accesses now KA/Pi as the addressbook. 682KO/Pi accesses now KA/Pi as the addressbook.
682The other ddressbook-plugins are not working any longer. 683The other ddressbook-plugins are not working any longer.
683(It is planned, that later KA/Pi itself uses these plugins) 684(It is planned, that later KA/Pi itself uses these plugins)
684New versions of KO/Pi are only available 685New versions of KO/Pi are only available
685together with KA/Pi as the KDE-Pim/Pi package. 686together with KA/Pi as the KDE-Pim/Pi package.
6862) 6872)
687If you click on an attendee of a meeting in the 688If you click on an attendee of a meeting in the
688event viewer, a detailed summary of the 689event viewer, a detailed summary of the
689attendee is shown. 690attendee is shown.
6903) 6913)
691The place of the configuration file has changed. 692The place of the configuration file has changed.
692If you want to use your old KO/Pi config, copy 693If you want to use your old KO/Pi config, copy
693Applications/korganizer/config_korganizerrc 694Applications/korganizer/config_korganizerrc
694to 695to
695Applications/korganizer/config/korganizerrc 696Applications/korganizer/config/korganizerrc
696 697
697********** VERSION 1.7.8 ************ 698********** VERSION 1.7.8 ************
6981) 6991)
699Now the QWhat'sThis ist working. 700Now the QWhat'sThis ist working.
700Enable the QWhat'sThis icon in the toolbar. 701Enable the QWhat'sThis icon in the toolbar.
701(You have to restart to reload the changed toolbar config). 702(You have to restart to reload the changed toolbar config).
702Now click on the QWhat'sThis Icon 703Now click on the QWhat'sThis Icon
703in the top right corner of KO/Pi. 704in the top right corner of KO/Pi.
704Then click on an item in the Agenda View: 705Then click on an item in the Agenda View:
705You will get a detailed display of the items content. 706You will get a detailed display of the items content.
7062) 7072)
707Some other very minor changes. 708Some other very minor changes.
708But I have forgotten the details ... 709But I have forgotten the details ...
709For that reason I start this log here: 710For that reason I start this log here:
710To document my changes, when I am doing it. 711To document my changes, when I am doing it.
711 712
712********** VERSION 1.7.7 ************ 713********** VERSION 1.7.7 ************
713Stable Version of KO/Pi 714Stable Version of KO/Pi
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}