summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-01-27 12:14:32 (UTC)
committer zautrix <zautrix>2005-01-27 12:14:32 (UTC)
commitc8b484570a9cf8aacc070f92141c8bcfebbf3a93 (patch) (unidiff)
treeaf81a25ccc142582a60a5ed100dcd44956255b62
parent9ff00e650e32d6f348a2333c9cf21da9c9a137ff (diff)
downloadkdepimpi-c8b484570a9cf8aacc070f92141c8bcfebbf3a93.zip
kdepimpi-c8b484570a9cf8aacc070f92141c8bcfebbf3a93.tar.gz
kdepimpi-c8b484570a9cf8aacc070f92141c8bcfebbf3a93.tar.bz2
birthday fixes
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt3
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt2
-rw-r--r--korganizer/calendarview.cpp11
-rw-r--r--korganizer/kowhatsnextview.cpp13
4 files changed, 24 insertions, 5 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 6c4cb7b..4c00770 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,810 +1,813 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 2.0.0 ************ 3********** VERSION 2.0.0 ************
4 4
5Stable release 2.0.0! 5Stable release 2.0.0!
6 6
7KO/Pi: 7KO/Pi:
8Fixed problem in edit dialog recreation at startup. 8Fixed problem in edit dialog recreation at startup.
9Made "toggle view*" menu items enabled context sensitive. 9Made "toggle view*" menu items enabled context sensitive.
10Changed agenda size menu to items 1-10. 10Changed agenda size menu to items 1-10.
11Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down. 11Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down.
12Usebility enhancements in the KO/Pi menus. 12Usebility enhancements in the KO/Pi menus.
13Birthday import now adds year to summary.
14What's Next view shows age in years for birthday.
15
13OM/Pi: 16OM/Pi:
14Added three info lines to display subject, from and to of selected mails. 17Added three info lines to display subject, from and to of selected mails.
15 18
16********** VERSION 1.9.20 ************ 19********** VERSION 1.9.20 ************
17 20
18KO/Pi: 21KO/Pi:
19Added for the "dislplay one day" agenda mode 22Added for the "dislplay one day" agenda mode
20info in the caption and in the day lables: 23info in the caption and in the day lables:
21Now it is displayed, if the selected day is from "day before yesterday" 24Now it is displayed, if the selected day is from "day before yesterday"
22to "day after tomorrow". 25to "day after tomorrow".
23Made it possible to delete a Todo, which has sub-todos. 26Made it possible to delete a Todo, which has sub-todos.
24Fixed two small problems in the todo view. 27Fixed two small problems in the todo view.
25Added missing German translation for filter edit and print dialog. 28Added missing German translation for filter edit and print dialog.
26Made search dialog closeable by cancel key. 29Made search dialog closeable by cancel key.
27 30
28Made it possible to select in the date picker the (ligt grey ) 31Made it possible to select in the date picker the (ligt grey )
29dates of the prev./next month with the mouse. 32dates of the prev./next month with the mouse.
30 33
31OM/Pi: 34OM/Pi:
32"Delete mail" icon in main window now deletes all selected mails. 35"Delete mail" icon in main window now deletes all selected mails.
33Fixed the problem, that the state flag of imap mails was ignored. 36Fixed the problem, that the state flag of imap mails was ignored.
34Now mails with "FLAG_SEEN" on the imap server get no icon in the list view 37Now mails with "FLAG_SEEN" on the imap server get no icon in the list view
35to indecate that they are already seen. 38to indecate that they are already seen.
36Fixed the problem that the body of some mails was not displayed in the 39Fixed the problem that the body of some mails was not displayed in the
37mail viewer when fetching them from the imap server directly to read them. 40mail viewer when fetching them from the imap server directly to read them.
38Made it (configurable) possible to show the "To:" field in the list view. 41Made it (configurable) possible to show the "To:" field in the list view.
39Added to the mail viewer the option "View Source" to make it possible to see the raw mail data. 42Added to the mail viewer the option "View Source" to make it possible to see the raw mail data.
40Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the 43Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the
41local storage folder (specified in account settings) of the account of the mail. 44local storage folder (specified in account settings) of the account of the mail.
42Removed some memory leaks in OM/Pi. 45Removed some memory leaks in OM/Pi.
43 46
44 47
45********** VERSION 1.9.19 ************ 48********** VERSION 1.9.19 ************
46 49
47Added a lot of missing translations to KA/Pi, 50Added a lot of missing translations to KA/Pi,
48Added some missing translations to KO/Pi and OM/Pi. 51Added some missing translations to KO/Pi and OM/Pi.
49 52
50Fixed some minor problems in KA/Pi + KO/Pi. 53Fixed some minor problems in KA/Pi + KO/Pi.
51 54
52Fixed a crash when closing PwM/Pi. 55Fixed a crash when closing PwM/Pi.
53Added German translation for PwM/Pi. 56Added German translation for PwM/Pi.
54 57
55Made view change and Month View update faster in KO/Pi. 58Made view change and Month View update faster in KO/Pi.
56 59
57 60
58********** VERSION 1.9.18 ************ 61********** VERSION 1.9.18 ************
59 62
60FYI: The VERSION 1.9.17 was a testing release only. 63FYI: The VERSION 1.9.17 was a testing release only.
61Please read the changelog of VERSION 1.9.17 as well. 64Please read the changelog of VERSION 1.9.17 as well.
62 65
63Cleaned up the syncing config dialog. 66Cleaned up the syncing config dialog.
64Added sync config options for date range for events. 67Added sync config options for date range for events.
65Added sync config options for filters on incoming data. 68Added sync config options for filters on incoming data.
66Added sync config options for filters on outgoing data. 69Added sync config options for filters on outgoing data.
67Please read the updated SyncHowTo about the new filter settings. 70Please read the updated SyncHowTo about the new filter settings.
68These filter settings make it now possible to sync with shared 71These filter settings make it now possible to sync with shared
69calendars without writing back private or confidential data 72calendars without writing back private or confidential data
70(via the outgoing filters). 73(via the outgoing filters).
71To sync only with particular parts of a shared calendar, 74To sync only with particular parts of a shared calendar,
72the incoming filter settings can be used. 75the incoming filter settings can be used.
73An example can be found in the SyncHowTo. 76An example can be found in the SyncHowTo.
74Same for shared addressbooks. 77Same for shared addressbooks.
75 78
76Added a setting for the global kdepim data storage. 79Added a setting for the global kdepim data storage.
77Usually the data is stored in (yourhomedir/kdepim). 80Usually the data is stored in (yourhomedir/kdepim).
78Now you can set in the Global config dialog TAB, subTAB "Data storage path" 81Now you can set in the Global config dialog TAB, subTAB "Data storage path"
79a directory where all the kdepim data is stored. 82a directory where all the kdepim data is stored.
80That makes it easy to save all kdepim data on a SD card on the Z, for example. 83That makes it easy to save all kdepim data on a SD card on the Z, for example.
81 84
82KO/Pi: 85KO/Pi:
83The timeedit input has a pulldown list for times. 86The timeedit input has a pulldown list for times.
84If opened, this pulldown list should now has the right time highlighted. 87If opened, this pulldown list should now has the right time highlighted.
85Added the possibility to exclude events/todos/journals in a filter. 88Added the possibility to exclude events/todos/journals in a filter.
86You should exclude journals, if you do not want them to sync with a public calendar. 89You should exclude journals, if you do not want them to sync with a public calendar.
87 90
88KA/Pi: 91KA/Pi:
89Added the possibility to in/exclude public/private/confidential contacts to a filter. 92Added the possibility to in/exclude public/private/confidential contacts to a filter.
90If you have already defined filterrules in KA/Pi you have to adjust them all by setting the "include public/private/confidential" property manually. Sorry for that ... 93If you have already defined filterrules in KA/Pi you have to adjust them all by setting the "include public/private/confidential" property manually. Sorry for that ...
91Added printing of card view and details view on desktop. 94Added printing of card view and details view on desktop.
92Printing of list view is not working... 95Printing of list view is not working...
93Added button for removing pictures in contact editor. 96Added button for removing pictures in contact editor.
94Parsing data fix of KA/Pi version 1.9.17. 97Parsing data fix of KA/Pi version 1.9.17.
95Fixed the "parse name automatically" problem of KA/Pi version 1.9.17. 98Fixed the "parse name automatically" problem of KA/Pi version 1.9.17.
96Fixed some syncing merging problems. 99Fixed some syncing merging problems.
97 100
98 101
99********** VERSION 1.9.17 ************ 102********** VERSION 1.9.17 ************
100 103
101KO/Pi: 104KO/Pi:
102Fixed that tooltips were not updated after moving an item in agenda view. 105Fixed that tooltips were not updated after moving an item in agenda view.
103Fixed a bug in sorting start date for recurring events in list view. 106Fixed a bug in sorting start date for recurring events in list view.
104Changed the left button in todo viewer from "Agenda" to "Set completed". 107Changed the left button in todo viewer from "Agenda" to "Set completed".
105This 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. 108This 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.
106Added more info in the todo viewer: Startdate, parent/sub todos. 109Added more info in the todo viewer: Startdate, parent/sub todos.
107 110
108 111
109KA/Pi: 112KA/Pi:
110All fields search does now actually search all the (possible) fields, 113All fields search does now actually search all the (possible) fields,
111not only those listed in the contact list. 114not only those listed in the contact list.
112Made is possible to inline a picture in a vcard on the Z. 115Made is possible to inline a picture in a vcard on the Z.
113This was only possible on the desktop, now is it possible on the Z as well. 116This was only possible on the desktop, now is it possible on the Z as well.
114Fixed of missing save settings after filter configuration. 117Fixed of missing save settings after filter configuration.
115Made saving of addressbook much faster. 118Made saving of addressbook much faster.
116Fixed extension widget layout problem. 119Fixed extension widget layout problem.
117Fixed saving of default formatted name settings. 120Fixed saving of default formatted name settings.
118Fixed formatted name handling in edit dialog. 121Fixed formatted name handling in edit dialog.
119Added an option for changing formatted names of many contacts 122Added an option for changing formatted names of many contacts
120(menu: File - Change - Set formatted name). 123(menu: File - Change - Set formatted name).
121 124
122QWhatsThis was not working on the Z ( only black rectangle was shown). 125QWhatsThis was not working on the Z ( only black rectangle was shown).
123This is Fixed. 126This is Fixed.
124 127
125KDE-Sync: 128KDE-Sync:
126Now readonly KDE resources are synced as well. 129Now readonly KDE resources are synced as well.
127(They are not changed in KDE itself, of course). 130(They are not changed in KDE itself, of course).
128 131
129 132
130 133
131********** VERSION 1.9.16 ************ 134********** VERSION 1.9.16 ************
132 135
133KO/Pi: 136KO/Pi:
134Fixed search dialog size on Z 6000 (480x640 display). 137Fixed search dialog size on Z 6000 (480x640 display).
135Added setting to hide/show time in agenda items. 138Added setting to hide/show time in agenda items.
136Added setting to hide not running todos in todo view. 139Added setting to hide not running todos in todo view.
137Added columns for start date/time in todo view. 140Added columns for start date/time in todo view.
138Replaced the solid half-hour lines in agenda view by dot lines. 141Replaced the solid half-hour lines in agenda view by dot lines.
139Added possibility of printing the What's Next View on the desktop 142Added possibility of printing the What's Next View on the desktop
140(i.e. Windows and Linux). 143(i.e. Windows and Linux).
141Fixed a crash in KO/Pi when starting KO/Pi with What's Next view. 144Fixed a crash in KO/Pi when starting KO/Pi with What's Next view.
142Added tooltips in month view.(Tooltips only available on desktop) 145Added tooltips in month view.(Tooltips only available on desktop)
143 146
144Fixed a strange problem in KO/Pi alarm applet. 147Fixed a strange problem in KO/Pi alarm applet.
145Did not find the actual problem, 148Did not find the actual problem,
146such that now Qtopia reboots again if deinstalling the alarm applet. 149such that now Qtopia reboots again if deinstalling the alarm applet.
147But the alarm applet should work again. 150But the alarm applet should work again.
148 151
149KA/Pi: 152KA/Pi:
150Fixed the problem, that internal pictures were not saved. 153Fixed the problem, that internal pictures were not saved.
151 154
152Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes. 155Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes.
153 156
154Fixed some minor problems. (Like word wrap in help text windows). 157Fixed some minor problems. (Like word wrap in help text windows).
155 158
156Fixed a compiling problem in microkde/kresources. 159Fixed a compiling problem in microkde/kresources.
157 160
158KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM. 161KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM.
159This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9) 162This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9)
160such that now syncing KO/Pi with Sharp DTM should work on the 163such that now syncing KO/Pi with Sharp DTM should work on the
161Zaurus C 3000 model. 164Zaurus C 3000 model.
162 165
163********** VERSION 1.9.15 ************ 166********** VERSION 1.9.15 ************
164 167
165Usebilty enhancements in KO/Pi: 168Usebilty enhancements in KO/Pi:
166When clicking on the date in a month view cell, the day view is shown. 169When clicking on the date in a month view cell, the day view is shown.
167Old behaviour was, that the "new event" dialog popped up. 170Old behaviour was, that the "new event" dialog popped up.
168 171
169Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu). 172Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu).
170That means, you can restore the latest 173That means, you can restore the latest
171event/todo/journal you have deleted. 174event/todo/journal you have deleted.
172A journal is deleted, if you clear all the text of the journal. 175A journal is deleted, if you clear all the text of the journal.
173 176
174Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14. 177Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14.
175 178
176KA/Pi starting in 480x640 resolution: 179KA/Pi starting in 480x640 resolution:
177Hide the filter action in toolbar 180Hide the filter action in toolbar
178and added icons for undo/delete/redo in toolbar. 181and added icons for undo/delete/redo in toolbar.
179 182
180Change in OM/Pi ViewMail dialog: 183Change in OM/Pi ViewMail dialog:
181When clicking on the "delete" icon the mail is deleted after confirmation as usual. 184When clicking on the "delete" icon the mail is deleted after confirmation as usual.
182But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any). 185But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any).
183 186
184Fixed a crash when deleting mail-accounts in OM/Pi. 187Fixed a crash when deleting mail-accounts in OM/Pi.
185 188
186 189
187********** VERSION 1.9.14 ************ 190********** VERSION 1.9.14 ************
188 191
189Fixed some problems with the dialog sizes when switching 192Fixed some problems with the dialog sizes when switching
190portrait/landscape mode on 640x480 PDA display. 193portrait/landscape mode on 640x480 PDA display.
191 194
192Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi. 195Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi.
193 196
194Fixed an ugly bug in KOpieMail: 197Fixed an ugly bug in KOpieMail:
195KOpieMail was not able to write files (mails) to MSDOS file system, 198KOpieMail was not able to write files (mails) to MSDOS file system,
196like on an usual preformatted SD card. That should work now. 199like on an usual preformatted SD card. That should work now.
197To save your mail data on the Sd card do the following: 200To save your mail data on the Sd card do the following:
198Create a dir on the SD card: 201Create a dir on the SD card:
199mkdir /mnt/card/localmail 202mkdir /mnt/card/localmail
200Go to your home dir: 203Go to your home dir:
201cd 204cd
202Go to kopiemail data storage dir: 205Go to kopiemail data storage dir:
203cd kdepim/apps/kopiemail 206cd kdepim/apps/kopiemail
204Create a symlink to the SD card: 207Create a symlink to the SD card:
205ls -s /mnt/card/localmail 208ls -s /mnt/card/localmail
206Now KOpieMail will store all mails on the SD card. 209Now KOpieMail will store all mails on the SD card.
207 210
208KO/Pi Monthview: 211KO/Pi Monthview:
209Now "Go to Today" selects the current month from day 1-end, 212Now "Go to Today" selects the current month from day 1-end,
210not the current date + some days. 213not the current date + some days.
211I.e. "Go to Today" shows now always 214I.e. "Go to Today" shows now always
212the current month with first day of month in the first row. 215the current month with first day of month in the first row.
213 216
214Added missing German translation. 217Added missing German translation.
215 218
216Fixed icons of executeable on Wintendo. 219Fixed icons of executeable on Wintendo.
217 220
218Added a "Show next Mail" button to the OM/Pi 221Added a "Show next Mail" button to the OM/Pi
219mail viewer such that the mail below the current mail 222mail viewer such that the mail below the current mail
220in the mail list view of the current folder 223in the mail list view of the current folder
221can be read with a single click. 224can be read with a single click.
222 225
223 226
224********** VERSION 1.9.13 ************ 227********** VERSION 1.9.13 ************
225 228
226Fixed nasty PwM/Pi file reading bug, when 229Fixed nasty PwM/Pi file reading bug, when
227the used hash algo of file is different then the global 230the used hash algo of file is different then the global
228hash algo. 231hash algo.
229 232
230Added KA/Pi support for opie mailit mailapplication. 233Added KA/Pi support for opie mailit mailapplication.
231 234
232Fixed some bugs in OM/Pi. 235Fixed some bugs in OM/Pi.
233Now character conversion tables are available for the Zaurus 236Now character conversion tables are available for the Zaurus
234to make OM/Pi working properly. 237to make OM/Pi working properly.
235To get the character conversion in OM/Pi working, please download 238To get the character conversion in OM/Pi working, please download
236at the sourceforge project site the package 239at the sourceforge project site the package
237sr-character-conversion_SharpROM_arm.ipk.zip 240sr-character-conversion_SharpROM_arm.ipk.zip
238(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms) 241(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms)
239from the section "general files for KDE/Pim" 242from the section "general files for KDE/Pim"
240Instructions how to install this package are in a ReadMe in this file. 243Instructions how to install this package are in a ReadMe in this file.
241 244
242 245
243Fixed the orientation change problem in KA/Pi when switching 246Fixed the orientation change problem in KA/Pi when switching
244portrait/landscape mode. 247portrait/landscape mode.
245 248
246French translation available for KA/Pi and OM/Pi. 249French translation available for KA/Pi and OM/Pi.
247 250
248Fixed some problems with categories in KO/Pi in DTM sync. 251Fixed some problems with categories in KO/Pi in DTM sync.
249 252
250Added selection dialog for export to phone in KA/Pi. 253Added selection dialog for export to phone in KA/Pi.
251 254
252If in KO/Pi is an attendee selected to add to a meeting and this 255If in KO/Pi is an attendee selected to add to a meeting and this
253attendee is already in the list of attendees, this person is not added 256attendee is already in the list of attendees, this person is not added
254again. 257again.
255 258
256Some menu cleanup in KA/Pi. 259Some menu cleanup in KA/Pi.
257 260
258********** VERSION 1.9.12 ************ 261********** VERSION 1.9.12 ************
259 262
260Fix for the bug in KO/Pi What's Next view of version 1.9.11. 263Fix for the bug in KO/Pi What's Next view of version 1.9.11.
261 264
262Bugfix: Licence file is now shown again. 265Bugfix: Licence file is now shown again.
263 266
264OM/Pi now supports Unicode (utf8 charset). 267OM/Pi now supports Unicode (utf8 charset).
265Fixed some bugs in OM/Pi. 268Fixed some bugs in OM/Pi.
266 269
267KA/Pi has more German translation. 270KA/Pi has more German translation.
268 271
269 272
270********** VERSION 1.9.11 ************ 273********** VERSION 1.9.11 ************
271 274
272Fixed several problems in PWM/Pi, like 275Fixed several problems in PWM/Pi, like
273asking the user, if unsaved changed are pending 276asking the user, if unsaved changed are pending
274when closing the app. 277when closing the app.
275And PwM/Pi handles now different texts for the 278And PwM/Pi handles now different texts for the
276fields Description, Username, Password, configurable per category. 279fields Description, Username, Password, configurable per category.
277 280
278Fixed a crash in KO/Pi , when importing/loading vcs files 281Fixed a crash in KO/Pi , when importing/loading vcs files
279which have an entry with an attendee with state: 282which have an entry with an attendee with state:
280NEEDS ACTION 283NEEDS ACTION
281 284
282Fixed some problems in the German translation of OM/Pi, 285Fixed some problems in the German translation of OM/Pi,
283which makes some dialogs not fitting on the screen 286which makes some dialogs not fitting on the screen
284of the Z 5500. 287of the Z 5500.
285 288
286Fixed Qtopia crash, when disabling/deinstalling 289Fixed Qtopia crash, when disabling/deinstalling
287KO/Pi alarm applet. 290KO/Pi alarm applet.
288 291
289Implemented direct KDE<->KA/Pi sync for KA/Pi running 292Implemented direct KDE<->KA/Pi sync for KA/Pi running
290on Linux desktop. 293on Linux desktop.
291 294
292Added feature "remove sync info" to sync menu. 295Added feature "remove sync info" to sync menu.
293 296
294Tweaked the KO/Pi What's next view a bit, added 297Tweaked the KO/Pi What's next view a bit, added
295setting to hide events that are done. 298setting to hide events that are done.
296 299
297Disabled "beam receive enabled" on startup to 300Disabled "beam receive enabled" on startup to
298avoid problems if Fastload is enabled. 301avoid problems if Fastload is enabled.
299Please set "beam receive enabled", 302Please set "beam receive enabled",
300if you want to receive data via IR. 303if you want to receive data via IR.
301 304
302Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running 305Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running
303on Linux desktop. 306on Linux desktop.
304 307
305Made in KA/Pi scrolling possible, if details view is selected. 308Made in KA/Pi scrolling possible, if details view is selected.
306(The keyboard focus is set automatically to the search line) 309(The keyboard focus is set automatically to the search line)
307 310
308Fixed a bug in DMT sync, that a new entry in DTM was added 311Fixed a bug in DMT sync, that a new entry in DTM was added
309on every sync to Kx/Pi. 312on every sync to Kx/Pi.
310 313
311Fixed missing writing of KA/Pi categories to DMT entries when syncing. 314Fixed missing writing of KA/Pi categories to DMT entries when syncing.
312 315
313Fixed a bug in DMT sync with todos created in KO/Pi containing 316Fixed a bug in DMT sync with todos created in KO/Pi containing
314non-latin1 characters. 317non-latin1 characters.
315 318
316Rearranged package contents of Sharp-ipks and made all 319Rearranged package contents of Sharp-ipks and made all
317packages installable on SD again. 320packages installable on SD again.
318 321
319Fixed the writing of addressbook data in DTM sync. 322Fixed the writing of addressbook data in DTM sync.
320Empty fields in KA/Pi were not removed. 323Empty fields in KA/Pi were not removed.
321 324
322Added better category handling in KA/Pi: 325Added better category handling in KA/Pi:
323Added item 326Added item
324Edit Categories and 327Edit Categories and
325Manage new categories 328Manage new categories
326to the settings menu. 329to the settings menu.
327Possible to configure a view to display categories. 330Possible to configure a view to display categories.
328 331
329Added detailed "KDE Sync Howto" and "Multi Sync Howto" to Help menu. 332Added detailed "KDE Sync Howto" and "Multi Sync Howto" to Help menu.
330 333
331Fixed displaying of "free" days and time in KO Monthview and Agendaview. 334Fixed displaying of "free" days and time in KO Monthview and Agendaview.
332 335
333... and many other bugfixes. 336... and many other bugfixes.
334 337
335********** VERSION 1.9.10 ************ 338********** VERSION 1.9.10 ************
336 339
337Many internal small bugfixes. 340Many internal small bugfixes.
338And fix of the "big" bug in KO/Pi, 341And fix of the "big" bug in KO/Pi,
339that after Syncing the appointments had an offset by several hours. 342that after Syncing the appointments had an offset by several hours.
340That was a problem with the internal timezone setting, 343That was a problem with the internal timezone setting,
341introduced by the changed timezone configuration settings. 344introduced by the changed timezone configuration settings.
342 345
343German translation for OM/Pi is now available. 346German translation for OM/Pi is now available.
344 347
345 348
346********** VERSION 1.9.9 ************ 349********** VERSION 1.9.9 ************
347 350
348KDE-Pim/Pi has a new Member! 351KDE-Pim/Pi has a new Member!
349It is called PWM/Pi (Passwordmanager/platform-independent) 352It is called PWM/Pi (Passwordmanager/platform-independent)
350and it is available for the Zaurus. 353and it is available for the Zaurus.
351It is planned, that it will be available later for Windows. 354It is planned, that it will be available later for Windows.
352(And for Linux, of course). 355(And for Linux, of course).
353It is a port of the Passwordmanager of KDE. 356It is a port of the Passwordmanager of KDE.
354It will need the MicroKDElibs to run. 357It will need the MicroKDElibs to run.
355 358
356Made loading of addressbooks in KA/Pi up to 7 times faster! 359Made loading of addressbooks in KA/Pi up to 7 times faster!
357The bigger your addressbook file, the more starting speed 360The bigger your addressbook file, the more starting speed
358will you gain. (relatively) 361will you gain. (relatively)
359 362
360The Qtopia addressbook connector is now platform independend 363The Qtopia addressbook connector is now platform independend
361as well and should work on any platform for importing/exporting 364as well and should work on any platform for importing/exporting
362Qtopia and Opie XML files. 365Qtopia and Opie XML files.
363 366
364Added a +30min feature to the timezone settings to make 367Added a +30min feature to the timezone settings to make
365KDE-Pim/Pi useable in Australia and other parts on the 368KDE-Pim/Pi useable in Australia and other parts on the
366world with strange timezones ;-) 369world with strange timezones ;-)
367 370
368German "Umlaute" should now be sorted correctly on the Z in KA/Pi. 371German "Umlaute" should now be sorted correctly on the Z in KA/Pi.
369 372
370It is now possible to disable the 373It is now possible to disable the
371"receive data via infrared" feature, such that syncing with 374"receive data via infrared" feature, such that syncing with
372Outlook is now possible again with Kx/Pi runing. 375Outlook is now possible again with Kx/Pi runing.
373Please disable it, before syncing Sharp DTM with Outlook. 376Please disable it, before syncing Sharp DTM with Outlook.
374For your convenience, the "receive data via infrared" feature 377For your convenience, the "receive data via infrared" feature
375is disabled automatically, if you sync Kx/Pi with DTM. 378is disabled automatically, if you sync Kx/Pi with DTM.
376You have to enable it again manually after syncing. 379You have to enable it again manually after syncing.
377Enabling this feature makes it impossible to start the 380Enabling this feature makes it impossible to start the
378Sharp DTM apps. If this feature is enabled, you will only get the 381Sharp DTM apps. If this feature is enabled, you will only get the
379alarm notification from KO/Pi and not from the Sharp calendar. 382alarm notification from KO/Pi and not from the Sharp calendar.
380This is very useful if you sync KO/Pi with Sharp DTM, 383This is very useful if you sync KO/Pi with Sharp DTM,
381because after syncing you usually would get notified about 384because after syncing you usually would get notified about
382an alarm by KO/Pi and the Sharp Calendar. 385an alarm by KO/Pi and the Sharp Calendar.
383 386
384Together with the Linux desktop version of KO/Pi 387Together with the Linux desktop version of KO/Pi
385it is now possible to sync KO/Pi on the Zaurus 388it is now possible to sync KO/Pi on the Zaurus
386with the complete KDE-desktop (3.3 or later) 389with the complete KDE-desktop (3.3 or later)
387calendar data easily. 390calendar data easily.
388That makes it possible to sync the Z with one 391That makes it possible to sync the Z with one
389click of a mouse with the KDE-Desktop. 392click of a mouse with the KDE-Desktop.
390This feature it available for all Zaurus platforms KO/Pi 393This feature it available for all Zaurus platforms KO/Pi
391is running on. 394is running on.
392The only thing needed is a running KO/Pi on Linux and 395The only thing needed is a running KO/Pi on Linux and
393a compiled version of the small 396a compiled version of the small
394KDE-Pim/Pi<->KDE-Desktop access command line program, 397KDE-Pim/Pi<->KDE-Desktop access command line program,
395which is in the KDE-Pim/Pi sources available. 398which is in the KDE-Pim/Pi sources available.
396 399
397The "KDE-desktop" syncing feature for KA/Pi will follow 400The "KDE-desktop" syncing feature for KA/Pi will follow
398in the next releases. 401in the next releases.
399 402
400Fixed the vcard export bug, which had the version 1.9.8. 403Fixed the vcard export bug, which had the version 1.9.8.
401 404
402Added missing GERMAN translation to KO/Pi. 405Added missing GERMAN translation to KO/Pi.
403Hi PsionX, could you add the missing french translation?Thx! 406Hi PsionX, could you add the missing french translation?Thx!
404 407
405Translation files for KA/Pi are available as well. 408Translation files for KA/Pi are available as well.
406GERMAN translation will be available in the next release. 409GERMAN translation will be available in the next release.
407PsionX ( yres, you again ;-) ), could you start translating 410PsionX ( yres, you again ;-) ), could you start translating
408KA/Pi? Thx! 411KA/Pi? Thx!
409 412
410You can download the version 1.9.9 at 413You can download the version 1.9.9 at
411 414
412http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604 415http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604
413 416
414Note: 417Note:
415To run the mail program OM/Pi you need libopenssl. 418To run the mail program OM/Pi you need libopenssl.
416A link to a download loaction is available at 419A link to a download loaction is available at
417ZSI at www.killefiz.de 420ZSI at www.killefiz.de
418 421
419 422
420********** VERSION 1.9.8 ************ 423********** VERSION 1.9.8 ************
421 424
422Fixed character decoding in OM/Pi. 425Fixed character decoding in OM/Pi.
423(e.g. German "Umlaute" were not displayed properly.) 426(e.g. German "Umlaute" were not displayed properly.)
424 427
425Made is possible to reparent todos in KO/Pi. 428Made is possible to reparent todos in KO/Pi.
426Use contextmenu or keys (look at Help-Keys + Colors) for that. 429Use contextmenu or keys (look at Help-Keys + Colors) for that.
427 430
428Added the missing Sync-Howto and WhatsNew to the packages. 431Added the missing Sync-Howto and WhatsNew to the packages.
429 432
430KO/Pi on Linux desktop can now sync with KDE desktop. 433KO/Pi on Linux desktop can now sync with KDE desktop.
431That means: When using KO/Pi on Linux desktop for syncing with 434That means: When using KO/Pi on Linux desktop for syncing with
432KDE desktop and the Zaurus, the Zaurus can be synced now 435KDE desktop and the Zaurus, the Zaurus can be synced now
433with all KDE-Calendar resources, not only with one local file. 436with all KDE-Calendar resources, not only with one local file.
434(That makes it possible to sync the Zaurus with the 437(That makes it possible to sync the Zaurus with the
435calendar data on a Kolab server) 438calendar data on a Kolab server)
436 439
437KA/Pi syncing with KDE desktop will be available in the next version. 440KA/Pi syncing with KDE desktop will be available in the next version.
438 441
439 442
440********** VERSION 1.9.7 ************ 443********** VERSION 1.9.7 ************
441 444
442KO/Pi - KA/Pi on Windows: 445KO/Pi - KA/Pi on Windows:
443Now a directory can be defined by the user, where the 446Now a directory can be defined by the user, where the
444application/config data should be saved. 447application/config data should be saved.
445 Define your desired path in the evironment variable 448 Define your desired path in the evironment variable
446 MICROKDEHOME 449 MICROKDEHOME
447 before starting KO/Pi or KA/Pi. 450 before starting KO/Pi or KA/Pi.
448 451
449An easy Kx/Pi to Kx/Pi syncing is now possible 452An easy Kx/Pi to Kx/Pi syncing is now possible
450(it is called Pi-Sync) via network. 453(it is called Pi-Sync) via network.
451Please look at the Sync Howto. 454Please look at the Sync Howto.
452 455
453Exporting of calendar data and contacts to mobile phones is now possible. 456Exporting of calendar data and contacts to mobile phones is now possible.
454The SyncHowto is updated with information howto 457The SyncHowto is updated with information howto
455access/sync mobile phones. 458access/sync mobile phones.
456Please look at the Sync Howto. 459Please look at the Sync Howto.
457 460
458Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly. 461Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly.
459Please disable Fastload for the original contact/calendar applications 462Please disable Fastload for the original contact/calendar applications
460and close them. 463and close them.
461KO/Pi and KA/Pi must be running in order to receive the data. 464KO/Pi and KA/Pi must be running in order to receive the data.
462(KO/Pi and KA/Pi are always running if Fastload for them is enabled!) 465(KO/Pi and KA/Pi are always running if Fastload for them is enabled!)
463 466
464In the KA/Pi details view are now the preferred tel. numbers displayed on top 467In the KA/Pi details view are now the preferred tel. numbers displayed on top
465of the other data ( emails/tel.numbers/addresses) 468of the other data ( emails/tel.numbers/addresses)
466 469
467Fixed some syncing problems in KA/Pi. 470Fixed some syncing problems in KA/Pi.
468 471
469Added font settings for the KA/Pi details view. 472Added font settings for the KA/Pi details view.
470Added fields "children's name" and "gender" to KA/Pi. 473Added fields "children's name" and "gender" to KA/Pi.
471 474
472Made searching in KA/Pi better: 475Made searching in KA/Pi better:
473Now the first item in a view is selected after a search automatically and 476Now the first item in a view is selected after a search automatically and
474the views can be scrolled up/down when the search input field has the keyboard focus. 477the views can be scrolled up/down when the search input field has the keyboard focus.
475 478
476And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi. 479And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi.
477 480
478 481
479********** VERSION 1.9.6 ************ 482********** VERSION 1.9.6 ************
480 483
481Changes in the external application communication on the Zaurus 484Changes in the external application communication on the Zaurus
482in order to use less RAM when the apps are running. 485in order to use less RAM when the apps are running.
483First syncing of addressbooks (KA/Pi) is possible. 486First syncing of addressbooks (KA/Pi) is possible.
484 487
485 488
486********** VERSION 1.9.5a ************ 489********** VERSION 1.9.5a ************
487 490
488Fixed a bug in KO/Pi in the SharpDTM sync of version 1.9.5. 491Fixed a bug in KO/Pi in the SharpDTM sync of version 1.9.5.
489Fixed some small bugs. 492Fixed some small bugs.
490KA/Pi shows now the birthday in summary view. 493KA/Pi shows now the birthday in summary view.
491Now OM/Pi and KA/Pi are using the date format defined in KO/Pi 494Now OM/Pi and KA/Pi are using the date format defined in KO/Pi
492for displaying dates. 495for displaying dates.
493 496
494 497
495********** VERSION 1.9.5 ************ 498********** VERSION 1.9.5 ************
496 499
497There is still no Addressbook syncing! 500There is still no Addressbook syncing!
498 501
499New in 1.9.5: 502New in 1.9.5:
500 503
501Many bugfixes. 504Many bugfixes.
502Better searching in KA/Pi. 505Better searching in KA/Pi.
503You can configure in KA/Pi if you want to search only after 506You can configure in KA/Pi if you want to search only after
504<return> key pressed. 507<return> key pressed.
505 508
506Better mail downloading in OM/Pi. 509Better mail downloading in OM/Pi.
507 510
508First experimental alpha version of sync of KO/Pi with mobile phones. 511First experimental alpha version of sync of KO/Pi with mobile phones.
509See gammu documentation for supported phones. 512See gammu documentation for supported phones.
510You 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. 513You 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.
511Quick hint how to use: 514Quick hint how to use:
512NOTE: MOBILE PHONE SYNC IS EXPERIMENTAL! 515NOTE: MOBILE PHONE SYNC IS EXPERIMENTAL!
513Install kammu_1.9.5_arm.ipk , libbluetooth and libsdp. 516Install kammu_1.9.5_arm.ipk , libbluetooth and libsdp.
514Create syncprofile - mobile device 517Create syncprofile - mobile device
515Remove entry for model. (Leave empty ). 518Remove entry for model. (Leave empty ).
516Enable infrared on Zaurus and your Phone. 519Enable infrared on Zaurus and your Phone.
517Sync. 520Sync.
518To get a more detailed log, start kopi from konsole. 521To get a more detailed log, start kopi from konsole.
519 522
520********** VERSION 1.9.4 ************ 523********** VERSION 1.9.4 ************
521 524
522This is the version 1.9.4 of KDE-Pim/Pi for the Zaurus. 525This is the version 1.9.4 of KDE-Pim/Pi for the Zaurus.
523 526
524WARNING: 527WARNING:
525PLEASE BACKUP ALL YOUR DATA! 528PLEASE BACKUP ALL YOUR DATA!
526We have changed a lot and maybe there are some unknown problems. 529We have changed a lot and maybe there are some unknown problems.
527 530
528SYNC HANDLING HAS CHANGED! 531SYNC HANDLING HAS CHANGED!
529Such that, if you sync now with an already synded device, you will duplicated entries after the first sync. 532Such that, if you sync now with an already synded device, you will duplicated entries after the first sync.
530(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks). 533(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks).
531 534
532You need the kmicrokdelibs_1.9.4_arm.ipk as a base for the other programs. 535You need the kmicrokdelibs_1.9.4_arm.ipk as a base for the other programs.
533If 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. 536If 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.
534 537
535As programs are available: 538As programs are available:
536KO/Pi (korganizer ipk) - a calendar program. 539KO/Pi (korganizer ipk) - a calendar program.
537KA/Pi (kaddressbook ipk ) - an addressbook 540KA/Pi (kaddressbook ipk ) - an addressbook
538OM/Pi (kopiemail ipk ) an email program with pop/smtp and IMAP support. 541OM/Pi (kopiemail ipk ) an email program with pop/smtp and IMAP support.
539 542
540An alarm notification program ( korganizer-alarm ipk ) for KO/Pi that notifies you about alarms, even if the Zaurus is in suspend mode. 543An alarm notification program ( korganizer-alarm ipk ) for KO/Pi that notifies you about alarms, even if the Zaurus is in suspend mode.
541(If you do not see an icon in the taskbar after installing korganizer-alarm, please restart Qtopia) 544(If you do not see an icon in the taskbar after installing korganizer-alarm, please restart Qtopia)
542 545
543All the applications are installed in a "Pim" TAB. 546All the applications are installed in a "Pim" TAB.
544If 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 547If 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
545 548
546All the application are integrated. 549All the application are integrated.
547Such 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. 550Such 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.
548 551
549HINT: 552HINT:
550If you install KPhone/Pi 0.9.7, it will be called, if you click in KA/Pi on a phone number. 553If you install KPhone/Pi 0.9.7, it will be called, if you click in KA/Pi on a phone number.
551 554
552What's new? 555What's new?
553 556
554SYNC HANDLING HAS CHANGED! 557SYNC HANDLING HAS CHANGED!
555Such that, if you sync now with an already synded device, you will duplicated entries after the first sync. 558Such that, if you sync now with an already synded device, you will duplicated entries after the first sync.
556(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks). 559(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks).
557 560
558New in OM/Pi: 561New in OM/Pi:
559When 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. 562When 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.
560 563
561New in KO/Pi: 564New in KO/Pi:
562French is now available for KO/Pi. 565French is now available for KO/Pi.
563Choose menu:Actions - Configure:TAB locale 566Choose menu:Actions - Configure:TAB locale
564Syncing has changed. 567Syncing has changed.
565Phone sync available soon. 568Phone sync available soon.
566Not much changes, I cannot remember them ... 569Not much changes, I cannot remember them ...
567 570
568New in KA/Pi: 571New in KA/Pi:
569Beaming possible. 572Beaming possible.
570Sharp DTM readonly access possible( create a new DTM resource ); 573Sharp DTM readonly access possible( create a new DTM resource );
571Better searching possible. 574Better searching possible.
572Search is performed only after pressing the return key. 575Search is performed only after pressing the return key.
573Use wildcard * to specify parts of a name. 576Use wildcard * to specify parts of a name.
574 577
575Better 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 * . 578Better 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 * .
576 579
577A big improvement is the new management of the contact access. 580A big improvement is the new management of the contact access.
578In version 1.9.3, every application was using their own addressbook access data. 581In version 1.9.3, every application was using their own addressbook access data.
579That means, the addressbook was loaded up to three times in the memory, when accessed by KA/Pi, KO/Pi and OM/Pi. 582That means, the addressbook was loaded up to three times in the memory, when accessed by KA/Pi, KO/Pi and OM/Pi.
580That was wasting of memory, if you had several hundreds of contacts. 583That was wasting of memory, if you had several hundreds of contacts.
581 584
582Now only KA/Pi accesses the addressbook. 585Now only KA/Pi accesses the addressbook.
583If 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. 586If 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.
584If you click on an attendee in a meeting, its contact data is displayed in KA/Pi directly. 587If you click on an attendee in a meeting, its contact data is displayed in KA/Pi directly.
585That means, if KO/Pi or OM/Pi want to access contact data, KA/Pi is started first. 588That means, if KO/Pi or OM/Pi want to access contact data, KA/Pi is started first.
586 589
587New in the KO/Pi alarm applet: 590New in the KO/Pi alarm applet:
588Configure your own timer popup menu! 591Configure your own timer popup menu!
589(Text and minutes for timer countdown) 592(Text and minutes for timer countdown)
590Just edit the file 593Just edit the file
591(yourhomedir)/.kopialarmtimerrc 594(yourhomedir)/.kopialarmtimerrc
592and start/stop a timer to get a new menu with the data of this file. 595and start/stop a timer to get a new menu with the data of this file.
593 596
594********** VERSION 1.9.3 ************ 597********** VERSION 1.9.3 ************
5951) 5981)
596Now KO/Pi on Windows imports directly the calendar data of 599Now KO/Pi on Windows imports directly the calendar data of
597an installed Outlook. Should work with OL version >= 2000. 600an installed Outlook. Should work with OL version >= 2000.
598 601
599********** VERSION 1.9.2 ************ 602********** VERSION 1.9.2 ************
6001) 6031)
601KDE-Pim/Pi has got a new member: 604KDE-Pim/Pi has got a new member:
602KmicroMail (KM/Pi) is a mail program, 605KmicroMail (KM/Pi) is a mail program,
603which can handle IMAP and POP mail access. 606which can handle IMAP and POP mail access.
604It is based on Opie-Mail v3. 607It is based on Opie-Mail v3.
605All dependencies to the Opie libraries ar removed, 608All dependencies to the Opie libraries ar removed,
606such that no additional Opie lib is needed. 609such that no additional Opie lib is needed.
607It is already integrated in KO/Pi and KA/Pi. 610It is already integrated in KO/Pi and KA/Pi.
608It it now available for the Zaurus,probably it 611It it now available for the Zaurus,probably it
609will be available for other platforms later. 612will be available for other platforms later.
610Hint: 613Hint:
611Create your own contact (name + email) 614Create your own contact (name + email)
612in KA/Pi, select this contact and choose menu: 615in KA/Pi, select this contact and choose menu:
613Settings - Set Who Am I. 616Settings - Set Who Am I.
614Now the settings of this contact are used as 617Now the settings of this contact are used as
615the sender data in KM/Pi. 618the sender data in KM/Pi.
6162) 6192)
617KDE-Pim/Pi is split up in five different 620KDE-Pim/Pi is split up in five different
618packages now precompiled for Sharp Zaurus: 621packages now precompiled for Sharp Zaurus:
619--kmicrokdelibs_1.9.2_arm.ipk 622--kmicrokdelibs_1.9.2_arm.ipk
620The libs are needed for any 623The libs are needed for any
621of the following programs: 624of the following programs:
622--kaddressbook_1.9.2_arm.ipk 625--kaddressbook_1.9.2_arm.ipk
623--kmicromail_1.9.2_arm.ipk 626--kmicromail_1.9.2_arm.ipk
624--korganizer_1.9.2_arm.ipk 627--korganizer_1.9.2_arm.ipk
625Independ from that, there is the alarm applet 628Independ from that, there is the alarm applet
626available for KO/Pi, which also offers 629available for KO/Pi, which also offers
627quick access for a new mail or 630quick access for a new mail or
628showing the addressbook.: 631showing the addressbook.:
629--korganizer-alarm_1.9.2_arm.ipk 632--korganizer-alarm_1.9.2_arm.ipk
630Independend means, that the alarm applet 633Independend means, that the alarm applet
631does not need any of the libs or programs above to run. 634does not need any of the libs or programs above to run.
632But it would be quite useless without these programs. 635But it would be quite useless without these programs.
633NOTE: 636NOTE:
634If you get a 637If you get a
635"This application depends on other programs" 638"This application depends on other programs"
636during installation of 639during installation of
637--kmicrokdelibs_1.9.2_arm.ipk 640--kmicrokdelibs_1.9.2_arm.ipk
638you probably do not have to care about that. 641you probably do not have to care about that.
639kmicrokdelibs_1.9.2 will come with some 642kmicrokdelibs_1.9.2 will come with some
640resource plugins, which needs additional libraries. 643resource plugins, which needs additional libraries.
641(E.g. libopie1, if you want to use the 644(E.g. libopie1, if you want to use the
642opie resource connector in KA/Pi). 645opie resource connector in KA/Pi).
643If you do not have this libraries installed, 646If you do not have this libraries installed,
644you simply cannot use the resource. 647you simply cannot use the resource.
645To make it clear: 648To make it clear:
646If the libraries are missing, the applications 649If the libraries are missing, the applications
647using kmicrokdelibs will start, 650using kmicrokdelibs will start,
648because the resources are plugins. 651because the resources are plugins.
6493) 6523)
650KO/Pi and friends are now installable on SD-Card! 653KO/Pi and friends are now installable on SD-Card!
651It is recommended to install all libs and apps 654It is recommended to install all libs and apps
652on the SD card or all in the internal storage. 655on the SD card or all in the internal storage.
653There may be problems, if this is mixed. 656There may be problems, if this is mixed.
6544) 6574)
655Fixed two bugs in the alarm notification on Windows. 658Fixed two bugs in the alarm notification on Windows.
6565) 6595)
657Great improvement! 660Great improvement!
658KO/Pi uses now the latest version of libical. 661KO/Pi uses now the latest version of libical.
659Libical is the library which actually reads 662Libical is the library which actually reads
660the calendar files and extract the data from it. 663the calendar files and extract the data from it.
661With the old version, there were problems 664With the old version, there were problems
662(crashes or program hangs) when licical did read 665(crashes or program hangs) when licical did read
663files, which were not stored from KO/Pi. 666files, which were not stored from KO/Pi.
664I do not know, if the new libical works perfect, 667I do not know, if the new libical works perfect,
665but actually it works much better than 668but actually it works much better than
666the old version. 669the old version.
667There are no problems with compatibility with 670There are no problems with compatibility with
668old calendar files of KO/Pi, of course! 671old calendar files of KO/Pi, of course!
6696) 6726)
670New in KA/Pi: 673New in KA/Pi:
671Opie addressbook resource connector available! 674Opie addressbook resource connector available!
672You will need libopie1 and the opie addressbook, 675You will need libopie1 and the opie addressbook,
673of course. 676of course.
674With the Opie addressbook resource connector, 677With the Opie addressbook resource connector,
675you can access the Opie addressbook readonly in KA/Pi. 678you can access the Opie addressbook readonly in KA/Pi.
676If you want to edit or import the data into KA/Pi, 679If you want to edit or import the data into KA/Pi,
677do this: 680do this:
678a) Create an Opie resource. 681a) Create an Opie resource.
679 (Menu: Settings-Configure Resources). 682 (Menu: Settings-Configure Resources).
680After configuration and restarting KA/Pi you should see 683After configuration and restarting KA/Pi you should see
681the Opie contacts in KA/Pi. 684the Opie contacts in KA/Pi.
682b) Select some or all Opie contacts. 685b) Select some or all Opie contacts.
683(NOTE: +++++ 686(NOTE: +++++
684To know exactly, what contacts are Opie contacts, 687To know exactly, what contacts are Opie contacts,
685do this: Choose menu: 688do this: Choose menu:
686View-Modify View - TAB Fields. 689View-Modify View - TAB Fields.
687Select in the above list "Resource" and click 690Select in the above list "Resource" and click
688down arrow to add it to the "Selected fields". 691down arrow to add it to the "Selected fields".
689Click OK. 692Click OK.
690Now you have a new column "Resource" in your list, 693Now you have a new column "Resource" in your list,
691where you can see, what an Opie resource is. 694where you can see, what an Opie resource is.
692++++ NOTE end.) 695++++ NOTE end.)
693Ok, we do have now some Opie contacts seleted. 696Ok, we do have now some Opie contacts seleted.
694(Use SHIFT or CTRL key in order to multiple select). 697(Use SHIFT or CTRL key in order to multiple select).
695c) Choose menu: Edit-Copy. 698c) Choose menu: Edit-Copy.
696d) Choose menu: Edit-Paste. 699d) Choose menu: Edit-Paste.
697e) Select the resource, you want to add the contacts to. 700e) Select the resource, you want to add the contacts to.
698Congrats! Now you have read/write access to the copied 701Congrats! Now you have read/write access to the copied
699opie contacts as "real" KA/Pi contacts. 702opie contacts as "real" KA/Pi contacts.
700 703
701 704
702********** VERSION 1.9.1 ************ 705********** VERSION 1.9.1 ************
7031) 7061)
704 +++ IMPORTANT 1 +++ 707 +++ IMPORTANT 1 +++
705 708
706The storing place of the default calendar 709The storing place of the default calendar
707file has changed! 710file has changed!
708The default calendar file was 711The default calendar file was
709Applications/korganizer/mycalendar.ics 712Applications/korganizer/mycalendar.ics
710on Zaurus and 713on Zaurus and
711(yourHomeDir)/korganizer/mycalendar.ics 714(yourHomeDir)/korganizer/mycalendar.ics
712on Windows/Linux desktop. Now it is 715on Windows/Linux desktop. Now it is
713(yourHomeDir)/kdepim/korganizer/mycalendar.ics 716(yourHomeDir)/kdepim/korganizer/mycalendar.ics
714on Zaurus, Windows and Linux. 717on Zaurus, Windows and Linux.
715To load the old file, choose menu 718To load the old file, choose menu
716File-Load calendar backup. 719File-Load calendar backup.
717(It should be loaded automatically 720(It should be loaded automatically
718at startup with a warning message displayed). 721at startup with a warning message displayed).
719The place of the configuration file has changed too. 722The place of the configuration file has changed too.
720If you want to use your old KO/Pi config, 723If you want to use your old KO/Pi config,
721copy it to 724copy it to
722(yourHomeDir)/kdepim/config/korganizerrc 725(yourHomeDir)/kdepim/config/korganizerrc
723Please read VERSION 1.9.0 - topic 3) as well! 726Please read VERSION 1.9.0 - topic 3) as well!
724 727
725 +++ IMPORTANT 2 +++ 728 +++ IMPORTANT 2 +++
726 729
727Because of the new paths, you will need 730Because of the new paths, you will need
728a new version of the KO/Pi alarm applet 731a new version of the KO/Pi alarm applet
729for Zaurus. 732for Zaurus.
730Use version >= 1.9.1 733Use version >= 1.9.1
731 734
7322) 7352)
733Now the QWhat'sThis Icon works for items 736Now the QWhat'sThis Icon works for items
734in the month view as well. 737in the month view as well.
735(See VERSION 1.7.8 Topic 1) ). 738(See VERSION 1.7.8 Topic 1) ).
7363) 7393)
737You can import birtsdays/anniversaries 740You can import birtsdays/anniversaries
738from KA/Pi into KO/Pi. 741from KA/Pi into KO/Pi.
739Choose menu File-Import birthdays. 742Choose menu File-Import birthdays.
740If you import twice, already imported items 743If you import twice, already imported items
741will not be imported again, if they 744will not be imported again, if they
742have not been changed in KO/Pi. 745have not been changed in KO/Pi.
7434) 7464)
744When syncing with sharp DTM, now a progress 747When syncing with sharp DTM, now a progress
745is shown, when the data is written back. 748is shown, when the data is written back.
746If there is much data in KO/Pi and no data 749If there is much data in KO/Pi and no data
747in DTM, that can take a long time. 750in DTM, that can take a long time.
748(But only for the first time ). 751(But only for the first time ).
7495) 7525)
750In the search dialog, you can search 753In the search dialog, you can search
751now for the name/email of an attendee 754now for the name/email of an attendee
752of an event/todo. 755of an event/todo.
753To get more space for displaying 756To get more space for displaying
754search results, the buttons 757search results, the buttons
755for "search" and "close" on the 758for "search" and "close" on the
756bottom are removed in the PDA version. 759bottom are removed in the PDA version.
757You have to click OK in the top right 760You have to click OK in the top right
758corner to do a search. 761corner to do a search.
7596) 7626)
760Now it is possible to disable the displaying 763Now it is possible to disable the displaying
761of todo items in the Allday part of the Agenda. 764of todo items in the Allday part of the Agenda.
762Choose Menu Action-Configure, 765Choose Menu Action-Configure,
763TAB Todo View, checkbox 766TAB Todo View, checkbox
764"Allday Agenda view shows todos" 767"Allday Agenda view shows todos"
7657) 7687)
766If FastLoad is enabled, now the settings and the 769If FastLoad is enabled, now the settings and the
767calendar data are saved, when KO/Pi is closed. 770calendar data are saved, when KO/Pi is closed.
768(If no Fastload is enabled, KO/Pi saves 771(If no Fastload is enabled, KO/Pi saves
769the data as well, of course) 772the data as well, of course)
7708) 7738)
771The Agenda View has a minimize-splitter now, 774The Agenda View has a minimize-splitter now,
772such that the height of the allday part can be 775such that the height of the allday part can be
773changed quickly. 776changed quickly.
774 777
775********** VERSION 1.9.0 ************ 778********** VERSION 1.9.0 ************
7761) 7791)
777KO/Pi is now merged with the new microKDE from KA/Pi. 780KO/Pi is now merged with the new microKDE from KA/Pi.
778KO/Pi accesses now KA/Pi as the addressbook. 781KO/Pi accesses now KA/Pi as the addressbook.
779The other ddressbook-plugins are not working any longer. 782The other ddressbook-plugins are not working any longer.
780(It is planned, that later KA/Pi itself uses these plugins) 783(It is planned, that later KA/Pi itself uses these plugins)
781New versions of KO/Pi are only available 784New versions of KO/Pi are only available
782together with KA/Pi as the KDE-Pim/Pi package. 785together with KA/Pi as the KDE-Pim/Pi package.
7832) 7862)
784If you click on an attendee of a meeting in the 787If you click on an attendee of a meeting in the
785event viewer, a detailed summary of the 788event viewer, a detailed summary of the
786attendee is shown. 789attendee is shown.
7873) 7903)
788The place of the configuration file has changed. 791The place of the configuration file has changed.
789If you want to use your old KO/Pi config, copy 792If you want to use your old KO/Pi config, copy
790Applications/korganizer/config_korganizerrc 793Applications/korganizer/config_korganizerrc
791to 794to
792Applications/korganizer/config/korganizerrc 795Applications/korganizer/config/korganizerrc
793 796
794********** VERSION 1.7.8 ************ 797********** VERSION 1.7.8 ************
7951) 7981)
796Now the QWhat'sThis ist working. 799Now the QWhat'sThis ist working.
797Enable the QWhat'sThis icon in the toolbar. 800Enable the QWhat'sThis icon in the toolbar.
798(You have to restart to reload the changed toolbar config). 801(You have to restart to reload the changed toolbar config).
799Now click on the QWhat'sThis Icon 802Now click on the QWhat'sThis Icon
800in the top right corner of KO/Pi. 803in the top right corner of KO/Pi.
801Then click on an item in the Agenda View: 804Then click on an item in the Agenda View:
802You will get a detailed display of the items content. 805You will get a detailed display of the items content.
8032) 8062)
804Some other very minor changes. 807Some other very minor changes.
805But I have forgotten the details ... 808But I have forgotten the details ...
806For that reason I start this log here: 809For that reason I start this log here:
807To document my changes, when I am doing it. 810To document my changes, when I am doing it.
808 811
809********** VERSION 1.7.7 ************ 812********** VERSION 1.7.7 ************
810Stable Version of KO/Pi 813Stable Version of KO/Pi
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt
index e55d17e..dce95cd 100644
--- a/bin/kdepim/korganizer/germantranslation.txt
+++ b/bin/kdepim/korganizer/germantranslation.txt
@@ -1,1203 +1,1203 @@
1{ "10 minutes","10 Minuten" }, 1{ "10 minutes","10 Minuten" },
2{ "10th","10." }, 2{ "10th","10." },
3{ "11th","11." }, 3{ "11th","11." },
4{ "12 pm Format","12 AM/PM Format" }, 4{ "12 pm Format","12 AM/PM Format" },
5{ "12th","12." }, 5{ "12th","12." },
6{ "13th","13." }, 6{ "13th","13." },
7{ "14th","14." }, 7{ "14th","14." },
8{ "15th","15." }, 8{ "15th","15." },
9{ "16th","16." }, 9{ "16th","16." },
10{ "17th","17." }, 10{ "17th","17." },
11{ "18th","18." }, 11{ "18th","18." },
12{ "19th","19." }, 12{ "19th","19." },
13{ "1 Day","1 Tag" }, 13{ "1 Day","1 Tag" },
14{ "1 h","1 Std" }, 14{ "1 h","1 Std" },
15{ "1 (high)","1 (hoch)" }, 15{ "1 (high)","1 (hoch)" },
16{ "5 (low)","5" }, 16{ "5 (low)","5" },
17{ "1st","1." }, 17{ "1st","1." },
18{ "20th","20." }, 18{ "20th","20." },
19{ "21st","21." }, 19{ "21st","21." },
20{ "22nd","22." }, 20{ "22nd","22." },
21{ "23rd","23." }, 21{ "23rd","23." },
22{ "24:00 Hour Format","24:00 Stunden Format" }, 22{ "24:00 Hour Format","24:00 Stunden Format" },
23{ "24th","24." }, 23{ "24th","24." },
24{ "25th","25." }, 24{ "25th","25." },
25{ "26th","26." }, 25{ "26th","26." },
26{ "27th","27." }, 26{ "27th","27." },
27{ "28th","28." }, 27{ "28th","28." },
28{ "29th","29." }, 28{ "29th","29." },
29{ "2nd","2." }, 29{ "2nd","2." },
30{ "30 minutes","30 Minuten" }, 30{ "30 minutes","30 Minuten" },
31{ "30th","30." }, 31{ "30th","30." },
32{ "31st","31." }, 32{ "31st","31." },
33{ "3rd","3." }, 33{ "3rd","3." },
34{ "4th","4." }, 34{ "4th","4." },
35{ "5 (lowest)","5 (Niedrigster)" }, 35{ "5 (lowest)","5 (Niedrigster)" },
36{ "5th","5." }, 36{ "5th","5." },
37{ "6th","6." }, 37{ "6th","6." },
38{ "7th","7." }, 38{ "7th","7." },
39{ "8th","8." }, 39{ "8th","8." },
40{ "9th","9." }, 40{ "9th","9." },
41{ "About...","Über..." }, 41{ "About...","Über..." },
42{ "&Accept","&Akzeptieren" }, 42{ "&Accept","&Akzeptieren" },
43{ "Accept","Akzeptieren" }, 43{ "Accept","Akzeptieren" },
44{ "Accept A&ll","A&lles Akzepieren" }, 44{ "Accept A&ll","A&lles Akzepieren" },
45{ "Access:","Zugriff:" }, 45{ "Access:","Zugriff:" },
46{ "A corresponding event is missing in your calendar!","Ein zugehöriger Termin fehlt in ihrem Kalender!" }, 46{ "A corresponding event is missing in your calendar!","Ein zugehöriger Termin fehlt in ihrem Kalender!" },
47{ "Actions","Aktionen" }, 47{ "Actions","Aktionen" },
48{ "Add Filter","Filter Hinzufügen" }, 48{ "Add Filter","Filter Hinzufügen" },
49{ "&Add","Hinzufügen" }, 49{ "&Add","Hinzufügen" },
50{ "Add","Hinzufügen" }, 50{ "Add","Hinzufügen" },
51{ "Additional email addresses:","Zusätzliche E-Mail Adressen:" }, 51{ "Additional email addresses:","Zusätzliche E-Mail Adressen:" },
52{ "Additional email address:","Zusätzliche E-Mail Adresse:" }, 52{ "Additional email address:","Zusätzliche E-Mail Adresse:" },
53{ "&Addressbook","&Adressbuch" }, 53{ "&Addressbook","&Adressbuch" },
54{ "Address &Book...","Adress&buch..." }, 54{ "Address &Book...","Adress&buch..." },
55{ "Agenda Size","Agende Größe" }, 55{ "Agenda Size","Agende Größe" },
56{ "Agenda Size:","Größe der Agenda:" }, 56{ "Agenda Size:","Größe der Agenda:" },
57{ "Agenda view:","Agenda Ansicht:" }, 57{ "Agenda view:","Agenda Ansicht:" },
58{ "Agenda view background color:","Hintergrund der Agenda Ansicht:" }, 58{ "Agenda view background color:","Hintergrund der Agenda Ansicht:" },
59{ "All attendees","Alle Teilnehmer" }, 59{ "All attendees","Alle Teilnehmer" },
60{ "AllDayAgenda Height:","Höhe Ganztages Agenda:" }, 60{ "AllDayAgenda Height:","Höhe Ganztages Agenda:" },
61{ "All day event","Ganztägig" }, 61{ "All day event","Ganztägig" },
62{ "Anonymous","Anonym" }, 62{ "Anonymous","Anonym" },
63{ "Apply","Anwenden" }, 63{ "Apply","Anwenden" },
64{ "Apr","Apr" }, 64{ "Apr","Apr" },
65{ "April","April" }, 65{ "April","April" },
66{"Ask for every entry on conflict","Frage bei Konflikten nach"}, 66{"Ask for every entry on conflict","Frage bei Konflikten nach"},
67{ "Ask for preferences before syncing","Vor dem Syncronisieren nachfragen" }, 67{ "Ask for preferences before syncing","Vor dem Syncronisieren nachfragen" },
68{ "Ask for quit when closing KO/Pi","Vor dem Beenden von KO/Pi nachfragen" }, 68{ "Ask for quit when closing KO/Pi","Vor dem Beenden von KO/Pi nachfragen" },
69{ "Attendees","Teilnehmer" }, 69{ "Attendees","Teilnehmer" },
70{ "Aug","Aug" }, 70{ "Aug","Aug" },
71{ "August","August" }, 71{ "August","August" },
72{ "Auto-Save","Automatisches Abspeichern" }, 72{ "Auto-Save","Automatisches Abspeichern" },
73{ "Auto save delay in minutes:","Verzög.autom.Speichern in Min" }, 73{ "Auto save delay in minutes:","Verzög.autom.Speichern in Min" },
74{ "Auto saving...","Automatische Sicherung..." }, 74{ "Auto saving...","Automatische Sicherung..." },
75{ "Begin on:","Starte mit:" }, 75{ "Begin on:","Starte mit:" },
76{ "Begins on: %1","Starte mit: %1" }, 76{ "Begins on: %1","Starte mit: %1" },
77{ "<b>From:</b> %1 <b>To:</b> %2","<b>Vom:</b> %1 <b>Zum:</b> %2" }, 77{ "<b>From:</b> %1 <b>To:</b> %2","<b>Vom:</b> %1 <b>Zum:</b> %2" },
78{ "<b>On:</b> %1","<b>Am:</b> %1" }, 78{ "<b>On:</b> %1","<b>Am:</b> %1" },
79{ "<b>On:</b> %1 <b>From:S</b> %2 <b>To:</b> %3","<b>Am:</b> %1 <b>Vom:S</b> %2 <b>Zum:</b> %3" }, 79{ "<b>On:</b> %1 <b>From:S</b> %2 <b>To:</b> %3","<b>Am:</b> %1 <b>Vom:S</b> %2 <b>Zum:</b> %3" },
80{ "<b>Original event:</b><p>","<b>Original Termin:</b><p>" }, 80{ "<b>Original event:</b><p>","<b>Original Termin:</b><p>" },
81{ " - both are modified after last sync"," - beide wurden nach der letzten Syncronisation verändert" }, 81{ " - both are modified after last sync"," - beide wurden nach der letzten Syncronisation verändert" },
82{ "Busy","Belegt" }, 82{ "Busy","Belegt" },
83{ "&Cancel","Abbre&chen" }, 83{ "&Cancel","Abbre&chen" },
84{ "Cancel","Abbrechen" }, 84{ "Cancel","Abbrechen" },
85{ "Cannot delete To-Do\nwhich has children.","Kann Todo nicht löschen,\n da noch Einträge vorhanden sind" }, 85{ "Cannot delete To-Do\nwhich has children.","Kann Todo nicht löschen,\n da noch Einträge vorhanden sind" },
86{ "Can't generate mail:\nNo event selected.","Kann e-Mail nicht erstellen:\nKein Termin ausgewählt." }, 86{ "Can't generate mail:\nNo event selected.","Kann e-Mail nicht erstellen:\nKein Termin ausgewählt." },
87{ "Categories...","Kategorien..." }, 87{ "Categories...","Kategorien..." },
88{ "Categories","Kategorien" }, 88{ "Categories","Kategorien" },
89{ "Category","Kategorie" }, 89{ "Category","Kategorie" },
90{ "Center View","Zentriere Ansicht" }, 90{ "Center View","Zentriere Ansicht" },
91{ "Change","Ändere" }, 91{ "Change","Ändere" },
92{ "Cinema","Kino" }, 92{ "Cinema","Kino" },
93{ "Click to add a new Todo","Hier klicken, um ein neues Todo anzulegen" }, 93{ "Click to add a new Todo","Hier klicken, um ein neues Todo anzulegen" },
94{ "Clone Item","Klone Eintrag" }, 94{ "Clone Item","Klone Eintrag" },
95{ "&Close","S&chließen" }, 95{ "&Close","S&chließen" },
96{ "Close","Schließen" }, 96{ "Close","Schließen" },
97{ "Close this dialog to abort deletion!","Zum Abbrechen des Löschvorganges Dialog schließen!" }, 97{ "Close this dialog to abort deletion!","Zum Abbrechen des Löschvorganges Dialog schließen!" },
98{ "Colors","Farben" }, 98{ "Colors","Farben" },
99{ "completed","erledigt" }, 99{ "completed","erledigt" },
100{ "completed on %1","erledigt am %1" }, 100{ "completed on %1","erledigt am %1" },
101{ "Complete","Erledigt" }, 101{ "Complete","Erledigt" },
102{ "Confidential","Vertraulich" }, 102{ "Confidential","Vertraulich" },
103{ "Configure...","Einstellungen..." }, 103{ "Configure...","Einstellungen..." },
104{ "Confirm &deletes","Löschvogang bestätigen" }, 104{ "Confirm &deletes","Löschvogang bestätigen" },
105{ "Couldn't load calendar\n '%1'.","Kann Kalender\n '%1' nicht laden." }, 105{ "Couldn't load calendar\n '%1'.","Kann Kalender\n '%1' nicht laden." },
106{ "Counter-event Viewer","Terminzähler Ansicht" }, 106{ "Counter-event Viewer","Terminzähler Ansicht" },
107{ "Daily ending hour:","Feierabend:" }, 107{ "Daily ending hour:","Feierabend:" },
108{ "Daily starting hour:","Anfangszeit:" }, 108{ "Daily starting hour:","Anfangszeit:" },
109{ "Daily","Täglich" }, 109{ "Daily","Täglich" },
110{ "Date Format","Datums Format" }, 110{ "Date Format","Datums Format" },
111{ "Date Format:","Datums Format:" }, 111{ "Date Format:","Datums Format:" },
112{ "DateNavigator:(nr)","Datums Navigator" }, 112{ "DateNavigator:(nr)","Datums Navigator" },
113{ "Dates: ","Datum: " }, 113{ "Dates: ","Datum: " },
114{ "Date && Time","Datum && Zeit" }, 114{ "Date && Time","Datum && Zeit" },
115{ "Day begins at:","Der Tag beginnt um:" }, 115{ "Day begins at:","Der Tag beginnt um:" },
116{ "Days in Next-X-Days:","Tage in Nächste-X-Tage:" }, 116{ "Days in Next-X-Days:","Tage in Nächste-X-Tage:" },
117{ "Days in What's Next:","Tage in What's Next:" }, 117{ "Days in What's Next:","Tage in What's Next:" },
118{ "day(s)","Tag(e)" }, 118{ "day(s)","Tag(e)" },
119{ "Days to show in Next-X-Days view:","Welche Tage in Nächste-X-Tagen anzeigen:" }, 119{ "Days to show in Next-X-Days view:","Welche Tage in Nächste-X-Tagen anzeigen:" },
120{ "day","Tag" }, 120{ "day","Tag" },
121{ "Dec","Dez" }, 121{ "Dec","Dez" },
122{ "December","Dezember" }, 122{ "December","Dezember" },
123{ "Default alarm time:","Standard Alarmzeit:" }, 123{ "Default alarm time:","Standard Alarmzeit:" },
124{ "Default appointment time:","Standard Termin Startzeit:" }, 124{ "Default appointment time:","Standard Termin Startzeit:" },
125{ "Default event color:","Standard Terminfarbe:" }, 125{ "Default event color:","Standard Terminfarbe:" },
126{ "Default","Standard" }, 126{ "Default","Standard" },
127{ "Def. duration of new app.:","Standard Termin Länge:" }, 127{ "Def. duration of new app.:","Standard Termin Länge:" },
128{ "Delete all completed To-Dos?","Alle bereits erledigten Todos löschen?" }, 128{ "Delete all completed To-Dos?","Alle bereits erledigten Todos löschen?" },
129{ "Delete All","Lösche alles" }, 129{ "Delete All","Lösche alles" },
130{ "Delete all selected","Lösche alle Selektierten" }, 130{ "Delete all selected","Lösche alle Selektierten" },
131{ "Delete Current","Aktuellen löschen" }, 131{ "Delete Current","Aktuellen löschen" },
132{ "Delete Event...","Lösche Termin..." }, 132{ "Delete Event...","Lösche Termin..." },
133{ "Delete Event","Lösche Termin" }, 133{ "Delete Event","Lösche Termin" },
134{ "&Delete","Löschen" }, 134{ "&Delete","Löschen" },
135{ "Delete...","Löschen..." }, 135{ "Delete...","Löschen..." },
136{ "Delete","Löschen" }, 136{ "Delete","Löschen" },
137{ "Delete Todo...","Lösche Todo..." }, 137{ "Delete Todo...","Lösche Todo..." },
138{ "Delete To-Do","Lösche Todo" }, 138{ "Delete To-Do","Lösche Todo" },
139{ "Deleting item %d ...","Lösche Eintrag %d..." }, 139{ "Deleting item %d ...","Lösche Eintrag %d..." },
140{ "Descriptions","Beschreibungen" }, 140{ "Descriptions","Beschreibungen" },
141{ "Deselect All","Deselektiere Alle" }, 141{ "Deselect All","Deselektiere Alle" },
142{ "Details","Details" }, 142{ "Details","Details" },
143{ "Dinner","Abendessen" }, 143{ "Dinner","Abendessen" },
144{ "Do you really want\nto close KO/Pi?","Möchten Sie wirklich\nKO/PI verlassen?" }, 144{ "Do you really want\nto close KO/Pi?","Möchten Sie wirklich\nKO/PI verlassen?" },
145{ "Due Date","Fällig am" }, 145{ "Due Date","Fällig am" },
146{ "Due: ","Fällig: "}, 146{ "Due: ","Fällig: "},
147{ "Due Time","Fällig um" }, 147{ "Due Time","Fällig um" },
148{ "Due:","Fällig:"}, 148{ "Due:","Fällig:"},
149{ "Duration: ","Dauer: " }, 149{ "Duration: ","Dauer: " },
150{ "Edit...","Bearbeite..." }, 150{ "Edit...","Bearbeite..." },
151{ "Edit","Bearbeite" }, 151{ "Edit","Bearbeite" },
152{ "Edit Event...","Bearbeite Termin..." }, 152{ "Edit Event...","Bearbeite Termin..." },
153{ "Edit Event","Bearbeite Termin" }, 153{ "Edit Event","Bearbeite Termin" },
154{ "Edit exceptions","Bearbeite Ausnahmen" }, 154{ "Edit exceptions","Bearbeite Ausnahmen" },
155{ "EditorBox:","Editor Fenster:" }, 155{ "EditorBox:","Editor Fenster:" },
156{ "Edit Recurrence Range","Bearbeite Wiederholung" }, 156{ "Edit Recurrence Range","Bearbeite Wiederholung" },
157{ "Edit Todo...","Berabeite Todo..." }, 157{ "Edit Todo...","Berabeite Todo..." },
158{ "Edit To-Do","Todo bearbeiten" }, 158{ "Edit To-Do","Todo bearbeiten" },
159{ "E&mail address:","E&mail Adresse:" }, 159{ "E&mail address:","E&mail Adresse:" },
160{ "(EmptyEmail)","(KeineEmail)" }, 160{ "(EmptyEmail)","(KeineEmail)" },
161{ "(EmptyName)","(KeinName)" }, 161{ "(EmptyName)","(KeinName)" },
162{ "Enable Recurrence","Wiederholender Termin" }, 162{ "Enable Recurrence","Wiederholender Termin" },
163{ "End after","Endet nach"}, 163{ "End after","Endet nach"},
164{ "End by:","Endet am"}, 164{ "End by:","Endet am"},
165{ "End Date","End Datum" }, 165{ "End Date","End Datum" },
166{ "End:","Ende:" }, 166{ "End:","Ende:" },
167{ "End Time","End Zeit" }, 167{ "End Time","End Zeit" },
168{ "English","Englisch" }, 168{ "English","Englisch" },
169{ "Event","Termin" }, 169{ "Event","Termin" },
170{ "Event list","Termin Liste" }, 170{ "Event list","Termin Liste" },
171{ "Events","Termine" }, 171{ "Events","Termine" },
172{ "Event Viewer:","Termin Übersicht:" }, 172{ "Event Viewer:","Termin Übersicht:" },
173{ "every","jede" }, 173{ "every","jede" },
174{ "Exceptions...","Ausnahmen..." }, 174{ "Exceptions...","Ausnahmen..." },
175{ "Exceptions","Ausnahmen" }, 175{ "Exceptions","Ausnahmen" },
176{ "Exclude holidays","Ohne freie Tage" }, 176{ "Exclude holidays","Ohne freie Tage" },
177{ "Exclude Saturdays","Ohne Samstage" }, 177{ "Exclude Saturdays","Ohne Samstage" },
178{ "Feb","Feb" }, 178{ "Feb","Feb" },
179{ "February","Februar" }, 179{ "February","Februar" },
180{ "&Find","Suche!" }, 180{ "&Find","Suche!" },
181{ "Fonts","Schriftart" }, 181{ "Fonts","Schriftart" },
182{ "Force take local entry always","Erzwinge:Nimm immer lokalen Eintrag" }, 182{ "Force take local entry always","Erzwinge:Nimm immer lokalen Eintrag" },
183{ "Force take remote entry always","Erzwinge:Nimm immer fernen Eintrag"}, 183{ "Force take remote entry always","Erzwinge:Nimm immer fernen Eintrag"},
184{ "Free","Frei" }, 184{ "Free","Frei" },
185{ "Friday","Freitag" }, 185{ "Friday","Freitag" },
186{ "Fri","Fr" }, 186{ "Fri","Fr" },
187{ "From:","Vom:" }, 187{ "From:","Vom:" },
188{ "Full &name:","Vor- und &Nachname:" }, 188{ "Full &name:","Vor- und &Nachname:" },
189{ "General","Allgemein" }, 189{ "General","Allgemein" },
190{ "German","Deutsch" }, 190{ "German","Deutsch" },
191{ "Gifts","Geschenke" }, 191{ "Gifts","Geschenke" },
192{ "Go to Today","Heute anzeigen" }, 192{ "Go to Today","Heute anzeigen" },
193{ "Help","Hilfe" }, 193{ "Help","Hilfe" },
194{ "Hide Dates","Daten ausblenden" }, 194{ "Hide Dates","Daten ausblenden" },
195{ "Highlight color:","Markierungen:" }, 195{ "Highlight color:","Markierungen:" },
196{ "Holiday color:","Freie Tage:" }, 196{ "Holiday color:","Freie Tage:" },
197{ "hour(s)","Stunde(n)" }, 197{ "hour(s)","Stunde(n)" },
198{ "In %1 days: ","In %1 Tagen: " }, 198{ "In %1 days: ","In %1 Tagen: " },
199{ "Incomplete Todo:","Unerledigte Aufgaben:" }, 199{ "Incomplete Todo:","Unerledigte Aufgaben:" },
200{ "Information","Information" }, 200{ "Information","Information" },
201{ "Invalid search expression,\ncannot perform ","Kann Suche nicht ausführen" }, 201{ "Invalid search expression,\ncannot perform ","Kann Suche nicht ausführen" },
202{ "Jan","Jan" }, 202{ "Jan","Jan" },
203{ "January","Januar" }, 203{ "January","Januar" },
204{ "JournalView:","Journal Ansicht:" }, 204{ "JournalView:","Journal Ansicht:" },
205{ "Journals","Journale" }, 205{ "Journals","Journale" },
206{ "Jul","Jul" }, 206{ "Jul","Jul" },
207{ "July","Juli" }, 207{ "July","Juli" },
208{ "Jump to date","Springe zum Datum" }, 208{ "Jump to date","Springe zum Datum" },
209{ "June","Juni" }, 209{ "June","Juni" },
210{ "Jun","Jun" }, 210{ "Jun","Jun" },
211{ "Key Bindings...","Tastenzuordnung..." }, 211{ "Key Bindings...","Tastenzuordnung..." },
212{ "Kids","Kinder" }, 212{ "Kids","Kinder" },
213{ "Known Problems...","Bekannte Probleme..." }, 213{ "Known Problems...","Bekannte Probleme..." },
214{ "KO/Pi Find ","KO/Pi Suchdialog " }, 214{ "KO/Pi Find ","KO/Pi Suchdialog " },
215{ "KO/Pi Find: ","KO/Pi Suchen: " }, 215{ "KO/Pi Find: ","KO/Pi Suchen: " },
216{ "KO/Pi is starting ... "," KO/Pi startet ... \n... Zeit für eine Kaffeepause ..." }, 216{ "KO/Pi is starting ... "," KO/Pi startet ... \n... Zeit für eine Kaffeepause ..." },
217{ "Language:(needs restart)","Sprache (Neustart!)" }, 217{ "Language:(needs restart)","Sprache (Neustart!)" },
218{ "Language:","Sprache" }, 218{ "Language:","Sprache" },
219{ "Large","Etwas mehr" }, 219{ "Large","Etwas mehr" },
220{ "List View:","Listenansicht:" }, 220{ "List View:","Listenansicht:" },
221{ "List View","Listenansicht" }, 221{ "List View","Listenansicht" },
222{ "Load/Save","Laden/Speichern" }, 222{ "Load/Save","Laden/Speichern" },
223{ "Load Template","Lade Vorlage" }, 223{ "Load Template","Lade Vorlage" },
224{ "Locale","Localisation" }, 224{ "Locale","Localisation" },
225{ "Local temp file:","Lokale temp. Datei:" }, 225{ "Local temp file:","Lokale temp. Datei:" },
226{ "Location: ","Ort: " }, 226{ "Location: ","Ort: " },
227{ "Location:","Ort:" }, 227{ "Location:","Ort:" },
228{ "Mail client","Mail Programm" }, 228{ "Mail client","Mail Programm" },
229{ "Mail Client","Mail Programm" }, 229{ "Mail Client","Mail Programm" },
230{ "March","März" }, 230{ "March","März" },
231{ "Mar","Mär" }, 231{ "Mar","Mär" },
232{ "May","Mai" }, 232{ "May","Mai" },
233{ "M. Bains line:","M. Bains Linie:" }, 233{ "M. Bains line:","M. Bains Linie:" },
234{ "Medium","Medium" }, 234{ "Medium","Medium" },
235{ "Method","Methode" }, 235{ "Method","Methode" },
236{ "minute(s)","Minute(n)" }, 236{ "minute(s)","Minute(n)" },
237{ "Monday","Montag" }, 237{ "Monday","Montag" },
238{ "Mon","Mo" }, 238{ "Mon","Mo" },
239{ "Monthly","Monatlich" }, 239{ "Monthly","Monatlich" },
240{ "Month not long enough","Monat ist nicht lang genug" }, 240{ "Month not long enough","Monat ist nicht lang genug" },
241{ "month(s)","Monat(e)" }, 241{ "month(s)","Monat(e)" },
242{ "Month view:","Monatsansicht:" }, 242{ "Month view:","Monatsansicht:" },
243{ "Month view uses category colors","Monatsansicht zeigt Kategorie Farben" }, 243{ "Month view uses category colors","Monatsansicht zeigt Kategorie Farben" },
244{ "Todo view uses category colors","To-Do Ansicht zeigt Kategorie Farben" }, 244{ "Todo view uses category colors","To-Do Ansicht zeigt Kategorie Farben" },
245{ "Move &Down","Nach unten verschieben" }, 245{ "Move &Down","Nach unten verschieben" },
246{ "Move &Up","Nach oben verschieben" }, 246{ "Move &Up","Nach oben verschieben" },
247{ "Name:","Name:" }, 247{ "Name:","Name:" },
248{ "Name","Name" }, 248{ "Name","Name" },
249{ "\nAre you sure you want\nto delete this event?","\nSind Sie sicher, dass Sie\nden Termin löschen möchten?" }, 249{ "\nAre you sure you want\nto delete this event?","\nSind Sie sicher, dass Sie\nden Termin löschen möchten?" },
250{ "%n Days","%n Tage" }, 250{ "%n Days","%n Tage" },
251{ "Never","Nie" }, 251{ "Never","Nie" },
252{ "New event...","Neuer Termin..." }, 252{ "New event...","Neuer Termin..." },
253{ "New event","Neuer Termin" }, 253{ "New event","Neuer Termin" },
254{ "New Event...","Neuer Termin..." }, 254{ "New Event...","Neuer Termin..." },
255{ "New Events/Todos should","Neue Termine/Todos sollten" }, 255{ "New Events/Todos should","Neue Termine/Todos sollten" },
256{ "&New","&Neu" }, 256{ "&New","&Neu" },
257{ "New","Neu", }, 257{ "New","Neu", },
258{ "New Sub-Todo...","Neues Sub-Todo..." }, 258{ "New Sub-Todo...","Neues Sub-Todo..." },
259{ "New Todo...","Neues Todo..." }, 259{ "New Todo...","Neues Todo..." },
260{ "Next Alarm: ","Nächster Alarm: ", }, 260{ "Next Alarm: ","Nächster Alarm: ", },
261{ "&Next Day","&Nächster Tag", }, 261{ "&Next Day","&Nächster Tag", },
262{ "Next days view uses full window","Nächste-X-Tage nutzt Vollbild" }, 262{ "Next days view uses full window","Nächste-X-Tage nutzt Vollbild" },
263{ "Next month","Nächster Monat" }, 263{ "Next month","Nächster Monat" },
264{ "&Next Week","&Nächste Woche" }, 264{ "&Next Week","&Nächste Woche" },
265{ "Next year","Nächstes Jahr" }, 265{ "Next year","Nächstes Jahr" },
266{ "Next Year","Nächstes Jahr" }, 266{ "Next Year","Nächstes Jahr" },
267{ "%n h","%n Std" }, 267{ "%n h","%n Std" },
268{ "No ending date","Kein End-Datum", }, 268{ "No ending date","Kein End-Datum", },
269{ "No event, nothing to do.","Kein Termin, nichts zu tun.", }, 269{ "No event, nothing to do.","Kein Termin, nichts zu tun.", },
270{ "No event selected.","Kein Termin selektiert" }, 270{ "No event selected.","Kein Termin selektiert" },
271{ "No","Nein" }, 271{ "No","Nein" },
272{ "No program set","Kein Programm ausgewählt", }, 272{ "No program set","Kein Programm ausgewählt", },
273{ "Normal","Normal" }, 273{ "Normal","Normal" },
274{ "[No selection]","Keine Selektion", }, 274{ "[No selection]","Keine Selektion", },
275{ "No sound set","Kein Sound ausgewählt", }, 275{ "No sound set","Kein Sound ausgewählt", },
276{ "no time ","keine Zeit ", }, 276{ "no time ","keine Zeit ", },
277{ "no time","keine Zeit", }, 277{ "no time","keine Zeit", },
278{ "No Time","Keine Zeit" }, 278{ "No Time","Keine Zeit" },
279{ "November","November" }, 279{ "November","November" },
280{ "Nov","Nov", }, 280{ "Nov","Nov", },
281{ "\nThis event recurs\nover multiple dates.\n","\nDieser Termin wiederholt sich an mehreren Tagen.\n" }, 281{ "\nThis event recurs\nover multiple dates.\n","\nDieser Termin wiederholt sich an mehreren Tagen.\n" },
282{ "occurrence(s)","Vorkommen" }, 282{ "occurrence(s)","Vorkommen" },
283{ "October","Oktober" }, 283{ "October","Oktober" },
284{ "Oct","Okt", }, 284{ "Oct","Okt", },
285{ "O-due!","Ü-fällig! " }, 285{ "O-due!","Ü-fällig! " },
286{ "&OK","&OK" }, 286{ "&OK","&OK" },
287{ "Ok+Show!","Ok+Anzeigen" }, 287{ "Ok+Show!","Ok+Anzeigen" },
288{ "Organizer: %1","Organisator %1" }, 288{ "Organizer: %1","Organisator %1" },
289{ "Organizer","Organisator" }, 289{ "Organizer","Organisator" },
290{ "Owner: ","Besitzer: " }, 290{ "Owner: ","Besitzer: " },
291{ "Owner:","Besitzer:" }, 291{ "Owner:","Besitzer:" },
292{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" }, 292{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" },
293{ "Pick a date to display","Wähle einen Tag zum anzeigen aus" }, 293{ "Pick a date to display","Wähle einen Tag zum anzeigen aus" },
294{ "Please specify a valid due date.","Bitte gültiges Fälligkeitsdatum angeben."}, 294{ "Please specify a valid due date.","Bitte gültiges Fälligkeitsdatum angeben."},
295{ "Please specify a valid end date, for example '%1'.","Bitte gültiges Enddatum angeben, z.B.'%1'." }, 295{ "Please specify a valid end date, for example '%1'.","Bitte gültiges Enddatum angeben, z.B.'%1'." },
296{ "Please specify a valid start date.","Bitte gültiges Startdatum angeben." }, 296{ "Please specify a valid start date.","Bitte gültiges Startdatum angeben." },
297{ "Please specify a valid start date, for example '%1'.","Bitte gültiges Startdatum angeben, z.B. '%1'." }, 297{ "Please specify a valid start date, for example '%1'.","Bitte gültiges Startdatum angeben, z.B. '%1'." },
298{ "Please specify a valid start time.","Bitte gültige Startzeit angeben."}, 298{ "Please specify a valid start time.","Bitte gültige Startzeit angeben."},
299{ "Please specify a valid start time, for example '%1'.","Bitte gültige Startzeit angeben, z.B. '%1'." }, 299{ "Please specify a valid start time, for example '%1'.","Bitte gültige Startzeit angeben, z.B. '%1'." },
300{ "Preferences - some settings need a restart (nr)","Einstellungen - teilweise Neustart erforderlich (bn)" }, 300{ "Preferences - some settings need a restart (nr)","Einstellungen - teilweise Neustart erforderlich (bn)" },
301{ "&Previous Day","Vorheriger Tag" }, 301{ "&Previous Day","Vorheriger Tag" },
302{ "Previous month","Vorheriger Monat" }, 302{ "Previous month","Vorheriger Monat" },
303{ "Previous Month","Vorheriger Monat" }, 303{ "Previous Month","Vorheriger Monat" },
304{ "&Previous Week","Vorherige Woche" }, 304{ "&Previous Week","Vorherige Woche" },
305{ "Previous year","Vorheriges Jahr" }, 305{ "Previous year","Vorheriges Jahr" },
306{ "Previous Year","Vorheriges Jahr" }, 306{ "Previous Year","Vorheriges Jahr" },
307{ "Printing","Drucken" }, 307{ "Printing","Drucken" },
308{ "Priority:","Priorität:" }, 308{ "Priority:","Priorität:" },
309{ "Private","Privat" }, 309{ "Private","Privat" },
310{ "Proceed","Weiter" }, 310{ "Proceed","Weiter" },
311{ "Public","Öffentlich" }, 311{ "Public","Öffentlich" },
312{ "Purge","Entferne" }, 312{ "Purge","Entferne" },
313{ "Purge Completed","Entferne erledigte ToDos" }, 313{ "Purge Completed","Entferne erledigte ToDos" },
314{ "Purge To-Dos","Todos bereinigen" }, 314{ "Purge To-Dos","Todos bereinigen" },
315{ "read-only","schreibgeschützt" }, 315{ "read-only","schreibgeschützt" },
316{ "Recur every","Wiederh. alle" }, 316{ "Recur every","Wiederh. alle" },
317{ "Recur in the month of","Wiederh. im Monat" }, 317{ "Recur in the month of","Wiederh. im Monat" },
318{ "Recur on the","Wiederh. am" }, 318{ "Recur on the","Wiederh. am" },
319{ "Recur on this day","Wiederh. am diesen Tag" }, 319{ "Recur on this day","Wiederh. am diesen Tag" },
320{ "Recurrence Range...","Wiederholungs Zeitraum..." }, 320{ "Recurrence Range...","Wiederholungs Zeitraum..." },
321{ "Recurrence Range","Wiederholungs Zeitraum" }, 321{ "Recurrence Range","Wiederholungs Zeitraum" },
322{ "Recurrence Rule","Wiederholungs Regel" }, 322{ "Recurrence Rule","Wiederholungs Regel" },
323{ "Recurrence","Wiederholung" }, 323{ "Recurrence","Wiederholung" },
324{ "Recurs","Wiederholung" }, 324{ "Recurs","Wiederholung" },
325{"&Reject","Abweisen"}, 325{"&Reject","Abweisen"},
326{ "Reminder:","Alarm:" }, 326{ "Reminder:","Alarm:" },
327{ "Rem.:","Alarm:" }, 327{ "Rem.:","Alarm:" },
328{ "Rem.","Alarm:" }, 328{ "Rem.","Alarm:" },
329{ "Remote file:","Remote Datei:"}, 329{ "Remote file:","Remote Datei:"},
330{ "Remote IP:","Remote (ferne) IP:" }, 330{ "Remote IP:","Remote (ferne) IP:" },
331{ "Remote syncing (via ssh/scp) network settings ","Remote Sync (via ssh/scp) Netzwerk Einstellungen " }, 331{ "Remote syncing (via ssh/scp) network settings ","Remote Sync (via ssh/scp) Netzwerk Einstellungen " },
332{ "Remote user:","Remote Benutzer"}, 332{ "Remote user:","Remote Benutzer"},
333{ "&Remove","Entfe&rnen" }, 333{ "&Remove","Entfe&rnen" },
334{ "Remove","Entfernen" }, 334{ "Remove","Entfernen" },
335{ "Request response","Bemerkung anfordern" }, 335{ "Request response","Bemerkung anfordern" },
336{ "Role:","Rolle:" }, 336{ "Role:","Rolle:" },
337{ "Role","Rolle" }, 337{ "Role","Rolle" },
338{ "Sat","Sa" }, 338{ "Sat","Sa" },
339{ "Saturday","Samstag" }, 339{ "Saturday","Samstag" },
340{ "Search for:","Suche nach:" }, 340{ "Search for:","Suche nach:" },
341{ "Search In","Suche in" }, 341{ "Search In","Suche in" },
342{ "Search...","Suche..." }, 342{ "Search...","Suche..." },
343{ "Search","Suche" }, 343{ "Search","Suche" },
344{ "Select Addresses","Wähle Adressen" }, 344{ "Select Addresses","Wähle Adressen" },
345{ "Select all","Selektiere Alle" }, 345{ "Select all","Selektiere Alle" },
346{ "Select a month","Wähle Monat" }, 346{ "Select a month","Wähle Monat" },
347{ "Select a week","Wähle Woche" }, 347{ "Select a week","Wähle Woche" },
348{ "Select a year","Wähle Jahr" }, 348{ "Select a year","Wähle Jahr" },
349{ "Send directly","Sende direkt" }, 349{ "Send directly","Sende direkt" },
350{ "&Send Messages","&Sende Nachrichten", }, 350{ "&Send Messages","&Sende Nachrichten", },
351{ "Sep","Sep" }, 351{ "Sep","Sep" },
352{ "September","September" }, 352{ "September","September" },
353{ "Shopping","Einkaufen" }, 353{ "Shopping","Einkaufen" },
354{ "Use short date in (WN/E) view","Kurzdatum in (WN/Termin) Ansicht" }, 354{ "Use short date in (WN/E) view","Kurzdatum in (WN/Termin) Ansicht" },
355{ "Show Dates","Zeige Daten" }, 355{ "Show Dates","Zeige Daten" },
356{ "Show events that recur daily in date nav.","Zeige tägl.wiederh.Term.in Datums Nav." }, 356{ "Show events that recur daily in date nav.","Zeige tägl.wiederh.Term.in Datums Nav." },
357{ "Show Event...","Zeige Termin..." }, 357{ "Show Event...","Zeige Termin..." },
358{ "Show ev. that recur weekly in date nav.","Zeige wöch.wiederh.Term.in Datums Nav." }, 358{ "Show ev. that recur weekly in date nav.","Zeige wöch.wiederh.Term.in Datums Nav." },
359{ "Show Marcus Bains line","Zeige Marcus Bains Linie" }, 359{ "Show Marcus Bains line","Zeige Marcus Bains Linie" },
360{ "Show summary after syncing","Zeige Zusammenfassung nach Sync." }, 360{ "Show summary after syncing","Zeige Zusammenfassung nach Sync." },
361{ "Show time as:","Zeige Zeit als" }, 361{ "Show time as:","Zeige Zeit als" },
362{ "Show Todo...","Zeige To-Do" }, 362{ "Show Todo...","Zeige To-Do" },
363{ "Show topmost todo prios in What's N.:","Anz. höchster Prios in What's N.:"}, 363{ "Show topmost todo prios in What's N.:","Anz. höchster Prios in What's N.:"},
364{ "Show topmost todo prios in What's Next:","Anz. höchster Prios in What's Next:"}, 364{ "Show topmost todo prios in What's Next:","Anz. höchster Prios in What's Next:"},
365{ "Show vertical screen (Needs restart)","Vertikaler Bildschirm-Layout (Neustart!)" }, 365{ "Show vertical screen (Needs restart)","Vertikaler Bildschirm-Layout (Neustart!)" },
366{ "&Show","Zeige" }, 366{ "&Show","Zeige" },
367{ "Show...","Zeige..." }, 367{ "Show...","Zeige..." },
368{ "Show","Zeige" }, 368{ "Show","Zeige" },
369{ "Small","Klein" }, 369{ "Small","Klein" },
370{ "Sorry","Entschuldigung" }, 370{ "Sorry","Entschuldigung" },
371{"Sorry, the copy command failed!\nCommand was:\n","Der Kopierbefehl schlug fehl!\nBefehl war:\n"}, 371{"Sorry, the copy command failed!\nCommand was:\n","Der Kopierbefehl schlug fehl!\nBefehl war:\n"},
372{ "Start:","Start:" }, 372{ "Start:","Start:" },
373{ "Start Date","Start Datum" }, 373{ "Start Date","Start Datum" },
374{ "Start date: %1","Start Datum: %1" }, 374{ "Start date: %1","Start Datum: %1" },
375{ "Start Time","Start Zeit" }, 375{ "Start Time","Start Zeit" },
376{ "Status:","Status:" }, 376{ "Status:","Status:" },
377{ "Status","Status:" }, 377{ "Status","Status:" },
378{ "Summaries","Titel" }, 378{ "Summaries","Titel" },
379{ "Summary:","Titel:" }, 379{ "Summary:","Titel:" },
380{ "Summary","Titel" }, 380{ "Summary","Titel" },
381{ "Sunday","Sonntag" }, 381{ "Sunday","Sonntag" },
382{ "Sun","So" }, 382{ "Sun","So" },
383{ "Sync preferences:","Sync Einstellungen" }, 383{ "Sync preferences:","Sync Einstellungen" },
384{ "Sync Prefs","Sync Einstellungen" }, 384{ "Sync Prefs","Sync Einstellungen" },
385{ "Syncronize","Daten abgleich" }, 385{ "Syncronize","Daten abgleich" },
386{ "Take local entry on conflict","Nimm lokalen Eintrag beim Konflikt" }, 386{ "Take local entry on conflict","Nimm lokalen Eintrag beim Konflikt" },
387{ "Take newest entry on conflict","Nimm neuesten Eintrag beim Konflikt" }, 387{ "Take newest entry on conflict","Nimm neuesten Eintrag beim Konflikt" },
388{ "Take remote entry on conflict","Nimm fernen Eintrag beim Konflikt" }, 388{ "Take remote entry on conflict","Nimm fernen Eintrag beim Konflikt" },
389{ "Template '%1' does not contain a valid Todo.","Template '%1' enthält kein gültiges To-Do" }, 389{ "Template '%1' does not contain a valid Todo.","Template '%1' enthält kein gültiges To-Do" },
390{ "Template does not contain a valid Event.","Template '%1' enthält keinen gültigen Termin" }, 390{ "Template does not contain a valid Event.","Template '%1' enthält keinen gültigen Termin" },
391{ "Template...","Vorlage..." }, 391{ "Template...","Vorlage..." },
392{ "This day","Dieser Tag" }, 392{ "This day","Dieser Tag" },
393{ "This is an experimental feature. ","Dieses Feature ist experimentel" }, 393{ "This is an experimental feature. ","Dieses Feature ist experimentel" },
394{ "This item will be\npermanently deleted.","Dieser Eintrag wird\nkomplett gelöscht." }, 394{ "This item will be\npermanently deleted.","Dieser Eintrag wird\nkomplett gelöscht." },
395{ "This item will be permanently deleted.", "Dieser Eintrag wird komplett gelöscht." }, 395{ "This item will be permanently deleted.", "Dieser Eintrag wird komplett gelöscht." },
396{ "Thu","Do" }, 396{ "Thu","Do" },
397{ "Thursday","Donnerstag" }, 397{ "Thursday","Donnerstag" },
398{ "Time associated","Mit Zeit" }, 398{ "Time associated","Mit Zeit" },
399{ "Time bar:","Uhrzeit Zeile:" }, 399{ "Time bar:","Uhrzeit Zeile:" },
400{ "Time && Date","Zeit und Datum" }, 400{ "Time && Date","Zeit und Datum" },
401{ "Time Format","Zeit Format" }, 401{ "Time Format","Zeit Format" },
402{ "Time Format(nr):","Zeit Format(Neustart!)" }, 402{ "Time Format(nr):","Zeit Format(Neustart!)" },
403{ "Date Labels:","Datumsleiste:" }, 403{ "Date Labels:","Datumsleiste:" },
404{ "Time: ","Zeit: " }, 404{ "Time: ","Zeit: " },
405{ "Timezone:","Zeitzone:" }, 405{ "Timezone:","Zeitzone:" },
406{ "To: ","Bis: " }, 406{ "To: ","Bis: " },
407{ "To:","Bis:" }, 407{ "To:","Bis:" },
408{ "Today: ","Heute: " }, 408{ "Today: ","Heute: " },
409{ "Todo due today color:","Heute fällige To-Do's" }, 409{ "Todo due today color:","Heute fällige To-Do's" },
410{ "To-do items:","To-Do items:" }, 410{ "To-do items:","To-Do items:" },
411{ "Todo overdue color:","Überfällige To-Do's" }, 411{ "Todo overdue color:","Überfällige To-Do's" },
412{ "Todo","Todo" }, 412{ "Todo","Todo" },
413{ "To-do view shows completed Todos","To-do Ansicht zeigt erledigte To-dos" }, 413{ "To-do view shows completed Todos","To-do Ansicht zeigt erledigte To-dos" },
414{ "ToDoView:","Todo Ansicht:" }, 414{ "ToDoView:","Todo Ansicht:" },
415{ "Toggle Alarm","Wechsle Alarm" }, 415{ "Toggle Alarm","Wechsle Alarm" },
416{ "Toggle Allday","Umschalten Ganztag" }, 416{ "Toggle Allday","Umschalten Ganztag" },
417{ "Tomorrow: ","Morgen: " }, 417{ "Tomorrow: ","Morgen: " },
418{ "Tue","Di" }, 418{ "Tue","Di" },
419{ "Tuesday","Dienstag" }, 419{ "Tuesday","Dienstag" },
420{ "Two entries are in conflict, if: ","Zwei Einträge haben einen Konflikt, wenn:" }, 420{ "Two entries are in conflict, if: ","Zwei Einträge haben einen Konflikt, wenn:" },
421{ "Unable to find template '%1'.","Kann Vorlage '%1' nicht finden." }, 421{ "Unable to find template '%1'.","Kann Vorlage '%1' nicht finden." },
422{ "Unknown","Unbekannt" }, 422{ "Unknown","Unbekannt" },
423{ "Up","Hinauf" }, 423{ "Up","Hinauf" },
424{ "Use password (if not, ask when syncing)","Passwort: (sonst jedesmal anfragen)" }, 424{ "Use password (if not, ask when syncing)","Passwort: (sonst jedesmal anfragen)" },
425{ "User defined","Benutzerdefiniert" }, 425{ "User defined","Benutzerdefiniert" },
426{ "User long date:","Format langes Datum:" }, 426{ "User long date:","Format langes Datum:" },
427{ "User short date:","Forma kurzes Datum:" }, 427{ "User short date:","Forma kurzes Datum:" },
428{ "View","Ansicht" }, 428{ "View","Ansicht" },
429{ "View Fonts","Schriftarten Ansichten" }, 429{ "View Fonts","Schriftarten Ansichten" },
430{ "Views","Ansichten" }, 430{ "Views","Ansichten" },
431{ "Wed","Mi" }, 431{ "Wed","Mi" },
432{ "Wednesday","Mittwoch" }, 432{ "Wednesday","Mittwoch" },
433{ "Week %1","Woche %1" }, 433{ "Week %1","Woche %1" },
434{ "Weekly","Wöchentlich" }, 434{ "Weekly","Wöchentlich" },
435{ "Week starts on Sunday","Woche beginnt Sonntags" }, 435{ "Week starts on Sunday","Woche beginnt Sonntags" },
436{ "What's Next View:","What's Next Anz." }, 436{ "What's Next View:","What's Next Anz." },
437{ "What's next ?","Was kommt als nächstes?(What's Next)" }, 437{ "What's next ?","Was kommt als nächstes?(What's Next)" },
438{ "Working Hours","Tägliche Arbeitszeit" }, 438{ "Working Hours","Tägliche Arbeitszeit" },
439{ "Working hours color:","Arbeitszeit in der Agenda Ansicht:" }, 439{ "Working hours color:","Arbeitszeit in der Agenda Ansicht:" },
440{ "Write back existing entries only","Nur exisitierende Einträge zurückschreiben" }, 440{ "Write back existing entries only","Nur exisitierende Einträge zurückschreiben" },
441{ "Write back synced file","Syncronisierte Datei zurückschreiben" }, 441{ "Write back synced file","Syncronisierte Datei zurückschreiben" },
442{ "Yearly","Jährlich" }, 442{ "Yearly","Jährlich" },
443{ "year(s)","Jahr(e)" }, 443{ "year(s)","Jahr(e)" },
444{ "Yes","Ja" }, 444{ "Yes","Ja" },
445{ "You have %d item(s) selected.\n","Sie haben %d Einträge ausgewählt.\n" }, 445{ "You have %d item(s) selected.\n","Sie haben %d Einträge ausgewählt.\n" },
446{ "You have to restart KOrganizer for this setting to take effect.","Sie müssem Korganizer neu starten, damit diese Einstellung aktiviert wird." }, 446{ "You have to restart KOrganizer for this setting to take effect.","Sie müssem Korganizer neu starten, damit diese Einstellung aktiviert wird." },
447{ "week(s) on:","Woche(n) am: " }, 447{ "week(s) on:","Woche(n) am: " },
448{ "Full menu bar(nr)","Volle Menuleiste(bn)" }, 448{ "Full menu bar(nr)","Volle Menuleiste(bn)" },
449{ "Timezone has daylight saving","Zeitzone hat Sommerzeit" }, 449{ "Timezone has daylight saving","Zeitzone hat Sommerzeit" },
450{ "Actual start and end is the\nsunday before this date.","Tatsächlicher Beginn/Ende ist der\nSonntag vor diesem Datum!" }, 450{ "Actual start and end is the\nsunday before this date.","Tatsächlicher Beginn/Ende ist der\nSonntag vor diesem Datum!" },
451{ "The year in the date is ignored.","Das Jahr vom Datum wird ignoriert." }, 451{ "The year in the date is ignored.","Das Jahr vom Datum wird ignoriert." },
452{ "Daylight start:","Sommerzeit Beginn:" }, 452{ "Daylight start:","Sommerzeit Beginn:" },
453{ "Daylight end:","Sommerzeit Ende:" }, 453{ "Daylight end:","Sommerzeit Ende:" },
454{ "Time Zone","Zeitzone" }, 454{ "Time Zone","Zeitzone" },
455{ "Monday 19 April 2004: %A %d %B %Y","Montag 19 April 2004: %A %d %B %Y" }, 455{ "Monday 19 April 2004: %A %d %B %Y","Montag 19 April 2004: %A %d %B %Y" },
456{ "%A: Monday --- %a: Mon","%A: Montag --- %a: Mon" }, 456{ "%A: Monday --- %a: Mon","%A: Montag --- %a: Mon" },
457{ "minutely","minütlich" }, 457{ "minutely","minütlich" },
458{ "hourly","stündlich" }, 458{ "hourly","stündlich" },
459{ "daily","täglich" }, 459{ "daily","täglich" },
460{ "weekly","wöchentlich" }, 460{ "weekly","wöchentlich" },
461{ "monthly","monatlich" }, 461{ "monthly","monatlich" },
462{ "day-monthly","tag-monatlich" }, 462{ "day-monthly","tag-monatlich" },
463{ "month-yearly","monat-jährlich" }, 463{ "month-yearly","monat-jährlich" },
464{ "day-yearly","tag-jährlich" }, 464{ "day-yearly","tag-jährlich" },
465{ "position-yearly","pos-jährlich" }, 465{ "position-yearly","pos-jährlich" },
466{ "Edit item on doubleclick (if not, show)","Editiere mit Doppelklick(wenn nicht, zeige)" }, 466{ "Edit item on doubleclick (if not, show)","Editiere mit Doppelklick(wenn nicht, zeige)" },
467{ "Highlight current day in agenda","Hebe >>heute<< in Agenda hervor" }, 467{ "Highlight current day in agenda","Hebe >>heute<< in Agenda hervor" },
468{ "Use light color for highlight current day","Helle Farbe für >>heute<< Hervorhebung" }, 468{ "Use light color for highlight current day","Helle Farbe für >>heute<< Hervorhebung" },
469{ "Highlight selection in Time Edit","Hebe Auswahl in Zeit Edit hervor" }, 469{ "Highlight selection in Time Edit","Hebe Auswahl in Zeit Edit hervor" },
470{ "Hold fullscreen on view change","Behalte Vollbild bei Ansichswechsel" }, 470{ "Hold fullscreen on view change","Behalte Vollbild bei Ansichswechsel" },
471{ "Hold non-fullscreen on view change","Behalte Nicht-Vollbild bei Ansichtsw." }, 471{ "Hold non-fullscreen on view change","Behalte Nicht-Vollbild bei Ansichtsw." },
472{ "Event list view uses full window","Listenansicht nutzt Vollbild" }, 472{ "Event list view uses full window","Listenansicht nutzt Vollbild" },
473{ "Set agenda to DayBeginsAt on change","Setze Agenda auf TagBeginntUm bei Wechsel" }, 473{ "Set agenda to DayBeginsAt on change","Setze Agenda auf TagBeginntUm bei Wechsel" },
474{ "Set agenda to current time on change","Setze Agenda auf gegenw.Zeit bei Wechsel" }, 474{ "Set agenda to current time on change","Setze Agenda auf gegenw.Zeit bei Wechsel" },
475{ "Listview uses monthly timespan","Listenansicht zeigt monatliche Zeitspanne" }, 475{ "Listview uses monthly timespan","Listenansicht zeigt monatliche Zeitspanne" },
476{ "ViewChange","Ansichtswechsel" }, 476{ "ViewChange","Ansichtswechsel" },
477{ "Default alarm *.wav file:","Standard Alarm *.wav Datei:" }, 477{ "Default alarm *.wav file:","Standard Alarm *.wav Datei:" },
478{ "This setting is useless for 5500 user!","Diese Einst. ist nutzlos für 5500 Nutzer" }, 478{ "This setting is useless for 5500 user!","Diese Einst. ist nutzlos für 5500 Nutzer" },
479{ "File","Datei" }, 479{ "File","Datei" },
480{ "Clone...","Dupliziere.." }, 480{ "Clone...","Dupliziere.." },
481{ "Move...","Bewege..." }, 481{ "Move...","Bewege..." },
482{ "Beam...","Sende via IR..." }, 482{ "Beam...","Sende via IR..." },
483{ "&Clone...","Dupliziere.." }, 483{ "&Clone...","Dupliziere.." },
484{ "&Move...","Bewege..." }, 484{ "&Move...","Bewege..." },
485{ "&Beam...","Sende via IR..." }, 485{ "&Beam...","Sende via IR..." },
486{ "Show Completed","Zeige erledigte Todos" }, 486{ "Show Completed","Zeige erledigte Todos" },
487{ "Show Quick Todo","Zeige Quick Todo" }, 487{ "Show Quick Todo","Zeige Quick Todo" },
488{ "Unparent Todo","Un-sub Todo" }, 488{ "Unparent Todo","Un-sub Todo" },
489{ "Save selected to file...","Speichere Selektierte..." }, 489{ "Save selected to file...","Speichere Selektierte..." },
490{ "Add Categ. to selected...","Füge zu Selekt. Kateg. hinzu..." }, 490{ "Add Categ. to selected...","Füge zu Selekt. Kateg. hinzu..." },
491{ "Set Categ. for selected...","Setze Kateg. für Selekt." }, 491{ "Set Categ. for selected...","Setze Kateg. für Selekt." },
492{ "Beam selected via IR","Sende Selekt. via IR..." }, 492{ "Beam selected via IR","Sende Selekt. via IR..." },
493{ "Search","Suchen" }, 493{ "Search","Suchen" },
494{ "Date Picker","Datum auswählen" }, 494{ "Date Picker","Datum auswählen" },
495{ "Day View","Tagesansicht" }, 495{ "Day View","Tagesansicht" },
496{ "Work Week","Arbeitswoche" }, 496{ "Work Week","Arbeitswoche" },
497{ "Week","Wochenansicht" }, 497{ "Week","Wochenansicht" },
498{ "Month","Monatsansicht" }, 498{ "Month","Monatsansicht" },
499{ "Todo View","Todo Liste" }, 499{ "Todo View","Todo Liste" },
500{ "Journal","Journal Ansicht" }, 500{ "Journal","Journal Ansicht" },
501{ "Next days","Nächste Tage" }, 501{ "Next days","Nächste Tage" },
502{ "Print agenda selection...","Drucke Agendaselektion..." }, 502{ "Print agenda selection...","Drucke Agendaselektion..." },
503{ "Toggle DateNavigator","Navigator umschalten" }, 503{ "Toggle DateNavigator","Navigator umschalten" },
504{ "Toggle FilterView","Filteransicht umschalten" }, 504{ "Toggle FilterView","Filteransicht umschalten" },
505{ "Prev. month","Vorheriger Monat" }, 505{ "Prev. month","Vorheriger Monat" },
506{ "Go backward","Gehe zurück" }, 506{ "Go backward","Gehe zurück" },
507{ "Go forward","Gehe weiter" }, 507{ "Go forward","Gehe weiter" },
508{ "Synchronize","Synchronisieren" }, 508{ "Synchronize","Synchronisieren" },
509{ "AgendaSize","Agendagröße" }, 509{ "AgendaSize","Agendagröße" },
510{ "Import (*.ics/*.vcs) file","Importiere (*.ics/*.vcs) Datei" }, 510{ "Import (*.ics/*.vcs) file","Importiere (*.ics/*.vcs) Datei" },
511{ "Import last file","Importiere letzte Datei" }, 511{ "Import last file","Importiere letzte Datei" },
512{ "Import Opie/Qtopia Cal.","Importiere Opie/Qtopia Kal." }, 512{ "Import Opie/Qtopia Cal.","Importiere Opie/Qtopia Kal." },
513{ "Load Calendar Backup","Lade Kalender Backup" }, 513{ "Load Calendar Backup","Lade Kalender Backup" },
514{ "Save Calendar Backup","Speichere Kalender Backup" }, 514{ "Save Calendar Backup","Speichere Kalender Backup" },
515{ "Export VCalendar","Exportiere VCalendar" }, 515{ "Export VCalendar","Exportiere VCalendar" },
516{ "Manage new categories...","Verwalte neue Kategorien..." }, 516{ "Manage new categories...","Verwalte neue Kategorien..." },
517{ "Beam complete calendar...","Sende kompletten Kalender via IR" }, 517{ "Beam complete calendar...","Sende kompletten Kalender via IR" },
518{ "Beam filtered calendar...","Sende gefilterten Kalender via IR" }, 518{ "Beam filtered calendar...","Sende gefilterten Kalender via IR" },
519{ "Remote via ssh","Über Netzwerk via ssh" }, 519{ "Remote via ssh","Über Netzwerk via ssh" },
520{ "With local file","Mit lokaler Datei" }, 520{ "With local file","Mit lokaler Datei" },
521{ "With last file","Mit letzter Datei" }, 521{ "With last file","Mit letzter Datei" },
522{ "KO/Pi: Ready for beaming","KO/Pi: Bereit zum Senden" }, 522{ "KO/Pi: Ready for beaming","KO/Pi: Bereit zum Senden" },
523{ "KO/Pi:Beaming done","KO/Pi: Senden erfolgt" }, 523{ "KO/Pi:Beaming done","KO/Pi: Senden erfolgt" },
524{ "Save filename","Speichern: Dateinamen wählen" }, 524{ "Save filename","Speichern: Dateinamen wählen" },
525{ "File already exists!\nOld file from:\n%1\nOverwrite?\n","Dateiname existiert bereits!\nAlte Datei vom:\n%1\nÜberschreiben?\n" }, 525{ "File already exists!\nOld file from:\n%1\nOverwrite?\n","Dateiname existiert bereits!\nAlte Datei vom:\n%1\nÜberschreiben?\n" },
526{ "KO/Pi: Warning!","KO/Pi: Warnung!" }, 526{ "KO/Pi: Warning!","KO/Pi: Warnung!" },
527{ "Overwrite!","Überschreibe!" }, 527{ "Overwrite!","Überschreibe!" },
528{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" }, 528{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" },
529{ "All selected items will be\npermanently deleted.\n(Deleting items will take\nsome time on a PDA)\n","Alle selektierten Einträge werden\nunwiederbringlich gelöscht.\n(Löschen kann auf dem\nPDA einige Zeit dauern)\n" }, 529{ "All selected items will be\npermanently deleted.\n(Deleting items will take\nsome time on a PDA)\n","Alle selektierten Einträge werden\nunwiederbringlich gelöscht.\n(Löschen kann auf dem\nPDA einige Zeit dauern)\n" },
530{ "KO/Pi Confirmation","KO/Pi Bestätigung" }, 530{ "KO/Pi Confirmation","KO/Pi Bestätigung" },
531{ "Close dialog to abort deletion!","Schließe Dialog um das Löschen abzubrechen!" }, 531{ "Close dialog to abort deletion!","Schließe Dialog um das Löschen abzubrechen!" },
532{ "Deleting item %d ...","Lösche Eintrag %d ..." }, 532{ "Deleting item %d ...","Lösche Eintrag %d ..." },
533{ "%d items remaining in list.","%d Einträge sind in der Liste verblieben." }, 533{ "%d items remaining in list.","%d Einträge sind in der Liste verblieben." },
534{ "Size","Größe" }, 534{ "Size","Größe" },
535{ "Date","Datum" }, 535{ "Date","Datum" },
536{ "Mime Type","Datei Typ" }, 536{ "Mime Type","Datei Typ" },
537{ "All Files","Alle Dateien" }, 537{ "All Files","Alle Dateien" },
538{ "Files","Dateien" }, 538{ "Files","Dateien" },
539{ "Documents","DoKumente" }, 539{ "Documents","DoKumente" },
540{ "Select Categories","Selektiere Kategorien" }, 540{ "Select Categories","Selektiere Kategorien" },
541{ " &Deselect All "," Auswahl aufheben " }, 541{ " &Deselect All "," Auswahl aufheben " },
542{ "A&dd","Hinzu" }, 542{ "A&dd","Hinzu" },
543{ "&Modify","Ändern" }, 543{ "&Modify","Ändern" },
544{ "Edit Categories","Editiere Kategorien" }, 544{ "Edit Categories","Editiere Kategorien" },
545{ " &Edit Categories "," &Editiere Kategorien " }, 545{ " &Edit Categories "," &Editiere Kategorien " },
546{ "Beam Options","Beam Einstellungen" }, 546{ "Beam Options","Beam Einstellungen" },
547{ " With timezone "," Mit Zeitzone " }, 547{ " With timezone "," Mit Zeitzone " },
548{ " Local time ", " Lokale Zeit " }, 548{ " Local time ", " Lokale Zeit " },
549{ "Manage new Categories","Verwalte neue Kategorien" }, 549{ "Manage new Categories","Verwalte neue Kategorien" },
550{ "Add to category list","Füge zur Kategorieliste hinzu" }, 550{ "Add to category list","Füge zur Kategorieliste hinzu" },
551{ "Remove from Events/Todos","Entferne von Terminen/Todos" }, 551{ "Remove from Events/Todos","Entferne von Terminen/Todos" },
552{ "After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n ","Nach dem Importieren/Laden/Syncen\nkann es neue Kategorien in den \nTerminen oder Todos geben, die nicht\nin der Kategorieliste enthalten sind.\nBitte wählen Sie, was passieren soll:\n " }, 552{ "After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n ","Nach dem Importieren/Laden/Syncen\nkann es neue Kategorien in den \nTerminen oder Todos geben, die nicht\nin der Kategorieliste enthalten sind.\nBitte wählen Sie, was passieren soll:\n " },
553{ "New categories not in list:","Kategorien, die nicht in der Liste sind:" }, 553{ "New categories not in list:","Kategorien, die nicht in der Liste sind:" },
554{ "File format","Datei Format" }, 554{ "File format","Datei Format" },
555{ "Time format","Zeit Format" }, 555{ "Time format","Zeit Format" },
556{ "Delete all\ncompleted To-Dos?","Lösche alle\nerledigten To-Dos?" }, 556{ "Delete all\ncompleted To-Dos?","Lösche alle\nerledigten To-Dos?" },
557{ "KO/Pi:Saving Data to File ...","KO/Pi: Speichere Kalender in Datei ..." }, 557{ "KO/Pi:Saving Data to File ...","KO/Pi: Speichere Kalender in Datei ..." },
558{ "KO/Pi:File Saved. Needed %d sec, %d ms","KO/Pi: Abgespeichert in %d sec, %d ms" }, 558{ "KO/Pi:File Saved. Needed %d sec, %d ms","KO/Pi: Abgespeichert in %d sec, %d ms" },
559{ "h","Std" }, 559{ "h","Std" },
560{ "min","Min" }, 560{ "min","Min" },
561{ "hou","Std" }, 561{ "hou","Std" },
562{ "day","Tag" }, 562{ "day","Tag" },
563{ "French","Französich" }, 563{ "French","Französich" },
564{ "Time","Zeit" }, 564{ "Time","Zeit" },
565{ "Event Viewer","Termin Ansicht" }, 565{ "Event Viewer","Termin Ansicht" },
566{ "Cancel Sync","Sync Abbrechen" }, 566{ "Cancel Sync","Sync Abbrechen" },
567{ "Remote","Fern" }, 567{ "Remote","Fern" },
568{ "Local","Lokal" }, 568{ "Local","Lokal" },
569{ "Conflict! Please choose entry","Konflikt! Bitte Eintrag wählen" }, 569{ "Conflict! Please choose entry","Konflikt! Bitte Eintrag wählen" },
570{ "Local: ","Lokal: " }, 570{ "Local: ","Lokal: " },
571{ "Remote: ","Fern: " }, 571{ "Remote: ","Fern: " },
572{ "Last modified: ","Zuletzt geändert: " }, 572{ "Last modified: ","Zuletzt geändert: " },
573{ "Location: ","Ort: " }, 573{ "Location: ","Ort: " },
574{ "<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>","<p><b>Von:</b> %1 </p><p><b>Bis:</b> %2</p>" }, 574{ "<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>","<p><b>Von:</b> %1 </p><p><b>Bis:</b> %2</p>" },
575{ "<p><b>On:</b> %1</p>","<p><b>Am:</b> %1</p>" }, 575{ "<p><b>On:</b> %1</p>","<p><b>Am:</b> %1</p>" },
576{ "<p><b>From:</b> %1</p> ","<p><b>Von:</b> %1</p> " }, 576{ "<p><b>From:</b> %1</p> ","<p><b>Von:</b> %1</p> " },
577{ "<p><b>To:</b> %1</p>","<p><b>Bis:</b> %1</p>" }, 577{ "<p><b>To:</b> %1</p>","<p><b>Bis:</b> %1</p>" },
578{ "<p><b>On:</b> %1</p> ","<p><b>Am:</b> %1</p> " }, 578{ "<p><b>On:</b> %1</p> ","<p><b>Am:</b> %1</p> " },
579{ "<p><b>From:</b> %1 <b>To:</b> %2</p>","<p><b>Von:</b> %1 <b>Bis:</b> %2</p>" }, 579{ "<p><b>From:</b> %1 <b>To:</b> %2</p>","<p><b>Von:</b> %1 <b>Bis:</b> %2</p>" },
580{ "This is a %1 recurring event.","Das ist ein %1 wiederholender Termin." }, 580{ "This is a %1 recurring event.","Das ist ein %1 wiederholender Termin." },
581{ "<b>Next recurrence is on:</b>","<b>Nächste Wiederholung ist am:</b>" }, 581{ "<b>Next recurrence is on:</b>","<b>Nächste Wiederholung ist am:</b>" },
582{ "<b>Last recurrence was on:</b>","<b>Letzte Wiederholung war am:</b>" }, 582{ "<b>Last recurrence was on:</b>","<b>Letzte Wiederholung war am:</b>" },
583{ "( %1 min before )","( %1 min vorher )" }, 583{ "( %1 min before )","( %1 min vorher )" },
584{ "<b>Alarm on: ","<b>Alarm am: " }, 584{ "<b>Alarm on: ","<b>Alarm am: " },
585{ "<b>Details: </b>","<b>Details: </b>" }, 585{ "<b>Details: </b>","<b>Details: </b>" },
586{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" }, 586{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" },
587{ "<p><i>%1 % completed</i></p>","<p><i>%1 % erledigt</i></p>" }, 587{ "<p><i>%1 % completed</i></p>","<p><i>%1 % erledigt</i></p>" },
588{ "Organizer","Organisator" }, 588{ "Organizer","Organisator" },
589{ "Save","Speichern" }, 589{ "Save","Speichern" },
590{ "Exit (+save)","Beenden (+ speichern)" }, 590{ "Exit (+save)","Beenden (+ speichern)" },
591{ "Home","Zuhause" }, 591{ "Home","Zuhause" },
592{ "Office","Büro" }, 592{ "Office","Büro" },
593{ "Libary","Bücherei" }, 593{ "Libary","Bücherei" },
594{ "Doctor","Arzt" }, 594{ "Doctor","Arzt" },
595{ "Beach","Strand" }, 595{ "Beach","Strand" },
596{ "Conference room","Konferenzraum" }, 596{ "Conference room","Konferenzraum" },
597{ "Drive Home","Heimfahrt" }, 597{ "Drive Home","Heimfahrt" },
598{ "Watch TV","Tv gucken" }, 598{ "Watch TV","Tv gucken" },
599{ "Phone call","Telefonanruf" }, 599{ "Phone call","Telefonanruf" },
600{ "Pay bill","Rechnung bezahlen" }, 600{ "Pay bill","Rechnung bezahlen" },
601{ "Read book","Buch lesen" }, 601{ "Read book","Buch lesen" },
602{ "Watering plants","Pflanzen giessen" }, 602{ "Watering plants","Pflanzen giessen" },
603{"Appointment","Verabredung" }, 603{"Appointment","Verabredung" },
604{"Birthday","Geburtstag" }, 604{"Birthday","Geburtstag" },
605{"Business","Geschäft" }, 605{"Business","Geschäft" },
606{"Business Travel","Geschäftsreise" }, 606{"Business Travel","Geschäftsreise" },
607{"Cinema","Kino" }, 607{"Cinema","Kino" },
608{"Customer","Kunde" }, 608{"Customer","Kunde" },
609{"Break","Pause" }, 609{"Break","Pause" },
610{"Breakfast","Frühstück" }, 610{"Breakfast","Frühstück" },
611{"Competition","Wettkampf" }, 611{"Competition","Wettkampf" },
612{"Dinner","Abendessen" }, 612{"Dinner","Abendessen" },
613{"Education","Erziehung" }, 613{"Education","Erziehung" },
614{"Family","Familie" }, 614{"Family","Familie" },
615{"Favorites","Favoriten" }, 615{"Favorites","Favoriten" },
616{"Festival","Festival" }, 616{"Festival","Festival" },
617{"Fishing","Angeln" }, 617{"Fishing","Angeln" },
618{"Flight","Flug" }, 618{"Flight","Flug" },
619{"Gifts","Geschenk" }, 619{"Gifts","Geschenk" },
620{"Holiday","Feiertag" }, 620{"Holiday","Feiertag" },
621{"Holiday Cards","Ansichtskarten" }, 621{"Holiday Cards","Ansichtskarten" },
622{"Hot Contacts","Heisse Kontakte" }, 622{"Hot Contacts","Heisse Kontakte" },
623{"Hiking","Wandern" }, 623{"Hiking","Wandern" },
624{"Hunting","Jagen" }, 624{"Hunting","Jagen" },
625{"Key Customer","Wichtiger Kunde" }, 625{"Key Customer","Wichtiger Kunde" },
626{"Kids","Kinder" }, 626{"Kids","Kinder" },
627{"Lunch","Mittagessen" }, 627{"Lunch","Mittagessen" },
628{"Meeting","Treffen" }, 628{"Meeting","Treffen" },
629{"Miscellaneous","Verschiedenes" }, 629{"Miscellaneous","Verschiedenes" },
630{"Partner","Partner" }, 630{"Partner","Partner" },
631{"Party","Partie" }, 631{"Party","Partie" },
632{"Personal","Privat" }, 632{"Personal","Privat" },
633{"Personal Travel","Privatreise"}, 633{"Personal Travel","Privatreise"},
634{"PHB","PHB" }, 634{"PHB","PHB" },
635{"Phone Calls","Telefonanruf" }, 635{"Phone Calls","Telefonanruf" },
636{"Projects","Projekt" }, 636{"Projects","Projekt" },
637{"Recurring","Wiederholend" }, 637{"Recurring","Wiederholend" },
638{"School","Schule" }, 638{"School","Schule" },
639{"Shopping","Einkaufen" }, 639{"Shopping","Einkaufen" },
640{"Speach","Rede" }, 640{"Speach","Rede" },
641{"Special Occasion","Spez.Gelegenheit" }, 641{"Special Occasion","Spez.Gelegenheit" },
642{"Sports","Sport" }, 642{"Sports","Sport" },
643{"Talk","Vortrag" }, 643{"Talk","Vortrag" },
644{"Travel","Reise" }, 644{"Travel","Reise" },
645{"TV","TV" }, 645{"TV","TV" },
646{"Germany","Deutschland" }, 646{"Germany","Deutschland" },
647{"Sweden","Schweden" }, 647{"Sweden","Schweden" },
648{"Forest","Wald" }, 648{"Forest","Wald" },
649{ "Desert","Wüste" }, 649{ "Desert","Wüste" },
650{ "Kitchen","Küche" }, 650{ "Kitchen","Küche" },
651{ "Lake","See" }, 651{ "Lake","See" },
652{"University","Universität"}, 652{"University","Universität"},
653{"Vacation","Urlaub" }, 653{"Vacation","Urlaub" },
654{"VIP","VIP" }, 654{"VIP","VIP" },
655{ "Import Sharp Calendar","Importiere Sharp Kalender" }, 655{ "Import Sharp Calendar","Importiere Sharp Kalender" },
656{ "This todo has been cancelled!","Dieses Todo wurde gecancelt!" }, 656{ "This todo has been cancelled!","Dieses Todo wurde gecancelt!" },
657{ "This event has been cancelled!","Dieser Termin wurde gecancelt!" }, 657{ "This event has been cancelled!","Dieser Termin wurde gecancelt!" },
658{ "Cancelled","Gecancelt" }, 658{ "Cancelled","Gecancelt" },
659{ "Multiple sync","Mehrfach Sync" }, 659{ "Multiple sync","Mehrfach Sync" },
660{ "Local file","Lokale Datei" }, 660{ "Local file","Lokale Datei" },
661{ "Last file","Letzte Datei" }, 661{ "Last file","Letzte Datei" },
662{ "Keys + Colors...","Tasten + Farben..." }, 662{ "Keys + Colors...","Tasten + Farben..." },
663{ "Mini icons in toolbar(nr)","Mini Icons in ToolBar(bn)" }, 663{ "Mini icons in toolbar(nr)","Mini Icons in ToolBar(bn)" },
664{ "Quick load/save (w/o Unicode)","Schnelles Laden/Speichern (o Unicode)" }, 664{ "Quick load/save (w/o Unicode)","Schnelles Laden/Speichern (o Unicode)" },
665{ "Choose...","Wähle..." }, 665{ "Choose...","Wähle..." },
666{ "Use colors for application:","Setze Farben für Programm:" }, 666{ "Use colors for application:","Setze Farben für Programm:" },
667{ "Buttons, menus, etc.:","Knöpfe, Menu, etc.:" }, 667{ "Buttons, menus, etc.:","Knöpfe, Menu, etc.:" },
668{ "Frames, labels, etc.:","Rahmen, Label, etc.:" }, 668{ "Frames, labels, etc.:","Rahmen, Label, etc.:" },
669{ "Show parent To-Do's in What's Next view","Zeige Ober-Todo in What's Next Anz." }, 669{ "Show parent To-Do's in What's Next view","Zeige Ober-Todo in What's Next Anz." },
670{ "Show location in What's Next view","Zeige Ort in What's Next Anz." }, 670{ "Show location in What's Next view","Zeige Ort in What's Next Anz." },
671{ "Show events that recur ","Zeige Termine, die sich wiederholen:" }, 671{ "Show events that recur ","Zeige Termine, die sich wiederholen:" },
672{ "Show in every cell ","Zeige in jeder Zelle " }, 672{ "Show in every cell ","Zeige in jeder Zelle " },
673{ "short month","kurzen Monat" }, 673{ "short month","kurzen Monat" },
674{ "icons","Icons" }, 674{ "icons","Icons" },
675{ "Show Sat/Sun together","Zeige Sam/Son zusammen" }, 675{ "Show Sat/Sun together","Zeige Sam/Son zusammen" },
676{ "Categorie colors are applied to text","Kategorie Farben färben Text" }, 676{ "Categorie colors are applied to text","Kategorie Farben färben Text" },
677{ "Month view uses day colors","Monatsansicht zeigt Tagesfarben" }, 677{ "Month view uses day colors","Monatsansicht zeigt Tagesfarben" },
678{ "Day color odd months","Tagesfarbe ungerade Monate" }, 678{ "Day color odd months","Tagesfarbe ungerade Monate" },
679{ "Day color even months","Tagesfarbe gerade Monate" }, 679{ "Day color even months","Tagesfarbe gerade Monate" },
680{ "Color for Sundays + category \"Holiday\"","Farbe für Sonntag + Kateg.\" Feiertag\"" }, 680{ "Color for Sundays + category \"Holiday\"","Farbe für Sonntag + Kateg.\" Feiertag\"" },
681{ "To-do view shows complete as 'xx %'","Zeige Prozent erledigt als 'xx %'" }, 681{ "To-do view shows complete as 'xx %'","Zeige Prozent erledigt als 'xx %'" },
682{ "Small To-do view uses smaller font","Kleine To-do Ansicht nutzt kleineren Font" }, 682{ "Small To-do view uses smaller font","Kleine To-do Ansicht nutzt kleineren Font" },
683{ "Colors are applied to text","Farben werden auf Text angewendet" }, 683{ "Colors are applied to text","Farben werden auf Text angewendet" },
684{ "Use internal alarm notification","Nutze interne Alarm Benachrichtigung" }, 684{ "Use internal alarm notification","Nutze interne Alarm Benachrichtigung" },
685{ "Note: KO/Pi must be running to notify you about an alarm. Recommended for use on Zaurus: Disable this option and install KO/Pi alarm applet.\n","Achtung: KO/Pi muß ausgeführt werden damit die Benachrichtigung funktioniert. Empfehlung für Zaurus: Diese Option nicht wählen und KO/Pi Alarm Applet installieren.\n" }, 685{ "Note: KO/Pi must be running to notify you about an alarm. Recommended for use on Zaurus: Disable this option and install KO/Pi alarm applet.\n","Achtung: KO/Pi muß ausgeführt werden damit die Benachrichtigung funktioniert. Empfehlung für Zaurus: Diese Option nicht wählen und KO/Pi Alarm Applet installieren.\n" },
686{ "Play beeps count:","Anzahl der Alarmpiepse: " }, 686{ "Play beeps count:","Anzahl der Alarmpiepse: " },
687{ "Beeps interval in sec:","Zeitintervall der Alarmpiepse: " }, 687{ "Beeps interval in sec:","Zeitintervall der Alarmpiepse: " },
688{ "Default suspend time in min:","Standard Supendierungs Zeit: " }, 688{ "Default suspend time in min:","Standard Supendierungs Zeit: " },
689{ "Auto suspend count:","Anzahl der auto Suspendierungen" }, 689{ "Auto suspend count:","Anzahl der auto Suspendierungen" },
690{ "Alarm *.wav file for newly created alarm:","Alarm *.wav Datei für neu angelegte Alarme:" }, 690{ "Alarm *.wav file for newly created alarm:","Alarm *.wav Datei für neu angelegte Alarme:" },
691{ "New profile","Neues Profil" }, 691{ "New profile","Neues Profil" },
692{ "Clone profile","Klone Profil" }, 692{ "Clone profile","Klone Profil" },
693{ "Delete profile","Lösche Profil" }, 693{ "Delete profile","Lösche Profil" },
694{ "Profile:","Profil:" }, 694{ "Profile:","Profil:" },
695{ "Include in multiple sync","Beziehe Profil in mehrfach Sync mit ein" }, 695{ "Include in multiple sync","Beziehe Profil in mehrfach Sync mit ein" },
696{ "Force: Take local entry always","Erzwinge: Nimm immer lokalen Eintrag" }, 696{ "Force: Take local entry always","Erzwinge: Nimm immer lokalen Eintrag" },
697{ "Force: Take remote entry always","Erzwinge: Nimm immer fernen Eintrag" }, 697{ "Force: Take remote entry always","Erzwinge: Nimm immer fernen Eintrag" },
698{ "Show summary after sync","Zeige Zusammenfassung nach dem Synchronisieren" }, 698{ "Show summary after sync","Zeige Zusammenfassung nach dem Synchronisieren" },
699{ "Write back file","Schreibe Datei zurück" }, 699{ "Write back file","Schreibe Datei zurück" },
700{ "Remote file (w down/upload command)","Entfernte Datei (via down/upload Kommando)" }, 700{ "Remote file (w down/upload command)","Entfernte Datei (via down/upload Kommando)" },
701{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" }, 701{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" },
702{ "Local device name:","Name dieses Gerätes:" }, 702{ "Local device name:","Name dieses Gerätes:" },
703{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" }, 703{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" },
704{ "Sync preferences","Synchronisations Einstellungen" }, 704{ "Sync preferences","Synchronisations Einstellungen" },
705{ "Profile kind","Profil Art" }, 705{ "Profile kind","Profil Art" },
706{ "Local file","Lokale Datei" }, 706{ "Local file","Lokale Datei" },
707{ "Local file:","Lokale Datei:" }, 707{ "Local file:","Lokale Datei:" },
708{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" }, 708{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" },
709{ "Fill in default values for:","Setze Beispiel Werte ein für:" }, 709{ "Fill in default values for:","Setze Beispiel Werte ein für:" },
710{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" }, 710{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" },
711{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"}, 711{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"},
712{ "Device","Gerät:" }, 712{ "Device","Gerät:" },
713{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" }, 713{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" },
714{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n","Synchronisationsübersicht:\n\n %d items lokal hinzugefügt\n %d items entfernt hinzugefügt\n %d items lokal geändert\n %d items entfernt geändert\n %d items lokal gelöscht\n %d items entfernt gelöscht\n" }, 714{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n","Synchronisationsübersicht:\n\n %d items lokal hinzugefügt\n %d items entfernt hinzugefügt\n %d items lokal geändert\n %d items entfernt geändert\n %d items lokal gelöscht\n %d items entfernt gelöscht\n" },
715{ "Synchronization successful","Synchronisation erfolgreich" }, 715{ "Synchronization successful","Synchronisation erfolgreich" },
716{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." }, 716{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." },
717{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" }, 717{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" },
718{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" }, 718{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" },
719{ "Enter password","Passwort eingeben" }, 719{ "Enter password","Passwort eingeben" },
720{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" }, 720{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" },
721{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." }, 721{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." },
722{ "Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n","Sorry, das Kopierkommando schlug fehl!\nKommando war:\n%1\n \nVersuche Kommando von Kosole um\nDetails für das Fehlschlagen\nzu erfahren.\n" }, 722{ "Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n","Sorry, das Kopierkommando schlug fehl!\nKommando war:\n%1\n \nVersuche Kommando von Kosole um\nDetails für das Fehlschlagen\nzu erfahren.\n" },
723{ "Writing back file result: ","Resultat des Dateizurückschreibens: " }, 723{ "Writing back file result: ","Resultat des Dateizurückschreibens: " },
724{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" }, 724{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" },
725{ "Edit Calendar Filters","Editiere Kalendar Filter" }, 725{ "Edit Calendar Filters","Editiere Kalendar Filter" },
726{ "Enter filter name:","Neuer Filter Name:" }, 726{ "Enter filter name:","Neuer Filter Name:" },
727{ "Add Filter","Filter hinzufügen" }, 727{ "Add Filter","Filter hinzufügen" },
728{ "Question","Frage" }, 728{ "Question","Frage" },
729{ "Filter position: ","Filter Position: " }, 729{ "Filter position: ","Filter Position: " },
730{ "Month View","Monatsansicht" }, 730{ "Month View","Monatsansicht" },
731{ "This profil cannot be deleted!\n","Dieses Profil kann\nnicht gelöscht werden!" }, 731{ "This profil cannot be deleted!\n","Dieses Profil kann\nnicht gelöscht werden!" },
732{ "KO/Pi config error","KO/Pi Konfig. Fehler" }, 732{ "KO/Pi config error","KO/Pi Konfig. Fehler" },
733{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" }, 733{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" },
734{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile haben denselben Namen!\nBitte unterschiedliche Namen wählen!" }, 734{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile haben denselben Namen!\nBitte unterschiedliche Namen wählen!" },
735{ "Access: ","Zugriff: " }, 735{ "Access: ","Zugriff: " },
736{ "Needs Action","Aktion notwendig" }, 736{ "Needs Action","Aktion notwendig" },
737{ "Accepted","Akzeptiert" }, 737{ "Accepted","Akzeptiert" },
738{ "Declined","Abgelehnt" }, 738{ "Declined","Abgelehnt" },
739{ "Tentative","Vorläufig" }, 739{ "Tentative","Vorläufig" },
740{ "Delegated","Beauftragt" }, 740{ "Delegated","Beauftragt" },
741{ "Completed","Vollständig" }, 741{ "Completed","Vollständig" },
742{ "In Process","In Bearbeitung" }, 742{ "In Process","In Bearbeitung" },
743{ "Participant","Teilnehmer" }, 743{ "Participant","Teilnehmer" },
744{ "Optional Participant","Möglicher Teilnehmer" }, 744{ "Optional Participant","Möglicher Teilnehmer" },
745{ "Observer","Beobachter" }, 745{ "Observer","Beobachter" },
746{ "Chair","Vorsitzender" }, 746{ "Chair","Vorsitzender" },
747{ "Not supported \non desktop!\n","" }, 747{ "Not supported \non desktop!\n","" },
748{ "Nothing selected!\n\nThis prints the full width of the Agenda view as you see it!\n\nTo determine the vertical range of the printing, please select\na vertical range (with the left mouse button down) in one column. ","Es ist nichts selektiert!\nDieses druckt die volle Breite der Agenda View, so wie man sie sieht.\nUm die verticale Auswahl zum Drucken zu bestimmen,\nbitte einen verticalen Zeitraum (mit gedrückter linker Maustaste)\nin einer Spalte auswählen. " }, 748{ "Nothing selected!\n\nThis prints the full width of the Agenda view as you see it!\n\nTo determine the vertical range of the printing, please select\na vertical range (with the left mouse button down) in one column. ","Es ist nichts selektiert!\nDieses druckt die volle Breite der Agenda View, so wie man sie sieht.\nUm die verticale Auswahl zum Drucken zu bestimmen,\nbitte einen verticalen Zeitraum (mit gedrückter linker Maustaste)\nin einer Spalte auswählen. " },
749{ "Date range: ","Datums Zeitspanne: " }, 749{ "Date range: ","Datums Zeitspanne: " },
750{ "Not supported \non PDA!\n","Nicht verfügbar\nauf dem PDA. " }, 750{ "Not supported \non PDA!\n","Nicht verfügbar\nauf dem PDA. " },
751{ "Syncing - close to abort!","Syncing-schließe um abzubrechen." }, 751{ "Syncing - close to abort!","Syncing-schließe um abzubrechen." },
752{ "Add / remove events","Add./entferne Termine" }, 752{ "Add / remove events","Add./entferne Termine" },
753{ "File does not exist:\n '%1'.","Datei existiert nicht:\n '%1'." }, 753{ "File does not exist:\n '%1'.","Datei existiert nicht:\n '%1'." },
754{ "Couldn't load calendar\n '%1'.","Kann Kalender nicht laden:\n '%1'." }, 754{ "Couldn't load calendar\n '%1'.","Kann Kalender nicht laden:\n '%1'." },
755{ "\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie gepeicherte Datei wurde verändert!\nDatei Grösse: %1 Bytes.\nZuletzt geändert: %2\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" }, 755{ "\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie gepeicherte Datei wurde verändert!\nDatei Grösse: %1 Bytes.\nZuletzt geändert: %2\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" },
756{ "Overwrite","Überschreiben" }, 756{ "Overwrite","Überschreiben" },
757{ "Sync+save","Syncen+speichern" }, 757{ "Sync+save","Syncen+speichern" },
758{ "Default","Standard" }, 758{ "Default","Standard" },
759{ " Categories added to list! "," Kategorien zur Liste hinzugefügt! " }, 759{ " Categories added to list! "," Kategorien zur Liste hinzugefügt! " },
760{ " %d items?"," %d Einträge?" }, 760{ " %d items?"," %d Einträge?" },
761{ "\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?","\nDieses ist ein\nwiederholender Termin!.\nSind Sie sicher, dass Sie\ndiesen Termin und alle\nWiederholungen löschen möchten?" }, 761{ "\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?","\nDieses ist ein\nwiederholender Termin!.\nSind Sie sicher, dass Sie\ndiesen Termin und alle\nWiederholungen löschen möchten?" },
762{ " ?\n\nDelete:\n"," ?\n\nLösche:\n" }, 762{ " ?\n\nDelete:\n"," ?\n\nLösche:\n" },
763{ "Current","Aktuelle" }, 763{ "Current","Aktuelle" },
764{ "\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n","\nDieses ist ein\nwiederholender Termin!\nMöchten sie alle Wiederholungen\nlöschen, oder nur die aktuelle am:\n" }, 764{ "\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n","\nDieses ist ein\nwiederholender Termin!\nMöchten sie alle Wiederholungen\nlöschen, oder nur die aktuelle am:\n" },
765{ "All","Alle" }, 765{ "All","Alle" },
766{ "Data Loss Warning","Datenverlust Warnung" }, 766{ "Data Loss Warning","Datenverlust Warnung" },
767{ "Proceed","Weitermachen" }, 767{ "Proceed","Weitermachen" },
768{ "The journal entries can not be\nexported to a vCalendar file.","Die Journal Einträge können\nnicht in eine vCalendar\nDatei exportiert werden!" }, 768{ "The journal entries can not be\nexported to a vCalendar file.","Die Journal Einträge können\nnicht in eine vCalendar\nDatei exportiert werden!" },
769{ "Filter disabled ","Filter abgeschaltet" }, 769{ "Filter disabled ","Filter abgeschaltet" },
770{ "Filter selected: ","Gewählter Filter: " }, 770{ "Filter selected: ","Gewählter Filter: " },
771{ "Toggle Cancel","Gecancelt ändern" }, 771{ "Toggle Cancel","Gecancelt ändern" },
772{ "&Toggle Cancel","Gecancel&t ändern" }, 772{ "&Toggle Cancel","Gecancel&t ändern" },
773{ "Configure Toolbar","Konfiguriere Toolbar" }, 773{ "Configure Toolbar","Konfiguriere Toolbar" },
774{ "Stretched TB","Gedehnte TB" }, 774{ "Stretched TB","Gedehnte TB" },
775{ "Import file \n...%1\ndoes not exist!\nNothing imported!\n","Import Datei \n...%1\nexistiert nicht!\nNichts importiert!\n" }, 775{ "Import file \n...%1\ndoes not exist!\nNothing imported!\n","Import Datei \n...%1\nexistiert nicht!\nNichts importiert!\n" },
776{ "Import filename(*.ics/*.vcs)","Import Dateiname(*.ics/*.vcs)" }, 776{ "Import filename(*.ics/*.vcs)","Import Dateiname(*.ics/*.vcs)" },
777{ "When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing","Wenn ein Kalender doppelt importiert\nwird, werden doppelte Einträge ignoriert!\nSie können eine Backup Datei anlegen unter\nDatei - Speichere Kalender Backup\num den Import rückgängig machen zu können.\n" }, 777{ "When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing","Wenn ein Kalender doppelt importiert\nwird, werden doppelte Einträge ignoriert!\nSie können eine Backup Datei anlegen unter\nDatei - Speichere Kalender Backup\num den Import rückgängig machen zu können.\n" },
778{ "Not supported \non desktop!\n","Nur verfügbar auf PDA!" }, 778{ "Not supported \non desktop!\n","Nur verfügbar auf PDA!" },
779{ "Imported file successfully","Datei erfolgreich importiert" }, 779{ "Imported file successfully","Datei erfolgreich importiert" },
780{ "Error importing file","Fehler beim Importieren der Datei" }, 780{ "Error importing file","Fehler beim Importieren der Datei" },
781{ "Export vcal filename(*.vcs)","Export vcal Dateiname(*.vcs)" }, 781{ "Export vcal filename(*.vcs)","Export vcal Dateiname(*.vcs)" },
782{ "Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n","Zu speichernde Datei\existiert bereits!\nExist. Datei vom:\n%1\nÜberschreiben?\n" }, 782{ "Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n","Zu speichernde Datei\existiert bereits!\nExist. Datei vom:\n%1\nÜberschreiben?\n" },
783{ "Overwrite!","Überschreiben!" }, 783{ "Overwrite!","Überschreiben!" },
784{ "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n","Import Datei \n...%1\nvom:\n%2\nDuplizierte Einträge\nwerden nicht importiert!\n" }, 784{ "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n","Import Datei \n...%1\nvom:\n%2\nDuplizierte Einträge\nwerden nicht importiert!\n" },
785{ "Load backup filename","Lade Backup Dateiname" }, 785{ "Load backup filename","Lade Backup Dateiname" },
786{ "Backup file\ndoes not exist!\nNothing loaded!","Backup Datei\nexistiert nicht!\nNichts geladen!" }, 786{ "Backup file\ndoes not exist!\nNothing loaded!","Backup Datei\nexistiert nicht!\nNichts geladen!" },
787{ "KO/Pi:Loaded %1","KO/Pi:Geladen %1" }, 787{ "KO/Pi:Loaded %1","KO/Pi:Geladen %1" },
788{ "Save backup filename","Speichere Backup Dateiname" }, 788{ "Save backup filename","Speichere Backup Dateiname" },
789{ "Backup file\nalready exists!\nOld backup file from:\n%1\nOverwrite?\n","Backup Datei\nexistiert bereits!\nAlte Backup Datei vom:\n%1\nÜberschreiben?\n" }, 789{ "Backup file\nalready exists!\nOld backup file from:\n%1\nOverwrite?\n","Backup Datei\nexistiert bereits!\nAlte Backup Datei vom:\n%1\nÜberschreiben?\n" },
790{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" }, 790{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" },
791{ "Details of attendee","Teilnehmerdetails" }, 791{ "Details of attendee","Teilnehmerdetails" },
792{ "Work phone:\n","Telefon Arbeit:\n" }, 792{ "Work phone:\n","Telefon Arbeit:\n" },
793{ "Work mobile phone:\n","Mobiltelefon Arbeit:\n" }, 793{ "Work mobile phone:\n","Mobiltelefon Arbeit:\n" },
794{ "Home phone:\n","Telefon privat:\n" }, 794{ "Home phone:\n","Telefon privat:\n" },
795{ "Mobile home phone:\n","Mobiltelefon privat:\n" }, 795{ "Mobile home phone:\n","Mobiltelefon privat:\n" },
796{ "Email:\n","Email:\n" }, 796{ "Email:\n","Email:\n" },
797{ "Alarm disabled for this item","Alarm deaktiviert für dieses Item" }, 797{ "Alarm disabled for this item","Alarm deaktiviert für dieses Item" },
798{ "Audio Al.: ","Audio Al.: " }, 798{ "Audio Al.: ","Audio Al.: " },
799{ "Proc.Al.: ","Proz.Al.: " }, 799{ "Proc.Al.: ","Proz.Al.: " },
800{ "No sound set","Kein Sound definiert" }, 800{ "No sound set","Kein Sound definiert" },
801{ "*.wav|Wav Files","*.wav|Wav Dateien" }, 801{ "*.wav|Wav Files","*.wav|Wav Dateien" },
802{ "No program set","Kein Programm definiert" }, 802{ "No program set","Kein Programm definiert" },
803{ "Running '%1'","Ausführen '%1'" }, 803{ "Running '%1'","Ausführen '%1'" },
804{ "Playing '%1'","Abspielen '%1'" }, 804{ "Playing '%1'","Abspielen '%1'" },
805{ "Show Sync Events in WN/Agenda view","Zeige Sync Events in WN/Agenda Ansicht" }, 805{ "Show Sync Events in WN/Agenda view","Zeige Sync Events in WN/Agenda Ansicht" },
806{ "User defined (usertranslation.txt)","Benutzerdefiniert (usertranslation.txt)" }, 806{ "User defined (usertranslation.txt)","Benutzerdefiniert (usertranslation.txt)" },
807{ "Load!","Laden!" }, 807{ "Load!","Laden!" },
808{ "Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n","Backup Datei vom:\n%1\nDas Laden der Backup Datei\nlöscht die aktuellen Daten!\n" }, 808{ "Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n","Backup Datei vom:\n%1\nDas Laden der Backup Datei\nlöscht die aktuellen Daten!\n" },
809{ "KO/Pi Features and hints","KO/Pi Eigenschaften und Tipps" }, 809{ "KO/Pi Features and hints","KO/Pi Eigenschaften und Tipps" },
810{ "KO/Pi User translation HowTo","KO/Pi Benutzer-Übersetzung HowTo" }, 810{ "KO/Pi User translation HowTo","KO/Pi Benutzer-Übersetzung HowTo" },
811{ "KO/Pi Synchronization HowTo","KO/Pi Synchronisation HowTo" }, 811{ "KO/Pi Synchronization HowTo","KO/Pi Synchronisation HowTo" },
812{ "Features + hints...","Eigenschaften + Tipps..." }, 812{ "Features + hints...","Eigenschaften + Tipps..." },
813{ "User translation...","Benutzer Übersetzung..." }, 813{ "User translation...","Benutzer Übersetzung..." },
814{ "Sync HowTo...","Synchronisation HowTo..." }, 814{ "Sync HowTo...","Synchronisation HowTo..." },
815{ "Print calendar...","Drucke Kalender..." }, 815{ "Print calendar...","Drucke Kalender..." },
816{ "Anniversary","Jahrestag" }, 816{ "Anniversary","Jahrestag" },
817{ "When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n","Wenn Geburtstage mehrfach importiert\nwerden, werden doppelte Einträge ignoriert\nwenn sie nicht verändert wurden.\n" }, 817{ "When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n","Wenn Geburtstage mehrfach importiert\nwerden, werden doppelte Einträge ignoriert\nwenn sie nicht verändert wurden.\n" },
818{ "Import Birthdays (KA/Pi)","Importiere Geburtstage (KA/Pi)" }, 818{ "Import Birthdays (KA/Pi)","Importiere Geburtstage (KA/Pi)" },
819{ "Next recurrence is on: ","Nächste Wiederholung ist am:" }, 819{ "Next recurrence is on: ","Nächste Wiederholung ist am:" },
820{ "<b>Alarm on: </b>","<b>Alarm am: </b>" }, 820{ "<b>Alarm on: </b>","<b>Alarm am: </b>" },
821{ "<b>Access: </b>","<b>Zugriff: </b>" }, 821{ "<b>Access: </b>","<b>Zugriff: </b>" },
822{ "(%1 min before)","(%1 min vorher)" }, 822{ "(%1 min before)","(%1 min vorher)" },
823{ "<b>Categories: </b>","<b>Kategorien: </b>" }, 823{ "<b>Categories: </b>","<b>Kategorien: </b>" },
824{ "Save Journal/Description...","Speichere Journal/Details..." }, 824{ "Save Journal/Description...","Speichere Journal/Details..." },
825{ "This saves the text/details of selected\nJournals and Events/Todos\nto a text file.","Das speichert den Text bzw.\ndie Details von selektierten\nJournalen und Events/Todos\nin eine Textdatei." }, 825{ "This saves the text/details of selected\nJournals and Events/Todos\nto a text file.","Das speichert den Text bzw.\ndie Details von selektierten\nJournalen und Events/Todos\nin eine Textdatei." },
826{ "Continue","Weitermachen" }, 826{ "Continue","Weitermachen" },
827{ " birthdays/anniversaries added!"," Geburts-/Jahrestage hinzugefügt" }, 827{ " birthdays/anniversaries added!"," Geburts-/Jahrestage hinzugefügt" },
828{ "Attendee:","Teilnehmer:" }, 828{ "Attendee:","Teilnehmer:" },
829{ "Click OK to search ->","Klicke zum Suchen auf OK ->" }, 829{ "Click OK to search ->","Klicke zum Suchen auf OK ->" },
830{ "On day ","Am Tag " }, 830{ "On day ","Am Tag " },
831{ "%1 of ","%1 des Monats" }, 831{ "%1 of ","%1 des Monats" },
832{ "%1 of the year","%1 des Jahres" }, 832{ "%1 of the year","%1 des Jahres" },
833{ "Anonymous","Anonymo" }, 833{ "Anonymous","Anonymo" },
834{ "nobody@nowhere","niemand@nirgendwo" }, 834{ "nobody@nowhere","niemand@nirgendwo" },
835{ "calendar.html","calendar.html" }, 835{ "calendar.html","calendar.html" },
836{ " Local Time"," Locale Zeit" }, 836{ " Local Time"," Locale Zeit" },
837{ "Unknown Name","Unbekannter Name" }, 837{ "Unknown Name","Unbekannter Name" },
838{ "unknown@nowhere","unbekannt@nirgendwo" }, 838{ "unknown@nowhere","unbekannt@nirgendwo" },
839{ "Beam via IR!","Beam via IR!" }, 839{ "Beam via IR!","Beam via IR!" },
840{ "Next Month","Nächster Monat" }, 840{ "Next Month","Nächster Monat" },
841{ "Prio","Prio" }, 841{ "Prio","Prio" },
842{ "Reparent Todo","Mache Sub-Todo" }, 842{ "Reparent Todo","Mache Sub-Todo" },
843{ "tomorrow","morgen" }, 843{ "tomorrow","morgen" },
844{ "today","heute" }, 844{ "today","heute" },
845{ "yesterday","gestern" }, 845{ "yesterday","gestern" },
846{ "Ok","Ok" }, 846{ "Ok","Ok" },
847{ "Ok+Agenda","Ok+Agenda" }, 847{ "Ok+Agenda","Ok+Agenda" },
848{ "Email","Email" }, 848{ "Email","Email" },
849{ "RSVP","RSVP" }, 849{ "RSVP","RSVP" },
850{ "Email:","Email:" }, 850{ "Email:","Email:" },
851{ "Appointment Time ","Termin Zeit " }, 851{ "Appointment Time ","Termin Zeit " },
852{ "2","2" }, 852{ "2","2" },
853{ "3","3" }, 853{ "3","3" },
854{ "4","4" }, 854{ "4","4" },
855{ " 0 %"," 0 %" }, 855{ " 0 %"," 0 %" },
856{ " 20 %"," 20 %" }, 856{ " 20 %"," 20 %" },
857{ " 40 %"," 40 %" }, 857{ " 40 %"," 40 %" },
858{ " 60 %"," 60 %" }, 858{ " 60 %"," 60 %" },
859{ " 80 %"," 80 %" }, 859{ " 80 %"," 80 %" },
860{ "100 %","100 %" }, 860{ "100 %","100 %" },
861{ "Filter","Filter" }, 861{ "Filter","Filter" },
862{ "Configure","Konfiguriere" }, 862{ "Configure","Konfiguriere" },
863{ "What's Next","What's Next" }, 863{ "What's Next","What's Next" },
864{ "Complete calendar...","Kompletten Kalender..." }, 864{ "Complete calendar...","Kompletten Kalender..." },
865{ "Filtered calendar...","Gefilterten Kalender..." }, 865{ "Filtered calendar...","Gefilterten Kalender..." },
866{ "Export to phone","Exportiere zum Handy" }, 866{ "Export to phone","Exportiere zum Handy" },
867{ "Beam receive enabled","Beam Empfang an" }, 867{ "Beam receive enabled","Beam Empfang an" },
868{ "What's new?","Was ist neu?" }, 868{ "What's new?","Was ist neu?" },
869{ "FAQ...","FAQ..." }, 869{ "FAQ...","FAQ..." },
870{ "Licence...","Licence..." }, 870{ "Licence...","Licence..." },
871{ "What's This?","What's This?" }, 871{ "What's This?","What's This?" },
872{ "&Edit...","&Editiere..." }, 872{ "&Edit...","&Editiere..." },
873{ "Oktober","Oktober" }, 873{ "Oktober","Oktober" },
874{ "Title","Titel" }, 874{ "Title","Titel" },
875{ "%1 %","%1 %" }, 875{ "%1 %","%1 %" },
876{ "Enable Pi-Sync","Schalte Pi-Sync an" }, 876{ "Enable Pi-Sync","Schalte Pi-Sync an" },
877{ "Import!","Importiere!" }, 877{ "Import!","Importiere!" },
878{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" }, 878{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" },
879{ "Export to phone options","Export ans Handy Optionen" }, 879{ "Export to phone options","Export ans Handy Optionen" },
880{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." }, 880{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." },
881{ "I/O device: ","I/O device: " }, 881{ "I/O device: ","I/O device: " },
882{ "Connection: ","Connection: " }, 882{ "Connection: ","Connection: " },
883{ "Model(opt.): ","Model(opt.): " }, 883{ "Model(opt.): ","Model(opt.): " },
884{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" }, 884{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" },
885{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " }, 885{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " },
886{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nToDo/Kalender Daten auf dem Handy!" }, 886{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nToDo/Kalender Daten auf dem Handy!" },
887{ "Export to mobile phone!","Exportiere auf das Handy!" }, 887{ "Export to mobile phone!","Exportiere auf das Handy!" },
888{ "Export complete calendar","Exportiere kompletten Kalender" }, 888{ "Export complete calendar","Exportiere kompletten Kalender" },
889{ "Writing to phone...","Sende Daten ans Handy..." }, 889{ "Writing to phone...","Sende Daten ans Handy..." },
890{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" }, 890{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" },
891{ "Retry","Nochmal versuchen" }, 891{ "Retry","Nochmal versuchen" },
892{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" }, 892{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" },
893{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" }, 893{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" },
894{ "Error exporting to phone!","Fehler beim Export auf das Handy!" }, 894{ "Error exporting to phone!","Fehler beim Export auf das Handy!" },
895{ "Export filtered calendar","Exportiere gefilterten Kalender" }, 895{ "Export filtered calendar","Exportiere gefilterten Kalender" },
896{ "Preferences","Vorlieben" }, 896{ "Preferences","Vorlieben" },
897{ "Global","Global" }, 897{ "Global","Global" },
898{ "Phone","Phone" }, 898{ "Phone","Phone" },
899{ "SMS","SMS" }, 899{ "SMS","SMS" },
900{ "Fax","Fax" }, 900{ "Fax","Fax" },
901{ "Pager","Pager" }, 901{ "Pager","Pager" },
902{ "SIP","SIP" }, 902{ "SIP","SIP" },
903{ "Italian","Italienisch" }, 903{ "Italian","Italienisch" },
904{ "24:00","24:00" }, 904{ "24:00","24:00" },
905{ "12:00am","12:00am" }, 905{ "12:00am","12:00am" },
906{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" }, 906{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" },
907{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" }, 907{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" },
908{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" }, 908{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" },
909{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" }, 909{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" },
910{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" }, 910{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" },
911{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" }, 911{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" },
912{ "Used Mail Client","Benutzter Mail Client" }, 912{ "Used Mail Client","Benutzter Mail Client" },
913{ "Channel:","Channel:" }, 913{ "Channel:","Channel:" },
914{ "Message:","Message:" }, 914{ "Message:","Message:" },
915{ "Parameters:","Parameter:" }, 915{ "Parameters:","Parameter:" },
916{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" }, 916{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" },
917{ "extra Message:","extra Message:" }, 917{ "extra Message:","extra Message:" },
918{ "extra Parameters:","extra Parameter:" }, 918{ "extra Parameters:","extra Parameter:" },
919{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" }, 919{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" },
920{ "External Apps.","Externe Appl." }, 920{ "External Apps.","Externe Appl." },
921{ "24 hours","24 Std." }, 921{ "24 hours","24 Std." },
922{ "3 hours","3 Std." }, 922{ "3 hours","3 Std." },
923{ "1 hour","1 Std." }, 923{ "1 hour","1 Std." },
924{ "15 minutes","15 Min." }, 924{ "15 minutes","15 Min." },
925{ "5 minutes","5 Min." }, 925{ "5 minutes","5 Min." },
926{ "1 minute","1 Min." }, 926{ "1 minute","1 Min." },
927{ "23","23" }, 927{ "23","23" },
928{ "Mon 15","Mon 15" }, 928{ "Mon 15","Mon 15" },
929{ "Configure KO","Konfiguriere KO" }, 929{ "Configure KO","Konfiguriere KO" },
930{ "Event text","Termin Text" }, 930{ "Event text","Termin Text" },
931{ "ToDo","ToDo" }, 931{ "ToDo","ToDo" },
932{ "Today","Heute" }, 932{ "Today","Heute" },
933{ "What's Next View","What's Next Ansicht" }, 933{ "What's Next View","What's Next Ansicht" },
934{ "Show Sync Events in \nWhat's Next/Agenda view","Zeige Sync Termine in \nWhat's Next/Agenda view" }, 934{ "Show Sync Events in \nWhat's Next/Agenda view","Zeige Sync Termine in \nWhat's Next/Agenda view" },
935{ "Use short date in \nWhat's Next/Event view","Zeige Kurzdatum in \nWhat's Next/Event view" }, 935{ "Use short date in \nWhat's Next/Event view","Zeige Kurzdatum in \nWhat's Next/Event view" },
936{ "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" }, 936{ "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" },
937{ "Alarm","Alarm" }, 937{ "Alarm","Alarm" },
938{ "Used %1 Client","Benutzter %1 Client" }, 938{ "Used %1 Client","Benutzter %1 Client" },
939{ "No email client installed","Kein Email Klient installiert" }, 939{ "No email client installed","Kein Email Klient installiert" },
940{ "Userdefined email client","Benutzerdef. Email Klient" }, 940{ "Userdefined email client","Benutzerdef. Email Klient" },
941{ "OM/Pi email client","OM/Pi Email Klient" }, 941{ "OM/Pi email client","OM/Pi Email Klient" },
942{ "Include in multiple ","Beziehe in multiple " }, 942{ "Include in multiple ","Beziehe in multiple " },
943{ "calendar ","Kalender " }, 943{ "calendar ","Kalender " },
944{ "addressbook ","Adressbuch " }, 944{ "addressbook ","Adressbuch " },
945{ "pwmanager","PWmanager" }, 945{ "pwmanager","PWmanager" },
946{ " sync"," Sync ein" }, 946{ " sync"," Sync ein" },
947{ "Write back synced data","Schreibe gesyncte Daten zurück" }, 947{ "Write back synced data","Schreibe gesyncte Daten zurück" },
948{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" }, 948{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" },
949{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" }, 949{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" },
950{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " }, 950{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " },
951{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" }, 951{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" },
952{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" }, 952{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" },
953{ "Help...","Hilfe..." }, 953{ "Help...","Hilfe..." },
954{ "Local file Cal:","Lokale Datei Kal:" }, 954{ "Local file Cal:","Lokale Datei Kal:" },
955{ "Local file ABook:","Lokale Datei ABuch:" }, 955{ "Local file ABook:","Lokale Datei ABuch:" },
956{ "Local file PWMgr:","Lokale Datei PWMgr:" }, 956{ "Local file PWMgr:","Lokale Datei PWMgr:" },
957{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" }, 957{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" },
958{ "Calendar:","Kalender:" }, 958{ "Calendar:","Kalender:" },
959{ "AddressBook:","AdressBuch:" }, 959{ "AddressBook:","AdressBuch:" },
960{ "PWManager:","PWManager:" }, 960{ "PWManager:","PWManager:" },
961{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" }, 961{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" },
962{ "ssh/scp","ssh/scp" }, 962{ "ssh/scp","ssh/scp" },
963{ "ftp","ftp" }, 963{ "ftp","ftp" },
964{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" }, 964{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" },
965{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" }, 965{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" },
966{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" }, 966{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" },
967{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" }, 967{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" },
968{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" }, 968{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" },
969{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" }, 969{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" },
970{ "KDE-Pim sync config","KDE-Pim sync Konfig" }, 970{ "KDE-Pim sync config","KDE-Pim sync Konfig" },
971{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" }, 971{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" },
972{ "Recommended: Leave empty!\n(Such that model can\nbe auto detected)\nOr insert name of model:\n","Empfohlen: Leer lassen!\n(So dass das Model\nautomatisch erkannt\nwerden kann)\nOder füge Model Name ein:\n" }, 972{ "Recommended: Leave empty!\n(Such that model can\nbe auto detected)\nOr insert name of model:\n","Empfohlen: Leer lassen!\n(So dass das Model\nautomatisch erkannt\nwerden kann)\nOder füge Model Name ein:\n" },
973{ "Port number (Default: %1)","Port Nummer (Default: %1)" }, 973{ "Port number (Default: %1)","Port Nummer (Default: %1)" },
974{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" }, 974{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" },
975{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" }, 975{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" },
976{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" }, 976{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" },
977{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" }, 977{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" },
978{ "Disable Pi-Sync","Schalte Pi-Sync aus" }, 978{ "Disable Pi-Sync","Schalte Pi-Sync aus" },
979{ "Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!","Wollen Sie wirklich\nmit allen selektierten\nProfilen \"Multi-Syncen\"?\nDas Syncen dauert einige Zeit -\nalle Profile werden zweimal gesynct!" }, 979{ "Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!","Wollen Sie wirklich\nmit allen selektierten\nProfilen \"Multi-Syncen\"?\nDas Syncen dauert einige Zeit -\nalle Profile werden zweimal gesynct!" },
980{ "KDE-Pim Sync","KDE-Pim Sync" }, 980{ "KDE-Pim Sync","KDE-Pim Sync" },
981{ "Multiple profiles","Multi-Sync Profile" }, 981{ "Multiple profiles","Multi-Sync Profile" },
982{ "Device: ","Gerät: " }, 982{ "Device: ","Gerät: " },
983{ "Multiple sync started.","Multi-Sync gestartet." }, 983{ "Multiple sync started.","Multi-Sync gestartet." },
984{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" }, 984{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" },
985{ "Turn filter on","Schalte Filter an" }, 985{ "Turn filter on","Schalte Filter an" },
986{ "Turn filter off","Schalte Filter aus" }, 986{ "Turn filter off","Schalte Filter aus" },
987{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" }, 987{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" },
988{ "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" }, 988{ "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" },
989{ "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" }, 989{ "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" },
990{ "<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n","<p><b>Schwarz</b>: Termin/Todo mit Teilnehmern. Sie sind der Organisator!</p>\n" }, 990{ "<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n","<p><b>Schwarz</b>: Termin/Todo mit Teilnehmern. Sie sind der Organisator!</p>\n" },
991{ "<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n","<p><b>Dunkelgrün</b>: Information(Beschreibung) verfügbar.([i] in WN Ansicht)</p>\n" }, 991{ "<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n","<p><b>Dunkelgrün</b>: Information(Beschreibung) verfügbar.([i] in WN Ansicht)</p>\n" },
992{ "<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n","<p><b>Blau</b>: Wiederholender Termin.([r] in Whats'Next Ansicht)</p>\n" }, 992{ "<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n","<p><b>Blau</b>: Wiederholender Termin.([r] in Whats'Next Ansicht)</p>\n" },
993{ "<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n","<p><b>Rot</b>: Alarm gesetzt.([a] in Whats'Next Ansicht)</p>\n" }, 993{ "<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n","<p><b>Rot</b>: Alarm gesetzt.([a] in Whats'Next Ansicht)</p>\n" },
994{ "<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n","<p><b>Kreuz</b>: Eintrag gecancelt.([c] in Whats'Next Ansicht)</p>\n" }, 994{ "<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n","<p><b>Kreuz</b>: Eintrag gecancelt.([c] in Whats'Next Ansicht)</p>\n" },
995{ "<p><b>(for square icons in agenda and month view)</b></p>\n","<p><b>(für quadratische Icons in Agenda und Monats Ansicht)</b></p>\n" }, 995{ "<p><b>(for square icons in agenda and month view)</b></p>\n","<p><b>(für quadratische Icons in Agenda und Monats Ansicht)</b></p>\n" },
996{ "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" }, 996{ "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" },
997{ "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" }, 997{ "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" },
998{ "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" }, 998{ "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" },
999{ "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" }, 999{ "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" },
1000{ "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" }, 1000{ "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" },
1001{ "<p><b>shift+up/down</b>: Goto first/last item</p>\n","<p><b>shift+up/down</b>: Gehe zum ersten/letzten Eintrag</p>\n" }, 1001{ "<p><b>shift+up/down</b>: Goto first/last item</p>\n","<p><b>shift+up/down</b>: Gehe zum ersten/letzten Eintrag</p>\n" },
1002{ "<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n","<p><b>ctrl+up/down</b>: Gehe hoch/runter 20% aller Einträge</p>\n" }, 1002{ "<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n","<p><b>ctrl+up/down</b>: Gehe hoch/runter 20% aller Einträge</p>\n" },
1003{ "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" }, 1003{ "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" },
1004{ "<p><b>return+shift</b>: Deselect item+one step down</p>\n","<p><b>return+shift</b>: Deselektiere Item+Cursor einen Eintrag runter</p>\n" }, 1004{ "<p><b>return+shift</b>: Deselect item+one step down</p>\n","<p><b>return+shift</b>: Deselektiere Item+Cursor einen Eintrag runter</p>\n" },
1005{ "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" }, 1005{ "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" },
1006{ "<p><b>I</b>: Show info of current item+one step down.</p>\n","<p><b>I</b>: Zeige Detail-Ansicht vom sel.Eintrag+Cursor einen Eintrag runter.</p>\n" }, 1006{ "<p><b>I</b>: Show info of current item+one step down.</p>\n","<p><b>I</b>: Zeige Detail-Ansicht vom sel.Eintrag+Cursor einen Eintrag runter.</p>\n" },
1007{ "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" }, 1007{ "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" },
1008{ "<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n","<p><b>return+shift</b>: Markiere Todo als nicht erledigt+Cursor einen Eintrag runter</p>\n" }, 1008{ "<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n","<p><b>return+shift</b>: Markiere Todo als nicht erledigt+Cursor einen Eintrag runter</p>\n" },
1009{ "<p><b>return</b>: Mark item as completed+one step down.</p>\n","<p><b>return</b>: Markiere Todo als erledigt+Cursor einen Eintrag runter.</p>\n" }, 1009{ "<p><b>return</b>: Mark item as completed+one step down.</p>\n","<p><b>return</b>: Markiere Todo als erledigt+Cursor einen Eintrag runter.</p>\n" },
1010{ "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" }, 1010{ "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" },
1011{ "<p><b>shift+P</b>: Make new <b>P</b>arent for todo selected with shift+S</p>\n","<p><b>shift+P</b>: Mache Todo zum neuen <b>P</b>arent Todo für das Todo, welches mit shift+Sselektiert wurde.</p>\n" }, 1011{ "<p><b>shift+P</b>: Make new <b>P</b>arent for todo selected with shift+S</p>\n","<p><b>shift+P</b>: Mache Todo zum neuen <b>P</b>arent Todo für das Todo, welches mit shift+Sselektiert wurde.</p>\n" },
1012{ "<p><b>shift+S</b>: Make <b>S</b>ubtodo (reparent todo)</p>\n","<p><b>shift+S</b>: Mache Todo zum <b>S</b>ubtodo</p>\n" }, 1012{ "<p><b>shift+S</b>: Make <b>S</b>ubtodo (reparent todo)</p>\n","<p><b>shift+S</b>: Mache Todo zum <b>S</b>ubtodo</p>\n" },
1013{ "<p><b>shift+U</b>: <b>U</b>nparent todo (make root todo)</p>\n","<p><b>shift+U</b>: <b>U</b>nparent Todo (Mache Sub-Todo zum Toplevel Todo)</p>\n" }, 1013{ "<p><b>shift+U</b>: <b>U</b>nparent todo (make root todo)</p>\n","<p><b>shift+U</b>: <b>U</b>nparent Todo (Mache Sub-Todo zum Toplevel Todo)</p>\n" },
1014{ "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" }, 1014{ "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" },
1015{ "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" }, 1015{ "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" },
1016{ "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" }, 1016{ "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" },
1017{ "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" }, 1017{ "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" },
1018{ "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" }, 1018{ "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" },
1019{ "<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n","<p><b>left</b>: Vorh. Woche | <b>left+ctrl</b>: Vorh. Monat</p>\n" }, 1019{ "<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n","<p><b>left</b>: Vorh. Woche | <b>left+ctrl</b>: Vorh. Monat</p>\n" },
1020{ "<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n","<p><b>right</b>: Nächste Woche | <b>right+ctrl</b>: Nächste Woche</p>\n" }, 1020{ "<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n","<p><b>right</b>: Nächste Woche | <b>right+ctrl</b>: Nächste Woche</p>\n" },
1021{ "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" }, 1021{ "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" },
1022{ "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" }, 1022{ "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" },
1023{ "<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n","<p><b>+,-</b> : Zoom rein/raus Agenda | <b>A</b>: Wechsle Ganztag Agenda Höhe</p>\n" }, 1023{ "<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n","<p><b>+,-</b> : Zoom rein/raus Agenda | <b>A</b>: Wechsle Ganztag Agenda Höhe</p>\n" },
1024{ "<p><b>S+ctrl</b>: Add sub-todo | <b>X</b>: Toggle datenavigator</p>\n","<p><b>S+ctrl</b>: Füge Sub-Todo hinzu | <b>X</b>: Zeige/verstecke Datenavigator</p>\n" }, 1024{ "<p><b>S+ctrl</b>: Add sub-todo | <b>X</b>: Toggle datenavigator</p>\n","<p><b>S+ctrl</b>: Füge Sub-Todo hinzu | <b>X</b>: Zeige/verstecke Datenavigator</p>\n" },
1025{ "<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n","<p><b>T</b>: Gehe zu Heute | <b>T+ctrl</b>: Neues Todo</p>\n" }, 1025{ "<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n","<p><b>T</b>: Gehe zu Heute | <b>T+ctrl</b>: Neues Todo</p>\n" },
1026{ "<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n","<p><b>E</b>: Editiere selektiertes Item |<b> E+ctrl</b>: Neuer Termin</p>\n" }, 1026{ "<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n","<p><b>E</b>: Editiere selektiertes Item |<b> E+ctrl</b>: Neuer Termin</p>\n" },
1027{ "<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n","<p><b>D</b>: Ein-Tages Ansicht | <b>M</b>: Monats Ansicht</p>\n" }, 1027{ "<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n","<p><b>D</b>: Ein-Tages Ansicht | <b>M</b>: Monats Ansicht</p>\n" },
1028{ "<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n","<p><b>Z,Y</b>: Arbeitswochen Ansicht | <b>U</b>: Wochen Ansicht</p>\n" }, 1028{ "<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n","<p><b>Z,Y</b>: Arbeitswochen Ansicht | <b>U</b>: Wochen Ansicht</p>\n" },
1029{ "<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n","<p><b>V</b>: Todo Ansicht | <b>L</b>: Termin Listen Ansicht</p>\n" }, 1029{ "<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n","<p><b>V</b>: Todo Ansicht | <b>L</b>: Termin Listen Ansicht</p>\n" },
1030{ "<p><b>N</b>: Next days view| <b>W</b>: What's next view\n ","<p><b>N</b>: Nächste-Tage Ansicht days view| <b>W</b>: What's next Ansicht\n " }, 1030{ "<p><b>N</b>: Next days view| <b>W</b>: What's next view\n ","<p><b>N</b>: Nächste-Tage Ansicht days view| <b>W</b>: What's next Ansicht\n " },
1031{ "<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n","<p><b>1-0</b> (+<b>ctrl</b>): Selektiere Filter 1-10 (11-20)</p>\n" }, 1031{ "<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n","<p><b>1-0</b> (+<b>ctrl</b>): Selektiere Filter 1-10 (11-20)</p>\n" },
1032{ "<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n","<p><b>O</b>: Filter An/Aus | <b>J</b>: Journal Ansicht</p>\n" }, 1032{ "<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n","<p><b>O</b>: Filter An/Aus | <b>J</b>: Journal Ansicht</p>\n" },
1033{ "<p><b>F</b>: Toggle filterview |<b>F+ctrl</b>: Edit filter </p>\n","<p><b>F</b>: Zeige/verstecke Filter Ansicht |<b>F+ctrl</b>: Editiere Filter </p>\n" }, 1033{ "<p><b>F</b>: Toggle filterview |<b>F+ctrl</b>: Edit filter </p>\n","<p><b>F</b>: Zeige/verstecke Filter Ansicht |<b>F+ctrl</b>: Editiere Filter </p>\n" },
1034{ "<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n","<p><b>Space</b>: Zeige fullscreen | <b>P</b>: Datums Picker</p>\n" }, 1034{ "<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n","<p><b>Space</b>: Zeige fullscreen | <b>P</b>: Datums Picker</p>\n" },
1035{ "<p><b>I</b>: Show info for selected event/todo</p>\n","<p><b>I</b>: Zeige Info (Details) für selektiertes Item</p>\n" }, 1035{ "<p><b>I</b>: Show info for selected event/todo</p>\n","<p><b>I</b>: Zeige Info (Details) für selektiertes Item</p>\n" },
1036{ "<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n","<p><b>H</b>: Dieser Hilfe Dialog | <b>S</b>: Such Dialog</p>\n" }, 1036{ "<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n","<p><b>H</b>: Dieser Hilfe Dialog | <b>S</b>: Such Dialog</p>\n" },
1037{ "<p><h2>KO/Pi key shortcuts:</h2></p>\n","<p><h2>KO/Pi Tastatur Kurzbefehle:</h2></p>\n" }, 1037{ "<p><h2>KO/Pi key shortcuts:</h2></p>\n","<p><h2>KO/Pi Tastatur Kurzbefehle:</h2></p>\n" },
1038{ "After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configurable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n","Nachdem etwas geändert wurde, werden die\nDaten automatisch in die Datei abgespeichert\n~/kdepim/apps/korganizer/mycalendar.ics\nnach (konfigurierbar) drei Minuten.\nAus Sicherheitsgründen wird noch einmal\nnach 10 Min. abgespeichert, wenn keine\nÄnderungen vorgenommen wurden. Die \nDaten werden automatisch gespeichert,\nwenn KO/Pi beendet wird.\nSie können eine Backup-Datei erstellen im\nMenu: Datei - Speichere Kalender Backup\n" }, 1038{ "After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configurable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n","Nachdem etwas geändert wurde, werden die\nDaten automatisch in die Datei abgespeichert\n~/kdepim/apps/korganizer/mycalendar.ics\nnach (konfigurierbar) drei Minuten.\nAus Sicherheitsgründen wird noch einmal\nnach 10 Min. abgespeichert, wenn keine\nÄnderungen vorgenommen wurden. Die \nDaten werden automatisch gespeichert,\nwenn KO/Pi beendet wird.\nSie können eine Backup-Datei erstellen im\nMenu: Datei - Speichere Kalender Backup\n" },
1039{ "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" }, 1039{ "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" },
1040{ "\nhttp://sourceforge.net/projects/kdepimpi\n","\nhttp://sourceforge.net/projects/kdepimpi\n" }, 1040{ "\nhttp://sourceforge.net/projects/kdepimpi\n","\nhttp://sourceforge.net/projects/kdepimpi\n" },
1041{ "\nor report them in the bugtracker on\n","\noder trage sie in dem Bugtracker ein auf\n" }, 1041{ "\nor report them in the bugtracker on\n","\noder trage sie in dem Bugtracker ein auf\n" },
1042{ "\nPlease report unexpected behaviour to\nlutz@pi-sync.net\n","\nBitte melde fehlerhaftes Verhalten an\nlutz@pi-sync.net\n" }, 1042{ "\nPlease report unexpected behaviour to\nlutz@pi-sync.net\n","\nBitte melde fehlerhaftes Verhalten an\nlutz@pi-sync.net\n" },
1043{ "2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n","2) Ein Audio Alarm Daemon\nfür den Zaurus ist verfügbar\nals zusätzliche Anwendung\n" }, 1043{ "2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n","2) Ein Audio Alarm Daemon\nfür den Zaurus ist verfügbar\nals zusätzliche Anwendung\n" },
1044{ "1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n","1) Importieren von *.vcs oder *.ics Dateien von\nanderen Anwendungen kann möglicherweise\n nicht richtig funktionieren,\nwenn die Termine Eigenschaften haben,\ndie KO/Pi nicht unterstützt.\n" }, 1044{ "1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n","1) Importieren von *.vcs oder *.ics Dateien von\nanderen Anwendungen kann möglicherweise\n nicht richtig funktionieren,\nwenn die Termine Eigenschaften haben,\ndie KO/Pi nicht unterstützt.\n" },
1045{ "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" }, 1045{ "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" },
1046{ "KO/Pi FAQ","KO/Pi FAQ" }, 1046{ "KO/Pi FAQ","KO/Pi FAQ" },
1047{ "(c) 2004 Lutz Rogowski\nEmail:lutz@pi-sync.net\nKO/Pi is based on KOrganizer\n(c) 2002,2003 Cornelius Schumacher\nEmail: schumacher@kde.org\nKOrganizer/Pi is licensed\nunder the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.korganizer.org\nwww.pi-sync.net\n","(c) 2004 Lutz Rogowski\nEmail:lutz@pi-sync.net\nKO/Pi basiert auf KOrganizer\n(c) 2002,2003 Cornelius Schumacher\nEmail: schumacher@kde.org\nKOrganizer/Pi ist lizensiert unter der GPL.\nKO/Pi kann kompiliert werden für\nLinux, Zaurus-PDA und Windows\nwww.korganizer.org\nwww.pi-sync.net\n" }, 1047{ "(c) 2004 Lutz Rogowski\nEmail:lutz@pi-sync.net\nKO/Pi is based on KOrganizer\n(c) 2002,2003 Cornelius Schumacher\nEmail: schumacher@kde.org\nKOrganizer/Pi is licensed\nunder the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.korganizer.org\nwww.pi-sync.net\n","(c) 2004 Lutz Rogowski\nEmail:lutz@pi-sync.net\nKO/Pi basiert auf KOrganizer\n(c) 2002,2003 Cornelius Schumacher\nEmail: schumacher@kde.org\nKOrganizer/Pi ist lizensiert unter der GPL.\nKO/Pi kann kompiliert werden für\nLinux, Zaurus-PDA und Windows\nwww.korganizer.org\nwww.pi-sync.net\n" },
1048{ "PDA-Edition\nfor: Zaurus 5x00 / 7x0 / 8x0\n","PDA-Edition\nfür: Zaurus 5x00 / 7x0 / 8x0\n" }, 1048{ "PDA-Edition\nfor: Zaurus 5x00 / 7x0 / 8x0\n","PDA-Edition\nfür: Zaurus 5x00 / 7x0 / 8x0\n" },
1049{ "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" }, 1049{ "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" },
1050{ "About KOrganizer/Pi","Über KOrganizer/Pi" }, 1050{ "About KOrganizer/Pi","Über KOrganizer/Pi" },
1051{ "From: ","Von: " }, 1051{ "From: ","Von: " },
1052{ "Remove sync info","Entferne Sync Info" }, 1052{ "Remove sync info","Entferne Sync Info" },
1053{ "For all profiles","Für alle Profile" }, 1053{ "For all profiles","Für alle Profile" },
1054{ "Hide not Running","Verstecke nicht Laufende" }, 1054{ "Hide not Running","Verstecke nicht Laufende" },
1055{ "ME","ME" }, 1055{ "ME","ME" },
1056{ "Toolbar","Toolbar" }, 1056{ "Toolbar","Toolbar" },
1057{ "Undo Delete...","Löschen rückgängig machen..." }, 1057{ "Undo Delete...","Löschen rückgängig machen..." },
1058{ "Undo Delete","Löschen rückgängig machen" }, 1058{ "Undo Delete","Löschen rückgängig machen" },
1059{ "KDE Sync HowTo...","KDE Sync HowTo..." }, 1059{ "KDE Sync HowTo...","KDE Sync HowTo..." },
1060{ "Multi Sync HowTo...","Multi Sync HowTo..." }, 1060{ "Multi Sync HowTo...","Multi Sync HowTo..." },
1061{ "Januar","Januar" }, 1061{ "Januar","Januar" },
1062{ "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" }, 1062{ "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" },
1063{ "No Filter","Kein Filter" }, 1063{ "No Filter","Kein Filter" },
1064{ "Multiple Sync options","Multi Sync Optionen" }, 1064{ "Multiple Sync options","Multi Sync Optionen" },
1065{ "Sync algo options","Sync Ablauf Optionen" }, 1065{ "Sync algo options","Sync Ablauf Optionen" },
1066{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" }, 1066{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" },
1067{ "Incoming calendar filter:","Eingehender Kalender Filter:" }, 1067{ "Incoming calendar filter:","Eingehender Kalender Filter:" },
1068{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" }, 1068{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" },
1069{ "Write back options","Optionen zum Zurückschreiben" }, 1069{ "Write back options","Optionen zum Zurückschreiben" },
1070{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" }, 1070{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" },
1071{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" }, 1071{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" },
1072{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" }, 1072{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" },
1073{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" }, 1073{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" },
1074{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" }, 1074{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" },
1075{ "Time period","Zeitspanne" }, 1075{ "Time period","Zeitspanne" },
1076{ "From ","Von " }, 1076{ "From ","Von " },
1077{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " }, 1077{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " },
1078{ " weeks in the future "," Wochen in der Zukunft " }, 1078{ " weeks in the future "," Wochen in der Zukunft " },
1079{ "Profile kind specific settings","Profil Art abhängige Einstellungen" }, 1079{ "Profile kind specific settings","Profil Art abhängige Einstellungen" },
1080{ "Local temp file:","Lokale temp Datei:" }, 1080{ "Local temp file:","Lokale temp Datei:" },
1081{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" }, 1081{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" },
1082{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" }, 1082{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" },
1083 1083
1084 1084
1085 1085
1086 1086
1087{ "Language","Sprache" }, 1087{ "Language","Sprache" },
1088{ "Time Format","Zeit Format" }, 1088{ "Time Format","Zeit Format" },
1089{ "Time Zone","Zeit Zone" }, 1089{ "Time Zone","Zeit Zone" },
1090{ "Your current storage dir is:\n%1\nYour mail is stored in:\n(storagedir)/apps/kopiemail/localmail","Ihr gerade genutztes Speicherverzeichnis ist:\n%1\nIhre Mail wird gespeichert in:\n(speicherverzeichnis)/apps/kopiemail/localmail" }, 1090{ "Your current storage dir is:\n%1\nYour mail is stored in:\n(storagedir)/apps/kopiemail/localmail","Ihr gerade genutztes Speicherverzeichnis ist:\n%1\nIhre Mail wird gespeichert in:\n(speicherverzeichnis)/apps/kopiemail/localmail" },
1091{ "<b>Set new data storage dir:</b>","<b>Setze neues Datenspeicherverzeichnis:</b>" }, 1091{ "<b>Set new data storage dir:</b>","<b>Setze neues Datenspeicherverzeichnis:</b>" },
1092{ "Not existing dirs are created automatically","Nicht existierende Verzeichnisse werden erstellt" }, 1092{ "Not existing dirs are created automatically","Nicht existierende Verzeichnisse werden erstellt" },
1093{ "Save settings","Speichere Einstellungen" }, 1093{ "Save settings","Speichere Einstellungen" },
1094{ "Save standard","Speichere Standard" }, 1094{ "Save standard","Speichere Standard" },
1095{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" }, 1095{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" },
1096{ "The settings of the storage\ndir is saved in the file\n%1","Die Einstellungen des Speicherverzeichnisses\nwerden in folgender Datei gespeichert:\n%1" }, 1096{ "The settings of the storage\ndir is saved in the file\n%1","Die Einstellungen des Speicherverzeichnisses\nwerden in folgender Datei gespeichert:\n%1" },
1097{ "Data storage path","Daten Speicherpfad" }, 1097{ "Data storage path","Daten Speicherpfad" },
1098{ "Language","Sprache" }, 1098{ "Language","Sprache" },
1099{ "Show time in agenda items","Zeige Zeit in Agenda Items" }, 1099{ "Show time in agenda items","Zeige Zeit in Agenda Items" },
1100{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" }, 1100{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" },
1101{ "Show events, that are done in \nWhat's Next view","Zeige abgelaufene Termine in\nWhat's Next Ansicht" }, 1101{ "Show events, that are done in \nWhat's Next view","Zeige abgelaufene Termine in\nWhat's Next Ansicht" },
1102{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos in To-do Ansicht" }, 1102{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos in To-do Ansicht" },
1103{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" }, 1103{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" },
1104{ "KO/Pi","KO/Pi" }, 1104{ "KO/Pi","KO/Pi" },
1105{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" }, 1105{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" },
1106{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." }, 1106{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." },
1107{ "Sound.Al.: ","Sound.Al.: " }, 1107{ "Sound.Al.: ","Sound.Al.: " },
1108{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" }, 1108{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" },
1109{ "Restore","Wiederherstellen" }, 1109{ "Restore","Wiederherstellen" },
1110{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklicht\nwiederherstellen?" }, 1110{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklicht\nwiederherstellen?" },
1111{ "% completed","% komplett" }, 1111{ "% completed","% komplett" },
1112{ "%d item(s) found.","%d Item(s) gefunden." }, 1112{ "%d item(s) found.","%d Item(s) gefunden." },
1113{ "Set complete","Setze auf erledigt" }, 1113{ "Set complete","Setze auf erledigt" },
1114{ "(cancelled)","(gecancelt)" }, 1114{ "(cancelled)","(gecancelt)" },
1115{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" }, 1115{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" },
1116{ " Local time "," Locale Zeit " }, 1116{ " Local time "," Locale Zeit " },
1117{ "Form2","Form2" }, 1117{ "Form2","Form2" },
1118{ "Filter enabled","Filter angeschaltet" }, 1118{ "Filter enabled","Filter angeschaltet" },
1119{ "Edit Filters","Ändere Filter" }, 1119{ "Edit Filters","Ändere Filter" },
1120{ "Print What's Next View...","Drucke What's Next Ansicht..." }, 1120{ "Print What's Next View...","Drucke What's Next Ansicht..." },
1121{ "Agenda","Agenda" }, 1121{ "Agenda","Agenda" },
1122{ " ("," (" }, 1122{ " ("," (" },
1123{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" }, 1123{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" },
1124{ "Print","Print" }, 1124{ "Print","Print" },
1125{ "&Setup Printer...","Drucker &Setup..." }, 1125{ "&Setup Printer...","Drucker &Setup..." },
1126{ "View Type","Zeige Typ" }, 1126{ "View Type","Zeige Typ" },
1127{ "Page &orientation:","Seiten Ausrichtung:" }, 1127{ "Page &orientation:","Seiten Ausrichtung:" },
1128{ "Use Default of Selected Style","Default des selektierten Stils" }, 1128{ "Use Default of Selected Style","Default des selektierten Stils" },
1129{ "Use Default Setting of Printer","Default Einstellung des Druckers" }, 1129{ "Use Default Setting of Printer","Default Einstellung des Druckers" },
1130{ "Portrait","Portrait" }, 1130{ "Portrait","Portrait" },
1131{ "Landscape","Landschaft" }, 1131{ "Landscape","Landschaft" },
1132{ "Print day","Drucke Tag" }, 1132{ "Print day","Drucke Tag" },
1133{ "CalPrintDay_Base","CalPrintDay_Base" }, 1133{ "CalPrintDay_Base","CalPrintDay_Base" },
1134{ "Date && Time Range","Datum && Zeitspanne" }, 1134{ "Date && Time Range","Datum && Zeitspanne" },
1135{ "&End date:","&Enddatum:" }, 1135{ "&End date:","&Enddatum:" },
1136{ "&Start date:","&Startdatum:" }, 1136{ "&Start date:","&Startdatum:" },
1137{ "Start &time:","Startzeit:" }, 1137{ "Start &time:","Startzeit:" },
1138{ "End ti&me:","Endzeit:" }, 1138{ "End ti&me:","Endzeit:" },
1139{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Ereignisse einzuschliessen" }, 1139{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Ereignisse einzuschliessen" },
1140{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" }, 1140{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" },
1141{ "Alt+D","Alt+D" }, 1141{ "Alt+D","Alt+D" },
1142{ "&Use colors","Nutze Farben" }, 1142{ "&Use colors","Nutze Farben" },
1143{ "Alt+U","Alt+U" }, 1143{ "Alt+U","Alt+U" },
1144{ "Print week","Drucke Woche" }, 1144{ "Print week","Drucke Woche" },
1145{ "CalPrintWeek_Base","CalPrintWeek_Base" }, 1145{ "CalPrintWeek_Base","CalPrintWeek_Base" },
1146{ "Use &colors","Nutze Farben" }, 1146{ "Use &colors","Nutze Farben" },
1147{ "Type of View","Typ der Ansicht" }, 1147{ "Type of View","Typ der Ansicht" },
1148{ "Print as &Filofax page","Drucke als &Filofax Seite" }, 1148{ "Print as &Filofax page","Drucke als &Filofax Seite" },
1149{ "Alt+F","Alt+F" }, 1149{ "Alt+F","Alt+F" },
1150{ "Print as &timetable view:","Drucke als Zeittabelle:" }, 1150{ "Print as &timetable view:","Drucke als Zeittabelle:" },
1151{ "Alt+T","Alt+T" }, 1151{ "Alt+T","Alt+T" },
1152{ "Print as split week view","Drucke als gesplittete Wochenansicht" }, 1152{ "Print as split week view","Drucke als gesplittete Wochenansicht" },
1153{ "Print month","Drucke Monat" }, 1153{ "Print month","Drucke Monat" },
1154{ "CalPrintMonth_Base","CalPrintMonth_Base" }, 1154{ "CalPrintMonth_Base","CalPrintMonth_Base" },
1155{ "&Start month:","&Startmonat:" }, 1155{ "&Start month:","&Startmonat:" },
1156{ "&End month:","&Endmonat:" }, 1156{ "&End month:","&Endmonat:" },
1157{ "Print week &numbers","Drucke Wochen Nummer(n)" }, 1157{ "Print week &numbers","Drucke Wochen Nummer(n)" },
1158{ "Print todos","Drucke Todos" }, 1158{ "Print todos","Drucke Todos" },
1159{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" }, 1159{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" },
1160{ "Include &description of the item","Inclusive Itembeschreibung" }, 1160{ "Include &description of the item","Inclusive Itembeschreibung" },
1161{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" }, 1161{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" },
1162{ "Include &priority of the item","Inclusive Priorität des Items" }, 1162{ "Include &priority of the item","Inclusive Priorität des Items" },
1163{ "Items to Print","Zu druckende Items" }, 1163{ "Items to Print","Zu druckende Items" },
1164{ "&From:","Von:" }, 1164{ "&From:","Von:" },
1165{ "&To:","Bis:" }, 1165{ "&To:","Bis:" },
1166{ "Print &all todo items","Drucke alle Todo Items" }, 1166{ "Print &all todo items","Drucke alle Todo Items" },
1167{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" }, 1167{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" },
1168{ "Only items due in the &range:","Nur Items in dem Zeitraum:" }, 1168{ "Only items due in the &range:","Nur Items in dem Zeitraum:" },
1169{ "Todo List","Todo Liste" }, 1169{ "Todo List","Todo Liste" },
1170{ "&Title:","&Titel:" }, 1170{ "&Title:","&Titel:" },
1171{ "Co&nnect subtodos with its parent","Verbinde Unter-Todos mit ihren Ober-Todos" }, 1171{ "Co&nnect subtodos with its parent","Verbinde Unter-Todos mit ihren Ober-Todos" },
1172{ "Todo list","Todo Liste" }, 1172{ "Todo list","Todo Liste" },
1173{ "&Print...","Drucke..." }, 1173{ "&Print...","Drucke..." },
1174{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" }, 1174{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" },
1175{ "[Unconfigured]","[Unkonfiguriert]" }, 1175{ "[Unconfigured]","[Unkonfiguriert]" },
1176{ "OK","OK" }, 1176{ "OK","OK" },
1177{ "FilterEditor","FilterEditor" }, 1177{ "FilterEditor","FilterEditor" },
1178{ "Include","Inclusive" }, 1178{ "Include","Inclusive" },
1179{ "Exclude","Exclusive" }, 1179{ "Exclude","Exclusive" },
1180{ "Edit Selection...","Editiere Selektion..." }, 1180{ "Edit Selection...","Editiere Selektion..." },
1181{ "recurring events","wiederholende Ereignisse" }, 1181{ "recurring events","wiederholende Ereignisse" },
1182{ "completed to-dos","erledigte Todos" }, 1182{ "completed to-dos","erledigte Todos" },
1183{ "events","Ereignisse" }, 1183{ "events","Ereignisse" },
1184{ "todos","Todos" }, 1184{ "todos","Todos" },
1185{ "journals","Journale" }, 1185{ "journals","Journale" },
1186{ "public","öffentlich" }, 1186{ "public","öffentlich" },
1187{ "private","privat" }, 1187{ "private","privat" },
1188{ "confidential","vertraulich" }, 1188{ "confidential","vertraulich" },
1189{ "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Unter-Todos.\nAlle erledigten Unter-Todos\nwerden auch gelöscht!" }, 1189{ "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Unter-Todos.\nAlle erledigten Unter-Todos\nwerden auch gelöscht!" },
1190{ "Yesterday","Gestern" }, 1190{ "Yesterday","Gestern" },
1191{ "Day after tomorrow","Übermorgen" }, 1191{ "Day after tomorrow","Übermorgen" },
1192{ "Tomorrow","Morgen" }, 1192{ "Tomorrow","Morgen" },
1193{ "Day before yesterday","Vorgestern" }, 1193{ "Day before yesterday","Vorgestern" },
1194{ "Size %1","Größe %1" }, 1194{ "Size %1","Größe %1" },
1195{ "New Agendasize: %1","Neue Agendagröße: %1" }, 1195{ "New Agendasize: %1","Neue Agendagröße: %1" },
1196{ "","" }, 1196{ " (%1 y.)"," (%1 J.)" },
1197{ "","" }, 1197{ "","" },
1198{ "","" }, 1198{ "","" },
1199{ "","" }, 1199{ "","" },
1200{ "","" }, 1200{ "","" },
1201{ "","" }, 1201{ "","" },
1202{ "","" }, 1202{ "","" },
1203{ "","" }, 1203{ "","" },
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 1d5a57e..257a4dd 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,3906 +1,3911 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 3
4 Requires the Qt and KDE widget libraries, available at no cost at 4 Requires the Qt and KDE widget libraries, available at no cost at
5 http://www.troll.no and http://www.kde.org respectively 5 http://www.troll.no and http://www.kde.org respectively
6 6
7 Copyright (c) 1997, 1998, 1999 7 Copyright (c) 1997, 1998, 1999
8 Preston Brown (preston.brown@yale.edu) 8 Preston Brown (preston.brown@yale.edu)
9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl) 9 Fester Zigterman (F.J.F.ZigtermanRustenburg@student.utwente.nl)
10 Ian Dawes (iadawes@globalserve.net) 10 Ian Dawes (iadawes@globalserve.net)
11 Laszlo Boloni (boloni@cs.purdue.edu) 11 Laszlo Boloni (boloni@cs.purdue.edu)
12 12
13 Copyright (c) 2000, 2001, 2002 13 Copyright (c) 2000, 2001, 2002
14 Cornelius Schumacher <schumacher@kde.org> 14 Cornelius Schumacher <schumacher@kde.org>
15 15
16 This program is free software; you can redistribute it and/or modify 16 This program is free software; you can redistribute it and/or modify
17 it under the terms of the GNU General Public License as published by 17 it under the terms of the GNU General Public License as published by
18 the Free Software Foundation; either version 2 of the License, or 18 the Free Software Foundation; either version 2 of the License, or
19 (at your option) any later version. 19 (at your option) any later version.
20 20
21 This program is distributed in the hope that it will be useful, 21 This program is distributed in the hope that it will be useful,
22 but WITHOUT ANY WARRANTY; without even the implied warranty of 22 but WITHOUT ANY WARRANTY; without even the implied warranty of
23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 23 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
24 GNU General Public License for more details. 24 GNU General Public License for more details.
25 25
26 You should have received a copy of the GNU General Public License 26 You should have received a copy of the GNU General Public License
27 along with this program; if not, write to the Free Software 27 along with this program; if not, write to the Free Software
28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 28 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
29*/ 29*/
30 30
31#include <stdlib.h> 31#include <stdlib.h>
32 32
33#include <qapplication.h> 33#include <qapplication.h>
34#include <qradiobutton.h> 34#include <qradiobutton.h>
35#include <qbuttongroup.h> 35#include <qbuttongroup.h>
36#include <qlayout.h> 36#include <qlayout.h>
37#include <qclipboard.h> 37#include <qclipboard.h>
38#include <qcursor.h> 38#include <qcursor.h>
39#include <qmessagebox.h> 39#include <qmessagebox.h>
40#include <qprogressbar.h> 40#include <qprogressbar.h>
41#include <qmultilineedit.h> 41#include <qmultilineedit.h>
42#include <qtimer.h> 42#include <qtimer.h>
43#include <qwidgetstack.h> 43#include <qwidgetstack.h>
44#include <qptrlist.h> 44#include <qptrlist.h>
45#include <qregexp.h> 45#include <qregexp.h>
46#include <qgroupbox.h> 46#include <qgroupbox.h>
47#include <qfile.h> 47#include <qfile.h>
48#include <qdir.h> 48#include <qdir.h>
49#ifndef KORG_NOSPLITTER 49#ifndef KORG_NOSPLITTER
50#include <qsplitter.h> 50#include <qsplitter.h>
51#endif 51#endif
52 52
53#include <kglobal.h> 53#include <kglobal.h>
54#include <kdebug.h> 54#include <kdebug.h>
55#include <kstandarddirs.h> 55#include <kstandarddirs.h>
56#include <kfiledialog.h> 56#include <kfiledialog.h>
57#include <kmessagebox.h> 57#include <kmessagebox.h>
58#include <knotifyclient.h> 58#include <knotifyclient.h>
59#include <kconfig.h> 59#include <kconfig.h>
60 60
61#include <libkdepim/ksyncprefsdialog.h> 61#include <libkdepim/ksyncprefsdialog.h>
62#include <krun.h> 62#include <krun.h>
63#include <kdirwatch.h> 63#include <kdirwatch.h>
64#include <libkdepim/kdatepicker.h> 64#include <libkdepim/kdatepicker.h>
65#include <libkdepim/ksyncprofile.h> 65#include <libkdepim/ksyncprofile.h>
66#include <libkdepim/kpimglobalprefs.h> 66#include <libkdepim/kpimglobalprefs.h>
67 67
68#include <libkcal/vcaldrag.h> 68#include <libkcal/vcaldrag.h>
69#include <libkcal/icaldrag.h> 69#include <libkcal/icaldrag.h>
70#include <libkcal/icalformat.h> 70#include <libkcal/icalformat.h>
71#include <libkcal/vcalformat.h> 71#include <libkcal/vcalformat.h>
72#include <libkcal/scheduler.h> 72#include <libkcal/scheduler.h>
73#include <libkcal/calendarlocal.h> 73#include <libkcal/calendarlocal.h>
74#include <libkcal/journal.h> 74#include <libkcal/journal.h>
75#include <libkcal/calfilter.h> 75#include <libkcal/calfilter.h>
76#include <libkcal/attendee.h> 76#include <libkcal/attendee.h>
77#include <libkcal/dndfactory.h> 77#include <libkcal/dndfactory.h>
78#include <libkcal/freebusy.h> 78#include <libkcal/freebusy.h>
79#include <libkcal/filestorage.h> 79#include <libkcal/filestorage.h>
80#include <libkcal/calendarresources.h> 80#include <libkcal/calendarresources.h>
81#include <libkcal/qtopiaformat.h> 81#include <libkcal/qtopiaformat.h>
82#include "../kalarmd/alarmdialog.h" 82#include "../kalarmd/alarmdialog.h"
83 83
84#ifndef DESKTOP_VERSION 84#ifndef DESKTOP_VERSION
85#include <libkcal/sharpformat.h> 85#include <libkcal/sharpformat.h>
86#include <externalapphandler.h> 86#include <externalapphandler.h>
87#endif 87#endif
88#include <libkcal/phoneformat.h> 88#include <libkcal/phoneformat.h>
89#ifndef KORG_NOMAIL 89#ifndef KORG_NOMAIL
90#include "komailclient.h" 90#include "komailclient.h"
91#endif 91#endif
92#ifndef KORG_NOPRINTER 92#ifndef KORG_NOPRINTER
93#include "calprinter.h" 93#include "calprinter.h"
94#endif 94#endif
95#ifndef KORG_NOPLUGINS 95#ifndef KORG_NOPLUGINS
96#include "kocore.h" 96#include "kocore.h"
97#endif 97#endif
98#include "koeventeditor.h" 98#include "koeventeditor.h"
99#include "kotodoeditor.h" 99#include "kotodoeditor.h"
100#include "koprefs.h" 100#include "koprefs.h"
101#include "koeventviewerdialog.h" 101#include "koeventviewerdialog.h"
102#include "publishdialog.h" 102#include "publishdialog.h"
103#include "kofilterview.h" 103#include "kofilterview.h"
104#include "koglobals.h" 104#include "koglobals.h"
105#include "koviewmanager.h" 105#include "koviewmanager.h"
106#include "koagendaview.h" 106#include "koagendaview.h"
107#include "kodialogmanager.h" 107#include "kodialogmanager.h"
108#include "outgoingdialog.h" 108#include "outgoingdialog.h"
109#include "incomingdialog.h" 109#include "incomingdialog.h"
110#include "statusdialog.h" 110#include "statusdialog.h"
111#include "kdatenavigator.h" 111#include "kdatenavigator.h"
112#include "kotodoview.h" 112#include "kotodoview.h"
113#include "datenavigator.h" 113#include "datenavigator.h"
114#include "resourceview.h" 114#include "resourceview.h"
115#include "navigatorbar.h" 115#include "navigatorbar.h"
116#include "searchdialog.h" 116#include "searchdialog.h"
117#include "mainwindow.h" 117#include "mainwindow.h"
118 118
119#include "calendarview.h" 119#include "calendarview.h"
120#ifndef DESKTOP_VERSION 120#ifndef DESKTOP_VERSION
121#include <qtopia/alarmserver.h> 121#include <qtopia/alarmserver.h>
122#endif 122#endif
123#ifndef _WIN32_ 123#ifndef _WIN32_
124#include <stdlib.h> 124#include <stdlib.h>
125#include <stdio.h> 125#include <stdio.h>
126#include <unistd.h> 126#include <unistd.h>
127#else 127#else
128#include <qprocess.h> 128#include <qprocess.h>
129#endif 129#endif
130 130
131#ifdef DESKTOP_VERSION 131#ifdef DESKTOP_VERSION
132#include <kabc/stdaddressbook.h> 132#include <kabc/stdaddressbook.h>
133#endif 133#endif
134using namespace KOrg; 134using namespace KOrg;
135using namespace KCal; 135using namespace KCal;
136extern int globalFlagBlockAgenda; 136extern int globalFlagBlockAgenda;
137extern int globalFlagBlockStartup; 137extern int globalFlagBlockStartup;
138 138
139 139
140 140
141class KOBeamPrefs : public QDialog 141class KOBeamPrefs : public QDialog
142{ 142{
143 public: 143 public:
144 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) : 144 KOBeamPrefs( QWidget *parent=0, const char *name=0 ) :
145 QDialog( parent, name, true ) 145 QDialog( parent, name, true )
146 { 146 {
147 setCaption( i18n("Beam Options") ); 147 setCaption( i18n("Beam Options") );
148 QVBoxLayout* lay = new QVBoxLayout( this ); 148 QVBoxLayout* lay = new QVBoxLayout( this );
149 lay->setSpacing( 3 ); 149 lay->setSpacing( 3 );
150 lay->setMargin( 3 ); 150 lay->setMargin( 3 );
151 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this ); 151 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("File format"), this );
152 lay->addWidget( format ); 152 lay->addWidget( format );
153 format->setExclusive ( true ) ; 153 format->setExclusive ( true ) ;
154 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this ); 154 QButtonGroup* time = new QButtonGroup(1, Horizontal, i18n("Time format"), this );
155 lay->addWidget( time ); time->setExclusive ( true ) ; 155 lay->addWidget( time ); time->setExclusive ( true ) ;
156 vcal = new QRadioButton(" vCalendar ", format ); 156 vcal = new QRadioButton(" vCalendar ", format );
157 ical = new QRadioButton(" iCalendar ", format ); 157 ical = new QRadioButton(" iCalendar ", format );
158 vcal->setChecked( true ); 158 vcal->setChecked( true );
159 tz = new QRadioButton(i18n(" With timezone "), time ); 159 tz = new QRadioButton(i18n(" With timezone "), time );
160 local = new QRadioButton(i18n(" Local time "), time ); 160 local = new QRadioButton(i18n(" Local time "), time );
161 tz->setChecked( true ); 161 tz->setChecked( true );
162 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this ); 162 QPushButton * ok = new QPushButton( i18n("Beam via IR!"), this );
163 lay->addWidget( ok ); 163 lay->addWidget( ok );
164 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 164 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
165 lay->addWidget( cancel ); 165 lay->addWidget( cancel );
166 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 166 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
167 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 167 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
168 resize( 200, 200 ); 168 resize( 200, 200 );
169 } 169 }
170 170
171 bool beamVcal() { return vcal->isChecked(); } 171 bool beamVcal() { return vcal->isChecked(); }
172 bool beamLocal() { return local->isChecked(); } 172 bool beamLocal() { return local->isChecked(); }
173private: 173private:
174 QRadioButton* vcal, *ical, *local, *tz; 174 QRadioButton* vcal, *ical, *local, *tz;
175}; 175};
176class KOCatPrefs : public QDialog 176class KOCatPrefs : public QDialog
177{ 177{
178 public: 178 public:
179 KOCatPrefs( QWidget *parent=0, const char *name=0 ) : 179 KOCatPrefs( QWidget *parent=0, const char *name=0 ) :
180 QDialog( parent, name, true ) 180 QDialog( parent, name, true )
181 { 181 {
182 setCaption( i18n("Manage new Categories") ); 182 setCaption( i18n("Manage new Categories") );
183 QVBoxLayout* lay = new QVBoxLayout( this ); 183 QVBoxLayout* lay = new QVBoxLayout( this );
184 lay->setSpacing( 3 ); 184 lay->setSpacing( 3 );
185 lay->setMargin( 3 ); 185 lay->setMargin( 3 );
186 QLabel * lab = new QLabel( i18n("After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n "), this ); 186 QLabel * lab = new QLabel( i18n("After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n "), this );
187 lay->addWidget( lab ); 187 lay->addWidget( lab );
188 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this ); 188 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this );
189 lay->addWidget( format ); 189 lay->addWidget( format );
190 format->setExclusive ( true ) ; 190 format->setExclusive ( true ) ;
191 addCatBut = new QRadioButton(i18n("Add to category list"), format ); 191 addCatBut = new QRadioButton(i18n("Add to category list"), format );
192 new QRadioButton(i18n("Remove from Events/Todos"), format ); 192 new QRadioButton(i18n("Remove from Events/Todos"), format );
193 addCatBut->setChecked( true ); 193 addCatBut->setChecked( true );
194 QPushButton * ok = new QPushButton( i18n("OK"), this ); 194 QPushButton * ok = new QPushButton( i18n("OK"), this );
195 lay->addWidget( ok ); 195 lay->addWidget( ok );
196 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 196 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
197 lay->addWidget( cancel ); 197 lay->addWidget( cancel );
198 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 198 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
199 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 199 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
200 resize( 200, 200 ); 200 resize( 200, 200 );
201 } 201 }
202 202
203 bool addCat() { return addCatBut->isChecked(); } 203 bool addCat() { return addCatBut->isChecked(); }
204private: 204private:
205 QRadioButton* addCatBut; 205 QRadioButton* addCatBut;
206}; 206};
207 207
208 208
209 209
210CalendarView::CalendarView( CalendarResources *calendar, 210CalendarView::CalendarView( CalendarResources *calendar,
211 QWidget *parent, const char *name ) 211 QWidget *parent, const char *name )
212 : CalendarViewBase( parent, name ), 212 : CalendarViewBase( parent, name ),
213 mCalendar( calendar ), 213 mCalendar( calendar ),
214 mResourceManager( calendar->resourceManager() ) 214 mResourceManager( calendar->resourceManager() )
215{ 215{
216 216
217 mEventEditor = 0; 217 mEventEditor = 0;
218 mTodoEditor = 0; 218 mTodoEditor = 0;
219 219
220 init(); 220 init();
221} 221}
222 222
223CalendarView::CalendarView( Calendar *calendar, 223CalendarView::CalendarView( Calendar *calendar,
224 QWidget *parent, const char *name ) 224 QWidget *parent, const char *name )
225 : CalendarViewBase( parent, name ), 225 : CalendarViewBase( parent, name ),
226 mCalendar( calendar ), 226 mCalendar( calendar ),
227 mResourceManager( 0 ) 227 mResourceManager( 0 )
228{ 228{
229 229
230 mEventEditor = 0; 230 mEventEditor = 0;
231 mTodoEditor = 0; 231 mTodoEditor = 0;
232 init();} 232 init();}
233 233
234void CalendarView::init() 234void CalendarView::init()
235{ 235{
236 mBlockShowDates = false; 236 mBlockShowDates = false;
237 beamDialog = new KOBeamPrefs(); 237 beamDialog = new KOBeamPrefs();
238 mDatePickerMode = 0; 238 mDatePickerMode = 0;
239 mCurrentSyncDevice = ""; 239 mCurrentSyncDevice = "";
240 writeLocale(); 240 writeLocale();
241 mViewManager = new KOViewManager( this ); 241 mViewManager = new KOViewManager( this );
242 mDialogManager = new KODialogManager( this ); 242 mDialogManager = new KODialogManager( this );
243 mEventViewerDialog = 0; 243 mEventViewerDialog = 0;
244 mModified = false; 244 mModified = false;
245 mReadOnly = false; 245 mReadOnly = false;
246 mSelectedIncidence = 0; 246 mSelectedIncidence = 0;
247 mCalPrinter = 0; 247 mCalPrinter = 0;
248 mFilters.setAutoDelete(true); 248 mFilters.setAutoDelete(true);
249 249
250 mCalendar->registerObserver( this ); 250 mCalendar->registerObserver( this );
251 // TODO: Make sure that view is updated, when calendar is changed. 251 // TODO: Make sure that view is updated, when calendar is changed.
252 252
253 mStorage = new FileStorage( mCalendar ); 253 mStorage = new FileStorage( mCalendar );
254 mNavigator = new DateNavigator( this, "datevav", mViewManager ); 254 mNavigator = new DateNavigator( this, "datevav", mViewManager );
255 255
256 QBoxLayout *topLayout = (QBoxLayout*)layout(); 256 QBoxLayout *topLayout = (QBoxLayout*)layout();
257#ifndef KORG_NOSPLITTER 257#ifndef KORG_NOSPLITTER
258 // create the main layout frames. 258 // create the main layout frames.
259 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner"); 259 mPanner = new QSplitter(QSplitter::Horizontal,this,"CalendarView::Panner");
260 topLayout->addWidget(mPanner); 260 topLayout->addWidget(mPanner);
261 261
262 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner, 262 mLeftSplitter = new QSplitter(QSplitter::Vertical,mPanner,
263 "CalendarView::LeftFrame"); 263 "CalendarView::LeftFrame");
264 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize); 264 mPanner->setResizeMode(mLeftSplitter,QSplitter::KeepSize);
265 265
266 mDateNavigator = new KDateNavigator(mLeftSplitter, mCalendar, TRUE, 266 mDateNavigator = new KDateNavigator(mLeftSplitter, mCalendar, TRUE,
267 "CalendarView::DateNavigator", QDate::currentDate() ); 267 "CalendarView::DateNavigator", QDate::currentDate() );
268 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize); 268 mLeftSplitter->setResizeMode(mDateNavigator,QSplitter::KeepSize);
269 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2"); 269 mTodoList = new KOTodoView(mCalendar, mLeftSplitter, "todolist_small2");
270 mTodoList->setNavigator( mNavigator ); 270 mTodoList->setNavigator( mNavigator );
271 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView"); 271 mFilterView = new KOFilterView(&mFilters,mLeftSplitter,"CalendarView::FilterView");
272 272
273#ifdef KORG_NORESOURCEVIEW 273#ifdef KORG_NORESOURCEVIEW
274 mResourceView = 0; 274 mResourceView = 0;
275#else 275#else
276 if ( mResourceManager ) { 276 if ( mResourceManager ) {
277 mResourceView = new ResourceView( mResourceManager, mLeftSplitter ); 277 mResourceView = new ResourceView( mResourceManager, mLeftSplitter );
278 mResourceView->updateView(); 278 mResourceView->updateView();
279 connect( mResourceView, SIGNAL( resourcesChanged() ), 279 connect( mResourceView, SIGNAL( resourcesChanged() ),
280 SLOT( updateView() ) ); 280 SLOT( updateView() ) );
281 } else { 281 } else {
282 mResourceView = 0; 282 mResourceView = 0;
283 } 283 }
284#endif 284#endif
285 QWidget *rightBox = new QWidget( mPanner ); 285 QWidget *rightBox = new QWidget( mPanner );
286 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 286 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
287 287
288 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" ); 288 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" );
289 rightLayout->addWidget( mNavigatorBar ); 289 rightLayout->addWidget( mNavigatorBar );
290 290
291 mRightFrame = new QWidgetStack( rightBox ); 291 mRightFrame = new QWidgetStack( rightBox );
292 rightLayout->addWidget( mRightFrame, 1 ); 292 rightLayout->addWidget( mRightFrame, 1 );
293 293
294 mLeftFrame = mLeftSplitter; 294 mLeftFrame = mLeftSplitter;
295#else 295#else
296 QWidget *mainBox = new QWidget( this ); 296 QWidget *mainBox = new QWidget( this );
297 QWidget *leftFrame = new QWidget( mainBox ); 297 QWidget *leftFrame = new QWidget( mainBox );
298 298
299 QBoxLayout * mainBoxLayout; 299 QBoxLayout * mainBoxLayout;
300 QBoxLayout * leftFrameLayout; 300 QBoxLayout * leftFrameLayout;
301 if ( KOPrefs::instance()->mVerticalScreen ) { 301 if ( KOPrefs::instance()->mVerticalScreen ) {
302 mainBoxLayout = new QVBoxLayout(mainBox); 302 mainBoxLayout = new QVBoxLayout(mainBox);
303 leftFrameLayout = new QHBoxLayout(leftFrame ); 303 leftFrameLayout = new QHBoxLayout(leftFrame );
304 } else { 304 } else {
305 mainBoxLayout = new QHBoxLayout(mainBox); 305 mainBoxLayout = new QHBoxLayout(mainBox);
306 leftFrameLayout = new QVBoxLayout(leftFrame ); 306 leftFrameLayout = new QVBoxLayout(leftFrame );
307 } 307 }
308 topLayout->addWidget( mainBox ); 308 topLayout->addWidget( mainBox );
309 mainBoxLayout->addWidget (leftFrame); 309 mainBoxLayout->addWidget (leftFrame);
310 mDateNavigator = new KDateNavigator(leftFrame, mCalendar, TRUE, 310 mDateNavigator = new KDateNavigator(leftFrame, mCalendar, TRUE,
311 "CalendarView::DateNavigator", QDate::currentDate()); 311 "CalendarView::DateNavigator", QDate::currentDate());
312 // mDateNavigator->blockSignals( true ); 312 // mDateNavigator->blockSignals( true );
313 leftFrameLayout->addWidget( mDateNavigator ); 313 leftFrameLayout->addWidget( mDateNavigator );
314 mFilterView = new KOFilterView(&mFilters,leftFrame,"CalendarView::FilterView"); 314 mFilterView = new KOFilterView(&mFilters,leftFrame,"CalendarView::FilterView");
315 mTodoList = new KOTodoView(mCalendar, leftFrame, "todolistsmall"); 315 mTodoList = new KOTodoView(mCalendar, leftFrame, "todolistsmall");
316 mTodoList->setNavigator( mNavigator ); 316 mTodoList->setNavigator( mNavigator );
317 317
318 if ( QApplication::desktop()->width() < 480 ) { 318 if ( QApplication::desktop()->width() < 480 ) {
319 leftFrameLayout->addWidget(mFilterView); 319 leftFrameLayout->addWidget(mFilterView);
320 leftFrameLayout->addWidget(mTodoList, 2 ); 320 leftFrameLayout->addWidget(mTodoList, 2 );
321 321
322 } else { 322 } else {
323 leftFrameLayout->addWidget(mTodoList,2 ); 323 leftFrameLayout->addWidget(mTodoList,2 );
324 leftFrameLayout->addWidget(mFilterView ); 324 leftFrameLayout->addWidget(mFilterView );
325 } 325 }
326 mFilterView->hide(); 326 mFilterView->hide();
327 QWidget *rightBox = new QWidget( mainBox ); 327 QWidget *rightBox = new QWidget( mainBox );
328 mainBoxLayout->addWidget ( rightBox, 10 ); 328 mainBoxLayout->addWidget ( rightBox, 10 );
329 QBoxLayout *rightLayout = new QVBoxLayout( rightBox ); 329 QBoxLayout *rightLayout = new QVBoxLayout( rightBox );
330 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" ); 330 mNavigatorBar = new NavigatorBar( QDate::currentDate(), rightBox, "useBigPixmaps" );
331 mRightFrame = new QWidgetStack( rightBox ); 331 mRightFrame = new QWidgetStack( rightBox );
332 rightLayout->addWidget( mNavigatorBar ); 332 rightLayout->addWidget( mNavigatorBar );
333 rightLayout->addWidget( mRightFrame, 10 ); 333 rightLayout->addWidget( mRightFrame, 10 );
334 334
335 mLeftFrame = leftFrame; 335 mLeftFrame = leftFrame;
336 if ( KOPrefs::instance()->mVerticalScreen ) { 336 if ( KOPrefs::instance()->mVerticalScreen ) {
337 mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() ); 337 mTodoList->setFixedHeight( mDateNavigator->sizeHint().height() );
338 leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() ); 338 leftFrame->setFixedHeight( mDateNavigator->sizeHint().height() );
339 } else { 339 } else {
340 mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() ); 340 mTodoList->setFixedWidth( mDateNavigator->sizeHint().width() );
341 leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() ); 341 leftFrame->setFixedWidth( mDateNavigator->sizeHint().width() );
342 } 342 }
343 if ( !KOPrefs::instance()->mShowDateNavigator) 343 if ( !KOPrefs::instance()->mShowDateNavigator)
344 mDateNavigator->hide(); 344 mDateNavigator->hide();
345 //qDebug("Calendarview Size %d %d ", width(), height()); 345 //qDebug("Calendarview Size %d %d ", width(), height());
346#endif 346#endif
347 347
348 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 348 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
349 SLOT( showDates( const KCal::DateList & ) ) ); 349 SLOT( showDates( const KCal::DateList & ) ) );
350 350
351 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 351 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
352 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 352 mDateNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
353 connect( mNavigatorBar, SIGNAL( goPrevYear() ), 353 connect( mNavigatorBar, SIGNAL( goPrevYear() ),
354 mNavigator, SLOT( selectPreviousYear() ) ); 354 mNavigator, SLOT( selectPreviousYear() ) );
355 connect( mNavigatorBar, SIGNAL( goNextYear() ), 355 connect( mNavigatorBar, SIGNAL( goNextYear() ),
356 mNavigator, SLOT( selectNextYear() ) ); 356 mNavigator, SLOT( selectNextYear() ) );
357 connect( mNavigatorBar, SIGNAL( goPrevMonth() ), 357 connect( mNavigatorBar, SIGNAL( goPrevMonth() ),
358 mNavigator, SLOT( selectPreviousMonth() ) ); 358 mNavigator, SLOT( selectPreviousMonth() ) );
359 connect( mNavigatorBar, SIGNAL( goNextMonth() ), 359 connect( mNavigatorBar, SIGNAL( goNextMonth() ),
360 mNavigator, SLOT( selectNextMonth() ) ); 360 mNavigator, SLOT( selectNextMonth() ) );
361 361
362 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 362 connect( mNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
363 mNavigatorBar, SLOT( selectDates( const KCal::DateList & ) ) ); 363 mNavigatorBar, SLOT( selectDates( const KCal::DateList & ) ) );
364 364
365 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ), 365 connect( mDateNavigator, SIGNAL( weekClicked( const QDate & ) ),
366 mNavigator, SLOT( selectWeek( const QDate & ) ) ); 366 mNavigator, SLOT( selectWeek( const QDate & ) ) );
367 367
368 connect( mDateNavigator, SIGNAL( goPrevYear() ), 368 connect( mDateNavigator, SIGNAL( goPrevYear() ),
369 mNavigator, SLOT( selectPreviousYear() ) ); 369 mNavigator, SLOT( selectPreviousYear() ) );
370 connect( mDateNavigator, SIGNAL( goNextYear() ), 370 connect( mDateNavigator, SIGNAL( goNextYear() ),
371 mNavigator, SLOT( selectNextYear() ) ); 371 mNavigator, SLOT( selectNextYear() ) );
372 connect( mDateNavigator, SIGNAL( goPrevMonth() ), 372 connect( mDateNavigator, SIGNAL( goPrevMonth() ),
373 mNavigator, SLOT( selectPreviousMonth() ) ); 373 mNavigator, SLOT( selectPreviousMonth() ) );
374 connect( mDateNavigator, SIGNAL( goNextMonth() ), 374 connect( mDateNavigator, SIGNAL( goNextMonth() ),
375 mNavigator, SLOT( selectNextMonth() ) ); 375 mNavigator, SLOT( selectNextMonth() ) );
376 376
377 connect( mDateNavigator, SIGNAL( goPrevious() ), 377 connect( mDateNavigator, SIGNAL( goPrevious() ),
378 mNavigator, SLOT( selectPrevious() ) ); 378 mNavigator, SLOT( selectPrevious() ) );
379 connect( mDateNavigator, SIGNAL( goNext() ), 379 connect( mDateNavigator, SIGNAL( goNext() ),
380 mNavigator, SLOT( selectNext() ) ); 380 mNavigator, SLOT( selectNext() ) );
381 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ), 381 connect( mDateNavigator, SIGNAL( monthSelected ( int ) ),
382 mNavigator, SLOT( slotMonthSelect( int ) ) ); 382 mNavigator, SLOT( slotMonthSelect( int ) ) );
383 connect( mNavigatorBar, SIGNAL( monthSelected ( int ) ), 383 connect( mNavigatorBar, SIGNAL( monthSelected ( int ) ),
384 mNavigator, SLOT( slotMonthSelect( int ) ) ); 384 mNavigator, SLOT( slotMonthSelect( int ) ) );
385 385
386 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ), 386 connect( mDateNavigator, SIGNAL( datesSelected( const KCal::DateList & ) ),
387 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) ); 387 mNavigator, SLOT( selectDates( const KCal::DateList & ) ) );
388 388
389 connect( mDateNavigator, SIGNAL( eventDropped( Event * ) ), 389 connect( mDateNavigator, SIGNAL( eventDropped( Event * ) ),
390 SLOT( eventAdded( Event *) ) ); 390 SLOT( eventAdded( Event *) ) );
391 391
392 connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView())); 392 connect(mDateNavigator,SIGNAL(dayPassed(QDate)),SLOT(updateView()));
393 393
394 connect( this, SIGNAL( configChanged() ), 394 connect( this, SIGNAL( configChanged() ),
395 mDateNavigator, SLOT( updateConfig() ) ); 395 mDateNavigator, SLOT( updateConfig() ) );
396 396
397 connect( mTodoList, SIGNAL( newTodoSignal() ), 397 connect( mTodoList, SIGNAL( newTodoSignal() ),
398 SLOT( newTodo() ) ); 398 SLOT( newTodo() ) );
399 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ), 399 connect( mTodoList, SIGNAL( newSubTodoSignal( Todo *) ),
400 SLOT( newSubTodo( Todo * ) ) ); 400 SLOT( newSubTodo( Todo * ) ) );
401 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ), 401 connect( mTodoList, SIGNAL( editTodoSignal( Todo * ) ),
402 SLOT( editTodo( Todo * ) ) ); 402 SLOT( editTodo( Todo * ) ) );
403 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ), 403 connect( mTodoList, SIGNAL( showTodoSignal( Todo * ) ),
404 SLOT( showTodo( Todo *) ) ); 404 SLOT( showTodo( Todo *) ) );
405 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ), 405 connect( mTodoList, SIGNAL( deleteTodoSignal( Todo *) ),
406 SLOT( deleteTodo( Todo *) ) ); 406 SLOT( deleteTodo( Todo *) ) );
407 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) ); 407 connect( this, SIGNAL( configChanged()), mTodoList, SLOT( updateConfig() ) );
408 connect( mTodoList, SIGNAL( purgeCompletedSignal() ), 408 connect( mTodoList, SIGNAL( purgeCompletedSignal() ),
409 SLOT( purgeCompleted() ) ); 409 SLOT( purgeCompleted() ) );
410 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ), 410 connect( mTodoList, SIGNAL( todoModifiedSignal( Todo *, int ) ),
411 SIGNAL( todoModified( Todo *, int ) ) ); 411 SIGNAL( todoModified( Todo *, int ) ) );
412 412
413 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ), 413 connect( mTodoList, SIGNAL( cloneTodoSignal( Incidence * ) ),
414 this, SLOT ( cloneIncidence( Incidence * ) ) ); 414 this, SLOT ( cloneIncidence( Incidence * ) ) );
415 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ), 415 connect( mTodoList, SIGNAL( cancelTodoSignal( Incidence * ) ),
416 this, SLOT (cancelIncidence( Incidence * ) ) ); 416 this, SLOT (cancelIncidence( Incidence * ) ) );
417 417
418 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ), 418 connect( mTodoList, SIGNAL( moveTodoSignal( Incidence * ) ),
419 this, SLOT ( moveIncidence( Incidence * ) ) ); 419 this, SLOT ( moveIncidence( Incidence * ) ) );
420 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ), 420 connect( mTodoList, SIGNAL( beamTodoSignal( Incidence * ) ),
421 this, SLOT ( beamIncidence( Incidence * ) ) ); 421 this, SLOT ( beamIncidence( Incidence * ) ) );
422 422
423 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ), 423 connect( mTodoList, SIGNAL( unparentTodoSignal( Todo * ) ),
424 this, SLOT ( todo_unsub( Todo * ) ) ); 424 this, SLOT ( todo_unsub( Todo * ) ) );
425 425
426 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ), 426 connect( mTodoList, SIGNAL( reparentTodoSignal( Todo *,Todo * ) ),
427 this, SLOT ( todo_resub( Todo *,Todo * ) ) ); 427 this, SLOT ( todo_resub( Todo *,Todo * ) ) );
428 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList, 428 connect( this, SIGNAL( todoModified( Todo *, int )), mTodoList,
429 SLOT( updateTodo( Todo *, int ) ) ); 429 SLOT( updateTodo( Todo *, int ) ) );
430 connect( this, SIGNAL( todoModified( Todo *, int )), this, 430 connect( this, SIGNAL( todoModified( Todo *, int )), this,
431 SLOT( changeTodoDisplay( Todo *, int ) ) ); 431 SLOT( changeTodoDisplay( Todo *, int ) ) );
432 432
433 433
434 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) ); 434 connect( mFilterView, SIGNAL( filterChanged() ), SLOT( updateFilter() ) );
435 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) ); 435 connect( mFilterView, SIGNAL( editFilters() ), SLOT( editFilters() ) );
436 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) ); 436 connect( mCalendar, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addAlarm(const QDateTime &, const QString & ) ) );
437 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) ); 437 connect( mCalendar, SIGNAL( removeAlarm(const QDateTime &, const QString & ) ), SLOT( removeAlarm(const QDateTime &, const QString & ) ) );
438 438
439 439
440 440
441 441
442 442
443 connect(QApplication::clipboard(),SIGNAL(dataChanged()), 443 connect(QApplication::clipboard(),SIGNAL(dataChanged()),
444 SLOT(checkClipboard())); 444 SLOT(checkClipboard()));
445 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ), 445 connect( mTodoList,SIGNAL( incidenceSelected( Incidence * ) ),
446 SLOT( processTodoListSelection( Incidence * ) ) ); 446 SLOT( processTodoListSelection( Incidence * ) ) );
447 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool))); 447 connect(mTodoList,SIGNAL(isModified(bool)),SLOT(setModified(bool)));
448 448
449 // kdDebug() << "CalendarView::CalendarView() done" << endl; 449 // kdDebug() << "CalendarView::CalendarView() done" << endl;
450 450
451 mDateFrame = new QVBox(0,0,WType_Popup); 451 mDateFrame = new QVBox(0,0,WType_Popup);
452 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised); 452 //mDateFrame->setFrameStyle(QFrame::PopupPanel | QFrame::Raised);
453 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised ); 453 mDateFrame->setFrameStyle( QFrame::WinPanel |QFrame::Raised );
454 mDateFrame->setLineWidth(3); 454 mDateFrame->setLineWidth(3);
455 mDateFrame->hide(); 455 mDateFrame->hide();
456 mDateFrame->setCaption( i18n( "Pick a date to display")); 456 mDateFrame->setCaption( i18n( "Pick a date to display"));
457 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() ); 457 mDatePicker = new KDatePicker ( mDateFrame , QDate::currentDate() );
458 458
459 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate))); 459 connect(mDatePicker,SIGNAL(dateSelected(QDate)),SLOT(slotSelectPickerDate(QDate)));
460 460
461 mEventEditor = mDialogManager->getEventEditor(); 461 mEventEditor = mDialogManager->getEventEditor();
462 mTodoEditor = mDialogManager->getTodoEditor(); 462 mTodoEditor = mDialogManager->getTodoEditor();
463 463
464 mFlagEditDescription = false; 464 mFlagEditDescription = false;
465 465
466 mSuspendTimer = new QTimer( this ); 466 mSuspendTimer = new QTimer( this );
467 mAlarmTimer = new QTimer( this ); 467 mAlarmTimer = new QTimer( this );
468 mRecheckAlarmTimer = new QTimer( this ); 468 mRecheckAlarmTimer = new QTimer( this );
469 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) ); 469 connect( mRecheckAlarmTimer, SIGNAL( timeout () ), SLOT( recheckTimerAlarm() ) );
470 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) ); 470 connect( mSuspendTimer, SIGNAL( timeout () ), SLOT( suspendAlarm() ) );
471 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) ); 471 connect( mAlarmTimer, SIGNAL( timeout () ), SLOT( timerAlarm() ) );
472 mAlarmDialog = new AlarmDialog( this ); 472 mAlarmDialog = new AlarmDialog( this );
473 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) ); 473 connect( mAlarmDialog, SIGNAL( addAlarm(const QDateTime &, const QString & ) ), SLOT( addSuspendAlarm(const QDateTime &, const QString & ) ) );
474 mAlarmDialog->setServerNotification( false ); 474 mAlarmDialog->setServerNotification( false );
475 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime ); 475 mAlarmDialog->setSuspendTime( KOPrefs::instance()->mAlarmSuspendTime );
476 476
477 477
478#ifndef DESKTOP_VERSION 478#ifndef DESKTOP_VERSION
479//US listen for arriving address resultsets 479//US listen for arriving address resultsets
480 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)), 480 connect(ExternalAppHandler::instance(), SIGNAL(receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)),
481 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&))); 481 this, SLOT(insertBirthdays(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)));
482#endif 482#endif
483 483
484} 484}
485 485
486 486
487CalendarView::~CalendarView() 487CalendarView::~CalendarView()
488{ 488{
489 // kdDebug() << "~CalendarView()" << endl; 489 // kdDebug() << "~CalendarView()" << endl;
490 //qDebug("CalendarView::~CalendarView() "); 490 //qDebug("CalendarView::~CalendarView() ");
491 delete mDialogManager; 491 delete mDialogManager;
492 delete mViewManager; 492 delete mViewManager;
493 delete mStorage; 493 delete mStorage;
494 delete mDateFrame ; 494 delete mDateFrame ;
495 delete beamDialog; 495 delete beamDialog;
496 //kdDebug() << "~CalendarView() done" << endl; 496 //kdDebug() << "~CalendarView() done" << endl;
497} 497}
498 498
499void CalendarView::showDay( QDate d ) 499void CalendarView::showDay( QDate d )
500{ 500{
501 dateNavigator()->blockSignals( true ); 501 dateNavigator()->blockSignals( true );
502 dateNavigator()->selectDate( d ); 502 dateNavigator()->selectDate( d );
503 dateNavigator()->blockSignals( false ); 503 dateNavigator()->blockSignals( false );
504 mViewManager->showDayView(); 504 mViewManager->showDayView();
505 //dateNavigator()->selectDate( d ); 505 //dateNavigator()->selectDate( d );
506} 506}
507void CalendarView::timerAlarm() 507void CalendarView::timerAlarm()
508{ 508{
509 //qDebug("CalendarView::timerAlarm() "); 509 //qDebug("CalendarView::timerAlarm() ");
510 computeAlarm(mAlarmNotification ); 510 computeAlarm(mAlarmNotification );
511} 511}
512 512
513void CalendarView::suspendAlarm() 513void CalendarView::suspendAlarm()
514{ 514{
515 //qDebug(" CalendarView::suspendAlarm() "); 515 //qDebug(" CalendarView::suspendAlarm() ");
516 computeAlarm(mSuspendAlarmNotification ); 516 computeAlarm(mSuspendAlarmNotification );
517 517
518} 518}
519 519
520void CalendarView::startAlarm( QString mess , QString filename) 520void CalendarView::startAlarm( QString mess , QString filename)
521{ 521{
522 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount ); 522 mAlarmDialog->eventNotification( mess, KOPrefs::instance()->mAlarmPlayBeeps, filename, true,KOPrefs::instance()->mAlarmBeepInterval ,KOPrefs::instance()->mAlarmSuspendCount );
523 QTimer::singleShot( 3000, this, SLOT( checkNextTimerAlarm() ) ); 523 QTimer::singleShot( 3000, this, SLOT( checkNextTimerAlarm() ) );
524 524
525} 525}
526 526
527void CalendarView::checkNextTimerAlarm() 527void CalendarView::checkNextTimerAlarm()
528{ 528{
529 mCalendar->checkAlarmForIncidence( 0, true ); 529 mCalendar->checkAlarmForIncidence( 0, true );
530} 530}
531 531
532void CalendarView::computeAlarm( QString msg ) 532void CalendarView::computeAlarm( QString msg )
533{ 533{
534 534
535 QString mess = msg; 535 QString mess = msg;
536 QString mAlarmMessage = mess.mid( 9 ); 536 QString mAlarmMessage = mess.mid( 9 );
537 QString filename = MainWindow::resourcePath(); 537 QString filename = MainWindow::resourcePath();
538 filename += "koalarm.wav"; 538 filename += "koalarm.wav";
539 QString tempfilename; 539 QString tempfilename;
540 if ( mess.left( 13 ) == "suspend_alarm") { 540 if ( mess.left( 13 ) == "suspend_alarm") {
541 bool error = false; 541 bool error = false;
542 int len = mess.mid( 13 ).find("+++"); 542 int len = mess.mid( 13 ).find("+++");
543 if ( len < 2 ) 543 if ( len < 2 )
544 error = true; 544 error = true;
545 else { 545 else {
546 tempfilename = mess.mid( 13, len ); 546 tempfilename = mess.mid( 13, len );
547 if ( !QFile::exists( tempfilename ) ) 547 if ( !QFile::exists( tempfilename ) )
548 error = true; 548 error = true;
549 } 549 }
550 if ( ! error ) { 550 if ( ! error ) {
551 filename = tempfilename; 551 filename = tempfilename;
552 } 552 }
553 mAlarmMessage = mess.mid( 13+len+3 ); 553 mAlarmMessage = mess.mid( 13+len+3 );
554 //qDebug("suspend file %s ",tempfilename.latin1() ); 554 //qDebug("suspend file %s ",tempfilename.latin1() );
555 startAlarm( mAlarmMessage, filename); 555 startAlarm( mAlarmMessage, filename);
556 return; 556 return;
557 } 557 }
558 if ( mess.left( 11 ) == "timer_alarm") { 558 if ( mess.left( 11 ) == "timer_alarm") {
559 //mTimerTime = 0; 559 //mTimerTime = 0;
560 startAlarm( mess.mid( 11 ), filename ); 560 startAlarm( mess.mid( 11 ), filename );
561 return; 561 return;
562 } 562 }
563 if ( mess.left( 10 ) == "proc_alarm") { 563 if ( mess.left( 10 ) == "proc_alarm") {
564 bool error = false; 564 bool error = false;
565 int len = mess.mid( 10 ).find("+++"); 565 int len = mess.mid( 10 ).find("+++");
566 if ( len < 2 ) 566 if ( len < 2 )
567 error = true; 567 error = true;
568 else { 568 else {
569 tempfilename = mess.mid( 10, len ); 569 tempfilename = mess.mid( 10, len );
570 if ( !QFile::exists( tempfilename ) ) 570 if ( !QFile::exists( tempfilename ) )
571 error = true; 571 error = true;
572 } 572 }
573 if ( error ) { 573 if ( error ) {
574 mAlarmMessage = "Procedure Alarm\nError - File not found\n"; 574 mAlarmMessage = "Procedure Alarm\nError - File not found\n";
575 mAlarmMessage += mess.mid( 10+len+3+9 ); 575 mAlarmMessage += mess.mid( 10+len+3+9 );
576 } else { 576 } else {
577 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent"); 577 //QCopEnvelope e("QPE/Application/kopi", "-writeFileSilent");
578 //qDebug("-----system command %s ",tempfilename.latin1() ); 578 //qDebug("-----system command %s ",tempfilename.latin1() );
579#ifndef _WIN32_ 579#ifndef _WIN32_
580 if ( vfork () == 0 ) { 580 if ( vfork () == 0 ) {
581 execl ( tempfilename.latin1(), 0 ); 581 execl ( tempfilename.latin1(), 0 );
582 return; 582 return;
583 } 583 }
584#else 584#else
585 QProcess* p = new QProcess(); 585 QProcess* p = new QProcess();
586 p->addArgument( tempfilename.latin1() ); 586 p->addArgument( tempfilename.latin1() );
587 p->start(); 587 p->start();
588 return; 588 return;
589#endif 589#endif
590 590
591 return; 591 return;
592 } 592 }
593 593
594 //qDebug("+++++++system command %s ",tempfilename.latin1() ); 594 //qDebug("+++++++system command %s ",tempfilename.latin1() );
595 } 595 }
596 if ( mess.left( 11 ) == "audio_alarm") { 596 if ( mess.left( 11 ) == "audio_alarm") {
597 bool error = false; 597 bool error = false;
598 int len = mess.mid( 11 ).find("+++"); 598 int len = mess.mid( 11 ).find("+++");
599 if ( len < 2 ) 599 if ( len < 2 )
600 error = true; 600 error = true;
601 else { 601 else {
602 tempfilename = mess.mid( 11, len ); 602 tempfilename = mess.mid( 11, len );
603 if ( !QFile::exists( tempfilename ) ) 603 if ( !QFile::exists( tempfilename ) )
604 error = true; 604 error = true;
605 } 605 }
606 if ( ! error ) { 606 if ( ! error ) {
607 filename = tempfilename; 607 filename = tempfilename;
608 } 608 }
609 mAlarmMessage = mess.mid( 11+len+3+9 ); 609 mAlarmMessage = mess.mid( 11+len+3+9 );
610 //qDebug("audio file command %s ",tempfilename.latin1() ); 610 //qDebug("audio file command %s ",tempfilename.latin1() );
611 } 611 }
612 if ( mess.left( 9 ) == "cal_alarm") { 612 if ( mess.left( 9 ) == "cal_alarm") {
613 mAlarmMessage = mess.mid( 9 ) ; 613 mAlarmMessage = mess.mid( 9 ) ;
614 } 614 }
615 615
616 startAlarm( mAlarmMessage, filename ); 616 startAlarm( mAlarmMessage, filename );
617 617
618 618
619} 619}
620 620
621void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti ) 621void CalendarView::addSuspendAlarm(const QDateTime &qdt, const QString &noti )
622{ 622{
623 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 623 //qDebug("+++++addSUSPENDAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
624 624
625 mSuspendAlarmNotification = noti; 625 mSuspendAlarmNotification = noti;
626 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000; 626 int ms = QDateTime::currentDateTime().secsTo( qdt )*1000;
627 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000); 627 //qDebug("Suspend Alarm timer started with secs: %d ", ms/1000);
628 mSuspendTimer->start( ms , true ); 628 mSuspendTimer->start( ms , true );
629 629
630} 630}
631 631
632void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti ) 632void CalendarView::addAlarm(const QDateTime &qdt, const QString &noti )
633{ 633{
634 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 634 //qDebug("+++++addAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
635 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 635 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
636#ifndef DESKTOP_VERSION 636#ifndef DESKTOP_VERSION
637 AlarmServer::addAlarm ( qdt,"koalarm", noti.latin1() ); 637 AlarmServer::addAlarm ( qdt,"koalarm", noti.latin1() );
638#endif 638#endif
639 return; 639 return;
640 } 640 }
641 int maxSec; 641 int maxSec;
642 //maxSec = 5; //testing only 642 //maxSec = 5; //testing only
643 maxSec = 86400+3600; // one day+1hour 643 maxSec = 86400+3600; // one day+1hour
644 mAlarmNotification = noti; 644 mAlarmNotification = noti;
645 int sec = QDateTime::currentDateTime().secsTo( qdt ); 645 int sec = QDateTime::currentDateTime().secsTo( qdt );
646 if ( sec > maxSec ) { 646 if ( sec > maxSec ) {
647 mRecheckAlarmTimer->start( maxSec * 1000 ); 647 mRecheckAlarmTimer->start( maxSec * 1000 );
648 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec ); 648 // qDebug("recheck Alarm timer started with secs: %d next alarm in sec:%d", maxSec,sec );
649 return; 649 return;
650 } else { 650 } else {
651 mRecheckAlarmTimer->stop(); 651 mRecheckAlarmTimer->stop();
652 } 652 }
653 //qDebug("Alarm timer started with secs: %d ", sec); 653 //qDebug("Alarm timer started with secs: %d ", sec);
654 mAlarmTimer->start( sec *1000 , true ); 654 mAlarmTimer->start( sec *1000 , true );
655 655
656} 656}
657// called by mRecheckAlarmTimer to get next alarm 657// called by mRecheckAlarmTimer to get next alarm
658// we need this, because a QTimer has only a max range of 25 days 658// we need this, because a QTimer has only a max range of 25 days
659void CalendarView::recheckTimerAlarm() 659void CalendarView::recheckTimerAlarm()
660{ 660{
661 mAlarmTimer->stop(); 661 mAlarmTimer->stop();
662 mRecheckAlarmTimer->stop(); 662 mRecheckAlarmTimer->stop();
663 mCalendar->checkAlarmForIncidence( 0, true ); 663 mCalendar->checkAlarmForIncidence( 0, true );
664} 664}
665void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti ) 665void CalendarView::removeAlarm(const QDateTime &qdt, const QString &noti )
666{ 666{
667 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() ); 667 //qDebug("-----removeAlarm %s %s ", qdt.toString().latin1() , noti.latin1() );
668 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) { 668 if ( ! KOPrefs::instance()->mUseInternalAlarmNotification ) {
669#ifndef DESKTOP_VERSION 669#ifndef DESKTOP_VERSION
670 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.latin1() ); 670 AlarmServer::deleteAlarm (qdt ,"koalarm" ,noti.latin1() );
671#endif 671#endif
672 return; 672 return;
673 } 673 }
674 mAlarmTimer->stop(); 674 mAlarmTimer->stop();
675} 675}
676void CalendarView::selectWeekNum ( int num ) 676void CalendarView::selectWeekNum ( int num )
677{ 677{
678 dateNavigator()->blockSignals( true ); 678 dateNavigator()->blockSignals( true );
679 dateNavigator()->selectWeek( num ); 679 dateNavigator()->selectWeek( num );
680 dateNavigator()->blockSignals( false ); 680 dateNavigator()->blockSignals( false );
681 mViewManager->showWeekView(); 681 mViewManager->showWeekView();
682} 682}
683KOViewManager *CalendarView::viewManager() 683KOViewManager *CalendarView::viewManager()
684{ 684{
685 return mViewManager; 685 return mViewManager;
686} 686}
687 687
688KODialogManager *CalendarView::dialogManager() 688KODialogManager *CalendarView::dialogManager()
689{ 689{
690 return mDialogManager; 690 return mDialogManager;
691} 691}
692 692
693QDate CalendarView::startDate() 693QDate CalendarView::startDate()
694{ 694{
695 DateList dates = mNavigator->selectedDates(); 695 DateList dates = mNavigator->selectedDates();
696 696
697 return dates.first(); 697 return dates.first();
698} 698}
699 699
700QDate CalendarView::endDate() 700QDate CalendarView::endDate()
701{ 701{
702 DateList dates = mNavigator->selectedDates(); 702 DateList dates = mNavigator->selectedDates();
703 703
704 return dates.last(); 704 return dates.last();
705} 705}
706 706
707 707
708void CalendarView::createPrinter() 708void CalendarView::createPrinter()
709{ 709{
710#ifndef KORG_NOPRINTER 710#ifndef KORG_NOPRINTER
711 if (!mCalPrinter) { 711 if (!mCalPrinter) {
712 mCalPrinter = new CalPrinter(this, mCalendar); 712 mCalPrinter = new CalPrinter(this, mCalendar);
713 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig())); 713 connect(this, SIGNAL(configChanged()), mCalPrinter, SLOT(updateConfig()));
714 } 714 }
715#endif 715#endif
716} 716}
717 717
718 718
719//KOPrefs::instance()->mWriteBackFile 719//KOPrefs::instance()->mWriteBackFile
720//KOPrefs::instance()->mWriteBackExistingOnly 720//KOPrefs::instance()->mWriteBackExistingOnly
721 721
722// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict")); 722// 0 syncPrefsGroup->addRadio(i18n("Take local entry on conflict"));
723// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict")); 723// 1 syncPrefsGroup->addRadio(i18n("Take remote entry on conflict"));
724// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict")); 724// 2 syncPrefsGroup->addRadio(i18n("Take newest entry on conflict"));
725// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict")); 725// 3 syncPrefsGroup->addRadio(i18n("Ask for every entry on conflict"));
726// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always")); 726// 4 syncPrefsGroup->addRadio(i18n("Force take local entry always"));
727// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always")); 727// 5 syncPrefsGroup->addRadio(i18n("Force take remote entry always"));
728 728
729int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full ) 729int CalendarView::takeEvent( Incidence* local, Incidence* remote, int mode , bool full )
730{ 730{
731 731
732 // 0 equal 732 // 0 equal
733 // 1 take local 733 // 1 take local
734 // 2 take remote 734 // 2 take remote
735 // 3 cancel 735 // 3 cancel
736 QDateTime lastSync = mLastCalendarSync; 736 QDateTime lastSync = mLastCalendarSync;
737 QDateTime localMod = local->lastModified(); 737 QDateTime localMod = local->lastModified();
738 QDateTime remoteMod = remote->lastModified(); 738 QDateTime remoteMod = remote->lastModified();
739 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 739 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
740 bool remCh, locCh; 740 bool remCh, locCh;
741 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 741 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
742 //if ( remCh ) 742 //if ( remCh )
743 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 743 //qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
744 locCh = ( localMod > mLastCalendarSync ); 744 locCh = ( localMod > mLastCalendarSync );
745 if ( !remCh && ! locCh ) { 745 if ( !remCh && ! locCh ) {
746 //qDebug("both not changed "); 746 //qDebug("both not changed ");
747 lastSync = localMod.addDays(1); 747 lastSync = localMod.addDays(1);
748 if ( mode <= SYNC_PREF_ASK ) 748 if ( mode <= SYNC_PREF_ASK )
749 return 0; 749 return 0;
750 } else { 750 } else {
751 if ( locCh ) { 751 if ( locCh ) {
752 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1()); 752 //qDebug("loc changed %d %s %s", local->revision() , localMod.toString().latin1(), mLastCalendarSync.toString().latin1());
753 lastSync = localMod.addDays( -1 ); 753 lastSync = localMod.addDays( -1 );
754 if ( !remCh ) 754 if ( !remCh )
755 remoteMod = ( lastSync.addDays( -1 ) ); 755 remoteMod = ( lastSync.addDays( -1 ) );
756 } else { 756 } else {
757 //qDebug(" not loc changed "); 757 //qDebug(" not loc changed ");
758 lastSync = localMod.addDays( 1 ); 758 lastSync = localMod.addDays( 1 );
759 if ( remCh ) 759 if ( remCh )
760 remoteMod =( lastSync.addDays( 1 ) ); 760 remoteMod =( lastSync.addDays( 1 ) );
761 761
762 } 762 }
763 } 763 }
764 full = true; 764 full = true;
765 if ( mode < SYNC_PREF_ASK ) 765 if ( mode < SYNC_PREF_ASK )
766 mode = SYNC_PREF_ASK; 766 mode = SYNC_PREF_ASK;
767 } else { 767 } else {
768 if ( localMod == remoteMod ) 768 if ( localMod == remoteMod )
769 // if ( local->revision() == remote->revision() ) 769 // if ( local->revision() == remote->revision() )
770 return 0; 770 return 0;
771 771
772 } 772 }
773 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() ); 773 // qDebug(" %d %d conflict on %s %s ", mode, full, local->summary().latin1(), remote->summary().latin1() );
774 774
775 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision()); 775 //qDebug("%s %d %s %d", localMod.toString().latin1() , local->revision(), remoteMod.toString().latin1(), remote->revision());
776 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() ); 776 //qDebug("%d %d %d %d ", localMod.time().second(), localMod.time().msec(), remoteMod.time().second(), remoteMod.time().msec() );
777 //full = true; //debug only 777 //full = true; //debug only
778 if ( full ) { 778 if ( full ) {
779 bool equ = false; 779 bool equ = false;
780 if ( local->type() == "Event" ) { 780 if ( local->type() == "Event" ) {
781 equ = (*((Event*) local) == *((Event*) remote)); 781 equ = (*((Event*) local) == *((Event*) remote));
782 } 782 }
783 else if ( local->type() =="Todo" ) 783 else if ( local->type() =="Todo" )
784 equ = (*((Todo*) local) == (*(Todo*) remote)); 784 equ = (*((Todo*) local) == (*(Todo*) remote));
785 else if ( local->type() =="Journal" ) 785 else if ( local->type() =="Journal" )
786 equ = (*((Journal*) local) == *((Journal*) remote)); 786 equ = (*((Journal*) local) == *((Journal*) remote));
787 if ( equ ) { 787 if ( equ ) {
788 //qDebug("equal "); 788 //qDebug("equal ");
789 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 789 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
790 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 790 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
791 } 791 }
792 if ( mode < SYNC_PREF_FORCE_LOCAL ) 792 if ( mode < SYNC_PREF_FORCE_LOCAL )
793 return 0; 793 return 0;
794 794
795 }//else //debug only 795 }//else //debug only
796 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 796 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
797 } 797 }
798 int result; 798 int result;
799 bool localIsNew; 799 bool localIsNew;
800 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() ); 800 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , localMod.toString().latin1() , remoteMod.toString().latin1() );
801 801
802 if ( full && mode < SYNC_PREF_NEWEST ) 802 if ( full && mode < SYNC_PREF_NEWEST )
803 mode = SYNC_PREF_ASK; 803 mode = SYNC_PREF_ASK;
804 804
805 switch( mode ) { 805 switch( mode ) {
806 case SYNC_PREF_LOCAL: 806 case SYNC_PREF_LOCAL:
807 if ( lastSync > remoteMod ) 807 if ( lastSync > remoteMod )
808 return 1; 808 return 1;
809 if ( lastSync > localMod ) 809 if ( lastSync > localMod )
810 return 2; 810 return 2;
811 return 1; 811 return 1;
812 break; 812 break;
813 case SYNC_PREF_REMOTE: 813 case SYNC_PREF_REMOTE:
814 if ( lastSync > remoteMod ) 814 if ( lastSync > remoteMod )
815 return 1; 815 return 1;
816 if ( lastSync > localMod ) 816 if ( lastSync > localMod )
817 return 2; 817 return 2;
818 return 2; 818 return 2;
819 break; 819 break;
820 case SYNC_PREF_NEWEST: 820 case SYNC_PREF_NEWEST:
821 if ( localMod > remoteMod ) 821 if ( localMod > remoteMod )
822 return 1; 822 return 1;
823 else 823 else
824 return 2; 824 return 2;
825 break; 825 break;
826 case SYNC_PREF_ASK: 826 case SYNC_PREF_ASK:
827 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 827 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
828 if ( lastSync > remoteMod ) 828 if ( lastSync > remoteMod )
829 return 1; 829 return 1;
830 if ( lastSync > localMod ) 830 if ( lastSync > localMod )
831 return 2; 831 return 2;
832 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 832 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
833 localIsNew = localMod >= remoteMod; 833 localIsNew = localMod >= remoteMod;
834 if ( localIsNew ) 834 if ( localIsNew )
835 getEventViewerDialog()->setColorMode( 1 ); 835 getEventViewerDialog()->setColorMode( 1 );
836 else 836 else
837 getEventViewerDialog()->setColorMode( 2 ); 837 getEventViewerDialog()->setColorMode( 2 );
838 getEventViewerDialog()->setIncidence(local); 838 getEventViewerDialog()->setIncidence(local);
839 if ( localIsNew ) 839 if ( localIsNew )
840 getEventViewerDialog()->setColorMode( 2 ); 840 getEventViewerDialog()->setColorMode( 2 );
841 else 841 else
842 getEventViewerDialog()->setColorMode( 1 ); 842 getEventViewerDialog()->setColorMode( 1 );
843 getEventViewerDialog()->addIncidence(remote); 843 getEventViewerDialog()->addIncidence(remote);
844 getEventViewerDialog()->setColorMode( 0 ); 844 getEventViewerDialog()->setColorMode( 0 );
845 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() ); 845 //qDebug("local %d remote %d ",local->relatedTo(),remote->relatedTo() );
846 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!")); 846 getEventViewerDialog()->setCaption( mCurrentSyncDevice +i18n(" : Conflict! Please choose entry!"));
847 getEventViewerDialog()->showMe(); 847 getEventViewerDialog()->showMe();
848 result = getEventViewerDialog()->executeS( localIsNew ); 848 result = getEventViewerDialog()->executeS( localIsNew );
849 return result; 849 return result;
850 850
851 break; 851 break;
852 case SYNC_PREF_FORCE_LOCAL: 852 case SYNC_PREF_FORCE_LOCAL:
853 return 1; 853 return 1;
854 break; 854 break;
855 case SYNC_PREF_FORCE_REMOTE: 855 case SYNC_PREF_FORCE_REMOTE:
856 return 2; 856 return 2;
857 break; 857 break;
858 858
859 default: 859 default:
860 // SYNC_PREF_TAKE_BOTH not implemented 860 // SYNC_PREF_TAKE_BOTH not implemented
861 break; 861 break;
862 } 862 }
863 return 0; 863 return 0;
864} 864}
865Event* CalendarView::getLastSyncEvent() 865Event* CalendarView::getLastSyncEvent()
866{ 866{
867 Event* lse; 867 Event* lse;
868 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 868 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
869 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice ); 869 lse = mCalendar->event( "last-syncEvent-"+mCurrentSyncDevice );
870 if (!lse) { 870 if (!lse) {
871 lse = new Event(); 871 lse = new Event();
872 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice ); 872 lse->setUid( "last-syncEvent-"+mCurrentSyncDevice );
873 QString sum = ""; 873 QString sum = "";
874 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) ) 874 if ( mSyncManager->mExternSyncProfiles.contains( mCurrentSyncDevice ) )
875 sum = "E: "; 875 sum = "E: ";
876 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event")); 876 lse->setSummary(sum+mCurrentSyncDevice + i18n(" - sync event"));
877 lse->setDtStart( mLastCalendarSync ); 877 lse->setDtStart( mLastCalendarSync );
878 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 878 lse->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
879 lse->setCategories( i18n("SyncEvent") ); 879 lse->setCategories( i18n("SyncEvent") );
880 lse->setReadOnly( true ); 880 lse->setReadOnly( true );
881 mCalendar->addEvent( lse ); 881 mCalendar->addEvent( lse );
882 } 882 }
883 883
884 return lse; 884 return lse;
885 885
886} 886}
887 887
888// we check, if the to delete event has a id for a profile 888// we check, if the to delete event has a id for a profile
889// if yes, we set this id in the profile to delete 889// if yes, we set this id in the profile to delete
890void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ) 890void CalendarView::checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete )
891{ 891{
892 if ( lastSync.count() == 0 ) { 892 if ( lastSync.count() == 0 ) {
893 //qDebug(" lastSync.count() == 0"); 893 //qDebug(" lastSync.count() == 0");
894 return; 894 return;
895 } 895 }
896 if ( toDelete->type() == "Journal" ) 896 if ( toDelete->type() == "Journal" )
897 return; 897 return;
898 898
899 Event* eve = lastSync.first(); 899 Event* eve = lastSync.first();
900 900
901 while ( eve ) { 901 while ( eve ) {
902 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name 902 QString id = toDelete->getID( eve->uid().mid( 15 ) ); // this is the sync profile name
903 if ( !id.isEmpty() ) { 903 if ( !id.isEmpty() ) {
904 QString des = eve->description(); 904 QString des = eve->description();
905 QString pref = "e"; 905 QString pref = "e";
906 if ( toDelete->type() == "Todo" ) 906 if ( toDelete->type() == "Todo" )
907 pref = "t"; 907 pref = "t";
908 des += pref+ id + ","; 908 des += pref+ id + ",";
909 eve->setReadOnly( false ); 909 eve->setReadOnly( false );
910 eve->setDescription( des ); 910 eve->setDescription( des );
911 //qDebug("setdes %s ", des.latin1()); 911 //qDebug("setdes %s ", des.latin1());
912 eve->setReadOnly( true ); 912 eve->setReadOnly( true );
913 } 913 }
914 eve = lastSync.next(); 914 eve = lastSync.next();
915 } 915 }
916 916
917} 917}
918void CalendarView::checkExternalId( Incidence * inc ) 918void CalendarView::checkExternalId( Incidence * inc )
919{ 919{
920 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ; 920 QPtrList<Event> lastSync = mCalendar->getExternLastSyncEvents() ;
921 checkExternSyncEvent( lastSync, inc ); 921 checkExternSyncEvent( lastSync, inc );
922 922
923} 923}
924bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode ) 924bool CalendarView::synchronizeCalendar( Calendar* local, Calendar* remote, int mode )
925{ 925{
926 bool syncOK = true; 926 bool syncOK = true;
927 int addedEvent = 0; 927 int addedEvent = 0;
928 int addedEventR = 0; 928 int addedEventR = 0;
929 int deletedEventR = 0; 929 int deletedEventR = 0;
930 int deletedEventL = 0; 930 int deletedEventL = 0;
931 int changedLocal = 0; 931 int changedLocal = 0;
932 int changedRemote = 0; 932 int changedRemote = 0;
933 int filteredIN = 0; 933 int filteredIN = 0;
934 int filteredOUT = 0; 934 int filteredOUT = 0;
935 //QPtrList<Event> el = local->rawEvents(); 935 //QPtrList<Event> el = local->rawEvents();
936 Event* eventR; 936 Event* eventR;
937 QString uid; 937 QString uid;
938 int take; 938 int take;
939 Event* eventL; 939 Event* eventL;
940 Event* eventRSync; 940 Event* eventRSync;
941 Event* eventLSync; 941 Event* eventLSync;
942 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents(); 942 QPtrList<Event> eventRSyncSharp = remote->getExternLastSyncEvents();
943 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents(); 943 QPtrList<Event> eventLSyncSharp = local->getExternLastSyncEvents();
944 bool fullDateRange = false; 944 bool fullDateRange = false;
945 local->resetTempSyncStat(); 945 local->resetTempSyncStat();
946 mLastCalendarSync = QDateTime::currentDateTime(); 946 mLastCalendarSync = QDateTime::currentDateTime();
947 if ( mSyncManager->syncWithDesktop() ) { 947 if ( mSyncManager->syncWithDesktop() ) {
948 remote->resetPilotStat(1); 948 remote->resetPilotStat(1);
949 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 949 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
950 mLastCalendarSync = KSyncManager::mRequestedSyncEvent; 950 mLastCalendarSync = KSyncManager::mRequestedSyncEvent;
951 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() ); 951 qDebug("KO: using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() );
952 } else { 952 } else {
953 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime "); 953 qDebug("KSyncManager::mRequestedSyncEvent has invalid datatime ");
954 } 954 }
955 } 955 }
956 QDateTime modifiedCalendar = mLastCalendarSync; 956 QDateTime modifiedCalendar = mLastCalendarSync;
957 eventLSync = getLastSyncEvent(); 957 eventLSync = getLastSyncEvent();
958 eventR = remote->event("last-syncEvent-"+mCurrentSyncName ); 958 eventR = remote->event("last-syncEvent-"+mCurrentSyncName );
959 if ( eventR ) { 959 if ( eventR ) {
960 eventRSync = (Event*) eventR->clone(); 960 eventRSync = (Event*) eventR->clone();
961 remote->deleteEvent(eventR ); 961 remote->deleteEvent(eventR );
962 962
963 } else { 963 } else {
964 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) { 964 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL || mSyncManager->syncWithDesktop()) {
965 eventRSync = (Event*)eventLSync->clone(); 965 eventRSync = (Event*)eventLSync->clone();
966 } else { 966 } else {
967 fullDateRange = true; 967 fullDateRange = true;
968 eventRSync = new Event(); 968 eventRSync = new Event();
969 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event")); 969 eventRSync->setSummary(mCurrentSyncName + i18n(" - sync event"));
970 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName ); 970 eventRSync->setUid("last-syncEvent-"+mCurrentSyncName );
971 eventRSync->setDtStart( mLastCalendarSync ); 971 eventRSync->setDtStart( mLastCalendarSync );
972 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) ); 972 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 7200 ) );
973 eventRSync->setCategories( i18n("SyncEvent") ); 973 eventRSync->setCategories( i18n("SyncEvent") );
974 } 974 }
975 } 975 }
976 if ( eventLSync->dtStart() == mLastCalendarSync ) 976 if ( eventLSync->dtStart() == mLastCalendarSync )
977 fullDateRange = true; 977 fullDateRange = true;
978 978
979 if ( ! fullDateRange ) { 979 if ( ! fullDateRange ) {
980 if ( eventLSync->dtStart() != eventRSync->dtStart() ) { 980 if ( eventLSync->dtStart() != eventRSync->dtStart() ) {
981 981
982 // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() ); 982 // qDebug("set fulldate to true %s %s" ,eventLSync->dtStart().toString().latin1(), eventRSync->dtStart().toString().latin1() );
983 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec()); 983 //qDebug("%d %d %d %d ", eventLSync->dtStart().time().second(), eventLSync->dtStart().time().msec() , eventRSync->dtStart().time().second(), eventRSync->dtStart().time().msec());
984 fullDateRange = true; 984 fullDateRange = true;
985 } 985 }
986 } 986 }
987 if ( mSyncManager->syncWithDesktop() ) { 987 if ( mSyncManager->syncWithDesktop() ) {
988 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync ); 988 fullDateRange = ( eventLSync->dtStart() <= mLastCalendarSync && eventLSync->dtStart().addSecs(1) >= mLastCalendarSync );
989 } 989 }
990 if ( fullDateRange ) 990 if ( fullDateRange )
991 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365); 991 mLastCalendarSync = QDateTime::currentDateTime().addDays( -100*365);
992 else 992 else
993 mLastCalendarSync = eventLSync->dtStart(); 993 mLastCalendarSync = eventLSync->dtStart();
994 // for resyncing if own file has changed 994 // for resyncing if own file has changed
995 if ( mCurrentSyncDevice == "deleteaftersync" ) { 995 if ( mCurrentSyncDevice == "deleteaftersync" ) {
996 mLastCalendarSync = loadedFileVersion; 996 mLastCalendarSync = loadedFileVersion;
997 //qDebug("setting mLastCalendarSync "); 997 //qDebug("setting mLastCalendarSync ");
998 } 998 }
999 //qDebug("*************************** "); 999 //qDebug("*************************** ");
1000 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange); 1000 qDebug("KO: mLastCalendarSync %s .Full: %d",mLastCalendarSync.toString().latin1(), fullDateRange);
1001 QPtrList<Incidence> er = remote->rawIncidences(); 1001 QPtrList<Incidence> er = remote->rawIncidences();
1002 Incidence* inR = er.first(); 1002 Incidence* inR = er.first();
1003 Incidence* inL; 1003 Incidence* inL;
1004 QProgressBar bar( er.count(),0 ); 1004 QProgressBar bar( er.count(),0 );
1005 bar.setCaption (i18n("Syncing - close to abort!") ); 1005 bar.setCaption (i18n("Syncing - close to abort!") );
1006 1006
1007 // ************** setting up filter ************* 1007 // ************** setting up filter *************
1008 CalFilter *filterIN = 0; 1008 CalFilter *filterIN = 0;
1009 CalFilter *filterOUT = 0; 1009 CalFilter *filterOUT = 0;
1010 CalFilter *filter = mFilters.first(); 1010 CalFilter *filter = mFilters.first();
1011 while(filter) { 1011 while(filter) {
1012 if ( filter->name() == mSyncManager->mFilterInCal ) 1012 if ( filter->name() == mSyncManager->mFilterInCal )
1013 filterIN = filter; 1013 filterIN = filter;
1014 if ( filter->name() == mSyncManager->mFilterOutCal ) 1014 if ( filter->name() == mSyncManager->mFilterOutCal )
1015 filterOUT = filter; 1015 filterOUT = filter;
1016 filter = mFilters.next(); 1016 filter = mFilters.next();
1017 } 1017 }
1018 int w = 300; 1018 int w = 300;
1019 if ( QApplication::desktop()->width() < 320 ) 1019 if ( QApplication::desktop()->width() < 320 )
1020 w = 220; 1020 w = 220;
1021 int h = bar.sizeHint().height() ; 1021 int h = bar.sizeHint().height() ;
1022 int dw = QApplication::desktop()->width(); 1022 int dw = QApplication::desktop()->width();
1023 int dh = QApplication::desktop()->height(); 1023 int dh = QApplication::desktop()->height();
1024 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1024 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1025 bar.show(); 1025 bar.show();
1026 int modulo = (er.count()/10)+1; 1026 int modulo = (er.count()/10)+1;
1027 int incCounter = 0; 1027 int incCounter = 0;
1028 while ( inR ) { 1028 while ( inR ) {
1029 if ( ! bar.isVisible() ) 1029 if ( ! bar.isVisible() )
1030 return false; 1030 return false;
1031 if ( incCounter % modulo == 0 ) 1031 if ( incCounter % modulo == 0 )
1032 bar.setProgress( incCounter ); 1032 bar.setProgress( incCounter );
1033 ++incCounter; 1033 ++incCounter;
1034 uid = inR->uid(); 1034 uid = inR->uid();
1035 bool skipIncidence = false; 1035 bool skipIncidence = false;
1036 if ( uid.left(15) == QString("last-syncEvent-") ) 1036 if ( uid.left(15) == QString("last-syncEvent-") )
1037 skipIncidence = true; 1037 skipIncidence = true;
1038 QString idS; 1038 QString idS;
1039 qApp->processEvents(); 1039 qApp->processEvents();
1040 if ( !skipIncidence ) { 1040 if ( !skipIncidence ) {
1041 inL = local->incidence( uid ); 1041 inL = local->incidence( uid );
1042 if ( inL ) { // maybe conflict - same uid in both calendars 1042 if ( inL ) { // maybe conflict - same uid in both calendars
1043 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) { 1043 if ( (take = takeEvent( inL, inR, mode, fullDateRange )) > 0 ) {
1044 //qDebug("take %d %s ", take, inL->summary().latin1()); 1044 //qDebug("take %d %s ", take, inL->summary().latin1());
1045 if ( take == 3 ) 1045 if ( take == 3 )
1046 return false; 1046 return false;
1047 if ( take == 1 ) {// take local ********************** 1047 if ( take == 1 ) {// take local **********************
1048 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 1048 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
1049 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1049 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1050 else 1050 else
1051 idS = inR->IDStr(); 1051 idS = inR->IDStr();
1052 remote->deleteIncidence( inR ); 1052 remote->deleteIncidence( inR );
1053 inR = inL->clone(); 1053 inR = inL->clone();
1054 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1054 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1055 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL ) 1055 if ( mGlobalSyncMode != SYNC_MODE_EXTERNAL )
1056 inR->setIDStr( idS ); 1056 inR->setIDStr( idS );
1057 remote->addIncidence( inR ); 1057 remote->addIncidence( inR );
1058 if ( mSyncManager->syncWithDesktop() ) 1058 if ( mSyncManager->syncWithDesktop() )
1059 inR->setPilotId( 2 ); 1059 inR->setPilotId( 2 );
1060 ++changedRemote; 1060 ++changedRemote;
1061 } else {// take remote ********************** 1061 } else {// take remote **********************
1062 idS = inL->IDStr(); 1062 idS = inL->IDStr();
1063 int pid = inL->pilotId(); 1063 int pid = inL->pilotId();
1064 local->deleteIncidence( inL ); 1064 local->deleteIncidence( inL );
1065 inL = inR->clone(); 1065 inL = inR->clone();
1066 if ( mSyncManager->syncWithDesktop() ) 1066 if ( mSyncManager->syncWithDesktop() )
1067 inL->setPilotId( pid ); 1067 inL->setPilotId( pid );
1068 inL->setIDStr( idS ); 1068 inL->setIDStr( idS );
1069 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1069 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1070 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1070 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1071 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1071 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1072 } 1072 }
1073 local->addIncidence( inL ); 1073 local->addIncidence( inL );
1074 ++changedLocal; 1074 ++changedLocal;
1075 } 1075 }
1076 } 1076 }
1077 } else { // no conflict ********** add or delete remote 1077 } else { // no conflict ********** add or delete remote
1078 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){ 1078 if ( !filterIN || filterIN->filterCalendarItem( inR ) ){
1079 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1079 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1080 QString des = eventLSync->description(); 1080 QString des = eventLSync->description();
1081 QString pref = "e"; 1081 QString pref = "e";
1082 if ( inR->type() == "Todo" ) 1082 if ( inR->type() == "Todo" )
1083 pref = "t"; 1083 pref = "t";
1084 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 1084 if ( des.find(pref+ inR->getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
1085 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 1085 inR->setTempSyncStat( SYNC_TEMPSTATE_DELETE );
1086 //remote->deleteIncidence( inR ); 1086 //remote->deleteIncidence( inR );
1087 ++deletedEventR; 1087 ++deletedEventR;
1088 } else { 1088 } else {
1089 inR->setLastModified( modifiedCalendar ); 1089 inR->setLastModified( modifiedCalendar );
1090 inL = inR->clone(); 1090 inL = inR->clone();
1091 inL->setIDStr( ":" ); 1091 inL->setIDStr( ":" );
1092 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) ); 1092 inL->setCsum( mCurrentSyncDevice, inR->getCsum(mCurrentSyncDevice) );
1093 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) ); 1093 inL->setID( mCurrentSyncDevice, inR->getID(mCurrentSyncDevice) );
1094 local->addIncidence( inL ); 1094 local->addIncidence( inL );
1095 ++addedEvent; 1095 ++addedEvent;
1096 1096
1097 } 1097 }
1098 } else { 1098 } else {
1099 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) { 1099 if ( inR->lastModified() > mLastCalendarSync || mode == 5 ) {
1100 inR->setLastModified( modifiedCalendar ); 1100 inR->setLastModified( modifiedCalendar );
1101 inL = inR->clone(); 1101 inL = inR->clone();
1102 inL->setIDStr( ":" ); 1102 inL->setIDStr( ":" );
1103 local->addIncidence( inL ); 1103 local->addIncidence( inL );
1104 ++addedEvent; 1104 ++addedEvent;
1105 1105
1106 } else { 1106 } else {
1107 checkExternSyncEvent(eventRSyncSharp, inR); 1107 checkExternSyncEvent(eventRSyncSharp, inR);
1108 remote->deleteIncidence( inR ); 1108 remote->deleteIncidence( inR );
1109 ++deletedEventR; 1109 ++deletedEventR;
1110 } 1110 }
1111 } 1111 }
1112 } else { 1112 } else {
1113 ++filteredIN; 1113 ++filteredIN;
1114 } 1114 }
1115 } 1115 }
1116 } 1116 }
1117 inR = er.next(); 1117 inR = er.next();
1118 } 1118 }
1119 QPtrList<Incidence> el = local->rawIncidences(); 1119 QPtrList<Incidence> el = local->rawIncidences();
1120 inL = el.first(); 1120 inL = el.first();
1121 modulo = (el.count()/10)+1; 1121 modulo = (el.count()/10)+1;
1122 bar.setCaption (i18n("Add / remove events") ); 1122 bar.setCaption (i18n("Add / remove events") );
1123 bar.setTotalSteps ( el.count() ) ; 1123 bar.setTotalSteps ( el.count() ) ;
1124 bar.show(); 1124 bar.show();
1125 incCounter = 0; 1125 incCounter = 0;
1126 1126
1127 while ( inL ) { 1127 while ( inL ) {
1128 1128
1129 qApp->processEvents(); 1129 qApp->processEvents();
1130 if ( ! bar.isVisible() ) 1130 if ( ! bar.isVisible() )
1131 return false; 1131 return false;
1132 if ( incCounter % modulo == 0 ) 1132 if ( incCounter % modulo == 0 )
1133 bar.setProgress( incCounter ); 1133 bar.setProgress( incCounter );
1134 ++incCounter; 1134 ++incCounter;
1135 uid = inL->uid(); 1135 uid = inL->uid();
1136 bool skipIncidence = false; 1136 bool skipIncidence = false;
1137 if ( uid.left(15) == QString("last-syncEvent-") ) 1137 if ( uid.left(15) == QString("last-syncEvent-") )
1138 skipIncidence = true; 1138 skipIncidence = true;
1139 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->type() == "Journal" ) 1139 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL && inL->type() == "Journal" )
1140 skipIncidence = true; 1140 skipIncidence = true;
1141 if ( !skipIncidence ) { 1141 if ( !skipIncidence ) {
1142 inR = remote->incidence( uid ); 1142 inR = remote->incidence( uid );
1143 if ( ! inR ) { 1143 if ( ! inR ) {
1144 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){ 1144 if ( !filterOUT || filterOUT->filterCalendarItem( inL ) ){
1145 // no conflict ********** add or delete local 1145 // no conflict ********** add or delete local
1146 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 1146 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
1147 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 1147 if ( !inL->getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
1148 checkExternSyncEvent(eventLSyncSharp, inL); 1148 checkExternSyncEvent(eventLSyncSharp, inL);
1149 local->deleteIncidence( inL ); 1149 local->deleteIncidence( inL );
1150 ++deletedEventL; 1150 ++deletedEventL;
1151 } else { 1151 } else {
1152 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1152 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1153 inL->removeID(mCurrentSyncDevice ); 1153 inL->removeID(mCurrentSyncDevice );
1154 ++addedEventR; 1154 ++addedEventR;
1155 //qDebug("remote added Incidence %s ", inL->summary().latin1()); 1155 //qDebug("remote added Incidence %s ", inL->summary().latin1());
1156 inL->setLastModified( modifiedCalendar ); 1156 inL->setLastModified( modifiedCalendar );
1157 inR = inL->clone(); 1157 inR = inL->clone();
1158 inR->setIDStr( ":" ); 1158 inR->setIDStr( ":" );
1159 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 1159 inR->setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
1160 remote->addIncidence( inR ); 1160 remote->addIncidence( inR );
1161 } 1161 }
1162 } 1162 }
1163 } else { 1163 } else {
1164 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) { 1164 if ( inL->lastModified() < mLastCalendarSync && mode != 4 ) {
1165 checkExternSyncEvent(eventLSyncSharp, inL); 1165 checkExternSyncEvent(eventLSyncSharp, inL);
1166 local->deleteIncidence( inL ); 1166 local->deleteIncidence( inL );
1167 ++deletedEventL; 1167 ++deletedEventL;
1168 } else { 1168 } else {
1169 if ( ! mSyncManager->mWriteBackExistingOnly ) { 1169 if ( ! mSyncManager->mWriteBackExistingOnly ) {
1170 ++addedEventR; 1170 ++addedEventR;
1171 inL->setLastModified( modifiedCalendar ); 1171 inL->setLastModified( modifiedCalendar );
1172 inR = inL->clone(); 1172 inR = inL->clone();
1173 inR->setIDStr( ":" ); 1173 inR->setIDStr( ":" );
1174 remote->addIncidence( inR ); 1174 remote->addIncidence( inR );
1175 } 1175 }
1176 } 1176 }
1177 } 1177 }
1178 } else { 1178 } else {
1179 ++filteredOUT; 1179 ++filteredOUT;
1180 } 1180 }
1181 } 1181 }
1182 } 1182 }
1183 inL = el.next(); 1183 inL = el.next();
1184 } 1184 }
1185 int delFut = 0; 1185 int delFut = 0;
1186 int remRem = 0; 1186 int remRem = 0;
1187 if ( mSyncManager->mWriteBackInFuture ) { 1187 if ( mSyncManager->mWriteBackInFuture ) {
1188 er = remote->rawIncidences(); 1188 er = remote->rawIncidences();
1189 remRem = er.count(); 1189 remRem = er.count();
1190 inR = er.first(); 1190 inR = er.first();
1191 QDateTime dt; 1191 QDateTime dt;
1192 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) ); 1192 QDateTime cur = QDateTime::currentDateTime().addDays( -(mSyncManager->mWriteBackInPast * 7) );
1193 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 ); 1193 QDateTime end = QDateTime::currentDateTime().addDays( (mSyncManager->mWriteBackInFuture ) *7 );
1194 while ( inR ) { 1194 while ( inR ) {
1195 if ( inR->type() == "Todo" ) { 1195 if ( inR->type() == "Todo" ) {
1196 Todo * t = (Todo*)inR; 1196 Todo * t = (Todo*)inR;
1197 if ( t->hasDueDate() ) 1197 if ( t->hasDueDate() )
1198 dt = t->dtDue(); 1198 dt = t->dtDue();
1199 else 1199 else
1200 dt = cur.addSecs( 62 ); 1200 dt = cur.addSecs( 62 );
1201 } 1201 }
1202 else if (inR->type() == "Event" ) { 1202 else if (inR->type() == "Event" ) {
1203 bool ok; 1203 bool ok;
1204 dt = inR->getNextOccurence( cur, &ok ); 1204 dt = inR->getNextOccurence( cur, &ok );
1205 if ( !ok ) 1205 if ( !ok )
1206 dt = cur.addSecs( -62 ); 1206 dt = cur.addSecs( -62 );
1207 } 1207 }
1208 else 1208 else
1209 dt = inR->dtStart(); 1209 dt = inR->dtStart();
1210 if ( dt < cur || dt > end ) { 1210 if ( dt < cur || dt > end ) {
1211 remote->deleteIncidence( inR ); 1211 remote->deleteIncidence( inR );
1212 ++delFut; 1212 ++delFut;
1213 } 1213 }
1214 inR = er.next(); 1214 inR = er.next();
1215 } 1215 }
1216 } 1216 }
1217 bar.hide(); 1217 bar.hide();
1218 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 ); 1218 mLastCalendarSync = QDateTime::currentDateTime().addSecs( 1 );
1219 eventLSync->setReadOnly( false ); 1219 eventLSync->setReadOnly( false );
1220 eventLSync->setDtStart( mLastCalendarSync ); 1220 eventLSync->setDtStart( mLastCalendarSync );
1221 eventRSync->setDtStart( mLastCalendarSync ); 1221 eventRSync->setDtStart( mLastCalendarSync );
1222 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1222 eventLSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1223 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) ); 1223 eventRSync->setDtEnd( mLastCalendarSync.addSecs( 3600 ) );
1224 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ; 1224 eventRSync->setLocation( i18n("Remote from: ")+mCurrentSyncName ) ;
1225 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName ); 1225 eventLSync->setLocation(i18n("Local from: ") + mCurrentSyncName );
1226 eventLSync->setReadOnly( true ); 1226 eventLSync->setReadOnly( true );
1227 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL ); 1227 qDebug("KO: Normal sync: %d ",mGlobalSyncMode == SYNC_MODE_NORMAL );
1228 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop()) // kde is abnormal... 1228 if ( mGlobalSyncMode == SYNC_MODE_NORMAL && !mSyncManager->syncWithDesktop()) // kde is abnormal...
1229 remote->addEvent( eventRSync ); 1229 remote->addEvent( eventRSync );
1230 else 1230 else
1231 delete eventRSync; 1231 delete eventRSync;
1232 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() ); 1232 qDebug("KO: Sync with desktop %d ",mSyncManager->syncWithDesktop() );
1233 QString mes; 1233 QString mes;
1234 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR, filteredIN, filteredOUT ); 1234 mes .sprintf( i18n("Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n"),addedEvent, addedEventR, changedLocal, changedRemote, deletedEventL, deletedEventR, filteredIN, filteredOUT );
1235 QString delmess; 1235 QString delmess;
1236 if ( delFut ) { 1236 if ( delFut ) {
1237 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are more\nthan %d weeks in the past or\nmore than %d weeks in the future.\nAfter skipping, remote has\n%d calendar/todo items."), delFut,mSyncManager->mWriteBackInPast,mSyncManager->mWriteBackInFuture, remRem-delFut); 1237 delmess.sprintf( i18n("%d items skipped on remote,\nbecause they are more\nthan %d weeks in the past or\nmore than %d weeks in the future.\nAfter skipping, remote has\n%d calendar/todo items."), delFut,mSyncManager->mWriteBackInPast,mSyncManager->mWriteBackInFuture, remRem-delFut);
1238 mes += delmess; 1238 mes += delmess;
1239 } 1239 }
1240 mes = i18n("Local calendar changed!\n") +mes; 1240 mes = i18n("Local calendar changed!\n") +mes;
1241 mCalendar->checkAlarmForIncidence( 0, true ); 1241 mCalendar->checkAlarmForIncidence( 0, true );
1242 qDebug( mes ); 1242 qDebug( mes );
1243 if ( mSyncManager->mShowSyncSummary ) { 1243 if ( mSyncManager->mShowSyncSummary ) {
1244 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes, 1244 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes,
1245 i18n("KO/Pi Synchronization"),i18n("Write back"))) { 1245 i18n("KO/Pi Synchronization"),i18n("Write back"))) {
1246 qDebug("KO: WB cancelled "); 1246 qDebug("KO: WB cancelled ");
1247 return false; 1247 return false;
1248 } 1248 }
1249 } 1249 }
1250 return syncOK; 1250 return syncOK;
1251} 1251}
1252 1252
1253void CalendarView::setSyncDevice( QString s ) 1253void CalendarView::setSyncDevice( QString s )
1254{ 1254{
1255 mCurrentSyncDevice= s; 1255 mCurrentSyncDevice= s;
1256} 1256}
1257void CalendarView::setSyncName( QString s ) 1257void CalendarView::setSyncName( QString s )
1258{ 1258{
1259 mCurrentSyncName= s; 1259 mCurrentSyncName= s;
1260} 1260}
1261bool CalendarView::syncCalendar(QString filename, int mode) 1261bool CalendarView::syncCalendar(QString filename, int mode)
1262{ 1262{
1263 //qDebug("syncCalendar %s ", filename.latin1()); 1263 //qDebug("syncCalendar %s ", filename.latin1());
1264 mGlobalSyncMode = SYNC_MODE_NORMAL; 1264 mGlobalSyncMode = SYNC_MODE_NORMAL;
1265 CalendarLocal* calendar = new CalendarLocal(); 1265 CalendarLocal* calendar = new CalendarLocal();
1266 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1266 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1267 FileStorage* storage = new FileStorage( calendar ); 1267 FileStorage* storage = new FileStorage( calendar );
1268 bool syncOK = false; 1268 bool syncOK = false;
1269 storage->setFileName( filename ); 1269 storage->setFileName( filename );
1270 // qDebug("loading ... "); 1270 // qDebug("loading ... ");
1271 if ( storage->load() ) { 1271 if ( storage->load() ) {
1272 getEventViewerDialog()->setSyncMode( true ); 1272 getEventViewerDialog()->setSyncMode( true );
1273 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1273 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1274 getEventViewerDialog()->setSyncMode( false ); 1274 getEventViewerDialog()->setSyncMode( false );
1275 if ( syncOK ) { 1275 if ( syncOK ) {
1276 if ( mSyncManager->mWriteBackFile ) 1276 if ( mSyncManager->mWriteBackFile )
1277 { 1277 {
1278 storage->setSaveFormat( new ICalFormat() ); 1278 storage->setSaveFormat( new ICalFormat() );
1279 storage->save(); 1279 storage->save();
1280 } 1280 }
1281 } 1281 }
1282 setModified( true ); 1282 setModified( true );
1283 } 1283 }
1284 delete storage; 1284 delete storage;
1285 delete calendar; 1285 delete calendar;
1286 if ( syncOK ) 1286 if ( syncOK )
1287 updateView(); 1287 updateView();
1288 return syncOK; 1288 return syncOK;
1289} 1289}
1290 1290
1291void CalendarView::syncExternal( int mode ) 1291void CalendarView::syncExternal( int mode )
1292{ 1292{
1293 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1293 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1294 1294
1295 qApp->processEvents(); 1295 qApp->processEvents();
1296 CalendarLocal* calendar = new CalendarLocal(); 1296 CalendarLocal* calendar = new CalendarLocal();
1297 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1297 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1298 bool syncOK = false; 1298 bool syncOK = false;
1299 bool loadSuccess = false; 1299 bool loadSuccess = false;
1300 PhoneFormat* phoneFormat = 0; 1300 PhoneFormat* phoneFormat = 0;
1301 emit tempDisableBR(true); 1301 emit tempDisableBR(true);
1302#ifndef DESKTOP_VERSION 1302#ifndef DESKTOP_VERSION
1303 SharpFormat* sharpFormat = 0; 1303 SharpFormat* sharpFormat = 0;
1304 if ( mode == 0 ) { // sharp 1304 if ( mode == 0 ) { // sharp
1305 sharpFormat = new SharpFormat () ; 1305 sharpFormat = new SharpFormat () ;
1306 loadSuccess = sharpFormat->load( calendar, mCalendar ); 1306 loadSuccess = sharpFormat->load( calendar, mCalendar );
1307 1307
1308 } else 1308 } else
1309#endif 1309#endif
1310 if ( mode == 1 ) { // phone 1310 if ( mode == 1 ) { // phone
1311 phoneFormat = new PhoneFormat (mCurrentSyncDevice, 1311 phoneFormat = new PhoneFormat (mCurrentSyncDevice,
1312 mSyncManager->mPhoneDevice, 1312 mSyncManager->mPhoneDevice,
1313 mSyncManager->mPhoneConnection, 1313 mSyncManager->mPhoneConnection,
1314 mSyncManager->mPhoneModel); 1314 mSyncManager->mPhoneModel);
1315 loadSuccess = phoneFormat->load( calendar,mCalendar); 1315 loadSuccess = phoneFormat->load( calendar,mCalendar);
1316 1316
1317 } else { 1317 } else {
1318 emit tempDisableBR(false); 1318 emit tempDisableBR(false);
1319 return; 1319 return;
1320 } 1320 }
1321 if ( loadSuccess ) { 1321 if ( loadSuccess ) {
1322 getEventViewerDialog()->setSyncMode( true ); 1322 getEventViewerDialog()->setSyncMode( true );
1323 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 1323 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
1324 getEventViewerDialog()->setSyncMode( false ); 1324 getEventViewerDialog()->setSyncMode( false );
1325 qApp->processEvents(); 1325 qApp->processEvents();
1326 if ( syncOK ) { 1326 if ( syncOK ) {
1327 if ( mSyncManager->mWriteBackFile ) 1327 if ( mSyncManager->mWriteBackFile )
1328 { 1328 {
1329 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 1329 QPtrList<Incidence> iL = mCalendar->rawIncidences();
1330 Incidence* inc = iL.first(); 1330 Incidence* inc = iL.first();
1331 if ( phoneFormat ) { 1331 if ( phoneFormat ) {
1332 while ( inc ) { 1332 while ( inc ) {
1333 inc->removeID(mCurrentSyncDevice); 1333 inc->removeID(mCurrentSyncDevice);
1334 inc = iL.next(); 1334 inc = iL.next();
1335 } 1335 }
1336 } 1336 }
1337#ifndef DESKTOP_VERSION 1337#ifndef DESKTOP_VERSION
1338 if ( sharpFormat ) 1338 if ( sharpFormat )
1339 sharpFormat->save(calendar); 1339 sharpFormat->save(calendar);
1340#endif 1340#endif
1341 if ( phoneFormat ) 1341 if ( phoneFormat )
1342 phoneFormat->save(calendar); 1342 phoneFormat->save(calendar);
1343 iL = calendar->rawIncidences(); 1343 iL = calendar->rawIncidences();
1344 inc = iL.first(); 1344 inc = iL.first();
1345 Incidence* loc; 1345 Incidence* loc;
1346 while ( inc ) { 1346 while ( inc ) {
1347 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { 1347 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) {
1348 loc = mCalendar->incidence(inc->uid() ); 1348 loc = mCalendar->incidence(inc->uid() );
1349 if ( loc ) { 1349 if ( loc ) {
1350 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) ); 1350 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) );
1351 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) ); 1351 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) );
1352 } 1352 }
1353 } 1353 }
1354 inc = iL.next(); 1354 inc = iL.next();
1355 } 1355 }
1356 Incidence* lse = getLastSyncEvent(); 1356 Incidence* lse = getLastSyncEvent();
1357 if ( lse ) { 1357 if ( lse ) {
1358 lse->setReadOnly( false ); 1358 lse->setReadOnly( false );
1359 lse->setDescription( "" ); 1359 lse->setDescription( "" );
1360 lse->setReadOnly( true ); 1360 lse->setReadOnly( true );
1361 } 1361 }
1362 } 1362 }
1363 } else { 1363 } else {
1364 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") ); 1364 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") );
1365 } 1365 }
1366 setModified( true ); 1366 setModified( true );
1367 } else { 1367 } else {
1368 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ; 1368 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ;
1369 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"), 1369 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"),
1370 question, i18n("Ok")) ; 1370 question, i18n("Ok")) ;
1371 1371
1372 } 1372 }
1373 delete calendar; 1373 delete calendar;
1374 updateView(); 1374 updateView();
1375 emit tempDisableBR(false); 1375 emit tempDisableBR(false);
1376 return ;//syncOK; 1376 return ;//syncOK;
1377 1377
1378} 1378}
1379 1379
1380bool CalendarView::importBday() 1380bool CalendarView::importBday()
1381{ 1381{
1382#ifndef KORG_NOKABC 1382#ifndef KORG_NOKABC
1383 1383
1384#ifdef DESKTOP_VERSION 1384#ifdef DESKTOP_VERSION
1385 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 1385 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
1386 KABC::AddressBook::Iterator it; 1386 KABC::AddressBook::Iterator it;
1387 int count = 0; 1387 int count = 0;
1388 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1388 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1389 ++count; 1389 ++count;
1390 } 1390 }
1391 QProgressBar bar(count,0 ); 1391 QProgressBar bar(count,0 );
1392 int w = 300; 1392 int w = 300;
1393 if ( QApplication::desktop()->width() < 320 ) 1393 if ( QApplication::desktop()->width() < 320 )
1394 w = 220; 1394 w = 220;
1395 int h = bar.sizeHint().height() ; 1395 int h = bar.sizeHint().height() ;
1396 int dw = QApplication::desktop()->width(); 1396 int dw = QApplication::desktop()->width();
1397 int dh = QApplication::desktop()->height(); 1397 int dh = QApplication::desktop()->height();
1398 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1398 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1399 bar.show(); 1399 bar.show();
1400 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 1400 bar.setCaption (i18n("Reading addressbook - close to abort!") );
1401 qApp->processEvents(); 1401 qApp->processEvents();
1402 count = 0; 1402 count = 0;
1403 int addCount = 0; 1403 int addCount = 0;
1404 KCal::Attendee* a = 0; 1404 KCal::Attendee* a = 0;
1405 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1405 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1406 if ( ! bar.isVisible() ) 1406 if ( ! bar.isVisible() )
1407 return false; 1407 return false;
1408 bar.setProgress( count++ ); 1408 bar.setProgress( count++ );
1409 qApp->processEvents(); 1409 qApp->processEvents();
1410 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 1410 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
1411 if ( (*it).birthday().date().isValid() ){ 1411 if ( (*it).birthday().date().isValid() ){
1412 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1412 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1413 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 1413 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
1414 ++addCount; 1414 ++addCount;
1415 } 1415 }
1416 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 1416 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
1417 if ( anni.isValid() ){ 1417 if ( anni.isValid() ){
1418 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1418 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1419 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 1419 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
1420 ++addCount; 1420 ++addCount;
1421 } 1421 }
1422 } 1422 }
1423 updateView(); 1423 updateView();
1424 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 1424 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
1425#else //DESKTOP_VERSION 1425#else //DESKTOP_VERSION
1426 1426
1427 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); 1427 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/);
1428 // the result should now arrive through method insertBirthdays 1428 // the result should now arrive through method insertBirthdays
1429 1429
1430#endif //DESKTOP_VERSION 1430#endif //DESKTOP_VERSION
1431 1431
1432#endif //KORG_NOKABC 1432#endif //KORG_NOKABC
1433 1433
1434 1434
1435 return true; 1435 return true;
1436} 1436}
1437 1437
1438// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI 1438// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI
1439void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList, 1439void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList,
1440 const QStringList& anniversaryList, const QStringList& realNameList, 1440 const QStringList& anniversaryList, const QStringList& realNameList,
1441 const QStringList& emailList, const QStringList& assembledNameList, 1441 const QStringList& emailList, const QStringList& assembledNameList,
1442 const QStringList& uidList) 1442 const QStringList& uidList)
1443{ 1443{
1444 //qDebug("KO::CalendarView::insertBirthdays"); 1444 //qDebug("KO::CalendarView::insertBirthdays");
1445 if (uid == this->name()) 1445 if (uid == this->name())
1446 { 1446 {
1447 int count = birthdayList.count(); 1447 int count = birthdayList.count();
1448 int addCount = 0; 1448 int addCount = 0;
1449 KCal::Attendee* a = 0; 1449 KCal::Attendee* a = 0;
1450 1450
1451 //qDebug("CalView 1 %i", count); 1451 //qDebug("CalView 1 %i", count);
1452 1452
1453 QProgressBar bar(count,0 ); 1453 QProgressBar bar(count,0 );
1454 int w = 300; 1454 int w = 300;
1455 if ( QApplication::desktop()->width() < 320 ) 1455 if ( QApplication::desktop()->width() < 320 )
1456 w = 220; 1456 w = 220;
1457 int h = bar.sizeHint().height() ; 1457 int h = bar.sizeHint().height() ;
1458 int dw = QApplication::desktop()->width(); 1458 int dw = QApplication::desktop()->width();
1459 int dh = QApplication::desktop()->height(); 1459 int dh = QApplication::desktop()->height();
1460 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1460 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1461 bar.show(); 1461 bar.show();
1462 bar.setCaption (i18n("inserting birthdays - close to abort!") ); 1462 bar.setCaption (i18n("inserting birthdays - close to abort!") );
1463 qApp->processEvents(); 1463 qApp->processEvents();
1464 1464
1465 QDate birthday; 1465 QDate birthday;
1466 QDate anniversary; 1466 QDate anniversary;
1467 QString realName; 1467 QString realName;
1468 QString email; 1468 QString email;
1469 QString assembledName; 1469 QString assembledName;
1470 QString uid; 1470 QString uid;
1471 bool ok = true; 1471 bool ok = true;
1472 for ( int i = 0; i < count; i++) 1472 for ( int i = 0; i < count; i++)
1473 { 1473 {
1474 if ( ! bar.isVisible() ) 1474 if ( ! bar.isVisible() )
1475 return; 1475 return;
1476 bar.setProgress( i ); 1476 bar.setProgress( i );
1477 qApp->processEvents(); 1477 qApp->processEvents();
1478 1478
1479 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok); 1479 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok);
1480 if (!ok) { 1480 if (!ok) {
1481 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1()); 1481 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1());
1482 } 1482 }
1483 1483
1484 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok); 1484 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok);
1485 if (!ok) { 1485 if (!ok) {
1486 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1()); 1486 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1());
1487 } 1487 }
1488 realName = realNameList[i]; 1488 realName = realNameList[i];
1489 email = emailList[i]; 1489 email = emailList[i];
1490 assembledName = assembledNameList[i]; 1490 assembledName = assembledNameList[i];
1491 uid = uidList[i]; 1491 uid = uidList[i];
1492 //qDebug("insert birthday in KO/Pi: %s,%s,%s,%s: %s, %s", realName.latin1(), email.latin1(), assembledName.latin1(), uid.latin1(), birthdayList[i].latin1(), anniversaryList[i].latin1() ); 1492 //qDebug("insert birthday in KO/Pi: %s,%s,%s,%s: %s, %s", realName.latin1(), email.latin1(), assembledName.latin1(), uid.latin1(), birthdayList[i].latin1(), anniversaryList[i].latin1() );
1493 1493
1494 if ( birthday.isValid() ){ 1494 if ( birthday.isValid() ){
1495 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 1495 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
1496 KCal::Attendee::ReqParticipant,uid) ; 1496 KCal::Attendee::ReqParticipant,uid) ;
1497 if ( addAnniversary( birthday, assembledName, a, true ) ) 1497 if ( addAnniversary( birthday, assembledName, a, true ) )
1498 ++addCount; 1498 ++addCount;
1499 } 1499 }
1500 1500
1501 if ( anniversary.isValid() ){ 1501 if ( anniversary.isValid() ){
1502 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 1502 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
1503 KCal::Attendee::ReqParticipant,uid) ; 1503 KCal::Attendee::ReqParticipant,uid) ;
1504 if ( addAnniversary( anniversary, assembledName, a, false ) ) 1504 if ( addAnniversary( anniversary, assembledName, a, false ) )
1505 ++addCount; 1505 ++addCount;
1506 } 1506 }
1507 } 1507 }
1508 1508
1509 updateView(); 1509 updateView();
1510 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 1510 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
1511 1511
1512 } 1512 }
1513 1513
1514} 1514}
1515 1515
1516 1516
1517 1517
1518bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 1518bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
1519{ 1519{
1520 //qDebug("addAnni "); 1520 //qDebug("addAnni ");
1521 Event * ev = new Event(); 1521 Event * ev = new Event();
1522 if ( a ) { 1522 if ( a ) {
1523 ev->addAttendee( a ); 1523 ev->addAttendee( a );
1524 } 1524 }
1525 QString kind; 1525 QString kind;
1526 if ( birthday ) 1526 if ( birthday ) {
1527 kind = i18n( "Birthday" ); 1527 kind = i18n( "Birthday" );
1528 else 1528 ev->setSummary( name + " (" + QString::number(date.year()) +")");
1529 }
1530 else {
1529 kind = i18n( "Anniversary" ); 1531 kind = i18n( "Anniversary" );
1530 ev->setSummary( name + " - " + kind ); 1532 ev->setSummary( name + " (" + QString::number(date.year()) +") " + kind );
1533 }
1531 ev->setOrganizer(a->email()); 1534 ev->setOrganizer(a->email());
1532 ev->setCategories( kind ); 1535 ev->setCategories( kind );
1533 ev->setDtStart( QDateTime(date) ); 1536 ev->setDtStart( QDateTime(date) );
1534 ev->setDtEnd( QDateTime(date) ); 1537 ev->setDtEnd( QDateTime(date) );
1535 ev->setFloats( true ); 1538 ev->setFloats( true );
1536 Recurrence * rec = ev->recurrence(); 1539 Recurrence * rec = ev->recurrence();
1537 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 1540 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
1538 rec->addYearlyNum( date.month() ); 1541 rec->addYearlyNum( date.month() );
1539 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 1542 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
1540 delete ev; 1543 delete ev;
1541 return false; 1544 return false;
1542 } 1545 }
1543 return true; 1546 return true;
1544 1547
1545} 1548}
1546bool CalendarView::importQtopia( const QString &categories, 1549bool CalendarView::importQtopia( const QString &categories,
1547 const QString &datebook, 1550 const QString &datebook,
1548 const QString &todolist ) 1551 const QString &todolist )
1549{ 1552{
1550 1553
1551 QtopiaFormat qtopiaFormat; 1554 QtopiaFormat qtopiaFormat;
1552 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1555 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1553 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 1556 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
1554 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 1557 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
1555 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 1558 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
1556 1559
1557 updateView(); 1560 updateView();
1558 return true; 1561 return true;
1559 1562
1560#if 0 1563#if 0
1561 mGlobalSyncMode = SYNC_MODE_QTOPIA; 1564 mGlobalSyncMode = SYNC_MODE_QTOPIA;
1562 mCurrentSyncDevice = "qtopia-XML"; 1565 mCurrentSyncDevice = "qtopia-XML";
1563 if ( mSyncManager->mAskForPreferences ) 1566 if ( mSyncManager->mAskForPreferences )
1564 edit_sync_options(); 1567 edit_sync_options();
1565 qApp->processEvents(); 1568 qApp->processEvents();
1566 CalendarLocal* calendar = new CalendarLocal(); 1569 CalendarLocal* calendar = new CalendarLocal();
1567 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1570 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1568 bool syncOK = false; 1571 bool syncOK = false;
1569 QtopiaFormat qtopiaFormat; 1572 QtopiaFormat qtopiaFormat;
1570 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1573 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1571 bool loadOk = true; 1574 bool loadOk = true;
1572 if ( !categories.isEmpty() ) 1575 if ( !categories.isEmpty() )
1573 loadOk = qtopiaFormat.load( calendar, categories ); 1576 loadOk = qtopiaFormat.load( calendar, categories );
1574 if ( loadOk && !datebook.isEmpty() ) 1577 if ( loadOk && !datebook.isEmpty() )
1575 loadOk = qtopiaFormat.load( calendar, datebook ); 1578 loadOk = qtopiaFormat.load( calendar, datebook );
1576 if ( loadOk && !todolist.isEmpty() ) 1579 if ( loadOk && !todolist.isEmpty() )
1577 loadOk = qtopiaFormat.load( calendar, todolist ); 1580 loadOk = qtopiaFormat.load( calendar, todolist );
1578 1581
1579 if ( loadOk ) { 1582 if ( loadOk ) {
1580 getEventViewerDialog()->setSyncMode( true ); 1583 getEventViewerDialog()->setSyncMode( true );
1581 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 1584 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
1582 getEventViewerDialog()->setSyncMode( false ); 1585 getEventViewerDialog()->setSyncMode( false );
1583 qApp->processEvents(); 1586 qApp->processEvents();
1584 if ( syncOK ) { 1587 if ( syncOK ) {
1585 if ( mSyncManager->mWriteBackFile ) 1588 if ( mSyncManager->mWriteBackFile )
1586 { 1589 {
1587 // write back XML file 1590 // write back XML file
1588 1591
1589 } 1592 }
1590 setModified( true ); 1593 setModified( true );
1591 } 1594 }
1592 } else { 1595 } else {
1593 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 1596 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
1594 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 1597 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
1595 question, i18n("Ok")) ; 1598 question, i18n("Ok")) ;
1596 } 1599 }
1597 delete calendar; 1600 delete calendar;
1598 updateView(); 1601 updateView();
1599 return syncOK; 1602 return syncOK;
1600 1603
1601 1604
1602#endif 1605#endif
1603 1606
1604} 1607}
1605 1608
1606void CalendarView::setSyncEventsReadOnly() 1609void CalendarView::setSyncEventsReadOnly()
1607{ 1610{
1608 Event * ev; 1611 Event * ev;
1609 QPtrList<Event> eL = mCalendar->rawEvents(); 1612 QPtrList<Event> eL = mCalendar->rawEvents();
1610 ev = eL.first(); 1613 ev = eL.first();
1611 while ( ev ) { 1614 while ( ev ) {
1612 if ( ev->uid().left(15) == QString("last-syncEvent-") ) 1615 if ( ev->uid().left(15) == QString("last-syncEvent-") )
1613 ev->setReadOnly( true ); 1616 ev->setReadOnly( true );
1614 ev = eL.next(); 1617 ev = eL.next();
1615 } 1618 }
1616} 1619}
1617bool CalendarView::openCalendar(QString filename, bool merge) 1620bool CalendarView::openCalendar(QString filename, bool merge)
1618{ 1621{
1619 1622
1620 if (filename.isEmpty()) { 1623 if (filename.isEmpty()) {
1621 return false; 1624 return false;
1622 } 1625 }
1623 1626
1624 if (!QFile::exists(filename)) { 1627 if (!QFile::exists(filename)) {
1625 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 1628 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
1626 return false; 1629 return false;
1627 } 1630 }
1628 1631
1629 globalFlagBlockAgenda = 1; 1632 globalFlagBlockAgenda = 1;
1630 if (!merge) mCalendar->close(); 1633 if (!merge) mCalendar->close();
1631 1634
1632 mStorage->setFileName( filename ); 1635 mStorage->setFileName( filename );
1633 1636
1634 if ( mStorage->load() ) { 1637 if ( mStorage->load() ) {
1635 if ( merge ) ;//setModified( true ); 1638 if ( merge ) ;//setModified( true );
1636 else { 1639 else {
1637 //setModified( true ); 1640 //setModified( true );
1638 mViewManager->setDocumentId( filename ); 1641 mViewManager->setDocumentId( filename );
1639 mDialogManager->setDocumentId( filename ); 1642 mDialogManager->setDocumentId( filename );
1640 mTodoList->setDocumentId( filename ); 1643 mTodoList->setDocumentId( filename );
1641 } 1644 }
1642 globalFlagBlockAgenda = 2; 1645 globalFlagBlockAgenda = 2;
1643 // if ( getLastSyncEvent() ) 1646 // if ( getLastSyncEvent() )
1644 // getLastSyncEvent()->setReadOnly( true ); 1647 // getLastSyncEvent()->setReadOnly( true );
1645 mCalendar->reInitAlarmSettings(); 1648 mCalendar->reInitAlarmSettings();
1646 setSyncEventsReadOnly(); 1649 setSyncEventsReadOnly();
1647 updateUnmanagedViews(); 1650 updateUnmanagedViews();
1648 updateView(); 1651 updateView();
1649 if ( filename != MainWindow::defaultFileName() ) { 1652 if ( filename != MainWindow::defaultFileName() ) {
1650 saveCalendar( MainWindow::defaultFileName() ); 1653 saveCalendar( MainWindow::defaultFileName() );
1651 } else { 1654 } else {
1652 QFileInfo finf ( MainWindow::defaultFileName()); 1655 QFileInfo finf ( MainWindow::defaultFileName());
1653 if ( finf.exists() ) { 1656 if ( finf.exists() ) {
1654 setLoadedFileVersion( finf.lastModified () ); 1657 setLoadedFileVersion( finf.lastModified () );
1655 } 1658 }
1656 } 1659 }
1657 return true; 1660 return true;
1658 } else { 1661 } else {
1659 // while failing to load, the calendar object could 1662 // while failing to load, the calendar object could
1660 // have become partially populated. Clear it out. 1663 // have become partially populated. Clear it out.
1661 if ( !merge ) { 1664 if ( !merge ) {
1662 mCalendar->close(); 1665 mCalendar->close();
1663 mViewManager->setDocumentId( filename ); 1666 mViewManager->setDocumentId( filename );
1664 mDialogManager->setDocumentId( filename ); 1667 mDialogManager->setDocumentId( filename );
1665 mTodoList->setDocumentId( filename ); 1668 mTodoList->setDocumentId( filename );
1666 } 1669 }
1667 1670
1668 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 1671 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
1669 1672
1670 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); 1673 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) );
1671 globalFlagBlockAgenda = 2; 1674 globalFlagBlockAgenda = 2;
1672 mCalendar->reInitAlarmSettings(); 1675 mCalendar->reInitAlarmSettings();
1673 setSyncEventsReadOnly(); 1676 setSyncEventsReadOnly();
1674 updateUnmanagedViews(); 1677 updateUnmanagedViews();
1675 updateView(); 1678 updateView();
1676 } 1679 }
1677 return false; 1680 return false;
1678} 1681}
1679void CalendarView::showOpenError() 1682void CalendarView::showOpenError()
1680{ 1683{
1681 KMessageBox::error(this,i18n("Couldn't load calendar\n.")); 1684 KMessageBox::error(this,i18n("Couldn't load calendar\n."));
1682} 1685}
1683void CalendarView::setLoadedFileVersion(QDateTime dt) 1686void CalendarView::setLoadedFileVersion(QDateTime dt)
1684{ 1687{
1685 loadedFileVersion = dt; 1688 loadedFileVersion = dt;
1686} 1689}
1687bool CalendarView::checkFileChanged(QString fn) 1690bool CalendarView::checkFileChanged(QString fn)
1688{ 1691{
1689 QFileInfo finf ( fn ); 1692 QFileInfo finf ( fn );
1690 if ( !finf.exists() ) 1693 if ( !finf.exists() )
1691 return true; 1694 return true;
1692 QDateTime dt = finf.lastModified (); 1695 QDateTime dt = finf.lastModified ();
1693 if ( dt <= loadedFileVersion ) 1696 if ( dt <= loadedFileVersion )
1694 return false; 1697 return false;
1695 return true; 1698 return true;
1696 1699
1697} 1700}
1698void CalendarView::watchSavedFile() 1701void CalendarView::watchSavedFile()
1699{ 1702{
1700 QFileInfo finf ( MainWindow::defaultFileName()); 1703 QFileInfo finf ( MainWindow::defaultFileName());
1701 if ( !finf.exists() ) 1704 if ( !finf.exists() )
1702 return; 1705 return;
1703 QDateTime dt = finf.lastModified (); 1706 QDateTime dt = finf.lastModified ();
1704 if ( dt < loadedFileVersion ) { 1707 if ( dt < loadedFileVersion ) {
1705 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1()); 1708 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1());
1706 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); 1709 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) );
1707 return; 1710 return;
1708 } 1711 }
1709 loadedFileVersion = dt; 1712 loadedFileVersion = dt;
1710} 1713}
1711 1714
1712bool CalendarView::checkFileVersion(QString fn) 1715bool CalendarView::checkFileVersion(QString fn)
1713{ 1716{
1714 QFileInfo finf ( fn ); 1717 QFileInfo finf ( fn );
1715 if ( !finf.exists() ) 1718 if ( !finf.exists() )
1716 return true; 1719 return true;
1717 QDateTime dt = finf.lastModified (); 1720 QDateTime dt = finf.lastModified ();
1718 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1()); 1721 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1());
1719 //qDebug("file on disk version %s",dt.toString().latin1()); 1722 //qDebug("file on disk version %s",dt.toString().latin1());
1720 if ( dt <= loadedFileVersion ) 1723 if ( dt <= loadedFileVersion )
1721 return true; 1724 return true;
1722 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) , 1725 int km = KMessageBox::warningYesNoCancel(this, i18n("\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n").arg( QString::number( finf.size())).arg( KGlobal::locale()->formatDateTime(finf.lastModified (), true, true)) ,
1723 i18n("KO/Pi Warning"),i18n("Overwrite"), 1726 i18n("KO/Pi Warning"),i18n("Overwrite"),
1724 i18n("Sync+save")); 1727 i18n("Sync+save"));
1725 1728
1726 if ( km == KMessageBox::Cancel ) 1729 if ( km == KMessageBox::Cancel )
1727 return false; 1730 return false;
1728 if ( km == KMessageBox::Yes ) 1731 if ( km == KMessageBox::Yes )
1729 return true; 1732 return true;
1730 1733
1731 setSyncDevice("deleteaftersync" ); 1734 setSyncDevice("deleteaftersync" );
1732 mSyncManager->mAskForPreferences = true; 1735 mSyncManager->mAskForPreferences = true;
1733 mSyncManager->mSyncAlgoPrefs = 3; 1736 mSyncManager->mSyncAlgoPrefs = 3;
1734 mSyncManager->mWriteBackFile = false; 1737 mSyncManager->mWriteBackFile = false;
1735 mSyncManager->mWriteBackExistingOnly = false; 1738 mSyncManager->mWriteBackExistingOnly = false;
1736 mSyncManager->mShowSyncSummary = false; 1739 mSyncManager->mShowSyncSummary = false;
1737 syncCalendar( fn, 3 ); 1740 syncCalendar( fn, 3 );
1738 Event * e = getLastSyncEvent(); 1741 Event * e = getLastSyncEvent();
1739 mCalendar->deleteEvent ( e ); 1742 mCalendar->deleteEvent ( e );
1740 updateView(); 1743 updateView();
1741 return true; 1744 return true;
1742} 1745}
1743 1746
1744bool CalendarView::saveCalendar( QString filename ) 1747bool CalendarView::saveCalendar( QString filename )
1745{ 1748{
1746 1749
1747 // Store back all unsaved data into calendar object 1750 // Store back all unsaved data into calendar object
1748 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 1751 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
1749 if ( mViewManager->currentView() ) 1752 if ( mViewManager->currentView() )
1750 mViewManager->currentView()->flushView(); 1753 mViewManager->currentView()->flushView();
1751 1754
1752 1755
1753 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2); 1756 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2);
1754 mStorage->setSaveFormat( new ICalFormat() ); 1757 mStorage->setSaveFormat( new ICalFormat() );
1755 mStorage->setFileName( filename ); 1758 mStorage->setFileName( filename );
1756 bool success; 1759 bool success;
1757 success = mStorage->save(); 1760 success = mStorage->save();
1758 if ( !success ) { 1761 if ( !success ) {
1759 return false; 1762 return false;
1760 } 1763 }
1761 if ( filename == MainWindow::defaultFileName() ) { 1764 if ( filename == MainWindow::defaultFileName() ) {
1762 setLoadedFileVersion( lfv ); 1765 setLoadedFileVersion( lfv );
1763 watchSavedFile(); 1766 watchSavedFile();
1764 } 1767 }
1765 return true; 1768 return true;
1766} 1769}
1767 1770
1768void CalendarView::closeCalendar() 1771void CalendarView::closeCalendar()
1769{ 1772{
1770 1773
1771 // child windows no longer valid 1774 // child windows no longer valid
1772 emit closingDown(); 1775 emit closingDown();
1773 1776
1774 mCalendar->close(); 1777 mCalendar->close();
1775 setModified(false); 1778 setModified(false);
1776 updateView(); 1779 updateView();
1777} 1780}
1778 1781
1779void CalendarView::archiveCalendar() 1782void CalendarView::archiveCalendar()
1780{ 1783{
1781 mDialogManager->showArchiveDialog(); 1784 mDialogManager->showArchiveDialog();
1782} 1785}
1783 1786
1784 1787
1785void CalendarView::readSettings() 1788void CalendarView::readSettings()
1786{ 1789{
1787 1790
1788 1791
1789 // mViewManager->showAgendaView(); 1792 // mViewManager->showAgendaView();
1790 QString str; 1793 QString str;
1791 //qDebug("CalendarView::readSettings() "); 1794 //qDebug("CalendarView::readSettings() ");
1792 // read settings from the KConfig, supplying reasonable 1795 // read settings from the KConfig, supplying reasonable
1793 // defaults where none are to be found 1796 // defaults where none are to be found
1794 KConfig *config = KOGlobals::config(); 1797 KConfig *config = KOGlobals::config();
1795#ifndef KORG_NOSPLITTER 1798#ifndef KORG_NOSPLITTER
1796 config->setGroup("KOrganizer Geometry"); 1799 config->setGroup("KOrganizer Geometry");
1797 1800
1798 QValueList<int> sizes = config->readIntListEntry("Separator1"); 1801 QValueList<int> sizes = config->readIntListEntry("Separator1");
1799 if (sizes.count() != 2) { 1802 if (sizes.count() != 2) {
1800 sizes << mDateNavigator->minimumSizeHint().width(); 1803 sizes << mDateNavigator->minimumSizeHint().width();
1801 sizes << 300; 1804 sizes << 300;
1802 } 1805 }
1803 mPanner->setSizes(sizes); 1806 mPanner->setSizes(sizes);
1804 1807
1805 sizes = config->readIntListEntry("Separator2"); 1808 sizes = config->readIntListEntry("Separator2");
1806 if ( ( mResourceView && sizes.count() == 4 ) || 1809 if ( ( mResourceView && sizes.count() == 4 ) ||
1807 ( !mResourceView && sizes.count() == 3 ) ) { 1810 ( !mResourceView && sizes.count() == 3 ) ) {
1808 mLeftSplitter->setSizes(sizes); 1811 mLeftSplitter->setSizes(sizes);
1809 } 1812 }
1810#endif 1813#endif
1811 globalFlagBlockAgenda = 1; 1814 globalFlagBlockAgenda = 1;
1812 mViewManager->showAgendaView(); 1815 mViewManager->showAgendaView();
1813 //mViewManager->readSettings( config ); 1816 //mViewManager->readSettings( config );
1814 mTodoList->restoreLayout(config,QString("Todo Layout")); 1817 mTodoList->restoreLayout(config,QString("Todo Layout"));
1815 readFilterSettings(config); 1818 readFilterSettings(config);
1816 config->setGroup( "Views" ); 1819 config->setGroup( "Views" );
1817 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 1820 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
1818 if ( dateCount == 5 ) mNavigator->selectWorkWeek(); 1821 if ( dateCount == 5 ) mNavigator->selectWorkWeek();
1819 else if ( dateCount == 7 ) mNavigator->selectWeek(); 1822 else if ( dateCount == 7 ) mNavigator->selectWeek();
1820 else mNavigator->selectDates( dateCount ); 1823 else mNavigator->selectDates( dateCount );
1821 // mViewManager->readSettings( config ); 1824 // mViewManager->readSettings( config );
1822 updateConfig(); 1825 updateConfig();
1823 globalFlagBlockAgenda = 2; 1826 globalFlagBlockAgenda = 2;
1824 mViewManager->readSettings( config ); 1827 mViewManager->readSettings( config );
1825#ifdef DESKTOP_VERSION 1828#ifdef DESKTOP_VERSION
1826 config->setGroup("WidgetLayout"); 1829 config->setGroup("WidgetLayout");
1827 QStringList list; 1830 QStringList list;
1828 list = config->readListEntry("MainLayout"); 1831 list = config->readListEntry("MainLayout");
1829 int x,y,w,h; 1832 int x,y,w,h;
1830 if ( ! list.isEmpty() ) { 1833 if ( ! list.isEmpty() ) {
1831 x = list[0].toInt(); 1834 x = list[0].toInt();
1832 y = list[1].toInt(); 1835 y = list[1].toInt();
1833 w = list[2].toInt(); 1836 w = list[2].toInt();
1834 h = list[3].toInt(); 1837 h = list[3].toInt();
1835 topLevelWidget()->setGeometry(x,y,w,h); 1838 topLevelWidget()->setGeometry(x,y,w,h);
1836 1839
1837 } else { 1840 } else {
1838 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 1841 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
1839 } 1842 }
1840 list = config->readListEntry("EditEventLayout"); 1843 list = config->readListEntry("EditEventLayout");
1841 if ( ! list.isEmpty() ) { 1844 if ( ! list.isEmpty() ) {
1842 x = list[0].toInt(); 1845 x = list[0].toInt();
1843 y = list[1].toInt(); 1846 y = list[1].toInt();
1844 w = list[2].toInt(); 1847 w = list[2].toInt();
1845 h = list[3].toInt(); 1848 h = list[3].toInt();
1846 mEventEditor->setGeometry(x,y,w,h); 1849 mEventEditor->setGeometry(x,y,w,h);
1847 1850
1848 } 1851 }
1849 list = config->readListEntry("EditTodoLayout"); 1852 list = config->readListEntry("EditTodoLayout");
1850 if ( ! list.isEmpty() ) { 1853 if ( ! list.isEmpty() ) {
1851 x = list[0].toInt(); 1854 x = list[0].toInt();
1852 y = list[1].toInt(); 1855 y = list[1].toInt();
1853 w = list[2].toInt(); 1856 w = list[2].toInt();
1854 h = list[3].toInt(); 1857 h = list[3].toInt();
1855 mTodoEditor->setGeometry(x,y,w,h); 1858 mTodoEditor->setGeometry(x,y,w,h);
1856 1859
1857 } 1860 }
1858 list = config->readListEntry("ViewerLayout"); 1861 list = config->readListEntry("ViewerLayout");
1859 if ( ! list.isEmpty() ) { 1862 if ( ! list.isEmpty() ) {
1860 x = list[0].toInt(); 1863 x = list[0].toInt();
1861 y = list[1].toInt(); 1864 y = list[1].toInt();
1862 w = list[2].toInt(); 1865 w = list[2].toInt();
1863 h = list[3].toInt(); 1866 h = list[3].toInt();
1864 getEventViewerDialog()->setGeometry(x,y,w,h); 1867 getEventViewerDialog()->setGeometry(x,y,w,h);
1865 } 1868 }
1866#endif 1869#endif
1867 1870
1868} 1871}
1869 1872
1870 1873
1871void CalendarView::writeSettings() 1874void CalendarView::writeSettings()
1872{ 1875{
1873 // kdDebug() << "CalendarView::writeSettings" << endl; 1876 // kdDebug() << "CalendarView::writeSettings" << endl;
1874 1877
1875 KConfig *config = KOGlobals::config(); 1878 KConfig *config = KOGlobals::config();
1876 1879
1877#ifndef KORG_NOSPLITTER 1880#ifndef KORG_NOSPLITTER
1878 config->setGroup("KOrganizer Geometry"); 1881 config->setGroup("KOrganizer Geometry");
1879 1882
1880 QValueList<int> list = mPanner->sizes(); 1883 QValueList<int> list = mPanner->sizes();
1881 config->writeEntry("Separator1",list); 1884 config->writeEntry("Separator1",list);
1882 1885
1883 list = mLeftSplitter->sizes(); 1886 list = mLeftSplitter->sizes();
1884 config->writeEntry("Separator2",list); 1887 config->writeEntry("Separator2",list);
1885#endif 1888#endif
1886 1889
1887 mViewManager->writeSettings( config ); 1890 mViewManager->writeSettings( config );
1888 mTodoList->saveLayout(config,QString("Todo Layout")); 1891 mTodoList->saveLayout(config,QString("Todo Layout"));
1889 mDialogManager->writeSettings( config ); 1892 mDialogManager->writeSettings( config );
1890 //KOPrefs::instance()->usrWriteConfig(); 1893 //KOPrefs::instance()->usrWriteConfig();
1891 KOPrefs::instance()->writeConfig(); 1894 KOPrefs::instance()->writeConfig();
1892 1895
1893 writeFilterSettings(config); 1896 writeFilterSettings(config);
1894 1897
1895 config->setGroup( "Views" ); 1898 config->setGroup( "Views" );
1896 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); 1899 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() );
1897 1900
1898#ifdef DESKTOP_VERSION 1901#ifdef DESKTOP_VERSION
1899 config->setGroup("WidgetLayout"); 1902 config->setGroup("WidgetLayout");
1900 QStringList list ;//= config->readListEntry("MainLayout"); 1903 QStringList list ;//= config->readListEntry("MainLayout");
1901 int x,y,w,h; 1904 int x,y,w,h;
1902 QWidget* wid; 1905 QWidget* wid;
1903 wid = topLevelWidget(); 1906 wid = topLevelWidget();
1904 x = wid->geometry().x(); 1907 x = wid->geometry().x();
1905 y = wid->geometry().y(); 1908 y = wid->geometry().y();
1906 w = wid->width(); 1909 w = wid->width();
1907 h = wid->height(); 1910 h = wid->height();
1908 list.clear(); 1911 list.clear();
1909 list << QString::number( x ); 1912 list << QString::number( x );
1910 list << QString::number( y ); 1913 list << QString::number( y );
1911 list << QString::number( w ); 1914 list << QString::number( w );
1912 list << QString::number( h ); 1915 list << QString::number( h );
1913 config->writeEntry("MainLayout",list ); 1916 config->writeEntry("MainLayout",list );
1914 1917
1915 wid = mEventEditor; 1918 wid = mEventEditor;
1916 x = wid->geometry().x(); 1919 x = wid->geometry().x();
1917 y = wid->geometry().y(); 1920 y = wid->geometry().y();
1918 w = wid->width(); 1921 w = wid->width();
1919 h = wid->height(); 1922 h = wid->height();
1920 list.clear(); 1923 list.clear();
1921 list << QString::number( x ); 1924 list << QString::number( x );
1922 list << QString::number( y ); 1925 list << QString::number( y );
1923 list << QString::number( w ); 1926 list << QString::number( w );
1924 list << QString::number( h ); 1927 list << QString::number( h );
1925 config->writeEntry("EditEventLayout",list ); 1928 config->writeEntry("EditEventLayout",list );
1926 1929
1927 wid = mTodoEditor; 1930 wid = mTodoEditor;
1928 x = wid->geometry().x(); 1931 x = wid->geometry().x();
1929 y = wid->geometry().y(); 1932 y = wid->geometry().y();
1930 w = wid->width(); 1933 w = wid->width();
1931 h = wid->height(); 1934 h = wid->height();
1932 list.clear(); 1935 list.clear();
1933 list << QString::number( x ); 1936 list << QString::number( x );
1934 list << QString::number( y ); 1937 list << QString::number( y );
1935 list << QString::number( w ); 1938 list << QString::number( w );
1936 list << QString::number( h ); 1939 list << QString::number( h );
1937 config->writeEntry("EditTodoLayout",list ); 1940 config->writeEntry("EditTodoLayout",list );
1938 wid = getEventViewerDialog(); 1941 wid = getEventViewerDialog();
1939 x = wid->geometry().x(); 1942 x = wid->geometry().x();
1940 y = wid->geometry().y(); 1943 y = wid->geometry().y();
1941 w = wid->width(); 1944 w = wid->width();
1942 h = wid->height(); 1945 h = wid->height();
1943 list.clear(); 1946 list.clear();
1944 list << QString::number( x ); 1947 list << QString::number( x );
1945 list << QString::number( y ); 1948 list << QString::number( y );
1946 list << QString::number( w ); 1949 list << QString::number( w );
1947 list << QString::number( h ); 1950 list << QString::number( h );
1948 config->writeEntry("ViewerLayout",list ); 1951 config->writeEntry("ViewerLayout",list );
1949 wid = mDialogManager->getSearchDialog(); 1952 wid = mDialogManager->getSearchDialog();
1950 if ( wid ) { 1953 if ( wid ) {
1951 x = wid->geometry().x(); 1954 x = wid->geometry().x();
1952 y = wid->geometry().y(); 1955 y = wid->geometry().y();
1953 w = wid->width(); 1956 w = wid->width();
1954 h = wid->height(); 1957 h = wid->height();
1955 list.clear(); 1958 list.clear();
1956 list << QString::number( x ); 1959 list << QString::number( x );
1957 list << QString::number( y ); 1960 list << QString::number( y );
1958 list << QString::number( w ); 1961 list << QString::number( w );
1959 list << QString::number( h ); 1962 list << QString::number( h );
1960 config->writeEntry("SearchLayout",list ); 1963 config->writeEntry("SearchLayout",list );
1961 } 1964 }
1962#endif 1965#endif
1963 1966
1964 1967
1965 config->sync(); 1968 config->sync();
1966} 1969}
1967 1970
1968void CalendarView::readFilterSettings(KConfig *config) 1971void CalendarView::readFilterSettings(KConfig *config)
1969{ 1972{
1970 // kdDebug() << "CalendarView::readFilterSettings()" << endl; 1973 // kdDebug() << "CalendarView::readFilterSettings()" << endl;
1971 1974
1972 mFilters.clear(); 1975 mFilters.clear();
1973 1976
1974 config->setGroup("General"); 1977 config->setGroup("General");
1975 QStringList filterList = config->readListEntry("CalendarFilters"); 1978 QStringList filterList = config->readListEntry("CalendarFilters");
1976 1979
1977 QStringList::ConstIterator it = filterList.begin(); 1980 QStringList::ConstIterator it = filterList.begin();
1978 QStringList::ConstIterator end = filterList.end(); 1981 QStringList::ConstIterator end = filterList.end();
1979 while(it != end) { 1982 while(it != end) {
1980 // kdDebug() << " filter: " << (*it) << endl; 1983 // kdDebug() << " filter: " << (*it) << endl;
1981 1984
1982 CalFilter *filter; 1985 CalFilter *filter;
1983 filter = new CalFilter(*it); 1986 filter = new CalFilter(*it);
1984 config->setGroup("Filter_" + (*it)); 1987 config->setGroup("Filter_" + (*it));
1985 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) ); 1988 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) );
1986 filter->setCriteria(config->readNumEntry("Criteria",0)); 1989 filter->setCriteria(config->readNumEntry("Criteria",0));
1987 filter->setCategoryList(config->readListEntry("CategoryList")); 1990 filter->setCategoryList(config->readListEntry("CategoryList"));
1988 mFilters.append(filter); 1991 mFilters.append(filter);
1989 1992
1990 ++it; 1993 ++it;
1991 } 1994 }
1992 1995
1993 if (mFilters.count() == 0) { 1996 if (mFilters.count() == 0) {
1994 CalFilter *filter = new CalFilter(i18n("Default")); 1997 CalFilter *filter = new CalFilter(i18n("Default"));
1995 mFilters.append(filter); 1998 mFilters.append(filter);
1996 } 1999 }
1997 mFilterView->updateFilters(); 2000 mFilterView->updateFilters();
1998 config->setGroup("FilterView"); 2001 config->setGroup("FilterView");
1999 2002
2000 mFilterView->blockSignals(true); 2003 mFilterView->blockSignals(true);
2001 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); 2004 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled"));
2002 mFilterView->setSelectedFilter(config->readEntry("Current Filter")); 2005 mFilterView->setSelectedFilter(config->readEntry("Current Filter"));
2003 mFilterView->blockSignals(false); 2006 mFilterView->blockSignals(false);
2004 // We do it manually to avoid it being done twice by the above calls 2007 // We do it manually to avoid it being done twice by the above calls
2005 updateFilter(); 2008 updateFilter();
2006} 2009}
2007 2010
2008void CalendarView::writeFilterSettings(KConfig *config) 2011void CalendarView::writeFilterSettings(KConfig *config)
2009{ 2012{
2010 // kdDebug() << "CalendarView::writeFilterSettings()" << endl; 2013 // kdDebug() << "CalendarView::writeFilterSettings()" << endl;
2011 2014
2012 QStringList filterList; 2015 QStringList filterList;
2013 2016
2014 CalFilter *filter = mFilters.first(); 2017 CalFilter *filter = mFilters.first();
2015 while(filter) { 2018 while(filter) {
2016 // kdDebug() << " fn: " << filter->name() << endl; 2019 // kdDebug() << " fn: " << filter->name() << endl;
2017 filterList << filter->name(); 2020 filterList << filter->name();
2018 config->setGroup("Filter_" + filter->name()); 2021 config->setGroup("Filter_" + filter->name());
2019 config->writeEntry("Criteria",filter->criteria()); 2022 config->writeEntry("Criteria",filter->criteria());
2020 config->writeEntry("CategoryList",filter->categoryList()); 2023 config->writeEntry("CategoryList",filter->categoryList());
2021 filter = mFilters.next(); 2024 filter = mFilters.next();
2022 } 2025 }
2023 config->setGroup("General"); 2026 config->setGroup("General");
2024 config->writeEntry("CalendarFilters",filterList); 2027 config->writeEntry("CalendarFilters",filterList);
2025 2028
2026 config->setGroup("FilterView"); 2029 config->setGroup("FilterView");
2027 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); 2030 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled());
2028 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); 2031 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name());
2029} 2032}
2030 2033
2031 2034
2032void CalendarView::goToday() 2035void CalendarView::goToday()
2033{ 2036{
2034 if ( mViewManager->currentView()->isMonthView() ) 2037 if ( mViewManager->currentView()->isMonthView() )
2035 mNavigator->selectTodayMonth(); 2038 mNavigator->selectTodayMonth();
2036 else 2039 else
2037 mNavigator->selectToday(); 2040 mNavigator->selectToday();
2038} 2041}
2039 2042
2040void CalendarView::goNext() 2043void CalendarView::goNext()
2041{ 2044{
2042 mNavigator->selectNext(); 2045 mNavigator->selectNext();
2043} 2046}
2044 2047
2045void CalendarView::goPrevious() 2048void CalendarView::goPrevious()
2046{ 2049{
2047 mNavigator->selectPrevious(); 2050 mNavigator->selectPrevious();
2048} 2051}
2049void CalendarView::goNextMonth() 2052void CalendarView::goNextMonth()
2050{ 2053{
2051 mNavigator->selectNextMonth(); 2054 mNavigator->selectNextMonth();
2052} 2055}
2053 2056
2054void CalendarView::goPreviousMonth() 2057void CalendarView::goPreviousMonth()
2055{ 2058{
2056 mNavigator->selectPreviousMonth(); 2059 mNavigator->selectPreviousMonth();
2057} 2060}
2058void CalendarView::writeLocale() 2061void CalendarView::writeLocale()
2059{ 2062{
2060 //KPimGlobalPrefs::instance()->setGlobalConfig(); 2063 //KPimGlobalPrefs::instance()->setGlobalConfig();
2061#if 0 2064#if 0
2062 KGlobal::locale()->setHore24Format( !KOPrefs::instance()->mPreferredTime ); 2065 KGlobal::locale()->setHore24Format( !KOPrefs::instance()->mPreferredTime );
2063 KGlobal::locale()->setWeekStartMonday( !KOPrefs::instance()->mWeekStartsOnSunday ); 2066 KGlobal::locale()->setWeekStartMonday( !KOPrefs::instance()->mWeekStartsOnSunday );
2064 KGlobal::locale()->setIntDateFormat( (KLocale::IntDateFormat)KOPrefs::instance()->mPreferredDate ); 2067 KGlobal::locale()->setIntDateFormat( (KLocale::IntDateFormat)KOPrefs::instance()->mPreferredDate );
2065 KGlobal::locale()->setLanguage( KOPrefs::instance()->mPreferredLanguage ); 2068 KGlobal::locale()->setLanguage( KOPrefs::instance()->mPreferredLanguage );
2066 QString dummy = KOPrefs::instance()->mUserDateFormatLong; 2069 QString dummy = KOPrefs::instance()->mUserDateFormatLong;
2067 KGlobal::locale()->setDateFormat(dummy.replace( QRegExp("K"), QString(",") )); 2070 KGlobal::locale()->setDateFormat(dummy.replace( QRegExp("K"), QString(",") ));
2068 dummy = KOPrefs::instance()->mUserDateFormatShort; 2071 dummy = KOPrefs::instance()->mUserDateFormatShort;
2069 KGlobal::locale()->setDateFormatShort(dummy.replace( QRegExp("K"), QString(",") )); 2072 KGlobal::locale()->setDateFormatShort(dummy.replace( QRegExp("K"), QString(",") ));
2070 KGlobal::locale()->setDaylightSaving( KOPrefs::instance()->mUseDaylightsaving, 2073 KGlobal::locale()->setDaylightSaving( KOPrefs::instance()->mUseDaylightsaving,
2071 KOPrefs::instance()->mDaylightsavingStart, 2074 KOPrefs::instance()->mDaylightsavingStart,
2072 KOPrefs::instance()->mDaylightsavingEnd ); 2075 KOPrefs::instance()->mDaylightsavingEnd );
2073 KGlobal::locale()->setTimezone( KPimGlobalPrefs::instance()->mTimeZoneId ); 2076 KGlobal::locale()->setTimezone( KPimGlobalPrefs::instance()->mTimeZoneId );
2074#endif 2077#endif
2075} 2078}
2076void CalendarView::updateConfig() 2079void CalendarView::updateConfig()
2077{ 2080{
2078 writeLocale(); 2081 writeLocale();
2079 if ( KOPrefs::instance()->mUseAppColors ) 2082 if ( KOPrefs::instance()->mUseAppColors )
2080 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 2083 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
2081 emit configChanged(); 2084 emit configChanged();
2082 mTodoList->updateConfig(); 2085 mTodoList->updateConfig();
2083 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); 2086 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont);
2084 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2087 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2085 // To make the "fill window" configurations work 2088 // To make the "fill window" configurations work
2086 //mViewManager->raiseCurrentView(); 2089 //mViewManager->raiseCurrentView();
2087} 2090}
2088 2091
2089 2092
2090void CalendarView::eventChanged(Event *event) 2093void CalendarView::eventChanged(Event *event)
2091{ 2094{
2092 changeEventDisplay(event,KOGlobals::EVENTEDITED); 2095 changeEventDisplay(event,KOGlobals::EVENTEDITED);
2093 //updateUnmanagedViews(); 2096 //updateUnmanagedViews();
2094} 2097}
2095 2098
2096void CalendarView::eventAdded(Event *event) 2099void CalendarView::eventAdded(Event *event)
2097{ 2100{
2098 changeEventDisplay(event,KOGlobals::EVENTADDED); 2101 changeEventDisplay(event,KOGlobals::EVENTADDED);
2099} 2102}
2100 2103
2101void CalendarView::eventToBeDeleted(Event *) 2104void CalendarView::eventToBeDeleted(Event *)
2102{ 2105{
2103 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; 2106 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl;
2104} 2107}
2105 2108
2106void CalendarView::eventDeleted() 2109void CalendarView::eventDeleted()
2107{ 2110{
2108 changeEventDisplay(0,KOGlobals::EVENTDELETED); 2111 changeEventDisplay(0,KOGlobals::EVENTDELETED);
2109} 2112}
2110void CalendarView::changeTodoDisplay(Todo *which, int action) 2113void CalendarView::changeTodoDisplay(Todo *which, int action)
2111{ 2114{
2112 changeIncidenceDisplay((Incidence *)which, action); 2115 changeIncidenceDisplay((Incidence *)which, action);
2113 mDateNavigator->updateView(); //LR 2116 mDateNavigator->updateView(); //LR
2114 //mDialogManager->updateSearchDialog(); 2117 //mDialogManager->updateSearchDialog();
2115 2118
2116 if (which) { 2119 if (which) {
2117 mViewManager->updateWNview(); 2120 mViewManager->updateWNview();
2118 //mTodoList->updateView(); 2121 //mTodoList->updateView();
2119 } 2122 }
2120 2123
2121} 2124}
2122 2125
2123void CalendarView::changeIncidenceDisplay(Incidence *which, int action) 2126void CalendarView::changeIncidenceDisplay(Incidence *which, int action)
2124{ 2127{
2125 updateUnmanagedViews(); 2128 updateUnmanagedViews();
2126 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); 2129 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action );
2127 if ( action == KOGlobals::EVENTDELETED ) { //delete 2130 if ( action == KOGlobals::EVENTDELETED ) { //delete
2128 mCalendar->checkAlarmForIncidence( 0, true ); 2131 mCalendar->checkAlarmForIncidence( 0, true );
2129 if ( mEventViewerDialog ) 2132 if ( mEventViewerDialog )
2130 mEventViewerDialog->hide(); 2133 mEventViewerDialog->hide();
2131 } 2134 }
2132 else 2135 else
2133 mCalendar->checkAlarmForIncidence( which , false ); 2136 mCalendar->checkAlarmForIncidence( which , false );
2134} 2137}
2135 2138
2136// most of the changeEventDisplays() right now just call the view's 2139// most of the changeEventDisplays() right now just call the view's
2137// total update mode, but they SHOULD be recoded to be more refresh-efficient. 2140// total update mode, but they SHOULD be recoded to be more refresh-efficient.
2138void CalendarView::changeEventDisplay(Event *which, int action) 2141void CalendarView::changeEventDisplay(Event *which, int action)
2139{ 2142{
2140 // kdDebug() << "CalendarView::changeEventDisplay" << endl; 2143 // kdDebug() << "CalendarView::changeEventDisplay" << endl;
2141 changeIncidenceDisplay((Incidence *)which, action); 2144 changeIncidenceDisplay((Incidence *)which, action);
2142 mDateNavigator->updateView(); 2145 mDateNavigator->updateView();
2143 //mDialogManager->updateSearchDialog(); 2146 //mDialogManager->updateSearchDialog();
2144 2147
2145 if (which) { 2148 if (which) {
2146 // If there is an event view visible update the display 2149 // If there is an event view visible update the display
2147 mViewManager->currentView()->changeEventDisplay(which,action); 2150 mViewManager->currentView()->changeEventDisplay(which,action);
2148 // TODO: check, if update needed 2151 // TODO: check, if update needed
2149 // if (which->getTodoStatus()) { 2152 // if (which->getTodoStatus()) {
2150 mTodoList->updateView(); 2153 mTodoList->updateView();
2151 // } 2154 // }
2152 } else { 2155 } else {
2153 mViewManager->currentView()->updateView(); 2156 mViewManager->currentView()->updateView();
2154 } 2157 }
2155} 2158}
2156 2159
2157 2160
2158void CalendarView::updateTodoViews() 2161void CalendarView::updateTodoViews()
2159{ 2162{
2160 2163
2161 mTodoList->updateView(); 2164 mTodoList->updateView();
2162 mViewManager->currentView()->updateView(); 2165 mViewManager->currentView()->updateView();
2163 2166
2164} 2167}
2165 2168
2166 2169
2167void CalendarView::updateView(const QDate &start, const QDate &end) 2170void CalendarView::updateView(const QDate &start, const QDate &end)
2168{ 2171{
2169 mTodoList->updateView(); 2172 mTodoList->updateView();
2170 mViewManager->updateView(start, end); 2173 mViewManager->updateView(start, end);
2171 //mDateNavigator->updateView(); 2174 //mDateNavigator->updateView();
2172} 2175}
2173 2176
2174void CalendarView::updateView() 2177void CalendarView::updateView()
2175{ 2178{
2176 DateList tmpList = mNavigator->selectedDates(); 2179 DateList tmpList = mNavigator->selectedDates();
2177 2180
2178 if ( KOPrefs::instance()->mHideNonStartedTodos ) 2181 if ( KOPrefs::instance()->mHideNonStartedTodos )
2179 mTodoList->updateView(); 2182 mTodoList->updateView();
2180 // We assume that the navigator only selects consecutive days. 2183 // We assume that the navigator only selects consecutive days.
2181 updateView( tmpList.first(), tmpList.last() ); 2184 updateView( tmpList.first(), tmpList.last() );
2182} 2185}
2183 2186
2184void CalendarView::updateUnmanagedViews() 2187void CalendarView::updateUnmanagedViews()
2185{ 2188{
2186 mDateNavigator->updateDayMatrix(); 2189 mDateNavigator->updateDayMatrix();
2187} 2190}
2188 2191
2189int CalendarView::msgItemDelete(const QString name) 2192int CalendarView::msgItemDelete(const QString name)
2190{ 2193{
2191 return KMessageBox::warningContinueCancel(this,name +"\n\n"+ 2194 return KMessageBox::warningContinueCancel(this,name +"\n\n"+
2192 i18n("This item will be\npermanently deleted."), 2195 i18n("This item will be\npermanently deleted."),
2193 i18n("KO/Pi Confirmation"),i18n("Delete")); 2196 i18n("KO/Pi Confirmation"),i18n("Delete"));
2194} 2197}
2195 2198
2196 2199
2197void CalendarView::edit_cut() 2200void CalendarView::edit_cut()
2198{ 2201{
2199 Event *anEvent=0; 2202 Event *anEvent=0;
2200 2203
2201 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2204 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2202 2205
2203 if (mViewManager->currentView()->isEventView()) { 2206 if (mViewManager->currentView()->isEventView()) {
2204 if ( incidence && incidence->type() == "Event" ) { 2207 if ( incidence && incidence->type() == "Event" ) {
2205 anEvent = static_cast<Event *>(incidence); 2208 anEvent = static_cast<Event *>(incidence);
2206 } 2209 }
2207 } 2210 }
2208 2211
2209 if (!anEvent) { 2212 if (!anEvent) {
2210 KNotifyClient::beep(); 2213 KNotifyClient::beep();
2211 return; 2214 return;
2212 } 2215 }
2213 DndFactory factory( mCalendar ); 2216 DndFactory factory( mCalendar );
2214 factory.cutEvent(anEvent); 2217 factory.cutEvent(anEvent);
2215 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2218 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2216} 2219}
2217 2220
2218void CalendarView::edit_copy() 2221void CalendarView::edit_copy()
2219{ 2222{
2220 Event *anEvent=0; 2223 Event *anEvent=0;
2221 2224
2222 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2225 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2223 2226
2224 if (mViewManager->currentView()->isEventView()) { 2227 if (mViewManager->currentView()->isEventView()) {
2225 if ( incidence && incidence->type() == "Event" ) { 2228 if ( incidence && incidence->type() == "Event" ) {
2226 anEvent = static_cast<Event *>(incidence); 2229 anEvent = static_cast<Event *>(incidence);
2227 } 2230 }
2228 } 2231 }
2229 2232
2230 if (!anEvent) { 2233 if (!anEvent) {
2231 KNotifyClient::beep(); 2234 KNotifyClient::beep();
2232 return; 2235 return;
2233 } 2236 }
2234 DndFactory factory( mCalendar ); 2237 DndFactory factory( mCalendar );
2235 factory.copyEvent(anEvent); 2238 factory.copyEvent(anEvent);
2236} 2239}
2237 2240
2238void CalendarView::edit_paste() 2241void CalendarView::edit_paste()
2239{ 2242{
2240 QDate date = mNavigator->selectedDates().first(); 2243 QDate date = mNavigator->selectedDates().first();
2241 2244
2242 DndFactory factory( mCalendar ); 2245 DndFactory factory( mCalendar );
2243 Event *pastedEvent = factory.pasteEvent( date ); 2246 Event *pastedEvent = factory.pasteEvent( date );
2244 2247
2245 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 2248 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
2246} 2249}
2247 2250
2248void CalendarView::edit_options() 2251void CalendarView::edit_options()
2249{ 2252{
2250 mDialogManager->showOptionsDialog(); 2253 mDialogManager->showOptionsDialog();
2251 //writeSettings(); 2254 //writeSettings();
2252} 2255}
2253 2256
2254 2257
2255void CalendarView::slotSelectPickerDate( QDate d) 2258void CalendarView::slotSelectPickerDate( QDate d)
2256{ 2259{
2257 mDateFrame->hide(); 2260 mDateFrame->hide();
2258 if ( mDatePickerMode == 1 ) { 2261 if ( mDatePickerMode == 1 ) {
2259 mNavigator->slotDaySelect( d ); 2262 mNavigator->slotDaySelect( d );
2260 } else if ( mDatePickerMode == 2 ) { 2263 } else if ( mDatePickerMode == 2 ) {
2261 if ( mMoveIncidence->type() == "Todo" ) { 2264 if ( mMoveIncidence->type() == "Todo" ) {
2262 Todo * to = (Todo *) mMoveIncidence; 2265 Todo * to = (Todo *) mMoveIncidence;
2263 QTime tim; 2266 QTime tim;
2264 if ( to->hasDueDate() ) 2267 if ( to->hasDueDate() )
2265 tim = to->dtDue().time(); 2268 tim = to->dtDue().time();
2266 else { 2269 else {
2267 tim = QTime ( 0,0,0 ); 2270 tim = QTime ( 0,0,0 );
2268 to->setFloats( true ); 2271 to->setFloats( true );
2269 to->setHasDueDate( true ); 2272 to->setHasDueDate( true );
2270 } 2273 }
2271 QDateTime dt ( d,tim ); 2274 QDateTime dt ( d,tim );
2272 to->setDtDue( dt ); 2275 to->setDtDue( dt );
2273 todoChanged( to ); 2276 todoChanged( to );
2274 } else { 2277 } else {
2275 if ( mMoveIncidence->doesRecur() ) { 2278 if ( mMoveIncidence->doesRecur() ) {
2276#if 0 2279#if 0
2277 // PENDING implement this 2280 // PENDING implement this
2278 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate ); 2281 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate );
2279 mCalendar()->addIncidence( newInc ); 2282 mCalendar()->addIncidence( newInc );
2280 if ( mMoveIncidence->type() == "Todo" ) 2283 if ( mMoveIncidence->type() == "Todo" )
2281 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED ); 2284 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED );
2282 else 2285 else
2283 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED); 2286 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED);
2284 mMoveIncidence = newInc; 2287 mMoveIncidence = newInc;
2285 2288
2286#endif 2289#endif
2287 } 2290 }
2288 QTime tim = mMoveIncidence->dtStart().time(); 2291 QTime tim = mMoveIncidence->dtStart().time();
2289 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); 2292 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd());
2290 QDateTime dt ( d,tim ); 2293 QDateTime dt ( d,tim );
2291 mMoveIncidence->setDtStart( dt ); 2294 mMoveIncidence->setDtStart( dt );
2292 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); 2295 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) );
2293 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); 2296 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED);
2294 } 2297 }
2295 2298
2296 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); 2299 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 );
2297 } 2300 }
2298} 2301}
2299 2302
2300void CalendarView::removeCategories() 2303void CalendarView::removeCategories()
2301{ 2304{
2302 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 2305 QPtrList<Incidence> incList = mCalendar->rawIncidences();
2303 QStringList catList = KOPrefs::instance()->mCustomCategories; 2306 QStringList catList = KOPrefs::instance()->mCustomCategories;
2304 QStringList catIncList; 2307 QStringList catIncList;
2305 QStringList newCatList; 2308 QStringList newCatList;
2306 Incidence* inc = incList.first(); 2309 Incidence* inc = incList.first();
2307 int i; 2310 int i;
2308 int count = 0; 2311 int count = 0;
2309 while ( inc ) { 2312 while ( inc ) {
2310 newCatList.clear(); 2313 newCatList.clear();
2311 catIncList = inc->categories() ; 2314 catIncList = inc->categories() ;
2312 for( i = 0; i< catIncList.count(); ++i ) { 2315 for( i = 0; i< catIncList.count(); ++i ) {
2313 if ( catList.contains (catIncList[i])) 2316 if ( catList.contains (catIncList[i]))
2314 newCatList.append( catIncList[i] ); 2317 newCatList.append( catIncList[i] );
2315 } 2318 }
2316 newCatList.sort(); 2319 newCatList.sort();
2317 inc->setCategories( newCatList.join(",") ); 2320 inc->setCategories( newCatList.join(",") );
2318 inc = incList.next(); 2321 inc = incList.next();
2319 } 2322 }
2320} 2323}
2321 2324
2322int CalendarView::addCategories() 2325int CalendarView::addCategories()
2323{ 2326{
2324 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 2327 QPtrList<Incidence> incList = mCalendar->rawIncidences();
2325 QStringList catList = KOPrefs::instance()->mCustomCategories; 2328 QStringList catList = KOPrefs::instance()->mCustomCategories;
2326 QStringList catIncList; 2329 QStringList catIncList;
2327 Incidence* inc = incList.first(); 2330 Incidence* inc = incList.first();
2328 int i; 2331 int i;
2329 int count = 0; 2332 int count = 0;
2330 while ( inc ) { 2333 while ( inc ) {
2331 catIncList = inc->categories() ; 2334 catIncList = inc->categories() ;
2332 for( i = 0; i< catIncList.count(); ++i ) { 2335 for( i = 0; i< catIncList.count(); ++i ) {
2333 if ( !catList.contains (catIncList[i])) { 2336 if ( !catList.contains (catIncList[i])) {
2334 catList.append( catIncList[i] ); 2337 catList.append( catIncList[i] );
2335 //qDebug("add cat %s ", catIncList[i].latin1()); 2338 //qDebug("add cat %s ", catIncList[i].latin1());
2336 ++count; 2339 ++count;
2337 } 2340 }
2338 } 2341 }
2339 inc = incList.next(); 2342 inc = incList.next();
2340 } 2343 }
2341 catList.sort(); 2344 catList.sort();
2342 KOPrefs::instance()->mCustomCategories = catList; 2345 KOPrefs::instance()->mCustomCategories = catList;
2343 return count; 2346 return count;
2344} 2347}
2345 2348
2346void CalendarView::manageCategories() 2349void CalendarView::manageCategories()
2347{ 2350{
2348 KOCatPrefs* cp = new KOCatPrefs(); 2351 KOCatPrefs* cp = new KOCatPrefs();
2349 cp->show(); 2352 cp->show();
2350 int w =cp->sizeHint().width() ; 2353 int w =cp->sizeHint().width() ;
2351 int h = cp->sizeHint().height() ; 2354 int h = cp->sizeHint().height() ;
2352 int dw = QApplication::desktop()->width(); 2355 int dw = QApplication::desktop()->width();
2353 int dh = QApplication::desktop()->height(); 2356 int dh = QApplication::desktop()->height();
2354 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2357 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2355 if ( !cp->exec() ) { 2358 if ( !cp->exec() ) {
2356 delete cp; 2359 delete cp;
2357 return; 2360 return;
2358 } 2361 }
2359 int count = 0; 2362 int count = 0;
2360 if ( cp->addCat() ) { 2363 if ( cp->addCat() ) {
2361 count = addCategories(); 2364 count = addCategories();
2362 if ( count ) { 2365 if ( count ) {
2363 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! ")); 2366 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! "));
2364 writeSettings(); 2367 writeSettings();
2365 } else 2368 } else
2366 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! ")); 2369 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! "));
2367 } else { 2370 } else {
2368 removeCategories(); 2371 removeCategories();
2369 updateView(); 2372 updateView();
2370 } 2373 }
2371 delete cp; 2374 delete cp;
2372} 2375}
2373 2376
2374void CalendarView::beamIncidence(Incidence * Inc) 2377void CalendarView::beamIncidence(Incidence * Inc)
2375{ 2378{
2376 QPtrList<Incidence> delSel ; 2379 QPtrList<Incidence> delSel ;
2377 delSel.append(Inc); 2380 delSel.append(Inc);
2378 beamIncidenceList( delSel ); 2381 beamIncidenceList( delSel );
2379} 2382}
2380void CalendarView::beamCalendar() 2383void CalendarView::beamCalendar()
2381{ 2384{
2382 QPtrList<Incidence> delSel = mCalendar->rawIncidences(); 2385 QPtrList<Incidence> delSel = mCalendar->rawIncidences();
2383 //qDebug("beamCalendar() "); 2386 //qDebug("beamCalendar() ");
2384 beamIncidenceList( delSel ); 2387 beamIncidenceList( delSel );
2385} 2388}
2386void CalendarView::beamFilteredCalendar() 2389void CalendarView::beamFilteredCalendar()
2387{ 2390{
2388 QPtrList<Incidence> delSel = mCalendar->incidences(); 2391 QPtrList<Incidence> delSel = mCalendar->incidences();
2389 //qDebug("beamFilteredCalendar() "); 2392 //qDebug("beamFilteredCalendar() ");
2390 beamIncidenceList( delSel ); 2393 beamIncidenceList( delSel );
2391} 2394}
2392void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel ) 2395void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel )
2393{ 2396{
2394 if ( beamDialog->exec () == QDialog::Rejected ) 2397 if ( beamDialog->exec () == QDialog::Rejected )
2395 return; 2398 return;
2396#ifdef DESKTOP_VERSION 2399#ifdef DESKTOP_VERSION
2397 QString fn = locateLocal( "tmp", "kopibeamfile" ); 2400 QString fn = locateLocal( "tmp", "kopibeamfile" );
2398#else 2401#else
2399 QString fn = "/tmp/kopibeamfile"; 2402 QString fn = "/tmp/kopibeamfile";
2400#endif 2403#endif
2401 QString mes; 2404 QString mes;
2402 bool createbup = true; 2405 bool createbup = true;
2403 if ( createbup ) { 2406 if ( createbup ) {
2404 QString description = "\n"; 2407 QString description = "\n";
2405 CalendarLocal* cal = new CalendarLocal(); 2408 CalendarLocal* cal = new CalendarLocal();
2406 if ( beamDialog->beamLocal() ) 2409 if ( beamDialog->beamLocal() )
2407 cal->setLocalTime(); 2410 cal->setLocalTime();
2408 else 2411 else
2409 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2412 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2410 Incidence *incidence = delSel.first(); 2413 Incidence *incidence = delSel.first();
2411 bool addText = false; 2414 bool addText = false;
2412 if ( delSel.count() < 10 ) 2415 if ( delSel.count() < 10 )
2413 addText = true; 2416 addText = true;
2414 else { 2417 else {
2415 description.sprintf(i18n(" %d items?"),delSel.count() ); 2418 description.sprintf(i18n(" %d items?"),delSel.count() );
2416 } 2419 }
2417 while ( incidence ) { 2420 while ( incidence ) {
2418 Incidence *in = incidence->clone(); 2421 Incidence *in = incidence->clone();
2419 if ( ! in->summary().isEmpty() ) { 2422 if ( ! in->summary().isEmpty() ) {
2420 in->setDescription(""); 2423 in->setDescription("");
2421 } else { 2424 } else {
2422 in->setSummary( in->description().left(20)); 2425 in->setSummary( in->description().left(20));
2423 in->setDescription(""); 2426 in->setDescription("");
2424 } 2427 }
2425 if ( addText ) 2428 if ( addText )
2426 description += in->summary() + "\n"; 2429 description += in->summary() + "\n";
2427 cal->addIncidence( in ); 2430 cal->addIncidence( in );
2428 incidence = delSel.next(); 2431 incidence = delSel.next();
2429 } 2432 }
2430 if ( beamDialog->beamVcal() ) { 2433 if ( beamDialog->beamVcal() ) {
2431 fn += ".vcs"; 2434 fn += ".vcs";
2432 FileStorage storage( cal, fn, new VCalFormat ); 2435 FileStorage storage( cal, fn, new VCalFormat );
2433 storage.save(); 2436 storage.save();
2434 } else { 2437 } else {
2435 fn += ".ics"; 2438 fn += ".ics";
2436 FileStorage storage( cal, fn, new ICalFormat( ) ); 2439 FileStorage storage( cal, fn, new ICalFormat( ) );
2437 storage.save(); 2440 storage.save();
2438 } 2441 }
2439 delete cal; 2442 delete cal;
2440 mes = i18n("KO/Pi: Ready for beaming"); 2443 mes = i18n("KO/Pi: Ready for beaming");
2441 topLevelWidget()->setCaption(mes); 2444 topLevelWidget()->setCaption(mes);
2442 KApplication::convert2latin1( fn ); 2445 KApplication::convert2latin1( fn );
2443#ifndef DESKTOP_VERSION 2446#ifndef DESKTOP_VERSION
2444 Ir *ir = new Ir( this ); 2447 Ir *ir = new Ir( this );
2445 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 2448 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
2446 ir->send( fn, description, "text/x-vCalendar" ); 2449 ir->send( fn, description, "text/x-vCalendar" );
2447#endif 2450#endif
2448 } 2451 }
2449} 2452}
2450void CalendarView::beamDone( Ir *ir ) 2453void CalendarView::beamDone( Ir *ir )
2451{ 2454{
2452#ifndef DESKTOP_VERSION 2455#ifndef DESKTOP_VERSION
2453 delete ir; 2456 delete ir;
2454#endif 2457#endif
2455 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") ); 2458 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") );
2456 topLevelWidget()->raise(); 2459 topLevelWidget()->raise();
2457} 2460}
2458 2461
2459void CalendarView::moveIncidence(Incidence * inc ) 2462void CalendarView::moveIncidence(Incidence * inc )
2460{ 2463{
2461 if ( !inc ) return; 2464 if ( !inc ) return;
2462 // qDebug("showDatePickerForIncidence( ) "); 2465 // qDebug("showDatePickerForIncidence( ) ");
2463 if ( mDateFrame->isVisible() ) 2466 if ( mDateFrame->isVisible() )
2464 mDateFrame->hide(); 2467 mDateFrame->hide();
2465 else { 2468 else {
2466 int w =mDatePicker->sizeHint().width()+2*mDateFrame->lineWidth() ; 2469 int w =mDatePicker->sizeHint().width()+2*mDateFrame->lineWidth() ;
2467 int h = mDatePicker->sizeHint().height()+2*mDateFrame->lineWidth() ; 2470 int h = mDatePicker->sizeHint().height()+2*mDateFrame->lineWidth() ;
2468 int dw = QApplication::desktop()->width(); 2471 int dw = QApplication::desktop()->width();
2469 int dh = QApplication::desktop()->height(); 2472 int dh = QApplication::desktop()->height();
2470 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2473 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2471 mDateFrame->show(); 2474 mDateFrame->show();
2472 } 2475 }
2473 mDatePickerMode = 2; 2476 mDatePickerMode = 2;
2474 mMoveIncidence = inc ; 2477 mMoveIncidence = inc ;
2475 QDate da; 2478 QDate da;
2476 if ( mMoveIncidence->type() == "Todo" ) { 2479 if ( mMoveIncidence->type() == "Todo" ) {
2477 Todo * to = (Todo *) mMoveIncidence; 2480 Todo * to = (Todo *) mMoveIncidence;
2478 if ( to->hasDueDate() ) 2481 if ( to->hasDueDate() )
2479 da = to->dtDue().date(); 2482 da = to->dtDue().date();
2480 else 2483 else
2481 da = QDate::currentDate(); 2484 da = QDate::currentDate();
2482 } else { 2485 } else {
2483 da = mMoveIncidence->dtStart().date(); 2486 da = mMoveIncidence->dtStart().date();
2484 } 2487 }
2485 //PENDING set date for recurring incidence to date of recurrence 2488 //PENDING set date for recurring incidence to date of recurrence
2486 //mMoveIncidenceOldDate; 2489 //mMoveIncidenceOldDate;
2487 mDatePicker->setDate( da ); 2490 mDatePicker->setDate( da );
2488} 2491}
2489void CalendarView::showDatePicker( ) 2492void CalendarView::showDatePicker( )
2490{ 2493{
2491 //qDebug("CalendarView::showDatePicker( ) "); 2494 //qDebug("CalendarView::showDatePicker( ) ");
2492 if ( mDateFrame->isVisible() ) 2495 if ( mDateFrame->isVisible() )
2493 mDateFrame->hide(); 2496 mDateFrame->hide();
2494 else { 2497 else {
2495 int w =mDatePicker->sizeHint().width() ; 2498 int w =mDatePicker->sizeHint().width() ;
2496 int h = mDatePicker->sizeHint().height() ; 2499 int h = mDatePicker->sizeHint().height() ;
2497 int dw = QApplication::desktop()->width(); 2500 int dw = QApplication::desktop()->width();
2498 int dh = QApplication::desktop()->height(); 2501 int dh = QApplication::desktop()->height();
2499 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2502 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2500 mDateFrame->show(); 2503 mDateFrame->show();
2501 } 2504 }
2502 mDatePickerMode = 1; 2505 mDatePickerMode = 1;
2503 mDatePicker->setDate( mNavigator->selectedDates().first() ); 2506 mDatePicker->setDate( mNavigator->selectedDates().first() );
2504} 2507}
2505 2508
2506void CalendarView::showEventEditor() 2509void CalendarView::showEventEditor()
2507{ 2510{
2508#ifdef DESKTOP_VERSION 2511#ifdef DESKTOP_VERSION
2509 mEventEditor->show(); 2512 mEventEditor->show();
2510#else 2513#else
2511 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) { 2514 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) {
2512 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 2515 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
2513 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() ); 2516 qDebug("KO: CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() );
2517 qApp->processEvents();
2514 delete mEventEditor; 2518 delete mEventEditor;
2515 mEventEditor = mDialogManager->getEventEditor(); 2519 mEventEditor = mDialogManager->getEventEditor();
2516 topLevelWidget()->setCaption( i18n("") ); 2520 topLevelWidget()->setCaption( i18n("") );
2517 } 2521 }
2518 mEventEditor->showMaximized(); 2522 mEventEditor->showMaximized();
2519#endif 2523#endif
2520} 2524}
2521void CalendarView::showTodoEditor() 2525void CalendarView::showTodoEditor()
2522{ 2526{
2523#ifdef DESKTOP_VERSION 2527#ifdef DESKTOP_VERSION
2524 mTodoEditor->show(); 2528 mTodoEditor->show();
2525#else 2529#else
2526 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) { 2530 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) {
2527 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 2531 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
2528 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() ); 2532 qDebug("KO: CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() );
2533 qApp->processEvents();
2529 delete mTodoEditor; 2534 delete mTodoEditor;
2530 mTodoEditor = mDialogManager->getTodoEditor(); 2535 mTodoEditor = mDialogManager->getTodoEditor();
2531 topLevelWidget()->setCaption( i18n("") ); 2536 topLevelWidget()->setCaption( i18n("") );
2532 } 2537 }
2533 mTodoEditor->showMaximized(); 2538 mTodoEditor->showMaximized();
2534#endif 2539#endif
2535} 2540}
2536 2541
2537void CalendarView::cloneIncidence() 2542void CalendarView::cloneIncidence()
2538{ 2543{
2539 Incidence *incidence = currentSelection(); 2544 Incidence *incidence = currentSelection();
2540 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 2545 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
2541 if ( incidence ) { 2546 if ( incidence ) {
2542 cloneIncidence(incidence); 2547 cloneIncidence(incidence);
2543 } 2548 }
2544} 2549}
2545void CalendarView::moveIncidence() 2550void CalendarView::moveIncidence()
2546{ 2551{
2547 Incidence *incidence = currentSelection(); 2552 Incidence *incidence = currentSelection();
2548 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 2553 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
2549 if ( incidence ) { 2554 if ( incidence ) {
2550 moveIncidence(incidence); 2555 moveIncidence(incidence);
2551 } 2556 }
2552} 2557}
2553void CalendarView::beamIncidence() 2558void CalendarView::beamIncidence()
2554{ 2559{
2555 Incidence *incidence = currentSelection(); 2560 Incidence *incidence = currentSelection();
2556 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 2561 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
2557 if ( incidence ) { 2562 if ( incidence ) {
2558 beamIncidence(incidence); 2563 beamIncidence(incidence);
2559 } 2564 }
2560} 2565}
2561void CalendarView::toggleCancelIncidence() 2566void CalendarView::toggleCancelIncidence()
2562{ 2567{
2563 Incidence *incidence = currentSelection(); 2568 Incidence *incidence = currentSelection();
2564 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 2569 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
2565 if ( incidence ) { 2570 if ( incidence ) {
2566 cancelIncidence(incidence); 2571 cancelIncidence(incidence);
2567 } 2572 }
2568} 2573}
2569 2574
2570 2575
2571void CalendarView::cancelIncidence(Incidence * inc ) 2576void CalendarView::cancelIncidence(Incidence * inc )
2572{ 2577{
2573 inc->setCancelled( ! inc->cancelled() ); 2578 inc->setCancelled( ! inc->cancelled() );
2574 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); 2579 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED );
2575 updateView(); 2580 updateView();
2576} 2581}
2577void CalendarView::cloneIncidence(Incidence * orgInc ) 2582void CalendarView::cloneIncidence(Incidence * orgInc )
2578{ 2583{
2579 Incidence * newInc = orgInc->clone(); 2584 Incidence * newInc = orgInc->clone();
2580 newInc->recreate(); 2585 newInc->recreate();
2581 2586
2582 if ( newInc->type() == "Todo" ) { 2587 if ( newInc->type() == "Todo" ) {
2583 Todo* t = (Todo*) newInc; 2588 Todo* t = (Todo*) newInc;
2584 showTodoEditor(); 2589 showTodoEditor();
2585 mTodoEditor->editTodo( t ); 2590 mTodoEditor->editTodo( t );
2586 if ( mTodoEditor->exec() ) { 2591 if ( mTodoEditor->exec() ) {
2587 mCalendar->addTodo( t ); 2592 mCalendar->addTodo( t );
2588 updateView(); 2593 updateView();
2589 } else { 2594 } else {
2590 delete t; 2595 delete t;
2591 } 2596 }
2592 } 2597 }
2593 else { 2598 else {
2594 Event* e = (Event*) newInc; 2599 Event* e = (Event*) newInc;
2595 showEventEditor(); 2600 showEventEditor();
2596 mEventEditor->editEvent( e ); 2601 mEventEditor->editEvent( e );
2597 if ( mEventEditor->exec() ) { 2602 if ( mEventEditor->exec() ) {
2598 mCalendar->addEvent( e ); 2603 mCalendar->addEvent( e );
2599 updateView(); 2604 updateView();
2600 } else { 2605 } else {
2601 delete e; 2606 delete e;
2602 } 2607 }
2603 } 2608 }
2604} 2609}
2605 2610
2606void CalendarView::newEvent() 2611void CalendarView::newEvent()
2607{ 2612{
2608 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 2613 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
2609 KOAgendaView *aView = mViewManager->agendaView(); 2614 KOAgendaView *aView = mViewManager->agendaView();
2610 if (aView) { 2615 if (aView) {
2611 if (aView->selectionStart().isValid()) { 2616 if (aView->selectionStart().isValid()) {
2612 if (aView->selectedIsAllDay()) { 2617 if (aView->selectedIsAllDay()) {
2613 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 2618 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
2614 } else { 2619 } else {
2615 newEvent(aView->selectionStart(),aView->selectionEnd()); 2620 newEvent(aView->selectionStart(),aView->selectionEnd());
2616 } 2621 }
2617 return; 2622 return;
2618 } 2623 }
2619 } 2624 }
2620 2625
2621 QDate date = mNavigator->selectedDates().first(); 2626 QDate date = mNavigator->selectedDates().first();
2622 QDateTime current = QDateTime::currentDateTime(); 2627 QDateTime current = QDateTime::currentDateTime();
2623 if ( date <= current.date() ) { 2628 if ( date <= current.date() ) {
2624 int hour = current.time().hour() +1; 2629 int hour = current.time().hour() +1;
2625 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 2630 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
2626 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 2631 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
2627 } else 2632 } else
2628 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 2633 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
2629 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 2634 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
2630 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 2635 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
2631} 2636}
2632 2637
2633void CalendarView::newEvent(QDateTime fh) 2638void CalendarView::newEvent(QDateTime fh)
2634{ 2639{
2635 newEvent(fh, 2640 newEvent(fh,
2636 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 2641 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
2637} 2642}
2638 2643
2639void CalendarView::newEvent(QDate dt) 2644void CalendarView::newEvent(QDate dt)
2640{ 2645{
2641 newEvent(QDateTime(dt, QTime(0,0,0)), 2646 newEvent(QDateTime(dt, QTime(0,0,0)),
2642 QDateTime(dt, QTime(0,0,0)), true); 2647 QDateTime(dt, QTime(0,0,0)), true);
2643} 2648}
2644 2649
2645void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 2650void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
2646{ 2651{
2647 2652
2648 showEventEditor(); 2653 showEventEditor();
2649 mEventEditor->newEvent(fromHint,toHint,allDay); 2654 mEventEditor->newEvent(fromHint,toHint,allDay);
2650 if ( mFilterView->filtersEnabled() ) { 2655 if ( mFilterView->filtersEnabled() ) {
2651 CalFilter *filter = mFilterView->selectedFilter(); 2656 CalFilter *filter = mFilterView->selectedFilter();
2652 if (filter && filter->showCategories()) { 2657 if (filter && filter->showCategories()) {
2653 mEventEditor->setCategories(filter->categoryList().join(",") ); 2658 mEventEditor->setCategories(filter->categoryList().join(",") );
2654 } 2659 }
2655 if ( filter ) 2660 if ( filter )
2656 mEventEditor->setSecrecy( filter->getSecrecy() ); 2661 mEventEditor->setSecrecy( filter->getSecrecy() );
2657 } 2662 }
2658} 2663}
2659void CalendarView::todoAdded(Todo * t) 2664void CalendarView::todoAdded(Todo * t)
2660{ 2665{
2661 2666
2662 changeTodoDisplay ( t ,KOGlobals::EVENTADDED); 2667 changeTodoDisplay ( t ,KOGlobals::EVENTADDED);
2663 updateTodoViews(); 2668 updateTodoViews();
2664} 2669}
2665void CalendarView::todoChanged(Todo * t) 2670void CalendarView::todoChanged(Todo * t)
2666{ 2671{
2667 emit todoModified( t, 4 ); 2672 emit todoModified( t, 4 );
2668 // updateTodoViews(); 2673 // updateTodoViews();
2669} 2674}
2670void CalendarView::todoToBeDeleted(Todo *) 2675void CalendarView::todoToBeDeleted(Todo *)
2671{ 2676{
2672 //qDebug("todoToBeDeleted(Todo *) "); 2677 //qDebug("todoToBeDeleted(Todo *) ");
2673 updateTodoViews(); 2678 updateTodoViews();
2674} 2679}
2675void CalendarView::todoDeleted() 2680void CalendarView::todoDeleted()
2676{ 2681{
2677 //qDebug(" todoDeleted()"); 2682 //qDebug(" todoDeleted()");
2678 updateTodoViews(); 2683 updateTodoViews();
2679} 2684}
2680 2685
2681 2686
2682 2687
2683void CalendarView::newTodo() 2688void CalendarView::newTodo()
2684{ 2689{
2685 2690
2686 showTodoEditor(); 2691 showTodoEditor();
2687 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),0,true); 2692 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),0,true);
2688 if ( mFilterView->filtersEnabled() ) { 2693 if ( mFilterView->filtersEnabled() ) {
2689 CalFilter *filter = mFilterView->selectedFilter(); 2694 CalFilter *filter = mFilterView->selectedFilter();
2690 if (filter && filter->showCategories()) { 2695 if (filter && filter->showCategories()) {
2691 mTodoEditor->setCategories(filter->categoryList().join(",") ); 2696 mTodoEditor->setCategories(filter->categoryList().join(",") );
2692 } 2697 }
2693 if ( filter ) 2698 if ( filter )
2694 mTodoEditor->setSecrecy( filter->getSecrecy() ); 2699 mTodoEditor->setSecrecy( filter->getSecrecy() );
2695 } 2700 }
2696} 2701}
2697 2702
2698void CalendarView::newSubTodo() 2703void CalendarView::newSubTodo()
2699{ 2704{
2700 Todo *todo = selectedTodo(); 2705 Todo *todo = selectedTodo();
2701 if ( todo ) newSubTodo( todo ); 2706 if ( todo ) newSubTodo( todo );
2702} 2707}
2703 2708
2704void CalendarView::newSubTodo(Todo *parentEvent) 2709void CalendarView::newSubTodo(Todo *parentEvent)
2705{ 2710{
2706 2711
2707 showTodoEditor(); 2712 showTodoEditor();
2708 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),parentEvent,true); 2713 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),parentEvent,true);
2709} 2714}
2710 2715
2711void CalendarView::newFloatingEvent() 2716void CalendarView::newFloatingEvent()
2712{ 2717{
2713 DateList tmpList = mNavigator->selectedDates(); 2718 DateList tmpList = mNavigator->selectedDates();
2714 QDate date = tmpList.first(); 2719 QDate date = tmpList.first();
2715 2720
2716 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), 2721 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ),
2717 QDateTime( date, QTime( 12, 0, 0 ) ), true ); 2722 QDateTime( date, QTime( 12, 0, 0 ) ), true );
2718} 2723}
2719 2724
2720 2725
2721void CalendarView::editEvent( Event *event ) 2726void CalendarView::editEvent( Event *event )
2722{ 2727{
2723 2728
2724 if ( !event ) return; 2729 if ( !event ) return;
2725 if ( event->isReadOnly() ) { 2730 if ( event->isReadOnly() ) {
2726 showEvent( event ); 2731 showEvent( event );
2727 return; 2732 return;
2728 } 2733 }
2729 showEventEditor(); 2734 showEventEditor();
2730 mEventEditor->editEvent( event , mFlagEditDescription); 2735 mEventEditor->editEvent( event , mFlagEditDescription);
2731} 2736}
2732void CalendarView::editJournal( Journal *jour ) 2737void CalendarView::editJournal( Journal *jour )
2733{ 2738{
2734 if ( !jour ) return; 2739 if ( !jour ) return;
2735 mDialogManager->hideSearchDialog(); 2740 mDialogManager->hideSearchDialog();
2736 mViewManager->showJournalView(); 2741 mViewManager->showJournalView();
2737 mNavigator->slotDaySelect( jour->dtStart().date() ); 2742 mNavigator->slotDaySelect( jour->dtStart().date() );
2738} 2743}
2739void CalendarView::editTodo( Todo *todo ) 2744void CalendarView::editTodo( Todo *todo )
2740{ 2745{
2741 if ( !todo ) return; 2746 if ( !todo ) return;
2742 2747
2743 if ( todo->isReadOnly() ) { 2748 if ( todo->isReadOnly() ) {
2744 showTodo( todo ); 2749 showTodo( todo );
2745 return; 2750 return;
2746 } 2751 }
2747 showTodoEditor(); 2752 showTodoEditor();
2748 mTodoEditor->editTodo( todo ,mFlagEditDescription); 2753 mTodoEditor->editTodo( todo ,mFlagEditDescription);
2749 2754
2750} 2755}
2751 2756
2752KOEventViewerDialog* CalendarView::getEventViewerDialog() 2757KOEventViewerDialog* CalendarView::getEventViewerDialog()
2753{ 2758{
2754 if ( !mEventViewerDialog ) { 2759 if ( !mEventViewerDialog ) {
2755 mEventViewerDialog = new KOEventViewerDialog(this); 2760 mEventViewerDialog = new KOEventViewerDialog(this);
2756 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); 2761 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) );
2757 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); 2762 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig()));
2758 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), 2763 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)),
2759 dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); 2764 dateNavigator(), SLOT( selectWeek( const QDate & ) ) );
2760 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), 2765 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ),
2761 viewManager(), SLOT( showAgendaView( bool ) ) ); 2766 viewManager(), SLOT( showAgendaView( bool ) ) );
2762 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ), 2767 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ),
2763 this, SLOT( todoChanged(Todo *) ) ); 2768 this, SLOT( todoChanged(Todo *) ) );
2764 mEventViewerDialog->resize( 640, 480 ); 2769 mEventViewerDialog->resize( 640, 480 );
2765 2770
2766 } 2771 }
2767 return mEventViewerDialog; 2772 return mEventViewerDialog;
2768} 2773}
2769void CalendarView::showEvent(Event *event) 2774void CalendarView::showEvent(Event *event)
2770{ 2775{
2771 getEventViewerDialog()->setEvent(event); 2776 getEventViewerDialog()->setEvent(event);
2772 getEventViewerDialog()->showMe(); 2777 getEventViewerDialog()->showMe();
2773} 2778}
2774 2779
2775void CalendarView::showTodo(Todo *event) 2780void CalendarView::showTodo(Todo *event)
2776{ 2781{
2777 getEventViewerDialog()->setTodo(event); 2782 getEventViewerDialog()->setTodo(event);
2778 getEventViewerDialog()->showMe(); 2783 getEventViewerDialog()->showMe();
2779} 2784}
2780void CalendarView::showJournal( Journal *jour ) 2785void CalendarView::showJournal( Journal *jour )
2781{ 2786{
2782 getEventViewerDialog()->setJournal(jour); 2787 getEventViewerDialog()->setJournal(jour);
2783 getEventViewerDialog()->showMe(); 2788 getEventViewerDialog()->showMe();
2784 2789
2785} 2790}
2786// void CalendarView::todoModified (Todo *event, int changed) 2791// void CalendarView::todoModified (Todo *event, int changed)
2787// { 2792// {
2788// // if (mDialogList.find (event) != mDialogList.end ()) { 2793// // if (mDialogList.find (event) != mDialogList.end ()) {
2789// // kdDebug() << "Todo modified and open" << endl; 2794// // kdDebug() << "Todo modified and open" << endl;
2790// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event]; 2795// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event];
2791// // temp->modified (changed); 2796// // temp->modified (changed);
2792 2797
2793// // } 2798// // }
2794 2799
2795// mViewManager->updateView(); 2800// mViewManager->updateView();
2796// } 2801// }
2797 2802
2798void CalendarView::appointment_show() 2803void CalendarView::appointment_show()
2799{ 2804{
2800 Event *anEvent = 0; 2805 Event *anEvent = 0;
2801 2806
2802 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2807 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2803 2808
2804 if (mViewManager->currentView()->isEventView()) { 2809 if (mViewManager->currentView()->isEventView()) {
2805 if ( incidence && incidence->type() == "Event" ) { 2810 if ( incidence && incidence->type() == "Event" ) {
2806 anEvent = static_cast<Event *>(incidence); 2811 anEvent = static_cast<Event *>(incidence);
2807 } 2812 }
2808 } 2813 }
2809 2814
2810 if (!anEvent) { 2815 if (!anEvent) {
2811 KNotifyClient::beep(); 2816 KNotifyClient::beep();
2812 return; 2817 return;
2813 } 2818 }
2814 2819
2815 showEvent(anEvent); 2820 showEvent(anEvent);
2816} 2821}
2817 2822
2818void CalendarView::appointment_edit() 2823void CalendarView::appointment_edit()
2819{ 2824{
2820 Event *anEvent = 0; 2825 Event *anEvent = 0;
2821 2826
2822 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2827 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2823 2828
2824 if (mViewManager->currentView()->isEventView()) { 2829 if (mViewManager->currentView()->isEventView()) {
2825 if ( incidence && incidence->type() == "Event" ) { 2830 if ( incidence && incidence->type() == "Event" ) {
2826 anEvent = static_cast<Event *>(incidence); 2831 anEvent = static_cast<Event *>(incidence);
2827 } 2832 }
2828 } 2833 }
2829 2834
2830 if (!anEvent) { 2835 if (!anEvent) {
2831 KNotifyClient::beep(); 2836 KNotifyClient::beep();
2832 return; 2837 return;
2833 } 2838 }
2834 2839
2835 editEvent(anEvent); 2840 editEvent(anEvent);
2836} 2841}
2837 2842
2838void CalendarView::appointment_delete() 2843void CalendarView::appointment_delete()
2839{ 2844{
2840 Event *anEvent = 0; 2845 Event *anEvent = 0;
2841 2846
2842 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2847 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2843 2848
2844 if (mViewManager->currentView()->isEventView()) { 2849 if (mViewManager->currentView()->isEventView()) {
2845 if ( incidence && incidence->type() == "Event" ) { 2850 if ( incidence && incidence->type() == "Event" ) {
2846 anEvent = static_cast<Event *>(incidence); 2851 anEvent = static_cast<Event *>(incidence);
2847 } 2852 }
2848 } 2853 }
2849 2854
2850 if (!anEvent) { 2855 if (!anEvent) {
2851 KNotifyClient::beep(); 2856 KNotifyClient::beep();
2852 return; 2857 return;
2853 } 2858 }
2854 2859
2855 deleteEvent(anEvent); 2860 deleteEvent(anEvent);
2856} 2861}
2857 2862
2858void CalendarView::todo_resub( Todo * parent, Todo * sub ) 2863void CalendarView::todo_resub( Todo * parent, Todo * sub )
2859{ 2864{
2860 if (!sub) return; 2865 if (!sub) return;
2861 if (!parent) return; 2866 if (!parent) return;
2862 if ( sub->relatedTo() ) 2867 if ( sub->relatedTo() )
2863 sub->relatedTo()->removeRelation(sub); 2868 sub->relatedTo()->removeRelation(sub);
2864 sub->setRelatedTo(parent); 2869 sub->setRelatedTo(parent);
2865 sub->setRelatedToUid(parent->uid()); 2870 sub->setRelatedToUid(parent->uid());
2866 parent->addRelation(sub); 2871 parent->addRelation(sub);
2867 sub->updated(); 2872 sub->updated();
2868 parent->updated(); 2873 parent->updated();
2869 setModified(true); 2874 setModified(true);
2870 updateView(); 2875 updateView();
2871} 2876}
2872void CalendarView::todo_unsub(Todo *anTodo ) 2877void CalendarView::todo_unsub(Todo *anTodo )
2873{ 2878{
2874 // Todo *anTodo = selectedTodo(); 2879 // Todo *anTodo = selectedTodo();
2875 if (!anTodo) return; 2880 if (!anTodo) return;
2876 if (!anTodo->relatedTo()) return; 2881 if (!anTodo->relatedTo()) return;
2877 anTodo->relatedTo()->removeRelation(anTodo); 2882 anTodo->relatedTo()->removeRelation(anTodo);
2878 anTodo->setRelatedTo(0); 2883 anTodo->setRelatedTo(0);
2879 anTodo->updated(); 2884 anTodo->updated();
2880 anTodo->setRelatedToUid(""); 2885 anTodo->setRelatedToUid("");
2881 setModified(true); 2886 setModified(true);
2882 updateView(); 2887 updateView();
2883} 2888}
2884 2889
2885void CalendarView::deleteTodo(Todo *todo) 2890void CalendarView::deleteTodo(Todo *todo)
2886{ 2891{
2887 if (!todo) { 2892 if (!todo) {
2888 KNotifyClient::beep(); 2893 KNotifyClient::beep();
2889 return; 2894 return;
2890 } 2895 }
2891 if (KOPrefs::instance()->mConfirm) { 2896 if (KOPrefs::instance()->mConfirm) {
2892 QString text = todo->summary().left(20); 2897 QString text = todo->summary().left(20);
2893 if (!todo->relations().isEmpty()) { 2898 if (!todo->relations().isEmpty()) {
2894 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!"); 2899 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!");
2895 2900
2896 } 2901 }
2897 switch (msgItemDelete(text)) { 2902 switch (msgItemDelete(text)) {
2898 case KMessageBox::Continue: // OK 2903 case KMessageBox::Continue: // OK
2899 bool deleteT = false; 2904 bool deleteT = false;
2900 if (!todo->relations().isEmpty()) { 2905 if (!todo->relations().isEmpty()) {
2901 deleteT = removeCompletedSubTodos( todo ); 2906 deleteT = removeCompletedSubTodos( todo );
2902 } 2907 }
2903 // deleteT == true: todo already deleted in removeCompletedSubTodos 2908 // deleteT == true: todo already deleted in removeCompletedSubTodos
2904 if ( !deleteT ) { 2909 if ( !deleteT ) {
2905 checkExternalId( todo ); 2910 checkExternalId( todo );
2906 calendar()->deleteTodo(todo); 2911 calendar()->deleteTodo(todo);
2907 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 2912 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2908 updateView(); 2913 updateView();
2909 } 2914 }
2910 break; 2915 break;
2911 } // switch 2916 } // switch
2912 } else { 2917 } else {
2913 checkExternalId( todo ); 2918 checkExternalId( todo );
2914 mCalendar->deleteTodo(todo); 2919 mCalendar->deleteTodo(todo);
2915 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 2920 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2916 updateView(); 2921 updateView();
2917 } 2922 }
2918 2923
2919 emit updateSearchDialog(); 2924 emit updateSearchDialog();
2920} 2925}
2921void CalendarView::deleteJournal(Journal *jour) 2926void CalendarView::deleteJournal(Journal *jour)
2922{ 2927{
2923 if (!jour) { 2928 if (!jour) {
2924 KNotifyClient::beep(); 2929 KNotifyClient::beep();
2925 return; 2930 return;
2926 } 2931 }
2927 if (KOPrefs::instance()->mConfirm) { 2932 if (KOPrefs::instance()->mConfirm) {
2928 switch (msgItemDelete( jour->description().left(20))) { 2933 switch (msgItemDelete( jour->description().left(20))) {
2929 case KMessageBox::Continue: // OK 2934 case KMessageBox::Continue: // OK
2930 calendar()->deleteJournal(jour); 2935 calendar()->deleteJournal(jour);
2931 updateView(); 2936 updateView();
2932 break; 2937 break;
2933 } // switch 2938 } // switch
2934 } else { 2939 } else {
2935 calendar()->deleteJournal(jour);; 2940 calendar()->deleteJournal(jour);;
2936 updateView(); 2941 updateView();
2937 } 2942 }
2938 emit updateSearchDialog(); 2943 emit updateSearchDialog();
2939} 2944}
2940 2945
2941void CalendarView::deleteEvent(Event *anEvent) 2946void CalendarView::deleteEvent(Event *anEvent)
2942{ 2947{
2943 if (!anEvent) { 2948 if (!anEvent) {
2944 KNotifyClient::beep(); 2949 KNotifyClient::beep();
2945 return; 2950 return;
2946 } 2951 }
2947 2952
2948 if (anEvent->recurrence()->doesRecur()) { 2953 if (anEvent->recurrence()->doesRecur()) {
2949 QDate itemDate = mViewManager->currentSelectionDate(); 2954 QDate itemDate = mViewManager->currentSelectionDate();
2950 int km; 2955 int km;
2951 if (!itemDate.isValid()) { 2956 if (!itemDate.isValid()) {
2952 //kdDebug() << "Date Not Valid" << endl; 2957 //kdDebug() << "Date Not Valid" << endl;
2953 if (KOPrefs::instance()->mConfirm) { 2958 if (KOPrefs::instance()->mConfirm) {
2954 km = KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) + 2959 km = KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) +
2955 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), 2960 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"),
2956 i18n("KO/Pi Confirmation"),i18n("Delete All")); 2961 i18n("KO/Pi Confirmation"),i18n("Delete All"));
2957 if ( km == KMessageBox::Continue ) 2962 if ( km == KMessageBox::Continue )
2958 km = KMessageBox::No; // No = all below 2963 km = KMessageBox::No; // No = all below
2959 } else 2964 } else
2960 km = KMessageBox::No; 2965 km = KMessageBox::No;
2961 } else { 2966 } else {
2962 km = KMessageBox::warningYesNoCancel(this,anEvent->summary().left(25) + 2967 km = KMessageBox::warningYesNoCancel(this,anEvent->summary().left(25) +
2963 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ 2968 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+
2964 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), 2969 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"),
2965 i18n("KO/Pi Confirmation"),i18n("Current"), 2970 i18n("KO/Pi Confirmation"),i18n("Current"),
2966 i18n("All")); 2971 i18n("All"));
2967 } 2972 }
2968 switch(km) { 2973 switch(km) {
2969 2974
2970 case KMessageBox::No: // Continue // all 2975 case KMessageBox::No: // Continue // all
2971 //qDebug("KMessageBox::No "); 2976 //qDebug("KMessageBox::No ");
2972 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2977 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2973 schedule(Scheduler::Cancel,anEvent); 2978 schedule(Scheduler::Cancel,anEvent);
2974 2979
2975 checkExternalId( anEvent); 2980 checkExternalId( anEvent);
2976 mCalendar->deleteEvent(anEvent); 2981 mCalendar->deleteEvent(anEvent);
2977 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); 2982 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED);
2978 break; 2983 break;
2979 2984
2980 // Disabled because it does not work 2985 // Disabled because it does not work
2981 //#if 0 2986 //#if 0
2982 case KMessageBox::Yes: // just this one 2987 case KMessageBox::Yes: // just this one
2983 //QDate qd = mNavigator->selectedDates().first(); 2988 //QDate qd = mNavigator->selectedDates().first();
2984 //if (!qd.isValid()) { 2989 //if (!qd.isValid()) {
2985 // kdDebug() << "no date selected, or invalid date" << endl; 2990 // kdDebug() << "no date selected, or invalid date" << endl;
2986 // KNotifyClient::beep(); 2991 // KNotifyClient::beep();
2987 // return; 2992 // return;
2988 //} 2993 //}
2989 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); 2994 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1);
2990 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { 2995 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) {
2991 anEvent->addExDate(itemDate); 2996 anEvent->addExDate(itemDate);
2992 int duration = anEvent->recurrence()->duration(); 2997 int duration = anEvent->recurrence()->duration();
2993 if ( duration > 0 ) { 2998 if ( duration > 0 ) {
2994 anEvent->recurrence()->setDuration( duration - 1 ); 2999 anEvent->recurrence()->setDuration( duration - 1 );
2995 } 3000 }
2996 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); 3001 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED);
2997 } 3002 }
2998 break; 3003 break;
2999 //#endif 3004 //#endif
3000 } // switch 3005 } // switch
3001 } else { 3006 } else {
3002 if (KOPrefs::instance()->mConfirm) { 3007 if (KOPrefs::instance()->mConfirm) {
3003 switch (KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) + 3008 switch (KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) +
3004 i18n("\nAre you sure you want\nto delete this event?"), 3009 i18n("\nAre you sure you want\nto delete this event?"),
3005 i18n("KO/Pi Confirmation"),i18n("Delete"))) { 3010 i18n("KO/Pi Confirmation"),i18n("Delete"))) {
3006 case KMessageBox::Continue: // OK 3011 case KMessageBox::Continue: // OK
3007 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 3012 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
3008 schedule(Scheduler::Cancel,anEvent); 3013 schedule(Scheduler::Cancel,anEvent);
3009 checkExternalId( anEvent); 3014 checkExternalId( anEvent);
3010 mCalendar->deleteEvent(anEvent); 3015 mCalendar->deleteEvent(anEvent);
3011 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 3016 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
3012 break; 3017 break;
3013 } // switch 3018 } // switch
3014 } else { 3019 } else {
3015 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 3020 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
3016 schedule(Scheduler::Cancel,anEvent); 3021 schedule(Scheduler::Cancel,anEvent);
3017 checkExternalId( anEvent); 3022 checkExternalId( anEvent);
3018 mCalendar->deleteEvent(anEvent); 3023 mCalendar->deleteEvent(anEvent);
3019 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 3024 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
3020 } 3025 }
3021 } // if-else 3026 } // if-else
3022 emit updateSearchDialog(); 3027 emit updateSearchDialog();
3023} 3028}
3024 3029
3025bool CalendarView::deleteEvent(const QString &uid) 3030bool CalendarView::deleteEvent(const QString &uid)
3026{ 3031{
3027 Event *ev = mCalendar->event(uid); 3032 Event *ev = mCalendar->event(uid);
3028 if (ev) { 3033 if (ev) {
3029 deleteEvent(ev); 3034 deleteEvent(ev);
3030 return true; 3035 return true;
3031 } else { 3036 } else {
3032 return false; 3037 return false;
3033 } 3038 }
3034} 3039}
3035 3040
3036/*****************************************************************************/ 3041/*****************************************************************************/
3037 3042
3038void CalendarView::action_mail() 3043void CalendarView::action_mail()
3039{ 3044{
3040#ifndef KORG_NOMAIL 3045#ifndef KORG_NOMAIL
3041 KOMailClient mailClient; 3046 KOMailClient mailClient;
3042 3047
3043 Incidence *incidence = currentSelection(); 3048 Incidence *incidence = currentSelection();
3044 3049
3045 if (!incidence) { 3050 if (!incidence) {
3046 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 3051 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
3047 return; 3052 return;
3048 } 3053 }
3049 if(incidence->attendeeCount() == 0 ) { 3054 if(incidence->attendeeCount() == 0 ) {
3050 KMessageBox::sorry(this, 3055 KMessageBox::sorry(this,
3051 i18n("Can't generate mail:\nNo attendees defined.\n")); 3056 i18n("Can't generate mail:\nNo attendees defined.\n"));
3052 return; 3057 return;
3053 } 3058 }
3054 3059
3055 CalendarLocal cal_tmp; 3060 CalendarLocal cal_tmp;
3056 Event *event = 0; 3061 Event *event = 0;
3057 Event *ev = 0; 3062 Event *ev = 0;
3058 if ( incidence && incidence->type() == "Event" ) { 3063 if ( incidence && incidence->type() == "Event" ) {
3059 event = static_cast<Event *>(incidence); 3064 event = static_cast<Event *>(incidence);
3060 ev = new Event(*event); 3065 ev = new Event(*event);
3061 cal_tmp.addEvent(ev); 3066 cal_tmp.addEvent(ev);
3062 } 3067 }
3063 ICalFormat mForm(); 3068 ICalFormat mForm();
3064 QString attachment = mForm.toString( &cal_tmp ); 3069 QString attachment = mForm.toString( &cal_tmp );
3065 if (ev) delete(ev); 3070 if (ev) delete(ev);
3066 3071
3067 mailClient.mailAttendees(currentSelection(), attachment); 3072 mailClient.mailAttendees(currentSelection(), attachment);
3068 3073
3069#endif 3074#endif
3070 3075
3071#if 0 3076#if 0
3072 Event *anEvent = 0; 3077 Event *anEvent = 0;
3073 if (mViewManager->currentView()->isEventView()) { 3078 if (mViewManager->currentView()->isEventView()) {
3074 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first()); 3079 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first());
3075 } 3080 }
3076 3081
3077 if (!anEvent) { 3082 if (!anEvent) {
3078 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 3083 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
3079 return; 3084 return;
3080 } 3085 }
3081 if(anEvent->attendeeCount() == 0 ) { 3086 if(anEvent->attendeeCount() == 0 ) {
3082 KMessageBox::sorry(this, 3087 KMessageBox::sorry(this,
3083 i18n("Can't generate mail:\nNo attendees defined.\n")); 3088 i18n("Can't generate mail:\nNo attendees defined.\n"));
3084 return; 3089 return;
3085 } 3090 }
3086 3091
3087 mailobject.emailEvent(anEvent); 3092 mailobject.emailEvent(anEvent);
3088#endif 3093#endif
3089} 3094}
3090 3095
3091 3096
3092void CalendarView::schedule_publish(Incidence *incidence) 3097void CalendarView::schedule_publish(Incidence *incidence)
3093{ 3098{
3094 Event *event = 0; 3099 Event *event = 0;
3095 Todo *todo = 0; 3100 Todo *todo = 0;
3096 3101
3097 if (incidence == 0) { 3102 if (incidence == 0) {
3098 incidence = mViewManager->currentView()->selectedIncidences().first(); 3103 incidence = mViewManager->currentView()->selectedIncidences().first();
3099 if (incidence == 0) { 3104 if (incidence == 0) {
3100 incidence = mTodoList->selectedIncidences().first(); 3105 incidence = mTodoList->selectedIncidences().first();
3101 } 3106 }
3102 } 3107 }
3103 if ( incidence && incidence->type() == "Event" ) { 3108 if ( incidence && incidence->type() == "Event" ) {
3104 event = static_cast<Event *>(incidence); 3109 event = static_cast<Event *>(incidence);
3105 } else { 3110 } else {
3106 if ( incidence && incidence->type() == "Todo" ) { 3111 if ( incidence && incidence->type() == "Todo" ) {
3107 todo = static_cast<Todo *>(incidence); 3112 todo = static_cast<Todo *>(incidence);
3108 } 3113 }
3109 } 3114 }
3110 3115
3111 if (!event && !todo) { 3116 if (!event && !todo) {
3112 KMessageBox::sorry(this,i18n("No event selected.")); 3117 KMessageBox::sorry(this,i18n("No event selected."));
3113 return; 3118 return;
3114 } 3119 }
3115 3120
3116 PublishDialog *publishdlg = new PublishDialog(); 3121 PublishDialog *publishdlg = new PublishDialog();
3117 if (incidence->attendeeCount()>0) { 3122 if (incidence->attendeeCount()>0) {
3118 QPtrList<Attendee> attendees = incidence->attendees(); 3123 QPtrList<Attendee> attendees = incidence->attendees();
3119 attendees.first(); 3124 attendees.first();
3120 while ( attendees.current()!=0 ) { 3125 while ( attendees.current()!=0 ) {
3121 publishdlg->addAttendee(attendees.current()); 3126 publishdlg->addAttendee(attendees.current());
3122 attendees.next(); 3127 attendees.next();
3123 } 3128 }
3124 } 3129 }
3125 bool send = true; 3130 bool send = true;
3126 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) { 3131 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) {
3127 if ( publishdlg->exec() != QDialog::Accepted ) 3132 if ( publishdlg->exec() != QDialog::Accepted )
3128 send = false; 3133 send = false;
3129 } 3134 }
3130 if ( send ) { 3135 if ( send ) {
3131 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 3136 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
3132 if ( event ) { 3137 if ( event ) {
3133 Event *ev = new Event(*event); 3138 Event *ev = new Event(*event);
3134 ev->registerObserver(0); 3139 ev->registerObserver(0);
3135 ev->clearAttendees(); 3140 ev->clearAttendees();
3136 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 3141 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
3137 delete(ev); 3142 delete(ev);
3138 } 3143 }
3139 } else { 3144 } else {
3140 if ( todo ) { 3145 if ( todo ) {
3141 Todo *ev = new Todo(*todo); 3146 Todo *ev = new Todo(*todo);
3142 ev->registerObserver(0); 3147 ev->registerObserver(0);
3143 ev->clearAttendees(); 3148 ev->clearAttendees();
3144 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 3149 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
3145 delete(ev); 3150 delete(ev);
3146 } 3151 }
3147 } 3152 }
3148 } 3153 }
3149 } 3154 }
3150 delete publishdlg; 3155 delete publishdlg;
3151} 3156}
3152 3157
3153void CalendarView::schedule_request(Incidence *incidence) 3158void CalendarView::schedule_request(Incidence *incidence)
3154{ 3159{
3155 schedule(Scheduler::Request,incidence); 3160 schedule(Scheduler::Request,incidence);
3156} 3161}
3157 3162
3158void CalendarView::schedule_refresh(Incidence *incidence) 3163void CalendarView::schedule_refresh(Incidence *incidence)
3159{ 3164{
3160 schedule(Scheduler::Refresh,incidence); 3165 schedule(Scheduler::Refresh,incidence);
3161} 3166}
3162 3167
3163void CalendarView::schedule_cancel(Incidence *incidence) 3168void CalendarView::schedule_cancel(Incidence *incidence)
3164{ 3169{
3165 schedule(Scheduler::Cancel,incidence); 3170 schedule(Scheduler::Cancel,incidence);
3166} 3171}
3167 3172
3168void CalendarView::schedule_add(Incidence *incidence) 3173void CalendarView::schedule_add(Incidence *incidence)
3169{ 3174{
3170 schedule(Scheduler::Add,incidence); 3175 schedule(Scheduler::Add,incidence);
3171} 3176}
3172 3177
3173void CalendarView::schedule_reply(Incidence *incidence) 3178void CalendarView::schedule_reply(Incidence *incidence)
3174{ 3179{
3175 schedule(Scheduler::Reply,incidence); 3180 schedule(Scheduler::Reply,incidence);
3176} 3181}
3177 3182
3178void CalendarView::schedule_counter(Incidence *incidence) 3183void CalendarView::schedule_counter(Incidence *incidence)
3179{ 3184{
3180 schedule(Scheduler::Counter,incidence); 3185 schedule(Scheduler::Counter,incidence);
3181} 3186}
3182 3187
3183void CalendarView::schedule_declinecounter(Incidence *incidence) 3188void CalendarView::schedule_declinecounter(Incidence *incidence)
3184{ 3189{
3185 schedule(Scheduler::Declinecounter,incidence); 3190 schedule(Scheduler::Declinecounter,incidence);
3186} 3191}
3187 3192
3188void CalendarView::schedule_publish_freebusy(int daysToPublish) 3193void CalendarView::schedule_publish_freebusy(int daysToPublish)
3189{ 3194{
3190 QDateTime start = QDateTime::currentDateTime(); 3195 QDateTime start = QDateTime::currentDateTime();
3191 QDateTime end = start.addDays(daysToPublish); 3196 QDateTime end = start.addDays(daysToPublish);
3192 3197
3193 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end); 3198 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end);
3194 freebusy->setOrganizer(KOPrefs::instance()->email()); 3199 freebusy->setOrganizer(KOPrefs::instance()->email());
3195 3200
3196 3201
3197 PublishDialog *publishdlg = new PublishDialog(); 3202 PublishDialog *publishdlg = new PublishDialog();
3198 if ( publishdlg->exec() == QDialog::Accepted ) { 3203 if ( publishdlg->exec() == QDialog::Accepted ) {
3199 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 3204 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
3200 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) { 3205 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) {
3201 delete(freebusy); 3206 delete(freebusy);
3202 } 3207 }
3203 } 3208 }
3204 delete publishdlg; 3209 delete publishdlg;
3205} 3210}
3206 3211
3207void CalendarView::schedule(Scheduler::Method method, Incidence *incidence) 3212void CalendarView::schedule(Scheduler::Method method, Incidence *incidence)
3208{ 3213{
3209 Event *event = 0; 3214 Event *event = 0;
3210 Todo *todo = 0; 3215 Todo *todo = 0;
3211 3216
3212 if (incidence == 0) { 3217 if (incidence == 0) {
3213 incidence = mViewManager->currentView()->selectedIncidences().first(); 3218 incidence = mViewManager->currentView()->selectedIncidences().first();
3214 if (incidence == 0) { 3219 if (incidence == 0) {
3215 incidence = mTodoList->selectedIncidences().first(); 3220 incidence = mTodoList->selectedIncidences().first();
3216 } 3221 }
3217 } 3222 }
3218 if ( incidence && incidence->type() == "Event" ) { 3223 if ( incidence && incidence->type() == "Event" ) {
3219 event = static_cast<Event *>(incidence); 3224 event = static_cast<Event *>(incidence);
3220 } 3225 }
3221 if ( incidence && incidence->type() == "Todo" ) { 3226 if ( incidence && incidence->type() == "Todo" ) {
3222 todo = static_cast<Todo *>(incidence); 3227 todo = static_cast<Todo *>(incidence);
3223 } 3228 }
3224 3229
3225 if (!event && !todo) { 3230 if (!event && !todo) {
3226 KMessageBox::sorry(this,i18n("No event selected.")); 3231 KMessageBox::sorry(this,i18n("No event selected."));
3227 return; 3232 return;
3228 } 3233 }
3229 3234
3230 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) { 3235 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) {
3231 KMessageBox::sorry(this,i18n("The event has no attendees.")); 3236 KMessageBox::sorry(this,i18n("The event has no attendees."));
3232 return; 3237 return;
3233 } 3238 }
3234 3239
3235 Event *ev = 0; 3240 Event *ev = 0;
3236 if (event) ev = new Event(*event); 3241 if (event) ev = new Event(*event);
3237 Todo *to = 0; 3242 Todo *to = 0;
3238 if (todo) to = new Todo(*todo); 3243 if (todo) to = new Todo(*todo);
3239 3244
3240 if (method == Scheduler::Reply || method == Scheduler::Refresh) { 3245 if (method == Scheduler::Reply || method == Scheduler::Refresh) {
3241 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 3246 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
3242 if (!me) { 3247 if (!me) {
3243 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails.")); 3248 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails."));
3244 return; 3249 return;
3245 } 3250 }
3246 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) { 3251 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) {
3247 StatusDialog *statdlg = new StatusDialog(this); 3252 StatusDialog *statdlg = new StatusDialog(this);
3248 if (!statdlg->exec()==QDialog::Accepted) return; 3253 if (!statdlg->exec()==QDialog::Accepted) return;
3249 me->setStatus( statdlg->status() ); 3254 me->setStatus( statdlg->status() );
3250 delete(statdlg); 3255 delete(statdlg);
3251 } 3256 }
3252 Attendee *menew = new Attendee(*me); 3257 Attendee *menew = new Attendee(*me);
3253 if (ev) { 3258 if (ev) {
3254 ev->clearAttendees(); 3259 ev->clearAttendees();
3255 ev->addAttendee(menew,false); 3260 ev->addAttendee(menew,false);
3256 } else { 3261 } else {
3257 if (to) { 3262 if (to) {
3258 todo->clearAttendees(); 3263 todo->clearAttendees();
3259 todo->addAttendee(menew,false); 3264 todo->addAttendee(menew,false);
3260 } 3265 }
3261 } 3266 }
3262 } 3267 }
3263 3268
3264 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 3269 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
3265 if (ev) { 3270 if (ev) {
3266 if ( !dlg->addMessage(ev,method) ) delete(ev); 3271 if ( !dlg->addMessage(ev,method) ) delete(ev);
3267 } else { 3272 } else {
3268 if (to) { 3273 if (to) {
3269 if ( !dlg->addMessage(to,method) ) delete(to); 3274 if ( !dlg->addMessage(to,method) ) delete(to);
3270 } 3275 }
3271 } 3276 }
3272} 3277}
3273 3278
3274void CalendarView::openAddressbook() 3279void CalendarView::openAddressbook()
3275{ 3280{
3276 KRun::runCommand("kaddressbook"); 3281 KRun::runCommand("kaddressbook");
3277} 3282}
3278 3283
3279void CalendarView::setModified(bool modified) 3284void CalendarView::setModified(bool modified)
3280{ 3285{
3281 if ( modified ) 3286 if ( modified )
3282 emit signalmodified(); 3287 emit signalmodified();
3283 if (mModified != modified) { 3288 if (mModified != modified) {
3284 mModified = modified; 3289 mModified = modified;
3285 emit modifiedChanged(mModified); 3290 emit modifiedChanged(mModified);
3286 } 3291 }
3287} 3292}
3288 3293
3289bool CalendarView::isReadOnly() 3294bool CalendarView::isReadOnly()
3290{ 3295{
3291 return mReadOnly; 3296 return mReadOnly;
3292} 3297}
3293 3298
3294void CalendarView::setReadOnly(bool readOnly) 3299void CalendarView::setReadOnly(bool readOnly)
3295{ 3300{
3296 if (mReadOnly != readOnly) { 3301 if (mReadOnly != readOnly) {
3297 mReadOnly = readOnly; 3302 mReadOnly = readOnly;
3298 emit readOnlyChanged(mReadOnly); 3303 emit readOnlyChanged(mReadOnly);
3299 } 3304 }
3300} 3305}
3301 3306
3302bool CalendarView::isModified() 3307bool CalendarView::isModified()
3303{ 3308{
3304 return mModified; 3309 return mModified;
3305} 3310}
3306 3311
3307void CalendarView::printSetup() 3312void CalendarView::printSetup()
3308{ 3313{
3309#ifndef KORG_NOPRINTER 3314#ifndef KORG_NOPRINTER
3310 createPrinter(); 3315 createPrinter();
3311 3316
3312 mCalPrinter->setupPrinter(); 3317 mCalPrinter->setupPrinter();
3313#endif 3318#endif
3314} 3319}
3315 3320
3316void CalendarView::print() 3321void CalendarView::print()
3317{ 3322{
3318#ifndef KORG_NOPRINTER 3323#ifndef KORG_NOPRINTER
3319 createPrinter(); 3324 createPrinter();
3320 3325
3321 DateList tmpDateList = mNavigator->selectedDates(); 3326 DateList tmpDateList = mNavigator->selectedDates();
3322 mCalPrinter->print(CalPrinter::Month, 3327 mCalPrinter->print(CalPrinter::Month,
3323 tmpDateList.first(), tmpDateList.last()); 3328 tmpDateList.first(), tmpDateList.last());
3324#endif 3329#endif
3325} 3330}
3326 3331
3327void CalendarView::printPreview() 3332void CalendarView::printPreview()
3328{ 3333{
3329#ifndef KORG_NOPRINTER 3334#ifndef KORG_NOPRINTER
3330 kdDebug() << "CalendarView::printPreview()" << endl; 3335 kdDebug() << "CalendarView::printPreview()" << endl;
3331 3336
3332 createPrinter(); 3337 createPrinter();
3333 3338
3334 DateList tmpDateList = mNavigator->selectedDates(); 3339 DateList tmpDateList = mNavigator->selectedDates();
3335 3340
3336 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(), 3341 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(),
3337 tmpDateList.last()); 3342 tmpDateList.last());
3338#endif 3343#endif
3339} 3344}
3340 3345
3341void CalendarView::exportICalendar() 3346void CalendarView::exportICalendar()
3342{ 3347{
3343 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this); 3348 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this);
3344 3349
3345 // Force correct extension 3350 // Force correct extension
3346 if (filename.right(4) != ".ics") filename += ".ics"; 3351 if (filename.right(4) != ".ics") filename += ".ics";
3347 3352
3348 FileStorage storage( mCalendar, filename, new ICalFormat() ); 3353 FileStorage storage( mCalendar, filename, new ICalFormat() );
3349 storage.save(); 3354 storage.save();
3350} 3355}
3351 3356
3352bool CalendarView::exportVCalendar( QString filename ) 3357bool CalendarView::exportVCalendar( QString filename )
3353{ 3358{
3354 if (mCalendar->journals().count() > 0) { 3359 if (mCalendar->journals().count() > 0) {
3355 int result = KMessageBox::warningContinueCancel(this, 3360 int result = KMessageBox::warningContinueCancel(this,
3356 i18n("The journal entries can not be\nexported to a vCalendar file."), 3361 i18n("The journal entries can not be\nexported to a vCalendar file."),
3357 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), 3362 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"),
3358 true); 3363 true);
3359 if (result != KMessageBox::Continue) return false; 3364 if (result != KMessageBox::Continue) return false;
3360 } 3365 }
3361 3366
3362 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this); 3367 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this);
3363 3368
3364 // Force correct extension 3369 // Force correct extension
3365 if (filename.right(4) != ".vcs") filename += ".vcs"; 3370 if (filename.right(4) != ".vcs") filename += ".vcs";
3366 3371
3367 FileStorage storage( mCalendar, filename, new VCalFormat ); 3372 FileStorage storage( mCalendar, filename, new VCalFormat );
3368 return storage.save(); 3373 return storage.save();
3369 3374
3370} 3375}
3371 3376
3372void CalendarView::eventUpdated(Incidence *) 3377void CalendarView::eventUpdated(Incidence *)
3373{ 3378{
3374 setModified(); 3379 setModified();
3375 // Don't call updateView here. The code, which has caused the update of the 3380 // Don't call updateView here. The code, which has caused the update of the
3376 // event is responsible for updating the view. 3381 // event is responsible for updating the view.
3377 // updateView(); 3382 // updateView();
3378} 3383}
3379 3384
3380void CalendarView::adaptNavigationUnits() 3385void CalendarView::adaptNavigationUnits()
3381{ 3386{
3382 if (mViewManager->currentView()->isEventView()) { 3387 if (mViewManager->currentView()->isEventView()) {
3383 int days = mViewManager->currentView()->currentDateCount(); 3388 int days = mViewManager->currentView()->currentDateCount();
3384 if (days == 1) { 3389 if (days == 1) {
3385 emit changeNavStringPrev(i18n("&Previous Day")); 3390 emit changeNavStringPrev(i18n("&Previous Day"));
3386 emit changeNavStringNext(i18n("&Next Day")); 3391 emit changeNavStringNext(i18n("&Next Day"));
3387 } else { 3392 } else {
3388 emit changeNavStringPrev(i18n("&Previous Week")); 3393 emit changeNavStringPrev(i18n("&Previous Week"));
3389 emit changeNavStringNext(i18n("&Next Week")); 3394 emit changeNavStringNext(i18n("&Next Week"));
3390 } 3395 }
3391 } 3396 }
3392} 3397}
3393 3398
3394void CalendarView::processMainViewSelection( Incidence *incidence ) 3399void CalendarView::processMainViewSelection( Incidence *incidence )
3395{ 3400{
3396 if ( incidence ) mTodoList->clearSelection(); 3401 if ( incidence ) mTodoList->clearSelection();
3397 processIncidenceSelection( incidence ); 3402 processIncidenceSelection( incidence );
3398} 3403}
3399 3404
3400void CalendarView::processTodoListSelection( Incidence *incidence ) 3405void CalendarView::processTodoListSelection( Incidence *incidence )
3401{ 3406{
3402 if ( incidence && mViewManager->currentView() ) { 3407 if ( incidence && mViewManager->currentView() ) {
3403 mViewManager->currentView()->clearSelection(); 3408 mViewManager->currentView()->clearSelection();
3404 } 3409 }
3405 processIncidenceSelection( incidence ); 3410 processIncidenceSelection( incidence );
3406} 3411}
3407 3412
3408void CalendarView::processIncidenceSelection( Incidence *incidence ) 3413void CalendarView::processIncidenceSelection( Incidence *incidence )
3409{ 3414{
3410 if ( incidence == mSelectedIncidence ) return; 3415 if ( incidence == mSelectedIncidence ) return;
3411 3416
3412 mSelectedIncidence = incidence; 3417 mSelectedIncidence = incidence;
3413 3418
3414 emit incidenceSelected( mSelectedIncidence ); 3419 emit incidenceSelected( mSelectedIncidence );
3415 3420
3416 if ( incidence && incidence->type() == "Event" ) { 3421 if ( incidence && incidence->type() == "Event" ) {
3417 Event *event = static_cast<Event *>( incidence ); 3422 Event *event = static_cast<Event *>( incidence );
3418 if ( event->organizer() == KOPrefs::instance()->email() ) { 3423 if ( event->organizer() == KOPrefs::instance()->email() ) {
3419 emit organizerEventsSelected( true ); 3424 emit organizerEventsSelected( true );
3420 } else { 3425 } else {
3421 emit organizerEventsSelected(false); 3426 emit organizerEventsSelected(false);
3422 } 3427 }
3423 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 3428 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
3424 KOPrefs::instance()->email() ) ) { 3429 KOPrefs::instance()->email() ) ) {
3425 emit groupEventsSelected( true ); 3430 emit groupEventsSelected( true );
3426 } else { 3431 } else {
3427 emit groupEventsSelected(false); 3432 emit groupEventsSelected(false);
3428 } 3433 }
3429 return; 3434 return;
3430 } else { 3435 } else {
3431 if ( incidence && incidence->type() == "Todo" ) { 3436 if ( incidence && incidence->type() == "Todo" ) {
3432 emit todoSelected( true ); 3437 emit todoSelected( true );
3433 Todo *event = static_cast<Todo *>( incidence ); 3438 Todo *event = static_cast<Todo *>( incidence );
3434 if ( event->organizer() == KOPrefs::instance()->email() ) { 3439 if ( event->organizer() == KOPrefs::instance()->email() ) {
3435 emit organizerEventsSelected( true ); 3440 emit organizerEventsSelected( true );
3436 } else { 3441 } else {
3437 emit organizerEventsSelected(false); 3442 emit organizerEventsSelected(false);
3438 } 3443 }
3439 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 3444 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
3440 KOPrefs::instance()->email() ) ) { 3445 KOPrefs::instance()->email() ) ) {
3441 emit groupEventsSelected( true ); 3446 emit groupEventsSelected( true );
3442 } else { 3447 } else {
3443 emit groupEventsSelected(false); 3448 emit groupEventsSelected(false);
3444 } 3449 }
3445 return; 3450 return;
3446 } else { 3451 } else {
3447 emit todoSelected( false ); 3452 emit todoSelected( false );
3448 emit organizerEventsSelected(false); 3453 emit organizerEventsSelected(false);
3449 emit groupEventsSelected(false); 3454 emit groupEventsSelected(false);
3450 } 3455 }
3451 return; 3456 return;
3452 } 3457 }
3453 3458
3454 /* if ( incidence && incidence->type() == "Todo" ) { 3459 /* if ( incidence && incidence->type() == "Todo" ) {
3455 emit todoSelected( true ); 3460 emit todoSelected( true );
3456 } else { 3461 } else {
3457 emit todoSelected( false ); 3462 emit todoSelected( false );
3458 }*/ 3463 }*/
3459} 3464}
3460 3465
3461 3466
3462void CalendarView::checkClipboard() 3467void CalendarView::checkClipboard()
3463{ 3468{
3464#ifndef KORG_NODND 3469#ifndef KORG_NODND
3465 if (ICalDrag::canDecode(QApplication::clipboard()->data())) { 3470 if (ICalDrag::canDecode(QApplication::clipboard()->data())) {
3466 emit pasteEnabled(true); 3471 emit pasteEnabled(true);
3467 } else { 3472 } else {
3468 emit pasteEnabled(false); 3473 emit pasteEnabled(false);
3469 } 3474 }
3470#endif 3475#endif
3471} 3476}
3472 3477
3473void CalendarView::showDates(const DateList &selectedDates) 3478void CalendarView::showDates(const DateList &selectedDates)
3474{ 3479{
3475 // kdDebug() << "CalendarView::selectDates()" << endl; 3480 // kdDebug() << "CalendarView::selectDates()" << endl;
3476 3481
3477 3482
3478 if ( !mBlockShowDates ) { 3483 if ( !mBlockShowDates ) {
3479 if ( mViewManager->currentView() ) { 3484 if ( mViewManager->currentView() ) {
3480 updateView( selectedDates.first(), selectedDates.last() ); 3485 updateView( selectedDates.first(), selectedDates.last() );
3481 } else { 3486 } else {
3482 mViewManager->showAgendaView(); 3487 mViewManager->showAgendaView();
3483 } 3488 }
3484 } 3489 }
3485 3490
3486 QString selDates; 3491 QString selDates;
3487 selDates = KGlobal::locale()->formatDate( selectedDates.first(), true); 3492 selDates = KGlobal::locale()->formatDate( selectedDates.first(), true);
3488 if (selectedDates.first() < selectedDates.last() ) 3493 if (selectedDates.first() < selectedDates.last() )
3489 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true); 3494 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true);
3490 else { 3495 else {
3491 QString addString; 3496 QString addString;
3492 if ( selectedDates.first() == QDateTime::currentDateTime().date() ) 3497 if ( selectedDates.first() == QDateTime::currentDateTime().date() )
3493 addString = i18n("Today"); 3498 addString = i18n("Today");
3494 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(1) ) 3499 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(1) )
3495 addString = i18n("Tomorrow"); 3500 addString = i18n("Tomorrow");
3496 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) ) 3501 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) )
3497 addString = i18n("Yesterday"); 3502 addString = i18n("Yesterday");
3498 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) ) 3503 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) )
3499 addString = i18n("Day before yesterday"); 3504 addString = i18n("Day before yesterday");
3500 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(2) ) 3505 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(2) )
3501 addString = i18n("Day after tomorrow"); 3506 addString = i18n("Day after tomorrow");
3502 if ( !addString.isEmpty() ) { 3507 if ( !addString.isEmpty() ) {
3503 topLevelWidget()->setCaption( addString+", " + selDates ); 3508 topLevelWidget()->setCaption( addString+", " + selDates );
3504 return; 3509 return;
3505 } 3510 }
3506 } 3511 }
3507 topLevelWidget()->setCaption( i18n("Dates: ") + selDates ); 3512 topLevelWidget()->setCaption( i18n("Dates: ") + selDates );
3508 3513
3509} 3514}
3510 3515
3511QPtrList<CalFilter> CalendarView::filters() 3516QPtrList<CalFilter> CalendarView::filters()
3512{ 3517{
3513 return mFilters; 3518 return mFilters;
3514 3519
3515} 3520}
3516void CalendarView::editFilters() 3521void CalendarView::editFilters()
3517{ 3522{
3518 // kdDebug() << "CalendarView::editFilters()" << endl; 3523 // kdDebug() << "CalendarView::editFilters()" << endl;
3519 3524
3520 CalFilter *filter = mFilters.first(); 3525 CalFilter *filter = mFilters.first();
3521 while(filter) { 3526 while(filter) {
3522 kdDebug() << " Filter: " << filter->name() << endl; 3527 kdDebug() << " Filter: " << filter->name() << endl;
3523 filter = mFilters.next(); 3528 filter = mFilters.next();
3524 } 3529 }
3525 3530
3526 mDialogManager->showFilterEditDialog(&mFilters); 3531 mDialogManager->showFilterEditDialog(&mFilters);
3527} 3532}
3528void CalendarView::toggleFilter() 3533void CalendarView::toggleFilter()
3529{ 3534{
3530 showFilter(! mFilterView->isVisible()); 3535 showFilter(! mFilterView->isVisible());
3531} 3536}
3532 3537
3533KOFilterView *CalendarView::filterView() 3538KOFilterView *CalendarView::filterView()
3534{ 3539{
3535 return mFilterView; 3540 return mFilterView;
3536} 3541}
3537void CalendarView::selectFilter( int fil ) 3542void CalendarView::selectFilter( int fil )
3538{ 3543{
3539 mFilterView->setSelectedFilter( fil ); 3544 mFilterView->setSelectedFilter( fil );
3540} 3545}
3541void CalendarView::showFilter(bool visible) 3546void CalendarView::showFilter(bool visible)
3542{ 3547{
3543 if (visible) mFilterView->show(); 3548 if (visible) mFilterView->show();
3544 else mFilterView->hide(); 3549 else mFilterView->hide();
3545} 3550}
3546void CalendarView::toggleFilerEnabled( ) 3551void CalendarView::toggleFilerEnabled( )
3547{ 3552{
3548 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() ); 3553 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() );
3549 if ( !mFilterView->filtersEnabled() ) 3554 if ( !mFilterView->filtersEnabled() )
3550 topLevelWidget()->setCaption( i18n("Filter disabled ") ); 3555 topLevelWidget()->setCaption( i18n("Filter disabled ") );
3551 3556
3552} 3557}
3553void CalendarView::updateFilter() 3558void CalendarView::updateFilter()
3554{ 3559{
3555 CalFilter *filter = mFilterView->selectedFilter(); 3560 CalFilter *filter = mFilterView->selectedFilter();
3556 if (filter) { 3561 if (filter) {
3557 if (mFilterView->filtersEnabled()) { 3562 if (mFilterView->filtersEnabled()) {
3558 topLevelWidget()->setCaption( i18n("Filter selected: ")+filter->name() ); 3563 topLevelWidget()->setCaption( i18n("Filter selected: ")+filter->name() );
3559 filter->setEnabled(true); 3564 filter->setEnabled(true);
3560 } 3565 }
3561 else filter->setEnabled(false); 3566 else filter->setEnabled(false);
3562 mCalendar->setFilter(filter); 3567 mCalendar->setFilter(filter);
3563 updateView(); 3568 updateView();
3564 } 3569 }
3565} 3570}
3566 3571
3567void CalendarView::filterEdited() 3572void CalendarView::filterEdited()
3568{ 3573{
3569 mFilterView->updateFilters(); 3574 mFilterView->updateFilters();
3570 updateFilter(); 3575 updateFilter();
3571 writeSettings(); 3576 writeSettings();
3572} 3577}
3573 3578
3574 3579
3575void CalendarView::takeOverEvent() 3580void CalendarView::takeOverEvent()
3576{ 3581{
3577 Incidence *incidence = currentSelection(); 3582 Incidence *incidence = currentSelection();
3578 3583
3579 if (!incidence) return; 3584 if (!incidence) return;
3580 3585
3581 incidence->setOrganizer(KOPrefs::instance()->email()); 3586 incidence->setOrganizer(KOPrefs::instance()->email());
3582 incidence->recreate(); 3587 incidence->recreate();
3583 incidence->setReadOnly(false); 3588 incidence->setReadOnly(false);
3584 3589
3585 updateView(); 3590 updateView();
3586} 3591}
3587 3592
3588void CalendarView::takeOverCalendar() 3593void CalendarView::takeOverCalendar()
3589{ 3594{
3590 // TODO: Create Calendar::allIncidences() function and use it here 3595 // TODO: Create Calendar::allIncidences() function and use it here
3591 3596
3592 QPtrList<Event> events = mCalendar->events(); 3597 QPtrList<Event> events = mCalendar->events();
3593 for(uint i=0; i<events.count(); ++i) { 3598 for(uint i=0; i<events.count(); ++i) {
3594 events.at(i)->setOrganizer(KOPrefs::instance()->email()); 3599 events.at(i)->setOrganizer(KOPrefs::instance()->email());
3595 events.at(i)->recreate(); 3600 events.at(i)->recreate();
3596 events.at(i)->setReadOnly(false); 3601 events.at(i)->setReadOnly(false);
3597 } 3602 }
3598 3603
3599 QPtrList<Todo> todos = mCalendar->todos(); 3604 QPtrList<Todo> todos = mCalendar->todos();
3600 for(uint i=0; i<todos.count(); ++i) { 3605 for(uint i=0; i<todos.count(); ++i) {
3601 todos.at(i)->setOrganizer(KOPrefs::instance()->email()); 3606 todos.at(i)->setOrganizer(KOPrefs::instance()->email());
3602 todos.at(i)->recreate(); 3607 todos.at(i)->recreate();
3603 todos.at(i)->setReadOnly(false); 3608 todos.at(i)->setReadOnly(false);
3604 } 3609 }
3605 3610
3606 QPtrList<Journal> journals = mCalendar->journals(); 3611 QPtrList<Journal> journals = mCalendar->journals();
3607 for(uint i=0; i<journals.count(); ++i) { 3612 for(uint i=0; i<journals.count(); ++i) {
3608 journals.at(i)->setOrganizer(KOPrefs::instance()->email()); 3613 journals.at(i)->setOrganizer(KOPrefs::instance()->email());
3609 journals.at(i)->recreate(); 3614 journals.at(i)->recreate();
3610 journals.at(i)->setReadOnly(false); 3615 journals.at(i)->setReadOnly(false);
3611 } 3616 }
3612 3617
3613 updateView(); 3618 updateView();
3614} 3619}
3615 3620
3616void CalendarView::showIntro() 3621void CalendarView::showIntro()
3617{ 3622{
3618 kdDebug() << "To be implemented." << endl; 3623 kdDebug() << "To be implemented." << endl;
3619} 3624}
3620 3625
3621QWidgetStack *CalendarView::viewStack() 3626QWidgetStack *CalendarView::viewStack()
3622{ 3627{
3623 return mRightFrame; 3628 return mRightFrame;
3624} 3629}
3625 3630
3626QWidget *CalendarView::leftFrame() 3631QWidget *CalendarView::leftFrame()
3627{ 3632{
3628 return mLeftFrame; 3633 return mLeftFrame;
3629} 3634}
3630 3635
3631DateNavigator *CalendarView::dateNavigator() 3636DateNavigator *CalendarView::dateNavigator()
3632{ 3637{
3633 return mNavigator; 3638 return mNavigator;
3634} 3639}
3635 3640
3636KDateNavigator* CalendarView::dateNavigatorWidget() 3641KDateNavigator* CalendarView::dateNavigatorWidget()
3637{ 3642{
3638 return mDateNavigator; 3643 return mDateNavigator;
3639} 3644}
3640void CalendarView::toggleDateNavigatorWidget() 3645void CalendarView::toggleDateNavigatorWidget()
3641{ 3646{
3642 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ; 3647 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ;
3643 if (!KOPrefs::instance()->mShowDateNavigator ) 3648 if (!KOPrefs::instance()->mShowDateNavigator )
3644 mDateNavigator->hide(); 3649 mDateNavigator->hide();
3645 else 3650 else
3646 mDateNavigator->show(); 3651 mDateNavigator->show();
3647} 3652}
3648void CalendarView::addView(KOrg::BaseView *view) 3653void CalendarView::addView(KOrg::BaseView *view)
3649{ 3654{
3650 mViewManager->addView(view); 3655 mViewManager->addView(view);
3651} 3656}
3652 3657
3653void CalendarView::showView(KOrg::BaseView *view) 3658void CalendarView::showView(KOrg::BaseView *view)
3654{ 3659{
3655 mViewManager->showView(view, mLeftFrame->isVisible()); 3660 mViewManager->showView(view, mLeftFrame->isVisible());
3656} 3661}
3657 3662
3658Incidence *CalendarView::currentSelection() 3663Incidence *CalendarView::currentSelection()
3659{ 3664{
3660 return mViewManager->currentSelection(); 3665 return mViewManager->currentSelection();
3661} 3666}
3662void CalendarView::toggleAllDaySize() 3667void CalendarView::toggleAllDaySize()
3663{ 3668{
3664 /* 3669 /*
3665 if ( KOPrefs::instance()->mAllDaySize > 47 ) 3670 if ( KOPrefs::instance()->mAllDaySize > 47 )
3666 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2; 3671 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2;
3667 else 3672 else
3668 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2; 3673 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2;
3669 */ 3674 */
3670 viewManager()->agendaView()->toggleAllDay(); 3675 viewManager()->agendaView()->toggleAllDay();
3671} 3676}
3672void CalendarView::toggleExpand() 3677void CalendarView::toggleExpand()
3673{ 3678{
3674 // if ( mLeftFrame->isHidden() ) { 3679 // if ( mLeftFrame->isHidden() ) {
3675 // mLeftFrame->show(); 3680 // mLeftFrame->show();
3676 // emit calendarViewExpanded( false ); 3681 // emit calendarViewExpanded( false );
3677 // } else { 3682 // } else {
3678 // mLeftFrame->hide(); 3683 // mLeftFrame->hide();
3679 // emit calendarViewExpanded( true ); 3684 // emit calendarViewExpanded( true );
3680 // } 3685 // }
3681 3686
3682 globalFlagBlockAgenda = 1; 3687 globalFlagBlockAgenda = 1;
3683 emit calendarViewExpanded( !mLeftFrame->isHidden() ); 3688 emit calendarViewExpanded( !mLeftFrame->isHidden() );
3684 globalFlagBlockAgenda = 5; 3689 globalFlagBlockAgenda = 5;
3685 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() ); 3690 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() );
3686 //mViewManager->showView( 0, true ); 3691 //mViewManager->showView( 0, true );
3687} 3692}
3688 3693
3689void CalendarView::calendarModified( bool modified, Calendar * ) 3694void CalendarView::calendarModified( bool modified, Calendar * )
3690{ 3695{
3691 setModified( modified ); 3696 setModified( modified );
3692} 3697}
3693 3698
3694Todo *CalendarView::selectedTodo() 3699Todo *CalendarView::selectedTodo()
3695{ 3700{
3696 Incidence *incidence = currentSelection(); 3701 Incidence *incidence = currentSelection();
3697 if ( incidence && incidence->type() == "Todo" ) { 3702 if ( incidence && incidence->type() == "Todo" ) {
3698 return static_cast<Todo *>( incidence ); 3703 return static_cast<Todo *>( incidence );
3699 } 3704 }
3700 3705
3701 incidence = mTodoList->selectedIncidences().first(); 3706 incidence = mTodoList->selectedIncidences().first();
3702 if ( incidence && incidence->type() == "Todo" ) { 3707 if ( incidence && incidence->type() == "Todo" ) {
3703 return static_cast<Todo *>( incidence ); 3708 return static_cast<Todo *>( incidence );
3704 } 3709 }
3705 3710
3706 return 0; 3711 return 0;
3707} 3712}
3708 3713
3709void CalendarView::dialogClosing(Incidence *in) 3714void CalendarView::dialogClosing(Incidence *in)
3710{ 3715{
3711 // mDialogList.remove(in); 3716 // mDialogList.remove(in);
3712} 3717}
3713 3718
3714void CalendarView::showIncidence() 3719void CalendarView::showIncidence()
3715{ 3720{
3716 Incidence *incidence = currentSelection(); 3721 Incidence *incidence = currentSelection();
3717 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3722 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3718 if ( incidence ) { 3723 if ( incidence ) {
3719 ShowIncidenceVisitor v; 3724 ShowIncidenceVisitor v;
3720 v.act( incidence, this ); 3725 v.act( incidence, this );
3721 } 3726 }
3722} 3727}
3723void CalendarView::editIncidenceDescription() 3728void CalendarView::editIncidenceDescription()
3724{ 3729{
3725 mFlagEditDescription = true; 3730 mFlagEditDescription = true;
3726 editIncidence(); 3731 editIncidence();
3727 mFlagEditDescription = false; 3732 mFlagEditDescription = false;
3728} 3733}
3729void CalendarView::editIncidence() 3734void CalendarView::editIncidence()
3730{ 3735{
3731 // qDebug("editIncidence() "); 3736 // qDebug("editIncidence() ");
3732 Incidence *incidence = currentSelection(); 3737 Incidence *incidence = currentSelection();
3733 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3738 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3734 if ( incidence ) { 3739 if ( incidence ) {
3735 EditIncidenceVisitor v; 3740 EditIncidenceVisitor v;
3736 v.act( incidence, this ); 3741 v.act( incidence, this );
3737 } 3742 }
3738} 3743}
3739 3744
3740void CalendarView::deleteIncidence() 3745void CalendarView::deleteIncidence()
3741{ 3746{
3742 Incidence *incidence = currentSelection(); 3747 Incidence *incidence = currentSelection();
3743 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3748 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3744 if ( incidence ) { 3749 if ( incidence ) {
3745 deleteIncidence(incidence); 3750 deleteIncidence(incidence);
3746 } 3751 }
3747} 3752}
3748 3753
3749void CalendarView::showIncidence(Incidence *incidence) 3754void CalendarView::showIncidence(Incidence *incidence)
3750{ 3755{
3751 if ( incidence ) { 3756 if ( incidence ) {
3752 ShowIncidenceVisitor v; 3757 ShowIncidenceVisitor v;
3753 v.act( incidence, this ); 3758 v.act( incidence, this );
3754 } 3759 }
3755} 3760}
3756 3761
3757void CalendarView::editIncidence(Incidence *incidence) 3762void CalendarView::editIncidence(Incidence *incidence)
3758{ 3763{
3759 if ( incidence ) { 3764 if ( incidence ) {
3760 3765
3761 EditIncidenceVisitor v; 3766 EditIncidenceVisitor v;
3762 v.act( incidence, this ); 3767 v.act( incidence, this );
3763 3768
3764 } 3769 }
3765} 3770}
3766 3771
3767void CalendarView::deleteIncidence(Incidence *incidence) 3772void CalendarView::deleteIncidence(Incidence *incidence)
3768{ 3773{
3769 //qDebug(" CalendarView::deleteIncidence "); 3774 //qDebug(" CalendarView::deleteIncidence ");
3770 if ( incidence ) { 3775 if ( incidence ) {
3771 DeleteIncidenceVisitor v; 3776 DeleteIncidenceVisitor v;
3772 v.act( incidence, this ); 3777 v.act( incidence, this );
3773 } 3778 }
3774} 3779}
3775 3780
3776 3781
3777void CalendarView::lookForOutgoingMessages() 3782void CalendarView::lookForOutgoingMessages()
3778{ 3783{
3779 OutgoingDialog *ogd = mDialogManager->outgoingDialog(); 3784 OutgoingDialog *ogd = mDialogManager->outgoingDialog();
3780 ogd->loadMessages(); 3785 ogd->loadMessages();
3781} 3786}
3782 3787
3783void CalendarView::lookForIncomingMessages() 3788void CalendarView::lookForIncomingMessages()
3784{ 3789{
3785 IncomingDialog *icd = mDialogManager->incomingDialog(); 3790 IncomingDialog *icd = mDialogManager->incomingDialog();
3786 icd->retrieve(); 3791 icd->retrieve();
3787} 3792}
3788 3793
3789bool CalendarView::removeCompletedSubTodos( Todo* t ) 3794bool CalendarView::removeCompletedSubTodos( Todo* t )
3790{ 3795{
3791 bool deleteTodo = true; 3796 bool deleteTodo = true;
3792 QPtrList<Incidence> subTodos; 3797 QPtrList<Incidence> subTodos;
3793 Incidence *aTodo; 3798 Incidence *aTodo;
3794 subTodos = t->relations(); 3799 subTodos = t->relations();
3795 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) { 3800 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) {
3796 if (! removeCompletedSubTodos( (Todo*) aTodo )) 3801 if (! removeCompletedSubTodos( (Todo*) aTodo ))
3797 deleteTodo = false; 3802 deleteTodo = false;
3798 } 3803 }
3799 if ( deleteTodo ) { 3804 if ( deleteTodo ) {
3800 if ( t->isCompleted() ) { 3805 if ( t->isCompleted() ) {
3801 checkExternalId( t ); 3806 checkExternalId( t );
3802 mCalendar->deleteTodo( t ); 3807 mCalendar->deleteTodo( t );
3803 changeTodoDisplay( t,KOGlobals::EVENTDELETED ); 3808 changeTodoDisplay( t,KOGlobals::EVENTDELETED );
3804 } 3809 }
3805 else 3810 else
3806 deleteTodo = false; 3811 deleteTodo = false;
3807 } 3812 }
3808 return deleteTodo; 3813 return deleteTodo;
3809 3814
3810} 3815}
3811void CalendarView::purgeCompleted() 3816void CalendarView::purgeCompleted()
3812{ 3817{
3813 int result = KMessageBox::warningContinueCancel(this, 3818 int result = KMessageBox::warningContinueCancel(this,
3814 i18n("Delete all\ncompleted To-Dos?"),i18n("Purge To-Dos"),i18n("Purge")); 3819 i18n("Delete all\ncompleted To-Dos?"),i18n("Purge To-Dos"),i18n("Purge"));
3815 3820
3816 if (result == KMessageBox::Continue) { 3821 if (result == KMessageBox::Continue) {
3817 3822
3818 QPtrList<Todo> todoCal; 3823 QPtrList<Todo> todoCal;
3819 QPtrList<Todo> rootTodos; 3824 QPtrList<Todo> rootTodos;
3820 //QPtrList<Incidence> rel; 3825 //QPtrList<Incidence> rel;
3821 Todo *aTodo;//, *rTodo; 3826 Todo *aTodo;//, *rTodo;
3822 Incidence *rIncidence; 3827 Incidence *rIncidence;
3823 bool childDelete = false; 3828 bool childDelete = false;
3824 bool deletedOne = true; 3829 bool deletedOne = true;
3825 todoCal = calendar()->todos(); 3830 todoCal = calendar()->todos();
3826 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) { 3831 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) {
3827 if ( !aTodo->relatedTo() ) 3832 if ( !aTodo->relatedTo() )
3828 rootTodos.append( aTodo ); 3833 rootTodos.append( aTodo );
3829 } 3834 }
3830 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) { 3835 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) {
3831 removeCompletedSubTodos( aTodo ); 3836 removeCompletedSubTodos( aTodo );
3832 } 3837 }
3833 3838
3834 updateView(); 3839 updateView();
3835 } 3840 }
3836} 3841}
3837 3842
3838void CalendarView::slotCalendarChanged() 3843void CalendarView::slotCalendarChanged()
3839{ 3844{
3840 ; 3845 ;
3841} 3846}
3842 3847
3843NavigatorBar *CalendarView::navigatorBar() 3848NavigatorBar *CalendarView::navigatorBar()
3844{ 3849{
3845 return mNavigatorBar; 3850 return mNavigatorBar;
3846} 3851}
3847 3852
3848 3853
3849 3854
3850void CalendarView::keyPressEvent ( QKeyEvent *e) 3855void CalendarView::keyPressEvent ( QKeyEvent *e)
3851{ 3856{
3852 //qDebug(" alendarView::keyPressEvent "); 3857 //qDebug(" alendarView::keyPressEvent ");
3853 e->ignore(); 3858 e->ignore();
3854} 3859}
3855 3860
3856 3861
3857bool CalendarView::sync(KSyncManager* manager, QString filename, int mode) 3862bool CalendarView::sync(KSyncManager* manager, QString filename, int mode)
3858{ 3863{
3859 // mSyncManager = manager; 3864 // mSyncManager = manager;
3860 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) { 3865 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) {
3861 qDebug("KO: SyncKDE request detected!"); 3866 qDebug("KO: SyncKDE request detected!");
3862 } 3867 }
3863 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 3868 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
3864 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 3869 mCurrentSyncName = mSyncManager->getCurrentSyncName();
3865 return syncCalendar( filename, mode ); 3870 return syncCalendar( filename, mode );
3866} 3871}
3867bool CalendarView::syncExternal(KSyncManager* manager, QString resource) 3872bool CalendarView::syncExternal(KSyncManager* manager, QString resource)
3868{ 3873{
3869 //mSyncManager = manager; 3874 //mSyncManager = manager;
3870 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 3875 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
3871 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 3876 mCurrentSyncName = mSyncManager->getCurrentSyncName();
3872 if ( resource == "sharp" ) 3877 if ( resource == "sharp" )
3873 syncExternal( 0 ); 3878 syncExternal( 0 );
3874 if ( resource == "phone" ) 3879 if ( resource == "phone" )
3875 syncExternal( 1 ); 3880 syncExternal( 1 );
3876 // pending setmodified 3881 // pending setmodified
3877 return true; 3882 return true;
3878} 3883}
3879void CalendarView::setSyncManager(KSyncManager* manager) 3884void CalendarView::setSyncManager(KSyncManager* manager)
3880{ 3885{
3881 mSyncManager = manager; 3886 mSyncManager = manager;
3882} 3887}
3883 3888
3884void CalendarView::removeSyncInfo( QString syncProfile) 3889void CalendarView::removeSyncInfo( QString syncProfile)
3885{ 3890{
3886 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1()); 3891 qDebug("KO: removeSyncInfo for profile %s ", syncProfile.latin1());
3887 mCalendar->removeSyncInfo( syncProfile ); 3892 mCalendar->removeSyncInfo( syncProfile );
3888 3893
3889} 3894}
3890 3895
3891void CalendarView::undo_delete() 3896void CalendarView::undo_delete()
3892{ 3897{
3893 //qDebug("undo_delete() "); 3898 //qDebug("undo_delete() ");
3894 Incidence* undo = mCalendar->undoIncidence(); 3899 Incidence* undo = mCalendar->undoIncidence();
3895 if ( !undo ) { 3900 if ( !undo ) {
3896 KMessageBox::sorry(this,i18n("There is nothing to undo!"), 3901 KMessageBox::sorry(this,i18n("There is nothing to undo!"),
3897 i18n("KO/Pi")); 3902 i18n("KO/Pi"));
3898 return; 3903 return;
3899 } 3904 }
3900 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,undo->summary().left(25) + 3905 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,undo->summary().left(25) +
3901 i18n("\nAre you sure you want\nto restore this?"), 3906 i18n("\nAre you sure you want\nto restore this?"),
3902 i18n("KO/Pi Confirmation"),i18n("Restore"))) { 3907 i18n("KO/Pi Confirmation"),i18n("Restore"))) {
3903 mCalendar->undoDeleteIncidence(); 3908 mCalendar->undoDeleteIncidence();
3904 updateView(); 3909 updateView();
3905 } 3910 }
3906} 3911}
diff --git a/korganizer/kowhatsnextview.cpp b/korganizer/kowhatsnextview.cpp
index 7166a01..4111c5d 100644
--- a/korganizer/kowhatsnextview.cpp
+++ b/korganizer/kowhatsnextview.cpp
@@ -1,741 +1,752 @@
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 <qlayout.h> 20#include <qlayout.h>
21#include <qtextbrowser.h> 21#include <qtextbrowser.h>
22#include <qtextcodec.h> 22#include <qtextcodec.h>
23#include <qfileinfo.h> 23#include <qfileinfo.h>
24#include <qlabel.h> 24#include <qlabel.h>
25 25
26#include <qapplication.h> 26#include <qapplication.h>
27#ifdef DESKTOP_VERSION 27#ifdef DESKTOP_VERSION
28#include <qpaintdevicemetrics.h> 28#include <qpaintdevicemetrics.h>
29#endif 29#endif
30#include <kglobal.h> 30#include <kglobal.h>
31#include <klocale.h> 31#include <klocale.h>
32#include <kdebug.h> 32#include <kdebug.h>
33#include <kiconloader.h> 33#include <kiconloader.h>
34#include <kmessagebox.h> 34#include <kmessagebox.h>
35 35
36#include <libkcal/calendar.h> 36#include <libkcal/calendar.h>
37 37
38#ifndef KORG_NOPRINTER 38#ifndef KORG_NOPRINTER
39#include "calprinter.h" 39#include "calprinter.h"
40#endif 40#endif
41#include "koglobals.h" 41#include "koglobals.h"
42#include "koprefs.h" 42#include "koprefs.h"
43#include "koeventviewerdialog.h" 43#include "koeventviewerdialog.h"
44#include <qstylesheet.h> 44#include <qstylesheet.h>
45#include "kowhatsnextview.h" 45#include "kowhatsnextview.h"
46using namespace KOrg; 46using namespace KOrg;
47 47
48void WhatsNextTextBrowser::setSource(const QString& n) 48void WhatsNextTextBrowser::setSource(const QString& n)
49{ 49{
50 50
51 if (n.startsWith("event:")) { 51 if (n.startsWith("event:")) {
52 emit showIncidence(n); 52 emit showIncidence(n);
53 return; 53 return;
54 } else if (n.startsWith("todo:")) { 54 } else if (n.startsWith("todo:")) {
55 emit showIncidence(n); 55 emit showIncidence(n);
56 return; 56 return;
57 } else { 57 } else {
58 QTextBrowser::setSource(n); 58 QTextBrowser::setSource(n);
59 } 59 }
60} 60}
61void WhatsNextTextBrowser::printMe() 61void WhatsNextTextBrowser::printMe()
62{ 62{
63#ifdef DESKTOP_VERSION 63#ifdef DESKTOP_VERSION
64 QPrinter printer; 64 QPrinter printer;
65 if (!printer.setup() ) 65 if (!printer.setup() )
66 return; 66 return;
67 QPainter p; 67 QPainter p;
68 p.begin ( &printer ); 68 p.begin ( &printer );
69 QPaintDeviceMetrics m = QPaintDeviceMetrics ( &printer ); 69 QPaintDeviceMetrics m = QPaintDeviceMetrics ( &printer );
70 float dx, dy; 70 float dx, dy;
71 int wid = (m.width() * 9)/10; 71 int wid = (m.width() * 9)/10;
72 dx = (float) wid/(float)contentsWidth (); 72 dx = (float) wid/(float)contentsWidth ();
73 dy = (float)(m.height()) / (float)contentsHeight (); 73 dy = (float)(m.height()) / (float)contentsHeight ();
74 float scale; 74 float scale;
75 // scale to fit the width or height of the paper 75 // scale to fit the width or height of the paper
76 if ( dx < dy ) 76 if ( dx < dy )
77 scale = dx; 77 scale = dx;
78 else 78 else
79 scale = dy; 79 scale = dy;
80 p.translate( m.width()/10,0 ); 80 p.translate( m.width()/10,0 );
81 p.scale( scale, scale ); 81 p.scale( scale, scale );
82 drawContents ( &p, 0,0, contentsWidth (), contentsHeight () ); 82 drawContents ( &p, 0,0, contentsWidth (), contentsHeight () );
83 p.end(); 83 p.end();
84#endif 84#endif
85} 85}
86 86
87KOWhatsNextView::KOWhatsNextView(Calendar *calendar, QWidget *parent, 87KOWhatsNextView::KOWhatsNextView(Calendar *calendar, QWidget *parent,
88 const char *name) 88 const char *name)
89 : KOrg::BaseView(calendar, parent, name) 89 : KOrg::BaseView(calendar, parent, name)
90{ 90{
91 // mDateLabel = 91 // mDateLabel =
92 // new QLabel(KGlobal::locale()->formatDate(QDate::currentDate()),this); 92 // new QLabel(KGlobal::locale()->formatDate(QDate::currentDate()),this);
93 // mDateLabel->setMargin(2); 93 // mDateLabel->setMargin(2);
94 // mDateLabel->setAlignment(AlignCenter); 94 // mDateLabel->setAlignment(AlignCenter);
95 setFont( KOPrefs::instance()->mWhatsNextFont ); 95 setFont( KOPrefs::instance()->mWhatsNextFont );
96 mView = new WhatsNextTextBrowser(this); 96 mView = new WhatsNextTextBrowser(this);
97 connect(mView,SIGNAL(showIncidence(const QString &)),SLOT(showIncidence(const QString &))); 97 connect(mView,SIGNAL(showIncidence(const QString &)),SLOT(showIncidence(const QString &)));
98 QStyleSheet* stsh = mView->styleSheet(); 98 QStyleSheet* stsh = mView->styleSheet();
99 QStyleSheetItem * style ; 99 QStyleSheetItem * style ;
100 style = stsh->item ("h2" ); 100 style = stsh->item ("h2" );
101 if ( style ) { 101 if ( style ) {
102 style->setMargin(QStyleSheetItem::MarginAll,0); 102 style->setMargin(QStyleSheetItem::MarginAll,0);
103 } 103 }
104 style = stsh->item ("h3" ); 104 style = stsh->item ("h3" );
105 if ( style ) { 105 if ( style ) {
106 style->setMargin(QStyleSheetItem::MarginAll,0); 106 style->setMargin(QStyleSheetItem::MarginAll,0);
107 } 107 }
108 mEventViewer = 0; 108 mEventViewer = 0;
109 109
110 QBoxLayout *topLayout = new QVBoxLayout(this); 110 QBoxLayout *topLayout = new QVBoxLayout(this);
111 // topLayout->addWidget(mDateLabel); 111 // topLayout->addWidget(mDateLabel);
112 topLayout->addWidget(mView); 112 topLayout->addWidget(mView);
113 mTimer = new QTimer( this ); 113 mTimer = new QTimer( this );
114 connect(mTimer,SIGNAL( timeout() ),this, SLOT(updateView())); 114 connect(mTimer,SIGNAL( timeout() ),this, SLOT(updateView()));
115 115
116 connect(mView->horizontalScrollBar (),SIGNAL( sliderReleased () ),this, SLOT(restartTimer())); 116 connect(mView->horizontalScrollBar (),SIGNAL( sliderReleased () ),this, SLOT(restartTimer()));
117 connect(mView->verticalScrollBar (),SIGNAL( sliderReleased () ),this, SLOT(restartTimer())); 117 connect(mView->verticalScrollBar (),SIGNAL( sliderReleased () ),this, SLOT(restartTimer()));
118} 118}
119 119
120KOWhatsNextView::~KOWhatsNextView() 120KOWhatsNextView::~KOWhatsNextView()
121{ 121{
122} 122}
123 123
124int KOWhatsNextView::maxDatesHint() 124int KOWhatsNextView::maxDatesHint()
125{ 125{
126 return 0; 126 return 0;
127} 127}
128 128
129int KOWhatsNextView::currentDateCount() 129int KOWhatsNextView::currentDateCount()
130{ 130{
131 return 0; 131 return 0;
132} 132}
133 133
134QPtrList<Incidence> KOWhatsNextView::selectedIncidences() 134QPtrList<Incidence> KOWhatsNextView::selectedIncidences()
135{ 135{
136 QPtrList<Incidence> eventList; 136 QPtrList<Incidence> eventList;
137 137
138 return eventList; 138 return eventList;
139} 139}
140 140
141void KOWhatsNextView::printMe() 141void KOWhatsNextView::printMe()
142{ 142{
143#ifdef DESKTOP_VERSION 143#ifdef DESKTOP_VERSION
144 mView->printMe(); 144 mView->printMe();
145#endif 145#endif
146} 146}
147void KOWhatsNextView::printPreview(CalPrinter *calPrinter, const QDate &fd, 147void KOWhatsNextView::printPreview(CalPrinter *calPrinter, const QDate &fd,
148 const QDate &td) 148 const QDate &td)
149{ 149{
150#ifndef KORG_NOPRINTER 150#ifndef KORG_NOPRINTER
151 calPrinter->preview(CalPrinter::Day, fd, td); 151 calPrinter->preview(CalPrinter::Day, fd, td);
152#endif 152#endif
153} 153}
154void KOWhatsNextView::updateConfig() 154void KOWhatsNextView::updateConfig()
155{ 155{
156 setFont( KOPrefs::instance()->mWhatsNextFont ); 156 setFont( KOPrefs::instance()->mWhatsNextFont );
157 updateView(); 157 updateView();
158 158
159} 159}
160void KOWhatsNextView::showEvent ( QShowEvent * e ) 160void KOWhatsNextView::showEvent ( QShowEvent * e )
161{ 161{
162 //qDebug("KOWhatsNextView::showEvent "); 162 //qDebug("KOWhatsNextView::showEvent ");
163 restartTimer(); 163 restartTimer();
164 QWidget::showEvent ( e ); 164 QWidget::showEvent ( e );
165} 165}
166void KOWhatsNextView::hideEvent ( QHideEvent * e) 166void KOWhatsNextView::hideEvent ( QHideEvent * e)
167{ 167{
168 //qDebug(" KOWhatsNextView::hideEvent"); 168 //qDebug(" KOWhatsNextView::hideEvent");
169 mTimer->stop(); 169 mTimer->stop();
170 QWidget::hideEvent ( e ); 170 QWidget::hideEvent ( e );
171} 171}
172void KOWhatsNextView::restartTimer() 172void KOWhatsNextView::restartTimer()
173{ 173{
174 //qDebug("KOWhatsNextView::restartTimer() "); 174 //qDebug("KOWhatsNextView::restartTimer() ");
175 mTimer->start( 300000 ); 175 mTimer->start( 300000 );
176 //mTimer->start( 5000 ); 176 //mTimer->start( 5000 );
177} 177}
178void KOWhatsNextView::updateView() 178void KOWhatsNextView::updateView()
179{ 179{
180 if ( mTimer->isActive() ) 180 if ( mTimer->isActive() )
181 restartTimer(); 181 restartTimer();
182 //qDebug("KOWhatsNextView::updateView() "); 182 //qDebug("KOWhatsNextView::updateView() ");
183 // mDateLabel->setText(KGlobal::locale()->formatDate(QDate::currentDate())); 183 // mDateLabel->setText(KGlobal::locale()->formatDate(QDate::currentDate()));
184 KIconLoader kil("korganizer"); 184 KIconLoader kil("korganizer");
185 QString ipath;// = new QString(); 185 QString ipath;// = new QString();
186 // kil.loadIcon("korganizer",KIcon::NoGroup,32,KIcon::DefaultState,&ipath); 186 // kil.loadIcon("korganizer",KIcon::NoGroup,32,KIcon::DefaultState,&ipath);
187 //<big><big><strong>" + date + "</strong></big></big>\n"; 187 //<big><big><strong>" + date + "</strong></big></big>\n";
188 mText = "<table width=\"100%\">\n"; 188 mText = "<table width=\"100%\">\n";
189 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>"; 189 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>";
190#ifdef DESKTOP_VERSION 190#ifdef DESKTOP_VERSION
191 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h1>"; 191 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h1>";
192#else 192#else
193 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>"; 193 mText += "<tr bgcolor=\"#5699CD\"><td align=\"center\"><h2>";
194#endif 194#endif
195 // mText += "<img src=\""; 195 // mText += "<img src=\"";
196 // mText += ipath; 196 // mText += ipath;
197 // mText += "\">"; 197 // mText += "\">";
198 mEventDate = QDate::currentDate(); 198 mEventDate = QDate::currentDate();
199#ifdef DESKTOP_VERSION 199#ifdef DESKTOP_VERSION
200 mText += "<font color=\"#FFFFFF\"> <em>" + KGlobal::locale()->formatDate( mEventDate , false )+"</em></font></h1>"; 200 mText += "<font color=\"#FFFFFF\"> <em>" + KGlobal::locale()->formatDate( mEventDate , false )+"</em></font></h1>";
201#else 201#else
202 mText += "<font color=\"#FFFFFF\"> <em>" + KGlobal::locale()->formatDate( mEventDate , false )+"</em></font></h2>"; 202 mText += "<font color=\"#FFFFFF\"> <em>" + KGlobal::locale()->formatDate( mEventDate , false )+"</em></font></h2>";
203#endif 203#endif
204 mText += "</td></tr>\n<tr bgcolor=\"#EAF8FA\"><td>"; 204 mText += "</td></tr>\n<tr bgcolor=\"#EAF8FA\"><td>";
205 int iii; 205 int iii;
206 mTodos.clear(); 206 mTodos.clear();
207 QPtrList<Event> events; 207 QPtrList<Event> events;
208 QPtrList<Todo> todos = calendar()->todos(); 208 QPtrList<Todo> todos = calendar()->todos();
209 Todo * todo; 209 Todo * todo;
210 //mText += "<h2>" + i18n("Events: ") + "</h2>\n"; 210 //mText += "<h2>" + i18n("Events: ") + "</h2>\n";
211 int daysToShow = KOPrefs::instance()->mWhatsNextDays ; 211 int daysToShow = KOPrefs::instance()->mWhatsNextDays ;
212 bool itemAdded = false; 212 bool itemAdded = false;
213 for ( iii = 0; iii < daysToShow; ++iii ) { 213 for ( iii = 0; iii < daysToShow; ++iii ) {
214 QString date; 214 QString date;
215 itemAdded = false; 215 itemAdded = false;
216 events = calendar()->events( mEventDate, true ); 216 events = calendar()->events( mEventDate, true );
217 217
218 if ( iii == 0 ) { // today !!! 218 if ( iii == 0 ) { // today !!!
219 todo = todos.first(); 219 todo = todos.first();
220 while(todo) { 220 while(todo) {
221 if ( !todo->isCompleted() &&todo->hasDueDate() && todo->dtDue().date() < mEventDate ) { 221 if ( !todo->isCompleted() &&todo->hasDueDate() && todo->dtDue().date() < mEventDate ) {
222 if ( ! itemAdded ) { 222 if ( ! itemAdded ) {
223 appendDay ( iii, mEventDate ); 223 appendDay ( iii, mEventDate );
224 //itemAdded = true; 224 //itemAdded = true;
225 225
226 } //bool reply=false, bool notRed = true, bool appendTable = false); 226 } //bool reply=false, bool notRed = true, bool appendTable = false);
227 appendEvent(todo, false, false, !itemAdded ); 227 appendEvent(todo, false, false, !itemAdded );
228 itemAdded = true; 228 itemAdded = true;
229 } 229 }
230 todo = todos.next(); 230 todo = todos.next();
231 } 231 }
232 } 232 }
233 233
234 234
235 if (events.count() > 0) { 235 if (events.count() > 0) {
236 // mText += "<p></p>"; 236 // mText += "<p></p>";
237 // kil.loadIcon("month",KIcon::NoGroup,22,KIcon::DefaultState,&ipath); 237 // kil.loadIcon("month",KIcon::NoGroup,22,KIcon::DefaultState,&ipath);
238 // mText += "<h2>"; 238 // mText += "<h2>";
239 //mText += " <img src=\""; 239 //mText += " <img src=\"";
240 //mText += ipath; 240 //mText += ipath;
241 //mText += "\">"; 241 //mText += "\">";
242 if ( ! itemAdded ) { 242 if ( ! itemAdded ) {
243 appendDay ( iii, mEventDate ); 243 appendDay ( iii, mEventDate );
244 244
245 } 245 }
246 // for first day (iii == 0) 246 // for first day (iii == 0)
247 // we may have syncevents, or events in the past, which maybe should not be diaplayed 247 // we may have syncevents, or events in the past, which maybe should not be diaplayed
248 // for that reason we cannot append <table> in appendDay () for iii == 0 248 // for that reason we cannot append <table> in appendDay () for iii == 0
249 // we must append it in the first successful call of appendEvent() 249 // we must append it in the first successful call of appendEvent()
250 Event *ev = events.first(); 250 Event *ev = events.first();
251 while(ev) { 251 while(ev) {
252 //qDebug("+++++event append %s", ev->summary().latin1()); 252 //qDebug("+++++event append %s", ev->summary().latin1());
253 if ( true /*!ev->recurrence()->doesRecur() || ev->recursOn( mEventDate)*/) { 253 if ( true /*!ev->recurrence()->doesRecur() || ev->recursOn( mEventDate)*/) {
254 if ( appendEvent(ev, false , iii!= 0,!itemAdded ) ) 254 if ( appendEvent(ev, false , iii!= 0,!itemAdded ) )
255 itemAdded = true; 255 itemAdded = true;
256 } 256 }
257 ev = events.next(); 257 ev = events.next();
258 } 258 }
259 259
260 //mText += "</table>\n"; 260 //mText += "</table>\n";
261 } 261 }
262 262
263 todo = todos.first(); 263 todo = todos.first();
264 while(todo) { 264 while(todo) {
265 if ( !todo->isCompleted() &&todo->hasDueDate() && todo->dtDue().date() == mEventDate ) { 265 if ( !todo->isCompleted() &&todo->hasDueDate() && todo->dtDue().date() == mEventDate ) {
266 if ( ! itemAdded ) { 266 if ( ! itemAdded ) {
267 appendDay ( iii, mEventDate ); 267 appendDay ( iii, mEventDate );
268 //itemAdded = true; 268 //itemAdded = true;
269 } 269 }
270 appendEvent(todo, false , iii!= 0,!itemAdded); 270 appendEvent(todo, false , iii!= 0,!itemAdded);
271 itemAdded = true; 271 itemAdded = true;
272 } 272 }
273 todo = todos.next(); 273 todo = todos.next();
274 } 274 }
275 if ( !itemAdded && iii == 0 ) { 275 if ( !itemAdded && iii == 0 ) {
276 // appendDay ( iii, mEventDate ); 276 // appendDay ( iii, mEventDate );
277 //mText += "<table>"; 277 //mText += "<table>";
278 // mText += "<b><font color=\"#000080\"><em>"+i18n("No event, nothing to do.") +"</em></font></b>\n"; 278 // mText += "<b><font color=\"#000080\"><em>"+i18n("No event, nothing to do.") +"</em></font></b>\n";
279 mText += "<h3 align=\"center\"><font color=\"#008000\"><em>"+i18n("No event, nothing to do.") +"</em></font></h3>\n"; 279 mText += "<h3 align=\"center\"><font color=\"#008000\"><em>"+i18n("No event, nothing to do.") +"</em></font></h3>\n";
280 //mText +="</table>"; 280 //mText +="</table>";
281 } 281 }
282 if ( itemAdded ) 282 if ( itemAdded )
283 mText += "</table>\n"; 283 mText += "</table>\n";
284 mEventDate = mEventDate.addDays( 1 ); 284 mEventDate = mEventDate.addDays( 1 );
285 } 285 }
286 286
287 int topmostPrios = KOPrefs::instance()->mWhatsNextPrios; 287 int topmostPrios = KOPrefs::instance()->mWhatsNextPrios;
288 if (todos.count() > 0 && topmostPrios > 0 ) { 288 if (todos.count() > 0 && topmostPrios > 0 ) {
289 // kil.loadIcon("todo",KIcon::NoGroup,22,KIcon::DefaultState,&ipath); 289 // kil.loadIcon("todo",KIcon::NoGroup,22,KIcon::DefaultState,&ipath);
290 // mText += "<h2>"; 290 // mText += "<h2>";
291 //<img src=\""; 291 //<img src=\"";
292 // mText += ipath; 292 // mText += ipath;
293 // mText += "\">"; 293 // mText += "\">";
294 // mText += i18n("Overdue To-Do:") + "</h2>\n"; 294 // mText += i18n("Overdue To-Do:") + "</h2>\n";
295 295
296 //mText += "<ul>\n"; 296 //mText += "<ul>\n";
297 bool gotone = false; 297 bool gotone = false;
298 int priority = 1; 298 int priority = 1;
299 int priosFound = 0; 299 int priosFound = 0;
300#ifdef DESKTOP_VERSION 300#ifdef DESKTOP_VERSION
301 mText +="<p></p>"; 301 mText +="<p></p>";
302#endif 302#endif
303 303
304 mText +="<h2><em><font color=\"#000080\">" + i18n("Incomplete Todo:") + "</font></em></h2>\n"; 304 mText +="<h2><em><font color=\"#000080\">" + i18n("Incomplete Todo:") + "</font></em></h2>\n";
305 mText += "<ul>\n"; 305 mText += "<ul>\n";
306 while (!gotone && priority<6) { 306 while (!gotone && priority<6) {
307 todo = todos.first(); 307 todo = todos.first();
308 while(todo) { 308 while(todo) {
309 if (!todo->isCompleted() && (todo->priority() == priority) ) { 309 if (!todo->isCompleted() && (todo->priority() == priority) ) {
310 if ( appendTodo(todo) ) 310 if ( appendTodo(todo) )
311 gotone = true; 311 gotone = true;
312 } 312 }
313 todo = todos.next(); 313 todo = todos.next();
314 } 314 }
315 if ( gotone ) { 315 if ( gotone ) {
316 gotone = false; 316 gotone = false;
317 ++priosFound; 317 ++priosFound;
318 if ( priosFound == topmostPrios ) 318 if ( priosFound == topmostPrios )
319 break; 319 break;
320 } 320 }
321 priority++; 321 priority++;
322 // kdDebug() << "adding the todos..." << endl; 322 // kdDebug() << "adding the todos..." << endl;
323 } 323 }
324 mText += "</ul>\n"; 324 mText += "</ul>\n";
325 } 325 }
326 326
327 int replys = 0; 327 int replys = 0;
328 events = calendar()->events(QDate::currentDate(), QDate(2975,12,6)); 328 events = calendar()->events(QDate::currentDate(), QDate(2975,12,6));
329 if (events.count() > 0) { 329 if (events.count() > 0) {
330 Event *ev = events.first(); 330 Event *ev = events.first();
331 while(ev) { 331 while(ev) {
332 Attendee *me = ev->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 332 Attendee *me = ev->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
333 if (me!=0) { 333 if (me!=0) {
334 if (me->status()==Attendee::NeedsAction && me->RSVP()) { 334 if (me->status()==Attendee::NeedsAction && me->RSVP()) {
335 if (replys == 0) { 335 if (replys == 0) {
336 mText += "<p></p>"; 336 mText += "<p></p>";
337 // kil.loadIcon("reply",KIcon::NoGroup,22,KIcon::DefaultState,&ipath); 337 // kil.loadIcon("reply",KIcon::NoGroup,22,KIcon::DefaultState,&ipath);
338 //mText += "<h2>"; 338 //mText += "<h2>";
339 //<img src=\""; 339 //<img src=\"";
340 // mText += ipath; 340 // mText += ipath;
341 // mText += "\">"; 341 // mText += "\">";
342 //mText += i18n("Events and To-Dos that need a reply:") + "</h2>\n"; 342 //mText += i18n("Events and To-Dos that need a reply:") + "</h2>\n";
343 mText +="<h2><em><font color=\"#000080\">" + i18n("Events and To-Dos that need a reply:") + "</font></em></h2>\n"; 343 mText +="<h2><em><font color=\"#000080\">" + i18n("Events and To-Dos that need a reply:") + "</font></em></h2>\n";
344 mText += "<table>\n"; 344 mText += "<table>\n";
345 } 345 }
346 replys++; 346 replys++;
347 appendEvent(ev,true); 347 appendEvent(ev,true);
348 } 348 }
349 } 349 }
350 ev = events.next(); 350 ev = events.next();
351 } 351 }
352 } 352 }
353 todos = calendar()->todos(); 353 todos = calendar()->todos();
354 if (todos.count() > 0) { 354 if (todos.count() > 0) {
355 Todo *to = todos.first(); 355 Todo *to = todos.first();
356 while(to) { 356 while(to) {
357 if ( !to->isCompleted() ){ 357 if ( !to->isCompleted() ){
358 Attendee *me = to->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 358 Attendee *me = to->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
359 if (me!=0) { 359 if (me!=0) {
360 if (me->status()==Attendee::NeedsAction && me->RSVP()) { 360 if (me->status()==Attendee::NeedsAction && me->RSVP()) {
361 if (replys == 0) { 361 if (replys == 0) {
362 mText +="<h2><em><font color=\"#000080\">" + i18n("Events and To-Dos that need a reply:") + "</font></em></h2>\n"; 362 mText +="<h2><em><font color=\"#000080\">" + i18n("Events and To-Dos that need a reply:") + "</font></em></h2>\n";
363 mText += "<table>\n"; 363 mText += "<table>\n";
364 } 364 }
365 replys++; 365 replys++;
366 appendEvent(to, true); 366 appendEvent(to, true);
367 } 367 }
368 } 368 }
369 } 369 }
370 to = todos.next(); 370 to = todos.next();
371 } 371 }
372 } 372 }
373 if (replys > 0 ) mText += "</table>\n"; 373 if (replys > 0 ) mText += "</table>\n";
374 374
375 375
376 mText += "</td></tr>\n</table>\n"; 376 mText += "</td></tr>\n</table>\n";
377 377
378 mView->setText(mText); 378 mView->setText(mText);
379 mView->setFocus(); 379 mView->setFocus();
380 380
381 // QPixmap bPix = SmallIcon( "back" ); 381 // QPixmap bPix = SmallIcon( "back" );
382 // qDebug("xxxxxxxxxxxxxxxxxxxxx "); 382 // qDebug("xxxxxxxxxxxxxxxxxxxxx ");
383 // QWidget* test = new QWidget(); 383 // QWidget* test = new QWidget();
384 // test->setBackgroundMode(FixedPixmap ); 384 // test->setBackgroundMode(FixedPixmap );
385 // test->setBackgroundPixmap ( bPix ); 385 // test->setBackgroundPixmap ( bPix );
386 // test->resize( 300, 400 ); 386 // test->resize( 300, 400 );
387 // test->show(); 387 // test->show();
388 // mView->setBackgroundMode(FixedPixmap ); 388 // mView->setBackgroundMode(FixedPixmap );
389 // mView->setBackgroundPixmap ( bPix ); 389 // mView->setBackgroundPixmap ( bPix );
390 // qDebug("%s ",mText.latin1()); 390 // qDebug("%s ",mText.latin1());
391} 391}
392 392
393void KOWhatsNextView::appendDay( int i, QDate eventDate ) 393void KOWhatsNextView::appendDay( int i, QDate eventDate )
394{ 394{
395 QString date; 395 QString date;
396 QString day = KGlobal::locale()->formatDate( eventDate , KOPrefs::instance()->mShortDateInViewer); 396 QString day = KGlobal::locale()->formatDate( eventDate , KOPrefs::instance()->mShortDateInViewer);
397 if ( ! KOPrefs::instance()->mShortDateInViewer && QApplication::desktop()->width() < 320 ) { 397 if ( ! KOPrefs::instance()->mShortDateInViewer && QApplication::desktop()->width() < 320 ) {
398 if ( i == 0 ) { 398 if ( i == 0 ) {
399 //mText += "<table>\n"; 399 //mText += "<table>\n";
400 return;//date = "<em><font color=\"#008000\"><em>" + day+"</font></em>"; 400 return;//date = "<em><font color=\"#008000\"><em>" + day+"</font></em>";
401 } 401 }
402 else if ( i == 1 ) 402 else if ( i == 1 )
403 date = "<em><font color=\"#000080\">" + day + "</font></em>" ; 403 date = "<em><font color=\"#000080\">" + day + "</font></em>" ;
404 else date = "<em><font color=\"#000080\">" + day + "</font></em>"; 404 else date = "<em><font color=\"#000080\">" + day + "</font></em>";
405 mText += "<h2>" + date + "</h2>\n"; 405 mText += "<h2>" + date + "</h2>\n";
406 //mText += "<big><big><strong>" + date + "</strong></big></big>\n"; 406 //mText += "<big><big><strong>" + date + "</strong></big></big>\n";
407 mText += "<table>\n"; 407 mText += "<table>\n";
408 408
409 409
410 410
411 } else { 411 } else {
412 if ( i == 0 ) { 412 if ( i == 0 ) {
413 //mText += "<table>\n"; 413 //mText += "<table>\n";
414 return;// date = "<font color=\"#008000\"><em>" +i18n("Today: ") +"</em>" + day+"</font>"; 414 return;// date = "<font color=\"#008000\"><em>" +i18n("Today: ") +"</em>" + day+"</font>";
415 } 415 }
416 416
417#ifdef DESKTOP_VERSION 417#ifdef DESKTOP_VERSION
418 else if ( i == 1 ) { 418 else if ( i == 1 ) {
419 date = "<h2><em><font color=\"#000080\">" + i18n("Tomorrow: ") + day +"</font></em></h2>" ; 419 date = "<h2><em><font color=\"#000080\">" + i18n("Tomorrow: ") + day +"</font></em></h2>" ;
420 } 420 }
421 else date = "<h2><em><font color=\"#000080\">" + i18n("In %1 days: ").arg( i ) +day + "</font></em></h2>"; 421 else date = "<h2><em><font color=\"#000080\">" + i18n("In %1 days: ").arg( i ) +day + "</font></em></h2>";
422#else 422#else
423 else if ( i == 1 ) { 423 else if ( i == 1 ) {
424 date = "<em><font color=\"#000080\">" + i18n("Tomorrow: ") + day +"</font></em>" ; 424 date = "<em><font color=\"#000080\">" + i18n("Tomorrow: ") + day +"</font></em>" ;
425 } 425 }
426 else date = "<em><font color=\"#000080\">" + i18n("In %1 days: ").arg( i ) +day + "</font></em>"; 426 else date = "<em><font color=\"#000080\">" + i18n("In %1 days: ").arg( i ) +day + "</font></em>";
427 427
428#endif 428#endif
429 mText += "<h2>" + date + "</h2>\n"; 429 mText += "<h2>" + date + "</h2>\n";
430 //mText += "<big><big><strong>" + date + "</strong></big></big>\n"; 430 //mText += "<big><big><strong>" + date + "</strong></big></big>\n";
431 mText += "<table>\n"; 431 mText += "<table>\n";
432 } 432 }
433} 433}
434 434
435 435
436void KOWhatsNextView::showDates(const QDate &, const QDate &) 436void KOWhatsNextView::showDates(const QDate &, const QDate &)
437{ 437{
438 updateView(); 438 updateView();
439} 439}
440 440
441void KOWhatsNextView::showEvents(QPtrList<Event>) 441void KOWhatsNextView::showEvents(QPtrList<Event>)
442{ 442{
443} 443}
444 444
445void KOWhatsNextView::changeEventDisplay(Event *, int action) 445void KOWhatsNextView::changeEventDisplay(Event *, int action)
446{ 446{
447 switch(action) { 447 switch(action) {
448 case KOGlobals::EVENTADDED: 448 case KOGlobals::EVENTADDED:
449 updateView(); 449 updateView();
450 break; 450 break;
451 case KOGlobals::EVENTEDITED: 451 case KOGlobals::EVENTEDITED:
452 updateView(); 452 updateView();
453 break; 453 break;
454 case KOGlobals::EVENTDELETED: 454 case KOGlobals::EVENTDELETED:
455 updateView(); 455 updateView();
456 break; 456 break;
457 default: 457 default:
458 updateView(); 458 updateView();
459 kdDebug() << "KOWhatsNextView::changeEventDisplay(): Illegal action " << action << endl; 459 kdDebug() << "KOWhatsNextView::changeEventDisplay(): Illegal action " << action << endl;
460 } 460 }
461} 461}
462 462
463bool KOWhatsNextView::appendEvent(Incidence *ev, bool reply, bool notRed, bool appendTable ) 463bool KOWhatsNextView::appendEvent(Incidence *ev, bool reply, bool notRed, bool appendTable )
464{ 464{
465 if ( !KOPrefs::instance()->mShowSyncEvents && ev->uid().left(15) == QString("last-syncEvent-") ) 465 if ( !KOPrefs::instance()->mShowSyncEvents && ev->uid().left(15) == QString("last-syncEvent-") )
466 return false; 466 return false;
467 QDateTime cdt = QDateTime::currentDateTime(); 467 QDateTime cdt = QDateTime::currentDateTime();
468 QDateTime noc; 468 QDateTime noc;
469 QString tempText; 469 QString tempText;
470 if ( appendTable && !notRed ) { 470 if ( appendTable && !notRed ) {
471 tempText = "<table>"; 471 tempText = "<table>";
472 } 472 }
473 bool ok = true; 473 bool ok = true;
474 if ( reply ) { 474 if ( reply ) {
475 noc = ev->getNextOccurence( cdt, &ok ); 475 noc = ev->getNextOccurence( cdt, &ok );
476 if (! ok && ev->type() == "Event") 476 if (! ok && ev->type() == "Event")
477 return false; 477 return false;
478 } 478 }
479 tempText += "<tr><td><b>"; 479 tempText += "<tr><td><b>";
480 if (ev->type()=="Event") { 480 if (ev->type()=="Event") {
481 if (reply) { 481 if (reply) {
482 if (!ev->doesFloat()) 482 if (!ev->doesFloat())
483 tempText += KGlobal::locale()->formatDateTime( noc , KOPrefs::instance()->mShortDateInViewer) +": "; 483 tempText += KGlobal::locale()->formatDateTime( noc , KOPrefs::instance()->mShortDateInViewer) +": ";
484 else 484 else
485 tempText += KGlobal::locale()->formatDate( noc.date() , KOPrefs::instance()->mShortDateInViewer) +": "; 485 tempText += KGlobal::locale()->formatDate( noc.date() , KOPrefs::instance()->mShortDateInViewer) +": ";
486 486
487 } else { 487 } else {
488 if (!ev->doesFloat()) { 488 if (!ev->doesFloat()) {
489 Event *event = static_cast<Event *>(ev); 489 Event *event = static_cast<Event *>(ev);
490 QDateTime st,end; 490 QDateTime st,end;
491 if ( event->recurrence()->doesRecur() ) { 491 if ( event->recurrence()->doesRecur() ) {
492 QDate recDate= mEventDate; 492 QDate recDate= mEventDate;
493 int days = event->dtStart().date().daysTo (event->dtEnd().date() ); 493 int days = event->dtStart().date().daysTo (event->dtEnd().date() );
494 while ( ! event->recursOn( recDate ) ) { 494 while ( ! event->recursOn( recDate ) ) {
495 recDate = recDate.addDays( -1 ); 495 recDate = recDate.addDays( -1 );
496 496
497 } 497 }
498 st = QDateTime ( recDate, event->dtStart().time() ); 498 st = QDateTime ( recDate, event->dtStart().time() );
499 end = QDateTime ( recDate.addDays( days ), event->dtEnd().time() ); 499 end = QDateTime ( recDate.addDays( days ), event->dtEnd().time() );
500 } 500 }
501 else { 501 else {
502 st = event->dtStart(); 502 st = event->dtStart();
503 end = event->dtEnd(); 503 end = event->dtEnd();
504 } 504 }
505 505
506 506
507 QString dateText; 507 QString dateText;
508 // qDebug("%s %s %s %s ", mEventDate.toString().latin1(),event->summary().latin1(), st .toString().latin1(),end.toString().latin1() ); 508 // qDebug("%s %s %s %s ", mEventDate.toString().latin1(),event->summary().latin1(), st .toString().latin1(),end.toString().latin1() );
509 if ( st.date() < mEventDate ) 509 if ( st.date() < mEventDate )
510 dateText = "++:++-"; 510 dateText = "++:++-";
511 else 511 else
512 dateText = event->dtStartTimeStr() + "-"; 512 dateText = event->dtStartTimeStr() + "-";
513 if ( end.date() > mEventDate ) 513 if ( end.date() > mEventDate )
514 dateText += "++:++"; 514 dateText += "++:++";
515 else 515 else
516 dateText += event->dtEndTimeStr(); 516 dateText += event->dtEndTimeStr();
517 if ( notRed ) 517 if ( notRed )
518 tempText += dateText; 518 tempText += dateText;
519 else { 519 else {
520 if ( end < cdt ) { 520 if ( end < cdt ) {
521 if ( !KOPrefs::instance()->mWNViewShowsPast ) 521 if ( !KOPrefs::instance()->mWNViewShowsPast )
522 return false; 522 return false;
523 tempText += "<font color=\"#F00000\">" + dateText + "</font>"; 523 tempText += "<font color=\"#F00000\">" + dateText + "</font>";
524 } 524 }
525 else if ( st < cdt ) 525 else if ( st < cdt )
526 tempText += "<font color=\"#008000\">" + dateText + "</font>"; 526 tempText += "<font color=\"#008000\">" + dateText + "</font>";
527 else 527 else
528 tempText += dateText; 528 tempText += dateText;
529 529
530 } 530 }
531 531
532 } else { 532 } else {
533 tempText += i18n("Allday:"); 533 tempText += i18n("Allday:");
534 534
535 } 535 }
536 } 536 }
537 } else { 537 } else {
538 mTodos.append( ev ); 538 mTodos.append( ev );
539 tempText += i18n("ToDo:"); 539 tempText += i18n("ToDo:");
540 if (reply) { 540 if (reply) {
541 tempText += " "; 541 tempText += " ";
542 if ( noc != cdt ) { 542 if ( noc != cdt ) {
543 tempText += KGlobal::locale()->formatDate( noc.date() , KOPrefs::instance()->mShortDateInViewer) +": "; 543 tempText += KGlobal::locale()->formatDate( noc.date() , KOPrefs::instance()->mShortDateInViewer) +": ";
544 } 544 }
545 } else { 545 } else {
546 if ( ((Todo*)ev)->dtDue().date() < QDate::currentDate() ) { 546 if ( ((Todo*)ev)->dtDue().date() < QDate::currentDate() ) {
547 // tempText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>"; 547 // tempText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>";
548 QString dfs = KGlobal::locale()->dateFormatShort(); 548 QString dfs = KGlobal::locale()->dateFormatShort();
549 KGlobal::locale()->setDateFormatShort("%d.%b"); 549 KGlobal::locale()->setDateFormatShort("%d.%b");
550 tempText +="<font color=\"#F00000\">" + KGlobal::locale()->formatDate(((Todo*)ev)->dtDue().date(), true, KLocale::Userdefined) + "</font>"; 550 tempText +="<font color=\"#F00000\">" + KGlobal::locale()->formatDate(((Todo*)ev)->dtDue().date(), true, KLocale::Userdefined) + "</font>";
551 KGlobal::locale()->setDateFormatShort(dfs); 551 KGlobal::locale()->setDateFormatShort(dfs);
552 } else { 552 } else {
553 if (!ev->doesFloat() ) 553 if (!ev->doesFloat() )
554 if( ( (Todo*)ev)->dtDue() < cdt ) { 554 if( ( (Todo*)ev)->dtDue() < cdt ) {
555 tempText +="<font color=\"#F00000\">" + ((Todo*)ev)->dtDueTimeStr() + "</font>"; 555 tempText +="<font color=\"#F00000\">" + ((Todo*)ev)->dtDueTimeStr() + "</font>";
556 556
557 557
558 } else 558 } else
559 tempText +=((Todo*)ev)->dtDueTimeStr(); 559 tempText +=((Todo*)ev)->dtDueTimeStr();
560 mTodos.append( ev ); 560 mTodos.append( ev );
561 } 561 }
562 } 562 }
563 } 563 }
564 tempText += "</b></td><td>"; 564 tempText += "</b></td><td>";
565 bool needClose = false; 565 bool needClose = false;
566 if ( ev->cancelled() ) { 566 if ( ev->cancelled() ) {
567 tempText += "<font color=\"#F00000\">[c"; 567 tempText += "<font color=\"#F00000\">[c";
568 needClose =true; 568 needClose =true;
569 569
570 } 570 }
571 if ( ev->isAlarmEnabled() ) { 571 if ( ev->isAlarmEnabled() ) {
572 if ( !needClose) 572 if ( !needClose)
573 tempText +="["; 573 tempText +="[";
574 tempText += "a"; 574 tempText += "a";
575 needClose =true; 575 needClose =true;
576 576
577 } 577 }
578 if ( ev->description().length() > 0 ) { 578 if ( ev->description().length() > 0 ) {
579 if ( !needClose) 579 if ( !needClose)
580 tempText +="["; 580 tempText +="[";
581 tempText += "i"; 581 tempText += "i";
582 needClose =true; 582 needClose =true;
583 } 583 }
584 if ( ev->recurrence()->doesRecur() ) { 584 if ( ev->recurrence()->doesRecur() ) {
585 if ( !needClose) 585 if ( !needClose)
586 tempText +="["; 586 tempText +="[";
587 tempText += "r"; 587 tempText += "r";
588 needClose =true; 588 needClose =true;
589 } 589 }
590 if ( needClose ) { 590 if ( needClose ) {
591 tempText += "] "; 591 tempText += "] ";
592 } 592 }
593 if ( ev->cancelled() ) 593 if ( ev->cancelled() )
594 tempText += "</font>"; 594 tempText += "</font>";
595 tempText += "<a "; 595 tempText += "<a ";
596 if (ev->type()=="Event") tempText += "href=\"event:"; 596 if (ev->type()=="Event") tempText += "href=\"event:";
597 if (ev->type()=="Todo") tempText += "href=\"todo:"; 597 if (ev->type()=="Todo") tempText += "href=\"todo:";
598 tempText += ev->uid() + "\">"; 598 tempText += ev->uid() + "\">";
599 if ( ev->summary().length() > 0 ) 599 if ( ev->summary().length() > 0 )
600 tempText += ev->summary(); 600 tempText += ev->summary();
601 else 601 else
602 tempText += i18n("-no summary-"); 602 tempText += i18n("-no summary-");
603 if ( ev->categories().contains( i18n("Birthday") ) || ev->categories().contains( i18n("Anniversary") ) ) {
604 noc = ev->getNextOccurence( cdt, &ok );
605 if ( ok ) {
606 int years = noc.date().year() - ev->dtStart().date().year();
607 tempText += i18n(" (%1 y.)"). arg( years );
608 }
609 }
610
603 tempText += "</a>"; 611 tempText += "</a>";
604 if ( KOPrefs::instance()->mWNViewShowLocation ) 612 if ( KOPrefs::instance()->mWNViewShowLocation )
605 if ( !ev->location().isEmpty() ) 613 if ( !ev->location().isEmpty() )
606 tempText += " ("+ev->location() +")"; 614 tempText += " ("+ev->location() +")";
607 if ( ev->relatedTo() && KOPrefs::instance()->mWNViewShowsParents) 615 if ( ev->relatedTo() && KOPrefs::instance()->mWNViewShowsParents)
608 tempText += " ["+ev->relatedTo()->summary() +"]"; 616 tempText += " ["+ev->relatedTo()->summary() +"]";
609 tempText += "</td></tr>\n"; 617 tempText += "</td></tr>\n";
610 mText += tempText; 618 mText += tempText;
611 return true; 619 return true;
612} 620}
613 621
614bool KOWhatsNextView::appendTodo(Incidence *ev, QString ind , bool isSub ) 622bool KOWhatsNextView::appendTodo(Incidence *ev, QString ind , bool isSub )
615{ 623{
616 if ( mTodos.find( ev ) != mTodos.end() ) return false; 624 if ( mTodos.find( ev ) != mTodos.end() ) return false;
617 625
618 mTodos.append( ev ); 626 mTodos.append( ev );
619 if ( !isSub ) 627 if ( !isSub )
620 mText += "<p>"; 628 mText += "<p>";
621 else 629 else
622 mText += "<li>"; 630 mText += "<li>";
623 mText += "[" +QString::number(ev->priority()) + "/" + QString::number(((Todo*)ev)->percentComplete())+"%] "; 631 mText += "[" +QString::number(ev->priority()) + "/" + QString::number(((Todo*)ev)->percentComplete())+"%] ";
624 632
625 633
626 mText += ind; 634 mText += ind;
627 bool needClose = false; 635 bool needClose = false;
628 if ( ev->cancelled() ) { 636 if ( ev->cancelled() ) {
629 mText += "<font color=\"#F00000\">[c"; 637 mText += "<font color=\"#F00000\">[c";
630 needClose =true; 638 needClose =true;
631 639
632 } 640 }
633 if ( ev->isAlarmEnabled() ) { 641 if ( ev->isAlarmEnabled() ) {
634 if ( !needClose) 642 if ( !needClose)
635 mText +="["; 643 mText +="[";
636 mText += "a"; 644 mText += "a";
637 needClose =true; 645 needClose =true;
638 646
639 } 647 }
640 648
641 if ( ev->description().length() > 0 ) { 649 if ( ev->description().length() > 0 ) {
642 if ( !needClose) 650 if ( !needClose)
643 mText +="["; 651 mText +="[";
644 mText += "i"; 652 mText += "i";
645 needClose =true; 653 needClose =true;
646 } 654 }
647 // if ( ev->recurrence()->doesRecur() ) { 655 // if ( ev->recurrence()->doesRecur() ) {
648 // if ( !needClose) 656 // if ( !needClose)
649 // mText +="("; 657 // mText +="(";
650 // mText += "r"; 658 // mText += "r";
651 // needClose =true; 659 // needClose =true;
652 // } 660 // }
653 if ( needClose ) 661 if ( needClose )
654 mText += "] "; 662 mText += "] ";
655 if ( ev->cancelled() ) 663 if ( ev->cancelled() )
656 mText += "</font>"; 664 mText += "</font>";
657 mText += "<a href=\"todo:" + ev->uid() + "\">"; 665 mText += "<a href=\"todo:" + ev->uid() + "\">";
658 mText += ev->summary(); 666 if ( ev->summary().length() > 0 )
667 mText += ev->summary();
668 else
669 mText += i18n("-no summary-");
659 mText += "</a>"; 670 mText += "</a>";
660 if ( ((Todo*)ev)->hasDueDate () ) { 671 if ( ((Todo*)ev)->hasDueDate () ) {
661 QString year = ""; 672 QString year = "";
662 int ye = ((Todo*)ev)->dtDue().date().year(); 673 int ye = ((Todo*)ev)->dtDue().date().year();
663 if ( QDateTime::currentDateTime().date().year() != ye ) 674 if ( QDateTime::currentDateTime().date().year() != ye )
664 year = QString::number( ye ); 675 year = QString::number( ye );
665 QString dfs = KGlobal::locale()->dateFormatShort(); 676 QString dfs = KGlobal::locale()->dateFormatShort();
666 KGlobal::locale()->setDateFormatShort("%d.%b"); 677 KGlobal::locale()->setDateFormatShort("%d.%b");
667 mText +="<font color=\"#00A000\"> [" + KGlobal::locale()->formatDate(((Todo*)ev)->dtDue().date(), true, KLocale::Userdefined) + "."+ year +"]</font>"; 678 mText +="<font color=\"#00A000\"> [" + KGlobal::locale()->formatDate(((Todo*)ev)->dtDue().date(), true, KLocale::Userdefined) + "."+ year +"]</font>";
668 KGlobal::locale()->setDateFormatShort(dfs); 679 KGlobal::locale()->setDateFormatShort(dfs);
669 } 680 }
670 if ( KOPrefs::instance()->mWNViewShowLocation ) 681 if ( KOPrefs::instance()->mWNViewShowLocation )
671 if ( !ev->location().isEmpty() ) 682 if ( !ev->location().isEmpty() )
672 mText += " ("+ev->location() +")"; 683 mText += " ("+ev->location() +")";
673 if ( !isSub ) { 684 if ( !isSub ) {
674 if ( ((Todo*)ev)->relatedTo()&& KOPrefs::instance()->mWNViewShowsParents) 685 if ( ((Todo*)ev)->relatedTo()&& KOPrefs::instance()->mWNViewShowsParents)
675 mText += " ["+ev->relatedTo()->summary() +"]"; 686 mText += " ["+ev->relatedTo()->summary() +"]";
676 mText += "</p>\n"; 687 mText += "</p>\n";
677 } 688 }
678 else { 689 else {
679 ind += "-"; 690 ind += "-";
680 mText += "</li>\n"; 691 mText += "</li>\n";
681 } 692 }
682 QPtrList<Incidence> Relations = ev->relations(); 693 QPtrList<Incidence> Relations = ev->relations();
683 Incidence *to; 694 Incidence *to;
684 for (to=Relations.first();to;to=Relations.next()) { 695 for (to=Relations.first();to;to=Relations.next()) {
685 if (!((Todo*)to)->isCompleted()) 696 if (!((Todo*)to)->isCompleted())
686 appendTodo( to, ind , true ); 697 appendTodo( to, ind , true );
687 } 698 }
688 699
689 return true; 700 return true;
690} 701}
691 702
692/* 703/*
693 void KOWhatsNextView::createEventViewer() 704 void KOWhatsNextView::createEventViewer()
694 { 705 {
695 if (!mEventViewer) { 706 if (!mEventViewer) {
696 707
697 mEventViewer = new KOEventViewerDialog(this); 708 mEventViewer = new KOEventViewerDialog(this);
698 } 709 }
699 } 710 }
700*/ 711*/
701void KOWhatsNextView::setEventViewer(KOEventViewerDialog* v ) 712void KOWhatsNextView::setEventViewer(KOEventViewerDialog* v )
702{ 713{
703 mEventViewer = v; 714 mEventViewer = v;
704} 715}
705 716
706// TODO: Create this function in CalendarView and remove it from here 717// TODO: Create this function in CalendarView and remove it from here
707void KOWhatsNextView::showIncidence(const QString &uid) 718void KOWhatsNextView::showIncidence(const QString &uid)
708{ 719{
709 720
710 if ( !mEventViewer ) { 721 if ( !mEventViewer ) {
711 qDebug("KOWhatsNextView::showIncidence::sorry, no event viewer set "); 722 qDebug("KOWhatsNextView::showIncidence::sorry, no event viewer set ");
712 return; 723 return;
713 } 724 }
714 //kdDebug() << "KOWhatsNextView::showIncidence(): " << uid << endl; 725 //kdDebug() << "KOWhatsNextView::showIncidence(): " << uid << endl;
715 //qDebug("KOWhatsNextView::showIncidence %s ", uid.latin1()); 726 //qDebug("KOWhatsNextView::showIncidence %s ", uid.latin1());
716 if (uid.startsWith("event:")) { 727 if (uid.startsWith("event:")) {
717#ifdef DESKTOP_VERSION 728#ifdef DESKTOP_VERSION
718 Event *event = calendar()->event(uid.mid(8)); 729 Event *event = calendar()->event(uid.mid(8));
719#else 730#else
720 Event *event = calendar()->event(uid.mid(6)); 731 Event *event = calendar()->event(uid.mid(6));
721#endif 732#endif
722 //qDebug("event %d uid %s ", event, uid.mid(6).latin1()); 733 //qDebug("event %d uid %s ", event, uid.mid(6).latin1());
723 if (!event) return; 734 if (!event) return;
724 //createEventViewer(); 735 //createEventViewer();
725 mEventViewer->setEvent(event); 736 mEventViewer->setEvent(event);
726 } else if (uid.startsWith("todo:")) { 737 } else if (uid.startsWith("todo:")) {
727#ifdef DESKTOP_VERSION 738#ifdef DESKTOP_VERSION
728 Todo *todo = calendar()->todo(uid.mid(7)); 739 Todo *todo = calendar()->todo(uid.mid(7));
729#else 740#else
730 Todo *todo = calendar()->todo(uid.mid(5)); 741 Todo *todo = calendar()->todo(uid.mid(5));
731#endif 742#endif
732 if (!todo) return; 743 if (!todo) return;
733 //createEventViewer(); 744 //createEventViewer();
734 mEventViewer->setTodo(todo); 745 mEventViewer->setTodo(todo);
735 } else { 746 } else {
736 return; 747 return;
737 748
738 } 749 }
739 mEventViewer->showMe(); 750 mEventViewer->showMe();
740 mEventViewer->raise(); 751 mEventViewer->raise();
741} 752}