summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-01-22 10:18:16 (UTC)
committer zautrix <zautrix>2005-01-22 10:18:16 (UTC)
commit6946f6ab0ee6eeafee0c8ff5d33fffc0826c7452 (patch) (unidiff)
tree006248579ca44ad2e0c1a67db55b1a8013180ed7
parentb715b109b70b8cd24a2d9da1d4863c44d79fb2a4 (diff)
downloadkdepimpi-6946f6ab0ee6eeafee0c8ff5d33fffc0826c7452.zip
kdepimpi-6946f6ab0ee6eeafee0c8ff5d33fffc0826c7452.tar.gz
kdepimpi-6946f6ab0ee6eeafee0c8ff5d33fffc0826c7452.tar.bz2
some small fixes
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt17
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt13
-rw-r--r--korganizer/calendarview.cpp52
-rw-r--r--korganizer/calendarview.h2
-rw-r--r--korganizer/koeditorgeneral.cpp20
-rw-r--r--korganizer/koeditorgeneral.h1
-rw-r--r--korganizer/kotodoview.cpp5
-rw-r--r--korganizer/mainwindow.cpp11
-rw-r--r--libkcal/calendarlocal.cpp2
-rw-r--r--microkde/kdatetbl.cpp5
10 files changed, 95 insertions, 33 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index fbe16d8..adbfd67 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,768 +1,785 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 1.9.20 ************
4
5KO/Pi:
6Made it possible to delete a Todo, which has sub-todos.
7Fixed two small problems in the todo view.
8Added missing German translation for filter edit and print dialog.
9Made search dialog closeable by cancel key.
10
11Made it possible to select in the date picker the (ligt grey )
12dates of the prev./next month with the mouse.
13
14Added for the "dislplay one day" agenda mode info in the caption:
15Now it is displayed, if the selected day is from "day before yesterday"
16to "day after tomorrow".
17
18
19
3********** VERSION 1.9.19 ************ 20********** VERSION 1.9.19 ************
4 21
5Added a lot of missing translations to KA/Pi, 22Added a lot of missing translations to KA/Pi,
6Added some missing translations to KO/Pi and OM/Pi. 23Added some missing translations to KO/Pi and OM/Pi.
7 24
8Fixed some minor problems in KA/Pi + KO/Pi. 25Fixed some minor problems in KA/Pi + KO/Pi.
9 26
10Fixed a crash when closing PwM/Pi. 27Fixed a crash when closing PwM/Pi.
11Added German translation for PwM/Pi. 28Added German translation for PwM/Pi.
12 29
13Made view change and Month View update faster in KO/Pi. 30Made view change and Month View update faster in KO/Pi.
14 31
15 32
16********** VERSION 1.9.18 ************ 33********** VERSION 1.9.18 ************
17 34
18FYI: The VERSION 1.9.17 was a testing release only. 35FYI: The VERSION 1.9.17 was a testing release only.
19Please read the changelog of VERSION 1.9.17 as well. 36Please read the changelog of VERSION 1.9.17 as well.
20 37
21Cleaned up the syncing config dialog. 38Cleaned up the syncing config dialog.
22Added sync config options for date range for events. 39Added sync config options for date range for events.
23Added sync config options for filters on incoming data. 40Added sync config options for filters on incoming data.
24Added sync config options for filters on outgoing data. 41Added sync config options for filters on outgoing data.
25Please read the updated SyncHowTo about the new filter settings. 42Please read the updated SyncHowTo about the new filter settings.
26These filter settings make it now possible to sync with shared 43These filter settings make it now possible to sync with shared
27calendars without writing back private or confidential data 44calendars without writing back private or confidential data
28(via the outgoing filters). 45(via the outgoing filters).
29To sync only with particular parts of a shared calendar, 46To sync only with particular parts of a shared calendar,
30the incoming filter settings can be used. 47the incoming filter settings can be used.
31An example can be found in the SyncHowTo. 48An example can be found in the SyncHowTo.
32Same for shared addressbooks. 49Same for shared addressbooks.
33 50
34Added a setting for the global kdepim data storage. 51Added a setting for the global kdepim data storage.
35Usually the data is stored in (yourhomedir/kdepim). 52Usually the data is stored in (yourhomedir/kdepim).
36Now you can set in the Global config dialog TAB, subTAB "Data storage path" 53Now you can set in the Global config dialog TAB, subTAB "Data storage path"
37a directory where all the kdepim data is stored. 54a directory where all the kdepim data is stored.
38That makes it easy to save all kdepim data on a SD card on the Z, for example. 55That makes it easy to save all kdepim data on a SD card on the Z, for example.
39 56
40KO/Pi: 57KO/Pi:
41The timeedit input has a pulldown list for times. 58The timeedit input has a pulldown list for times.
42If opened, this pulldown list should now has the right time highlighted. 59If opened, this pulldown list should now has the right time highlighted.
43Added the possibility to exclude events/todos/journals in a filter. 60Added the possibility to exclude events/todos/journals in a filter.
44You should exclude journals, if you do not want them to sync with a public calendar. 61You should exclude journals, if you do not want them to sync with a public calendar.
45 62
46KA/Pi: 63KA/Pi:
47Added the possibility to in/exclude public/private/confidential contacts to a filter. 64Added the possibility to in/exclude public/private/confidential contacts to a filter.
48If 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 ... 65If 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 ...
49Added printing of card view and details view on desktop. 66Added printing of card view and details view on desktop.
50Printing of list view is not working... 67Printing of list view is not working...
51Added button for removing pictures in contact editor. 68Added button for removing pictures in contact editor.
52Parsing data fix of KA/Pi version 1.9.17. 69Parsing data fix of KA/Pi version 1.9.17.
53Fixed the "parse name automatically" problem of KA/Pi version 1.9.17. 70Fixed the "parse name automatically" problem of KA/Pi version 1.9.17.
54Fixed some syncing merging problems. 71Fixed some syncing merging problems.
55 72
56 73
57********** VERSION 1.9.17 ************ 74********** VERSION 1.9.17 ************
58 75
59KO/Pi: 76KO/Pi:
60Fixed that tooltips were not updated after moving an item in agenda view. 77Fixed that tooltips were not updated after moving an item in agenda view.
61Fixed a bug in sorting start date for recurring events in list view. 78Fixed a bug in sorting start date for recurring events in list view.
62Changed the left button in todo viewer from "Agenda" to "Set completed". 79Changed the left button in todo viewer from "Agenda" to "Set completed".
63This 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. 80This 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.
64Added more info in the todo viewer: Startdate, parent/sub todos. 81Added more info in the todo viewer: Startdate, parent/sub todos.
65 82
66 83
67KA/Pi: 84KA/Pi:
68All fields search does now actually search all the (possible) fields, 85All fields search does now actually search all the (possible) fields,
69not only those listed in the contact list. 86not only those listed in the contact list.
70Made is possible to inline a picture in a vcard on the Z. 87Made is possible to inline a picture in a vcard on the Z.
71This was only possible on the desktop, now is it possible on the Z as well. 88This was only possible on the desktop, now is it possible on the Z as well.
72Fixed of missing save settings after filter configuration. 89Fixed of missing save settings after filter configuration.
73Made saving of addressbook much faster. 90Made saving of addressbook much faster.
74Fixed extension widget layout problem. 91Fixed extension widget layout problem.
75Fixed saving of default formatted name settings. 92Fixed saving of default formatted name settings.
76Fixed formatted name handling in edit dialog. 93Fixed formatted name handling in edit dialog.
77Added an option for changing formatted names of many contacts 94Added an option for changing formatted names of many contacts
78(menu: File - Change - Set formatted name). 95(menu: File - Change - Set formatted name).
79 96
80QWhatsThis was not working on the Z ( only black rectangle was shown). 97QWhatsThis was not working on the Z ( only black rectangle was shown).
81This is Fixed. 98This is Fixed.
82 99
83KDE-Sync: 100KDE-Sync:
84Now readonly KDE resources are synced as well. 101Now readonly KDE resources are synced as well.
85(They are not changed in KDE itself, of course). 102(They are not changed in KDE itself, of course).
86 103
87 104
88 105
89********** VERSION 1.9.16 ************ 106********** VERSION 1.9.16 ************
90 107
91KO/Pi: 108KO/Pi:
92Fixed search dialog size on Z 6000 (480x640 display). 109Fixed search dialog size on Z 6000 (480x640 display).
93Added setting to hide/show time in agenda items. 110Added setting to hide/show time in agenda items.
94Added setting to hide not running todos in todo view. 111Added setting to hide not running todos in todo view.
95Added columns for start date/time in todo view. 112Added columns for start date/time in todo view.
96Replaced the solid half-hour lines in agenda view by dot lines. 113Replaced the solid half-hour lines in agenda view by dot lines.
97Added possibility of printing the What's Next View on the desktop 114Added possibility of printing the What's Next View on the desktop
98(i.e. Windows and Linux). 115(i.e. Windows and Linux).
99Fixed a crash in KO/Pi when starting KO/Pi with What's Next view. 116Fixed a crash in KO/Pi when starting KO/Pi with What's Next view.
100Added tooltips in month view.(Tooltips only available on desktop) 117Added tooltips in month view.(Tooltips only available on desktop)
101 118
102Fixed a strange problem in KO/Pi alarm applet. 119Fixed a strange problem in KO/Pi alarm applet.
103Did not find the actual problem, 120Did not find the actual problem,
104such that now Qtopia reboots again if deinstalling the alarm applet. 121such that now Qtopia reboots again if deinstalling the alarm applet.
105But the alarm applet should work again. 122But the alarm applet should work again.
106 123
107KA/Pi: 124KA/Pi:
108Fixed the problem, that internal pictures were not saved. 125Fixed the problem, that internal pictures were not saved.
109 126
110Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes. 127Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes.
111 128
112Fixed some minor problems. (Like word wrap in help text windows). 129Fixed some minor problems. (Like word wrap in help text windows).
113 130
114Fixed a compiling problem in microkde/kresources. 131Fixed a compiling problem in microkde/kresources.
115 132
116KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM. 133KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM.
117This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9) 134This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9)
118such that now syncing KO/Pi with Sharp DTM should work on the 135such that now syncing KO/Pi with Sharp DTM should work on the
119Zaurus C 3000 model. 136Zaurus C 3000 model.
120 137
121********** VERSION 1.9.15 ************ 138********** VERSION 1.9.15 ************
122 139
123Usebilty enhancements in KO/Pi: 140Usebilty enhancements in KO/Pi:
124When clicking on the date in a month view cell, the day view is shown. 141When clicking on the date in a month view cell, the day view is shown.
125Old behaviour was, that the "new event" dialog popped up. 142Old behaviour was, that the "new event" dialog popped up.
126 143
127Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu). 144Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu).
128That means, you can restore the latest 145That means, you can restore the latest
129event/todo/journal you have deleted. 146event/todo/journal you have deleted.
130A journal is deleted, if you clear all the text of the journal. 147A journal is deleted, if you clear all the text of the journal.
131 148
132Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14. 149Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14.
133 150
134KA/Pi starting in 480x640 resolution: 151KA/Pi starting in 480x640 resolution:
135Hide the filter action in toolbar 152Hide the filter action in toolbar
136and added icons for undo/delete/redo in toolbar. 153and added icons for undo/delete/redo in toolbar.
137 154
138Change in OM/Pi ViewMail dialog: 155Change in OM/Pi ViewMail dialog:
139When clicking on the "delete" icon the mail is deleted after confirmation as usual. 156When clicking on the "delete" icon the mail is deleted after confirmation as usual.
140But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any). 157But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any).
141 158
142Fixed a crash when deleting mail-accounts in OM/Pi. 159Fixed a crash when deleting mail-accounts in OM/Pi.
143 160
144 161
145********** VERSION 1.9.14 ************ 162********** VERSION 1.9.14 ************
146 163
147Fixed some problems with the dialog sizes when switching 164Fixed some problems with the dialog sizes when switching
148portrait/landscape mode on 640x480 PDA display. 165portrait/landscape mode on 640x480 PDA display.
149 166
150Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi. 167Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi.
151 168
152Fixed an ugly bug in KOpieMail: 169Fixed an ugly bug in KOpieMail:
153KOpieMail was not able to write files (mails) to MSDOS file system, 170KOpieMail was not able to write files (mails) to MSDOS file system,
154like on an usual preformatted SD card. That should work now. 171like on an usual preformatted SD card. That should work now.
155To save your mail data on the Sd card do the following: 172To save your mail data on the Sd card do the following:
156Create a dir on the SD card: 173Create a dir on the SD card:
157mkdir /mnt/card/localmail 174mkdir /mnt/card/localmail
158Go to your home dir: 175Go to your home dir:
159cd 176cd
160Go to kopiemail data storage dir: 177Go to kopiemail data storage dir:
161cd kdepim/apps/kopiemail 178cd kdepim/apps/kopiemail
162Create a symlink to the SD card: 179Create a symlink to the SD card:
163ls -s /mnt/card/localmail 180ls -s /mnt/card/localmail
164Now KOpieMail will store all mails on the SD card. 181Now KOpieMail will store all mails on the SD card.
165 182
166KO/Pi Monthview: 183KO/Pi Monthview:
167Now "Go to Today" selects the current month from day 1-end, 184Now "Go to Today" selects the current month from day 1-end,
168not the current date + some days. 185not the current date + some days.
169I.e. "Go to Today" shows now always 186I.e. "Go to Today" shows now always
170the current month with first day of month in the first row. 187the current month with first day of month in the first row.
171 188
172Added missing German translation. 189Added missing German translation.
173 190
174Fixed icons of executeable on Wintendo. 191Fixed icons of executeable on Wintendo.
175 192
176Added a "Show next Mail" button to the OM/Pi 193Added a "Show next Mail" button to the OM/Pi
177mail viewer such that the mail below the current mail 194mail viewer such that the mail below the current mail
178in the mail list view of the current folder 195in the mail list view of the current folder
179can be read with a single click. 196can be read with a single click.
180 197
181 198
182********** VERSION 1.9.13 ************ 199********** VERSION 1.9.13 ************
183 200
184Fixed nasty PwM/Pi file reading bug, when 201Fixed nasty PwM/Pi file reading bug, when
185the used hash algo of file is different then the global 202the used hash algo of file is different then the global
186hash algo. 203hash algo.
187 204
188Added KA/Pi support for opie mailit mailapplication. 205Added KA/Pi support for opie mailit mailapplication.
189 206
190Fixed some bugs in OM/Pi. 207Fixed some bugs in OM/Pi.
191Now character conversion tables are available for the Zaurus 208Now character conversion tables are available for the Zaurus
192to make OM/Pi working properly. 209to make OM/Pi working properly.
193To get the character conversion in OM/Pi working, please download 210To get the character conversion in OM/Pi working, please download
194at the sourceforge project site the package 211at the sourceforge project site the package
195sr-character-conversion_SharpROM_arm.ipk.zip 212sr-character-conversion_SharpROM_arm.ipk.zip
196(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms) 213(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms)
197from the section "general files for KDE/Pim" 214from the section "general files for KDE/Pim"
198Instructions how to install this package are in a ReadMe in this file. 215Instructions how to install this package are in a ReadMe in this file.
199 216
200 217
201Fixed the orientation change problem in KA/Pi when switching 218Fixed the orientation change problem in KA/Pi when switching
202portrait/landscape mode. 219portrait/landscape mode.
203 220
204French translation available for KA/Pi and OM/Pi. 221French translation available for KA/Pi and OM/Pi.
205 222
206Fixed some problems with categories in KO/Pi in DTM sync. 223Fixed some problems with categories in KO/Pi in DTM sync.
207 224
208Added selection dialog for export to phone in KA/Pi. 225Added selection dialog for export to phone in KA/Pi.
209 226
210If in KO/Pi is an attendee selected to add to a meeting and this 227If in KO/Pi is an attendee selected to add to a meeting and this
211attendee is already in the list of attendees, this person is not added 228attendee is already in the list of attendees, this person is not added
212again. 229again.
213 230
214Some menu cleanup in KA/Pi. 231Some menu cleanup in KA/Pi.
215 232
216********** VERSION 1.9.12 ************ 233********** VERSION 1.9.12 ************
217 234
218Fix for the bug in KO/Pi What's Next view of version 1.9.11. 235Fix for the bug in KO/Pi What's Next view of version 1.9.11.
219 236
220Bugfix: Licence file is now shown again. 237Bugfix: Licence file is now shown again.
221 238
222OM/Pi now supports Unicode (utf8 charset). 239OM/Pi now supports Unicode (utf8 charset).
223Fixed some bugs in OM/Pi. 240Fixed some bugs in OM/Pi.
224 241
225KA/Pi has more German translation. 242KA/Pi has more German translation.
226 243
227 244
228********** VERSION 1.9.11 ************ 245********** VERSION 1.9.11 ************
229 246
230Fixed several problems in PWM/Pi, like 247Fixed several problems in PWM/Pi, like
231asking the user, if unsaved changed are pending 248asking the user, if unsaved changed are pending
232when closing the app. 249when closing the app.
233And PwM/Pi handles now different texts for the 250And PwM/Pi handles now different texts for the
234fields Description, Username, Password, configurable per category. 251fields Description, Username, Password, configurable per category.
235 252
236Fixed a crash in KO/Pi , when importing/loading vcs files 253Fixed a crash in KO/Pi , when importing/loading vcs files
237which have an entry with an attendee with state: 254which have an entry with an attendee with state:
238NEEDS ACTION 255NEEDS ACTION
239 256
240Fixed some problems in the German translation of OM/Pi, 257Fixed some problems in the German translation of OM/Pi,
241which makes some dialogs not fitting on the screen 258which makes some dialogs not fitting on the screen
242of the Z 5500. 259of the Z 5500.
243 260
244Fixed Qtopia crash, when disabling/deinstalling 261Fixed Qtopia crash, when disabling/deinstalling
245KO/Pi alarm applet. 262KO/Pi alarm applet.
246 263
247Implemented direct KDE<->KA/Pi sync for KA/Pi running 264Implemented direct KDE<->KA/Pi sync for KA/Pi running
248on Linux desktop. 265on Linux desktop.
249 266
250Added feature "remove sync info" to sync menu. 267Added feature "remove sync info" to sync menu.
251 268
252Tweaked the KO/Pi What's next view a bit, added 269Tweaked the KO/Pi What's next view a bit, added
253setting to hide events that are done. 270setting to hide events that are done.
254 271
255Disabled "beam receive enabled" on startup to 272Disabled "beam receive enabled" on startup to
256avoid problems if Fastload is enabled. 273avoid problems if Fastload is enabled.
257Please set "beam receive enabled", 274Please set "beam receive enabled",
258if you want to receive data via IR. 275if you want to receive data via IR.
259 276
260Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running 277Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running
261on Linux desktop. 278on Linux desktop.
262 279
263Made in KA/Pi scrolling possible, if details view is selected. 280Made in KA/Pi scrolling possible, if details view is selected.
264(The keyboard focus is set automatically to the search line) 281(The keyboard focus is set automatically to the search line)
265 282
266Fixed a bug in DMT sync, that a new entry in DTM was added 283Fixed a bug in DMT sync, that a new entry in DTM was added
267on every sync to Kx/Pi. 284on every sync to Kx/Pi.
268 285
269Fixed missing writing of KA/Pi categories to DMT entries when syncing. 286Fixed missing writing of KA/Pi categories to DMT entries when syncing.
270 287
271Fixed a bug in DMT sync with todos created in KO/Pi containing 288Fixed a bug in DMT sync with todos created in KO/Pi containing
272non-latin1 characters. 289non-latin1 characters.
273 290
274Rearranged package contents of Sharp-ipks and made all 291Rearranged package contents of Sharp-ipks and made all
275packages installable on SD again. 292packages installable on SD again.
276 293
277Fixed the writing of addressbook data in DTM sync. 294Fixed the writing of addressbook data in DTM sync.
278Empty fields in KA/Pi were not removed. 295Empty fields in KA/Pi were not removed.
279 296
280Added better category handling in KA/Pi: 297Added better category handling in KA/Pi:
281Added item 298Added item
282Edit Categories and 299Edit Categories and
283Manage new categories 300Manage new categories
284to the settings menu. 301to the settings menu.
285Possible to configure a view to display categories. 302Possible to configure a view to display categories.
286 303
287Added detailed "KDE Sync Howto" and "Multi Sync Howto" to Help menu. 304Added detailed "KDE Sync Howto" and "Multi Sync Howto" to Help menu.
288 305
289Fixed displaying of "free" days and time in KO Monthview and Agendaview. 306Fixed displaying of "free" days and time in KO Monthview and Agendaview.
290 307
291... and many other bugfixes. 308... and many other bugfixes.
292 309
293********** VERSION 1.9.10 ************ 310********** VERSION 1.9.10 ************
294 311
295Many internal small bugfixes. 312Many internal small bugfixes.
296And fix of the "big" bug in KO/Pi, 313And fix of the "big" bug in KO/Pi,
297that after Syncing the appointments had an offset by several hours. 314that after Syncing the appointments had an offset by several hours.
298That was a problem with the internal timezone setting, 315That was a problem with the internal timezone setting,
299introduced by the changed timezone configuration settings. 316introduced by the changed timezone configuration settings.
300 317
301German translation for OM/Pi is now available. 318German translation for OM/Pi is now available.
302 319
303 320
304********** VERSION 1.9.9 ************ 321********** VERSION 1.9.9 ************
305 322
306KDE-Pim/Pi has a new Member! 323KDE-Pim/Pi has a new Member!
307It is called PWM/Pi (Passwordmanager/platform-independent) 324It is called PWM/Pi (Passwordmanager/platform-independent)
308and it is available for the Zaurus. 325and it is available for the Zaurus.
309It is planned, that it will be available later for Windows. 326It is planned, that it will be available later for Windows.
310(And for Linux, of course). 327(And for Linux, of course).
311It is a port of the Passwordmanager of KDE. 328It is a port of the Passwordmanager of KDE.
312It will need the MicroKDElibs to run. 329It will need the MicroKDElibs to run.
313 330
314Made loading of addressbooks in KA/Pi up to 7 times faster! 331Made loading of addressbooks in KA/Pi up to 7 times faster!
315The bigger your addressbook file, the more starting speed 332The bigger your addressbook file, the more starting speed
316will you gain. (relatively) 333will you gain. (relatively)
317 334
318The Qtopia addressbook connector is now platform independend 335The Qtopia addressbook connector is now platform independend
319as well and should work on any platform for importing/exporting 336as well and should work on any platform for importing/exporting
320Qtopia and Opie XML files. 337Qtopia and Opie XML files.
321 338
322Added a +30min feature to the timezone settings to make 339Added a +30min feature to the timezone settings to make
323KDE-Pim/Pi useable in Australia and other parts on the 340KDE-Pim/Pi useable in Australia and other parts on the
324world with strange timezones ;-) 341world with strange timezones ;-)
325 342
326German "Umlaute" should now be sorted correctly on the Z in KA/Pi. 343German "Umlaute" should now be sorted correctly on the Z in KA/Pi.
327 344
328It is now possible to disable the 345It is now possible to disable the
329"receive data via infrared" feature, such that syncing with 346"receive data via infrared" feature, such that syncing with
330Outlook is now possible again with Kx/Pi runing. 347Outlook is now possible again with Kx/Pi runing.
331Please disable it, before syncing Sharp DTM with Outlook. 348Please disable it, before syncing Sharp DTM with Outlook.
332For your convenience, the "receive data via infrared" feature 349For your convenience, the "receive data via infrared" feature
333is disabled automatically, if you sync Kx/Pi with DTM. 350is disabled automatically, if you sync Kx/Pi with DTM.
334You have to enable it again manually after syncing. 351You have to enable it again manually after syncing.
335Enabling this feature makes it impossible to start the 352Enabling this feature makes it impossible to start the
336Sharp DTM apps. If this feature is enabled, you will only get the 353Sharp DTM apps. If this feature is enabled, you will only get the
337alarm notification from KO/Pi and not from the Sharp calendar. 354alarm notification from KO/Pi and not from the Sharp calendar.
338This is very useful if you sync KO/Pi with Sharp DTM, 355This is very useful if you sync KO/Pi with Sharp DTM,
339because after syncing you usually would get notified about 356because after syncing you usually would get notified about
340an alarm by KO/Pi and the Sharp Calendar. 357an alarm by KO/Pi and the Sharp Calendar.
341 358
342Together with the Linux desktop version of KO/Pi 359Together with the Linux desktop version of KO/Pi
343it is now possible to sync KO/Pi on the Zaurus 360it is now possible to sync KO/Pi on the Zaurus
344with the complete KDE-desktop (3.3 or later) 361with the complete KDE-desktop (3.3 or later)
345calendar data easily. 362calendar data easily.
346That makes it possible to sync the Z with one 363That makes it possible to sync the Z with one
347click of a mouse with the KDE-Desktop. 364click of a mouse with the KDE-Desktop.
348This feature it available for all Zaurus platforms KO/Pi 365This feature it available for all Zaurus platforms KO/Pi
349is running on. 366is running on.
350The only thing needed is a running KO/Pi on Linux and 367The only thing needed is a running KO/Pi on Linux and
351a compiled version of the small 368a compiled version of the small
352KDE-Pim/Pi<->KDE-Desktop access command line program, 369KDE-Pim/Pi<->KDE-Desktop access command line program,
353which is in the KDE-Pim/Pi sources available. 370which is in the KDE-Pim/Pi sources available.
354 371
355The "KDE-desktop" syncing feature for KA/Pi will follow 372The "KDE-desktop" syncing feature for KA/Pi will follow
356in the next releases. 373in the next releases.
357 374
358Fixed the vcard export bug, which had the version 1.9.8. 375Fixed the vcard export bug, which had the version 1.9.8.
359 376
360Added missing GERMAN translation to KO/Pi. 377Added missing GERMAN translation to KO/Pi.
361Hi PsionX, could you add the missing french translation?Thx! 378Hi PsionX, could you add the missing french translation?Thx!
362 379
363Translation files for KA/Pi are available as well. 380Translation files for KA/Pi are available as well.
364GERMAN translation will be available in the next release. 381GERMAN translation will be available in the next release.
365PsionX ( yres, you again ;-) ), could you start translating 382PsionX ( yres, you again ;-) ), could you start translating
366KA/Pi? Thx! 383KA/Pi? Thx!
367 384
368You can download the version 1.9.9 at 385You can download the version 1.9.9 at
369 386
370http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604 387http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604
371 388
372Note: 389Note:
373To run the mail program OM/Pi you need libopenssl. 390To run the mail program OM/Pi you need libopenssl.
374A link to a download loaction is available at 391A link to a download loaction is available at
375ZSI at www.killefiz.de 392ZSI at www.killefiz.de
376 393
377 394
378********** VERSION 1.9.8 ************ 395********** VERSION 1.9.8 ************
379 396
380Fixed character decoding in OM/Pi. 397Fixed character decoding in OM/Pi.
381(e.g. German "Umlaute" were not displayed properly.) 398(e.g. German "Umlaute" were not displayed properly.)
382 399
383Made is possible to reparent todos in KO/Pi. 400Made is possible to reparent todos in KO/Pi.
384Use contextmenu or keys (look at Help-Keys + Colors) for that. 401Use contextmenu or keys (look at Help-Keys + Colors) for that.
385 402
386Added the missing Sync-Howto and WhatsNew to the packages. 403Added the missing Sync-Howto and WhatsNew to the packages.
387 404
388KO/Pi on Linux desktop can now sync with KDE desktop. 405KO/Pi on Linux desktop can now sync with KDE desktop.
389That means: When using KO/Pi on Linux desktop for syncing with 406That means: When using KO/Pi on Linux desktop for syncing with
390KDE desktop and the Zaurus, the Zaurus can be synced now 407KDE desktop and the Zaurus, the Zaurus can be synced now
391with all KDE-Calendar resources, not only with one local file. 408with all KDE-Calendar resources, not only with one local file.
392(That makes it possible to sync the Zaurus with the 409(That makes it possible to sync the Zaurus with the
393calendar data on a Kolab server) 410calendar data on a Kolab server)
394 411
395KA/Pi syncing with KDE desktop will be available in the next version. 412KA/Pi syncing with KDE desktop will be available in the next version.
396 413
397 414
398********** VERSION 1.9.7 ************ 415********** VERSION 1.9.7 ************
399 416
400KO/Pi - KA/Pi on Windows: 417KO/Pi - KA/Pi on Windows:
401Now a directory can be defined by the user, where the 418Now a directory can be defined by the user, where the
402application/config data should be saved. 419application/config data should be saved.
403 Define your desired path in the evironment variable 420 Define your desired path in the evironment variable
404 MICROKDEHOME 421 MICROKDEHOME
405 before starting KO/Pi or KA/Pi. 422 before starting KO/Pi or KA/Pi.
406 423
407An easy Kx/Pi to Kx/Pi syncing is now possible 424An easy Kx/Pi to Kx/Pi syncing is now possible
408(it is called Pi-Sync) via network. 425(it is called Pi-Sync) via network.
409Please look at the Sync Howto. 426Please look at the Sync Howto.
410 427
411Exporting of calendar data and contacts to mobile phones is now possible. 428Exporting of calendar data and contacts to mobile phones is now possible.
412The SyncHowto is updated with information howto 429The SyncHowto is updated with information howto
413access/sync mobile phones. 430access/sync mobile phones.
414Please look at the Sync Howto. 431Please look at the Sync Howto.
415 432
416Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly. 433Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly.
417Please disable Fastload for the original contact/calendar applications 434Please disable Fastload for the original contact/calendar applications
418and close them. 435and close them.
419KO/Pi and KA/Pi must be running in order to receive the data. 436KO/Pi and KA/Pi must be running in order to receive the data.
420(KO/Pi and KA/Pi are always running if Fastload for them is enabled!) 437(KO/Pi and KA/Pi are always running if Fastload for them is enabled!)
421 438
422In the KA/Pi details view are now the preferred tel. numbers displayed on top 439In the KA/Pi details view are now the preferred tel. numbers displayed on top
423of the other data ( emails/tel.numbers/addresses) 440of the other data ( emails/tel.numbers/addresses)
424 441
425Fixed some syncing problems in KA/Pi. 442Fixed some syncing problems in KA/Pi.
426 443
427Added font settings for the KA/Pi details view. 444Added font settings for the KA/Pi details view.
428Added fields "children's name" and "gender" to KA/Pi. 445Added fields "children's name" and "gender" to KA/Pi.
429 446
430Made searching in KA/Pi better: 447Made searching in KA/Pi better:
431Now the first item in a view is selected after a search automatically and 448Now the first item in a view is selected after a search automatically and
432the views can be scrolled up/down when the search input field has the keyboard focus. 449the views can be scrolled up/down when the search input field has the keyboard focus.
433 450
434And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi. 451And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi.
435 452
436 453
437********** VERSION 1.9.6 ************ 454********** VERSION 1.9.6 ************
438 455
439Changes in the external application communication on the Zaurus 456Changes in the external application communication on the Zaurus
440in order to use less RAM when the apps are running. 457in order to use less RAM when the apps are running.
441First syncing of addressbooks (KA/Pi) is possible. 458First syncing of addressbooks (KA/Pi) is possible.
442 459
443 460
444********** VERSION 1.9.5a ************ 461********** VERSION 1.9.5a ************
445 462
446Fixed a bug in KO/Pi in the SharpDTM sync of version 1.9.5. 463Fixed a bug in KO/Pi in the SharpDTM sync of version 1.9.5.
447Fixed some small bugs. 464Fixed some small bugs.
448KA/Pi shows now the birthday in summary view. 465KA/Pi shows now the birthday in summary view.
449Now OM/Pi and KA/Pi are using the date format defined in KO/Pi 466Now OM/Pi and KA/Pi are using the date format defined in KO/Pi
450for displaying dates. 467for displaying dates.
451 468
452 469
453********** VERSION 1.9.5 ************ 470********** VERSION 1.9.5 ************
454 471
455There is still no Addressbook syncing! 472There is still no Addressbook syncing!
456 473
457New in 1.9.5: 474New in 1.9.5:
458 475
459Many bugfixes. 476Many bugfixes.
460Better searching in KA/Pi. 477Better searching in KA/Pi.
461You can configure in KA/Pi if you want to search only after 478You can configure in KA/Pi if you want to search only after
462<return> key pressed. 479<return> key pressed.
463 480
464Better mail downloading in OM/Pi. 481Better mail downloading in OM/Pi.
465 482
466First experimental alpha version of sync of KO/Pi with mobile phones. 483First experimental alpha version of sync of KO/Pi with mobile phones.
467See gammu documentation for supported phones. 484See gammu documentation for supported phones.
468You 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. 485You 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.
469Quick hint how to use: 486Quick hint how to use:
470NOTE: MOBILE PHONE SYNC IS EXPERIMENTAL! 487NOTE: MOBILE PHONE SYNC IS EXPERIMENTAL!
471Install kammu_1.9.5_arm.ipk , libbluetooth and libsdp. 488Install kammu_1.9.5_arm.ipk , libbluetooth and libsdp.
472Create syncprofile - mobile device 489Create syncprofile - mobile device
473Remove entry for model. (Leave empty ). 490Remove entry for model. (Leave empty ).
474Enable infrared on Zaurus and your Phone. 491Enable infrared on Zaurus and your Phone.
475Sync. 492Sync.
476To get a more detailed log, start kopi from konsole. 493To get a more detailed log, start kopi from konsole.
477 494
478********** VERSION 1.9.4 ************ 495********** VERSION 1.9.4 ************
479 496
480This is the version 1.9.4 of KDE-Pim/Pi for the Zaurus. 497This is the version 1.9.4 of KDE-Pim/Pi for the Zaurus.
481 498
482WARNING: 499WARNING:
483PLEASE BACKUP ALL YOUR DATA! 500PLEASE BACKUP ALL YOUR DATA!
484We have changed a lot and maybe there are some unknown problems. 501We have changed a lot and maybe there are some unknown problems.
485 502
486SYNC HANDLING HAS CHANGED! 503SYNC HANDLING HAS CHANGED!
487Such that, if you sync now with an already synded device, you will duplicated entries after the first sync. 504Such that, if you sync now with an already synded device, you will duplicated entries after the first sync.
488(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks). 505(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks).
489 506
490You need the kmicrokdelibs_1.9.4_arm.ipk as a base for the other programs. 507You need the kmicrokdelibs_1.9.4_arm.ipk as a base for the other programs.
491If 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. 508If 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.
492 509
493As programs are available: 510As programs are available:
494KO/Pi (korganizer ipk) - a calendar program. 511KO/Pi (korganizer ipk) - a calendar program.
495KA/Pi (kaddressbook ipk ) - an addressbook 512KA/Pi (kaddressbook ipk ) - an addressbook
496OM/Pi (kopiemail ipk ) an email program with pop/smtp and IMAP support. 513OM/Pi (kopiemail ipk ) an email program with pop/smtp and IMAP support.
497 514
498An alarm notification program ( korganizer-alarm ipk ) for KO/Pi that notifies you about alarms, even if the Zaurus is in suspend mode. 515An alarm notification program ( korganizer-alarm ipk ) for KO/Pi that notifies you about alarms, even if the Zaurus is in suspend mode.
499(If you do not see an icon in the taskbar after installing korganizer-alarm, please restart Qtopia) 516(If you do not see an icon in the taskbar after installing korganizer-alarm, please restart Qtopia)
500 517
501All the applications are installed in a "Pim" TAB. 518All the applications are installed in a "Pim" TAB.
502If 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 519If 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
503 520
504All the application are integrated. 521All the application are integrated.
505Such 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. 522Such 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.
506 523
507HINT: 524HINT:
508If you install KPhone/Pi 0.9.7, it will be called, if you click in KA/Pi on a phone number. 525If you install KPhone/Pi 0.9.7, it will be called, if you click in KA/Pi on a phone number.
509 526
510What's new? 527What's new?
511 528
512SYNC HANDLING HAS CHANGED! 529SYNC HANDLING HAS CHANGED!
513Such that, if you sync now with an already synded device, you will duplicated entries after the first sync. 530Such that, if you sync now with an already synded device, you will duplicated entries after the first sync.
514(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks). 531(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks).
515 532
516New in OM/Pi: 533New in OM/Pi:
517When 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. 534When 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.
518 535
519New in KO/Pi: 536New in KO/Pi:
520French is now available for KO/Pi. 537French is now available for KO/Pi.
521Choose menu:Actions - Configure:TAB locale 538Choose menu:Actions - Configure:TAB locale
522Syncing has changed. 539Syncing has changed.
523Phone sync available soon. 540Phone sync available soon.
524Not much changes, I cannot remember them ... 541Not much changes, I cannot remember them ...
525 542
526New in KA/Pi: 543New in KA/Pi:
527Beaming possible. 544Beaming possible.
528Sharp DTM readonly access possible( create a new DTM resource ); 545Sharp DTM readonly access possible( create a new DTM resource );
529Better searching possible. 546Better searching possible.
530Search is performed only after pressing the return key. 547Search is performed only after pressing the return key.
531Use wildcard * to specify parts of a name. 548Use wildcard * to specify parts of a name.
532 549
533Better 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 * . 550Better 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 * .
534 551
535A big improvement is the new management of the contact access. 552A big improvement is the new management of the contact access.
536In version 1.9.3, every application was using their own addressbook access data. 553In version 1.9.3, every application was using their own addressbook access data.
537That means, the addressbook was loaded up to three times in the memory, when accessed by KA/Pi, KO/Pi and OM/Pi. 554That means, the addressbook was loaded up to three times in the memory, when accessed by KA/Pi, KO/Pi and OM/Pi.
538That was wasting of memory, if you had several hundreds of contacts. 555That was wasting of memory, if you had several hundreds of contacts.
539 556
540Now only KA/Pi accesses the addressbook. 557Now only KA/Pi accesses the addressbook.
541If 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. 558If 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.
542If you click on an attendee in a meeting, its contact data is displayed in KA/Pi directly. 559If you click on an attendee in a meeting, its contact data is displayed in KA/Pi directly.
543That means, if KO/Pi or OM/Pi want to access contact data, KA/Pi is started first. 560That means, if KO/Pi or OM/Pi want to access contact data, KA/Pi is started first.
544 561
545New in the KO/Pi alarm applet: 562New in the KO/Pi alarm applet:
546Configure your own timer popup menu! 563Configure your own timer popup menu!
547(Text and minutes for timer countdown) 564(Text and minutes for timer countdown)
548Just edit the file 565Just edit the file
549(yourhomedir)/.kopialarmtimerrc 566(yourhomedir)/.kopialarmtimerrc
550and start/stop a timer to get a new menu with the data of this file. 567and start/stop a timer to get a new menu with the data of this file.
551 568
552********** VERSION 1.9.3 ************ 569********** VERSION 1.9.3 ************
5531) 5701)
554Now KO/Pi on Windows imports directly the calendar data of 571Now KO/Pi on Windows imports directly the calendar data of
555an installed Outlook. Should work with OL version >= 2000. 572an installed Outlook. Should work with OL version >= 2000.
556 573
557********** VERSION 1.9.2 ************ 574********** VERSION 1.9.2 ************
5581) 5751)
559KDE-Pim/Pi has got a new member: 576KDE-Pim/Pi has got a new member:
560KmicroMail (KM/Pi) is a mail program, 577KmicroMail (KM/Pi) is a mail program,
561which can handle IMAP and POP mail access. 578which can handle IMAP and POP mail access.
562It is based on Opie-Mail v3. 579It is based on Opie-Mail v3.
563All dependencies to the Opie libraries ar removed, 580All dependencies to the Opie libraries ar removed,
564such that no additional Opie lib is needed. 581such that no additional Opie lib is needed.
565It is already integrated in KO/Pi and KA/Pi. 582It is already integrated in KO/Pi and KA/Pi.
566It it now available for the Zaurus,probably it 583It it now available for the Zaurus,probably it
567will be available for other platforms later. 584will be available for other platforms later.
568Hint: 585Hint:
569Create your own contact (name + email) 586Create your own contact (name + email)
570in KA/Pi, select this contact and choose menu: 587in KA/Pi, select this contact and choose menu:
571Settings - Set Who Am I. 588Settings - Set Who Am I.
572Now the settings of this contact are used as 589Now the settings of this contact are used as
573the sender data in KM/Pi. 590the sender data in KM/Pi.
5742) 5912)
575KDE-Pim/Pi is split up in five different 592KDE-Pim/Pi is split up in five different
576packages now precompiled for Sharp Zaurus: 593packages now precompiled for Sharp Zaurus:
577--kmicrokdelibs_1.9.2_arm.ipk 594--kmicrokdelibs_1.9.2_arm.ipk
578The libs are needed for any 595The libs are needed for any
579of the following programs: 596of the following programs:
580--kaddressbook_1.9.2_arm.ipk 597--kaddressbook_1.9.2_arm.ipk
581--kmicromail_1.9.2_arm.ipk 598--kmicromail_1.9.2_arm.ipk
582--korganizer_1.9.2_arm.ipk 599--korganizer_1.9.2_arm.ipk
583Independ from that, there is the alarm applet 600Independ from that, there is the alarm applet
584available for KO/Pi, which also offers 601available for KO/Pi, which also offers
585quick access for a new mail or 602quick access for a new mail or
586showing the addressbook.: 603showing the addressbook.:
587--korganizer-alarm_1.9.2_arm.ipk 604--korganizer-alarm_1.9.2_arm.ipk
588Independend means, that the alarm applet 605Independend means, that the alarm applet
589does not need any of the libs or programs above to run. 606does not need any of the libs or programs above to run.
590But it would be quite useless without these programs. 607But it would be quite useless without these programs.
591NOTE: 608NOTE:
592If you get a 609If you get a
593"This application depends on other programs" 610"This application depends on other programs"
594during installation of 611during installation of
595--kmicrokdelibs_1.9.2_arm.ipk 612--kmicrokdelibs_1.9.2_arm.ipk
596you probably do not have to care about that. 613you probably do not have to care about that.
597kmicrokdelibs_1.9.2 will come with some 614kmicrokdelibs_1.9.2 will come with some
598resource plugins, which needs additional libraries. 615resource plugins, which needs additional libraries.
599(E.g. libopie1, if you want to use the 616(E.g. libopie1, if you want to use the
600opie resource connector in KA/Pi). 617opie resource connector in KA/Pi).
601If you do not have this libraries installed, 618If you do not have this libraries installed,
602you simply cannot use the resource. 619you simply cannot use the resource.
603To make it clear: 620To make it clear:
604If the libraries are missing, the applications 621If the libraries are missing, the applications
605using kmicrokdelibs will start, 622using kmicrokdelibs will start,
606because the resources are plugins. 623because the resources are plugins.
6073) 6243)
608KO/Pi and friends are now installable on SD-Card! 625KO/Pi and friends are now installable on SD-Card!
609It is recommended to install all libs and apps 626It is recommended to install all libs and apps
610on the SD card or all in the internal storage. 627on the SD card or all in the internal storage.
611There may be problems, if this is mixed. 628There may be problems, if this is mixed.
6124) 6294)
613Fixed two bugs in the alarm notification on Windows. 630Fixed two bugs in the alarm notification on Windows.
6145) 6315)
615Great improvement! 632Great improvement!
616KO/Pi uses now the latest version of libical. 633KO/Pi uses now the latest version of libical.
617Libical is the library which actually reads 634Libical is the library which actually reads
618the calendar files and extract the data from it. 635the calendar files and extract the data from it.
619With the old version, there were problems 636With the old version, there were problems
620(crashes or program hangs) when licical did read 637(crashes or program hangs) when licical did read
621files, which were not stored from KO/Pi. 638files, which were not stored from KO/Pi.
622I do not know, if the new libical works perfect, 639I do not know, if the new libical works perfect,
623but actually it works much better than 640but actually it works much better than
624the old version. 641the old version.
625There are no problems with compatibility with 642There are no problems with compatibility with
626old calendar files of KO/Pi, of course! 643old calendar files of KO/Pi, of course!
6276) 6446)
628New in KA/Pi: 645New in KA/Pi:
629Opie addressbook resource connector available! 646Opie addressbook resource connector available!
630You will need libopie1 and the opie addressbook, 647You will need libopie1 and the opie addressbook,
631of course. 648of course.
632With the Opie addressbook resource connector, 649With the Opie addressbook resource connector,
633you can access the Opie addressbook readonly in KA/Pi. 650you can access the Opie addressbook readonly in KA/Pi.
634If you want to edit or import the data into KA/Pi, 651If you want to edit or import the data into KA/Pi,
635do this: 652do this:
636a) Create an Opie resource. 653a) Create an Opie resource.
637 (Menu: Settings-Configure Resources). 654 (Menu: Settings-Configure Resources).
638After configuration and restarting KA/Pi you should see 655After configuration and restarting KA/Pi you should see
639the Opie contacts in KA/Pi. 656the Opie contacts in KA/Pi.
640b) Select some or all Opie contacts. 657b) Select some or all Opie contacts.
641(NOTE: +++++ 658(NOTE: +++++
642To know exactly, what contacts are Opie contacts, 659To know exactly, what contacts are Opie contacts,
643do this: Choose menu: 660do this: Choose menu:
644View-Modify View - TAB Fields. 661View-Modify View - TAB Fields.
645Select in the above list "Resource" and click 662Select in the above list "Resource" and click
646down arrow to add it to the "Selected fields". 663down arrow to add it to the "Selected fields".
647Click OK. 664Click OK.
648Now you have a new column "Resource" in your list, 665Now you have a new column "Resource" in your list,
649where you can see, what an Opie resource is. 666where you can see, what an Opie resource is.
650++++ NOTE end.) 667++++ NOTE end.)
651Ok, we do have now some Opie contacts seleted. 668Ok, we do have now some Opie contacts seleted.
652(Use SHIFT or CTRL key in order to multiple select). 669(Use SHIFT or CTRL key in order to multiple select).
653c) Choose menu: Edit-Copy. 670c) Choose menu: Edit-Copy.
654d) Choose menu: Edit-Paste. 671d) Choose menu: Edit-Paste.
655e) Select the resource, you want to add the contacts to. 672e) Select the resource, you want to add the contacts to.
656Congrats! Now you have read/write access to the copied 673Congrats! Now you have read/write access to the copied
657opie contacts as "real" KA/Pi contacts. 674opie contacts as "real" KA/Pi contacts.
658 675
659 676
660********** VERSION 1.9.1 ************ 677********** VERSION 1.9.1 ************
6611) 6781)
662 +++ IMPORTANT 1 +++ 679 +++ IMPORTANT 1 +++
663 680
664The storing place of the default calendar 681The storing place of the default calendar
665file has changed! 682file has changed!
666The default calendar file was 683The default calendar file was
667Applications/korganizer/mycalendar.ics 684Applications/korganizer/mycalendar.ics
668on Zaurus and 685on Zaurus and
669(yourHomeDir)/korganizer/mycalendar.ics 686(yourHomeDir)/korganizer/mycalendar.ics
670on Windows/Linux desktop. Now it is 687on Windows/Linux desktop. Now it is
671(yourHomeDir)/kdepim/korganizer/mycalendar.ics 688(yourHomeDir)/kdepim/korganizer/mycalendar.ics
672on Zaurus, Windows and Linux. 689on Zaurus, Windows and Linux.
673To load the old file, choose menu 690To load the old file, choose menu
674File-Load calendar backup. 691File-Load calendar backup.
675(It should be loaded automatically 692(It should be loaded automatically
676at startup with a warning message displayed). 693at startup with a warning message displayed).
677The place of the configuration file has changed too. 694The place of the configuration file has changed too.
678If you want to use your old KO/Pi config, 695If you want to use your old KO/Pi config,
679copy it to 696copy it to
680(yourHomeDir)/kdepim/config/korganizerrc 697(yourHomeDir)/kdepim/config/korganizerrc
681Please read VERSION 1.9.0 - topic 3) as well! 698Please read VERSION 1.9.0 - topic 3) as well!
682 699
683 +++ IMPORTANT 2 +++ 700 +++ IMPORTANT 2 +++
684 701
685Because of the new paths, you will need 702Because of the new paths, you will need
686a new version of the KO/Pi alarm applet 703a new version of the KO/Pi alarm applet
687for Zaurus. 704for Zaurus.
688Use version >= 1.9.1 705Use version >= 1.9.1
689 706
6902) 7072)
691Now the QWhat'sThis Icon works for items 708Now the QWhat'sThis Icon works for items
692in the month view as well. 709in the month view as well.
693(See VERSION 1.7.8 Topic 1) ). 710(See VERSION 1.7.8 Topic 1) ).
6943) 7113)
695You can import birtsdays/anniversaries 712You can import birtsdays/anniversaries
696from KA/Pi into KO/Pi. 713from KA/Pi into KO/Pi.
697Choose menu File-Import birthdays. 714Choose menu File-Import birthdays.
698If you import twice, already imported items 715If you import twice, already imported items
699will not be imported again, if they 716will not be imported again, if they
700have not been changed in KO/Pi. 717have not been changed in KO/Pi.
7014) 7184)
702When syncing with sharp DTM, now a progress 719When syncing with sharp DTM, now a progress
703is shown, when the data is written back. 720is shown, when the data is written back.
704If there is much data in KO/Pi and no data 721If there is much data in KO/Pi and no data
705in DTM, that can take a long time. 722in DTM, that can take a long time.
706(But only for the first time ). 723(But only for the first time ).
7075) 7245)
708In the search dialog, you can search 725In the search dialog, you can search
709now for the name/email of an attendee 726now for the name/email of an attendee
710of an event/todo. 727of an event/todo.
711To get more space for displaying 728To get more space for displaying
712search results, the buttons 729search results, the buttons
713for "search" and "close" on the 730for "search" and "close" on the
714bottom are removed in the PDA version. 731bottom are removed in the PDA version.
715You have to click OK in the top right 732You have to click OK in the top right
716corner to do a search. 733corner to do a search.
7176) 7346)
718Now it is possible to disable the displaying 735Now it is possible to disable the displaying
719of todo items in the Allday part of the Agenda. 736of todo items in the Allday part of the Agenda.
720Choose Menu Action-Configure, 737Choose Menu Action-Configure,
721TAB Todo View, checkbox 738TAB Todo View, checkbox
722"Allday Agenda view shows todos" 739"Allday Agenda view shows todos"
7237) 7407)
724If FastLoad is enabled, now the settings and the 741If FastLoad is enabled, now the settings and the
725calendar data are saved, when KO/Pi is closed. 742calendar data are saved, when KO/Pi is closed.
726(If no Fastload is enabled, KO/Pi saves 743(If no Fastload is enabled, KO/Pi saves
727the data as well, of course) 744the data as well, of course)
7288) 7458)
729The Agenda View has a minimize-splitter now, 746The Agenda View has a minimize-splitter now,
730such that the height of the allday part can be 747such that the height of the allday part can be
731changed quickly. 748changed quickly.
732 749
733********** VERSION 1.9.0 ************ 750********** VERSION 1.9.0 ************
7341) 7511)
735KO/Pi is now merged with the new microKDE from KA/Pi. 752KO/Pi is now merged with the new microKDE from KA/Pi.
736KO/Pi accesses now KA/Pi as the addressbook. 753KO/Pi accesses now KA/Pi as the addressbook.
737The other ddressbook-plugins are not working any longer. 754The other ddressbook-plugins are not working any longer.
738(It is planned, that later KA/Pi itself uses these plugins) 755(It is planned, that later KA/Pi itself uses these plugins)
739New versions of KO/Pi are only available 756New versions of KO/Pi are only available
740together with KA/Pi as the KDE-Pim/Pi package. 757together with KA/Pi as the KDE-Pim/Pi package.
7412) 7582)
742If you click on an attendee of a meeting in the 759If you click on an attendee of a meeting in the
743event viewer, a detailed summary of the 760event viewer, a detailed summary of the
744attendee is shown. 761attendee is shown.
7453) 7623)
746The place of the configuration file has changed. 763The place of the configuration file has changed.
747If you want to use your old KO/Pi config, copy 764If you want to use your old KO/Pi config, copy
748Applications/korganizer/config_korganizerrc 765Applications/korganizer/config_korganizerrc
749to 766to
750Applications/korganizer/config/korganizerrc 767Applications/korganizer/config/korganizerrc
751 768
752********** VERSION 1.7.8 ************ 769********** VERSION 1.7.8 ************
7531) 7701)
754Now the QWhat'sThis ist working. 771Now the QWhat'sThis ist working.
755Enable the QWhat'sThis icon in the toolbar. 772Enable the QWhat'sThis icon in the toolbar.
756(You have to restart to reload the changed toolbar config). 773(You have to restart to reload the changed toolbar config).
757Now click on the QWhat'sThis Icon 774Now click on the QWhat'sThis Icon
758in the top right corner of KO/Pi. 775in the top right corner of KO/Pi.
759Then click on an item in the Agenda View: 776Then click on an item in the Agenda View:
760You will get a detailed display of the items content. 777You will get a detailed display of the items content.
7612) 7782)
762Some other very minor changes. 779Some other very minor changes.
763But I have forgotten the details ... 780But I have forgotten the details ...
764For that reason I start this log here: 781For that reason I start this log here:
765To document my changes, when I am doing it. 782To document my changes, when I am doing it.
766 783
767********** VERSION 1.7.7 ************ 784********** VERSION 1.7.7 ************
768Stable Version of KO/Pi 785Stable Version of KO/Pi
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt
index 0eb46e8..d260be3 100644
--- a/bin/kdepim/korganizer/germantranslation.txt
+++ b/bin/kdepim/korganizer/germantranslation.txt
@@ -1,1198 +1,1201 @@
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{ "Allday","Ganztägig" }, 61{ "Allday","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{ "Bigger","Größer" }, 78{ "Bigger","Größer" },
79{ "Biggest","Riesig" }, 79{ "Biggest","Riesig" },
80{ "Big","Groß" }, 80{ "Big","Groß" },
81{ "<b>On:</b> %1","<b>Am:</b> %1" }, 81{ "<b>On:</b> %1","<b>Am:</b> %1" },
82{ "<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" }, 82{ "<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" },
83{ "<b>Original event:</b><p>","<b>Original Termin:</b><p>" }, 83{ "<b>Original event:</b><p>","<b>Original Termin:</b><p>" },
84{ " - both are modified after last sync"," - beide wurden nach der letzten Syncronisation verändert" }, 84{ " - both are modified after last sync"," - beide wurden nach der letzten Syncronisation verändert" },
85{ "Busy","Belegt" }, 85{ "Busy","Belegt" },
86{ "&Cancel","Abbre&chen" }, 86{ "&Cancel","Abbre&chen" },
87{ "Cancel","Abbrechen" }, 87{ "Cancel","Abbrechen" },
88{ "Cannot delete To-Do\nwhich has children.","Kann Todo nicht löschen,\n da noch Einträge vorhanden sind" }, 88{ "Cannot delete To-Do\nwhich has children.","Kann Todo nicht löschen,\n da noch Einträge vorhanden sind" },
89{ "Cannot delete To-Do which has children.","Kann Todo nicht löschen, da noch Einträge vorhanden sind" },
90{ "Can't generate mail:\nNo event selected.","Kann e-Mail nicht erstellen:\nKein Termin ausgewählt." }, 89{ "Can't generate mail:\nNo event selected.","Kann e-Mail nicht erstellen:\nKein Termin ausgewählt." },
91{ "Categories...","Kategorien..." }, 90{ "Categories...","Kategorien..." },
92{ "Categories","Kategorien" }, 91{ "Categories","Kategorien" },
93{ "Category","Kategorie" }, 92{ "Category","Kategorie" },
94{ "Center View","Zentriere Ansicht" }, 93{ "Center View","Zentriere Ansicht" },
95{ "Change","Ändere" }, 94{ "Change","Ändere" },
96{ "Cinema","Kino" }, 95{ "Cinema","Kino" },
97{ "Click to add a new Todo","Hier klicken, um ein neues Todo anzulegen" }, 96{ "Click to add a new Todo","Hier klicken, um ein neues Todo anzulegen" },
98{ "Clone Item","Klone Eintrag" }, 97{ "Clone Item","Klone Eintrag" },
99{ "&Close","S&chließen" }, 98{ "&Close","S&chließen" },
100{ "Close","Schließen" }, 99{ "Close","Schließen" },
101{ "Close this dialog to abort deletion!","Zum Abbrechen des Löschvorganges Dialog schließen!" }, 100{ "Close this dialog to abort deletion!","Zum Abbrechen des Löschvorganges Dialog schließen!" },
102{ "Colors","Farben" }, 101{ "Colors","Farben" },
103{ "completed","erledigt" }, 102{ "completed","erledigt" },
104{ "completed on %1","erledigt am %1" }, 103{ "completed on %1","erledigt am %1" },
105{ "Complete","Erledigt" }, 104{ "Complete","Erledigt" },
106{ "Confidential","Vertraulich" }, 105{ "Confidential","Vertraulich" },
107{ "Configure...","Einstellungen..." }, 106{ "Configure...","Einstellungen..." },
108{ "Confirm &deletes","Löschvogang bestätigen" }, 107{ "Confirm &deletes","Löschvogang bestätigen" },
109{ "Couldn't load calendar\n '%1'.","Kann Kalender\n '%1' nicht laden." }, 108{ "Couldn't load calendar\n '%1'.","Kann Kalender\n '%1' nicht laden." },
110{ "Counter-event Viewer","Terminzähler Ansicht" }, 109{ "Counter-event Viewer","Terminzähler Ansicht" },
111{ "Daily ending hour:","Feierabend:" }, 110{ "Daily ending hour:","Feierabend:" },
112{ "Daily starting hour:","Anfangszeit:" }, 111{ "Daily starting hour:","Anfangszeit:" },
113{ "Daily","Täglich" }, 112{ "Daily","Täglich" },
114{ "Date Format","Datums Format" }, 113{ "Date Format","Datums Format" },
115{ "Date Format:","Datums Format:" }, 114{ "Date Format:","Datums Format:" },
116{ "DateNavigator:(nr)","Datums Navigator" }, 115{ "DateNavigator:(nr)","Datums Navigator" },
117{ "Dates: ","Datum: " }, 116{ "Dates: ","Datum: " },
118{ "Date && Time","Datum && Zeit" }, 117{ "Date && Time","Datum && Zeit" },
119{ "Day begins at:","Der Tag beginnt um:" }, 118{ "Day begins at:","Der Tag beginnt um:" },
120{ "Days in Next-X-Days:","Tage in Nächste-X-Tage:" }, 119{ "Days in Next-X-Days:","Tage in Nächste-X-Tage:" },
121{ "Days in What's Next:","Tage in What's Next:" }, 120{ "Days in What's Next:","Tage in What's Next:" },
122{ "day(s)","Tag(e)" }, 121{ "day(s)","Tag(e)" },
123{ "Days to show in Next-X-Days view:","Welche Tage in Nächste-X-Tagen anzeigen:" }, 122{ "Days to show in Next-X-Days view:","Welche Tage in Nächste-X-Tagen anzeigen:" },
124{ "day","Tag" }, 123{ "day","Tag" },
125{ "Dec","Dez" }, 124{ "Dec","Dez" },
126{ "December","Dezember" }, 125{ "December","Dezember" },
127{ "Default alarm time:","Standard Alarmzeit:" }, 126{ "Default alarm time:","Standard Alarmzeit:" },
128{ "Default appointment time:","Standard Termin Startzeit:" }, 127{ "Default appointment time:","Standard Termin Startzeit:" },
129{ "Default event color:","Standard Terminfarbe:" }, 128{ "Default event color:","Standard Terminfarbe:" },
130{ "Default","Standard" }, 129{ "Default","Standard" },
131{ "Def. duration of new app.:","Standard Termin Länge:" }, 130{ "Def. duration of new app.:","Standard Termin Länge:" },
132{ "Delete all completed To-Dos?","Alle bereits erledigten Todos löschen?" }, 131{ "Delete all completed To-Dos?","Alle bereits erledigten Todos löschen?" },
133{ "Delete All","Lösche alles" }, 132{ "Delete All","Lösche alles" },
134{ "Delete all selected","Lösche alle Selektierten" }, 133{ "Delete all selected","Lösche alle Selektierten" },
135{ "Delete Current","Aktuellen löschen" }, 134{ "Delete Current","Aktuellen löschen" },
136{ "Delete Event...","Lösche Termin..." }, 135{ "Delete Event...","Lösche Termin..." },
137{ "Delete Event","Lösche Termin" }, 136{ "Delete Event","Lösche Termin" },
138{ "&Delete","Löschen" }, 137{ "&Delete","Löschen" },
139{ "Delete...","Löschen..." }, 138{ "Delete...","Löschen..." },
140{ "Delete","Löschen" }, 139{ "Delete","Löschen" },
141{ "Delete Todo...","Lösche Todo..." }, 140{ "Delete Todo...","Lösche Todo..." },
142{ "Delete To-Do","Lösche Todo" }, 141{ "Delete To-Do","Lösche Todo" },
143{ "Deleting item %d ...","Lösche Eintrag %d..." }, 142{ "Deleting item %d ...","Lösche Eintrag %d..." },
144{ "Descriptions","Beschreibungen" }, 143{ "Descriptions","Beschreibungen" },
145{ "Deselect All","Deselektiere Alle" }, 144{ "Deselect All","Deselektiere Alle" },
146{ "Details","Details" }, 145{ "Details","Details" },
147{ "Dinner","Abendessen" }, 146{ "Dinner","Abendessen" },
148{ "Do you really want\nto close KO/Pi?","Möchten Sie wirklich\nKO/PI verlassen?" }, 147{ "Do you really want\nto close KO/Pi?","Möchten Sie wirklich\nKO/PI verlassen?" },
149{ "Due Date","Fällig am" }, 148{ "Due Date","Fällig am" },
150{ "Due: ","Fällig: "}, 149{ "Due: ","Fällig: "},
151{ "Due Time","Fällig um" }, 150{ "Due Time","Fällig um" },
152{ "Due:","Fällig:"}, 151{ "Due:","Fällig:"},
153{ "Duration: ","Dauer: " }, 152{ "Duration: ","Dauer: " },
154{ "Edit...","Bearbeite..." }, 153{ "Edit...","Bearbeite..." },
155{ "Edit","Bearbeite" }, 154{ "Edit","Bearbeite" },
156{ "Edit Event...","Bearbeite Termin..." }, 155{ "Edit Event...","Bearbeite Termin..." },
157{ "Edit Event","Bearbeite Termin" }, 156{ "Edit Event","Bearbeite Termin" },
158{ "Edit exceptions","Bearbeite Ausnahmen" }, 157{ "Edit exceptions","Bearbeite Ausnahmen" },
159{ "EditorBox:","Editor Fenster:" }, 158{ "EditorBox:","Editor Fenster:" },
160{ "Edit Recurrence Range","Bearbeite Wiederholung" }, 159{ "Edit Recurrence Range","Bearbeite Wiederholung" },
161{ "Edit Todo...","Berabeite Todo..." }, 160{ "Edit Todo...","Berabeite Todo..." },
162{ "Edit To-Do","Todo bearbeiten" }, 161{ "Edit To-Do","Todo bearbeiten" },
163{ "E&mail address:","E&mail Adresse:" }, 162{ "E&mail address:","E&mail Adresse:" },
164{ "(EmptyEmail)","(KeineEmail)" }, 163{ "(EmptyEmail)","(KeineEmail)" },
165{ "(EmptyName)","(KeinName)" }, 164{ "(EmptyName)","(KeinName)" },
166{ "Enable Recurrence","Wiederholender Termin" }, 165{ "Enable Recurrence","Wiederholender Termin" },
167{ "End after","Endet nach"}, 166{ "End after","Endet nach"},
168{ "End by:","Endet am"}, 167{ "End by:","Endet am"},
169{ "End Date","End Datum" }, 168{ "End Date","End Datum" },
170{ "End:","Ende:" }, 169{ "End:","Ende:" },
171{ "End Time","End Zeit" }, 170{ "End Time","End Zeit" },
172{ "English","Englisch" }, 171{ "English","Englisch" },
173{ "Event","Termin" }, 172{ "Event","Termin" },
174{ "Event list","Termin Liste" }, 173{ "Event list","Termin Liste" },
175{ "Events","Termine" }, 174{ "Events","Termine" },
176{ "Event Viewer:","Termin Übersicht:" }, 175{ "Event Viewer:","Termin Übersicht:" },
177{ "every","jede" }, 176{ "every","jede" },
178{ "Exceptions...","Ausnahmen..." }, 177{ "Exceptions...","Ausnahmen..." },
179{ "Exceptions","Ausnahmen" }, 178{ "Exceptions","Ausnahmen" },
180{ "Exclude holidays","Ohne freie Tage" }, 179{ "Exclude holidays","Ohne freie Tage" },
181{ "Exclude Saturdays","Ohne Samstage" }, 180{ "Exclude Saturdays","Ohne Samstage" },
182{ "Feb","Feb" }, 181{ "Feb","Feb" },
183{ "February","Februar" }, 182{ "February","Februar" },
184{ "&Find","Suche!" }, 183{ "&Find","Suche!" },
185{ "Fonts","Schriftart" }, 184{ "Fonts","Schriftart" },
186{ "Force take local entry always","Erzwinge:Nimm immer lokalen Eintrag" }, 185{ "Force take local entry always","Erzwinge:Nimm immer lokalen Eintrag" },
187{ "Force take remote entry always","Erzwinge:Nimm immer fernen Eintrag"}, 186{ "Force take remote entry always","Erzwinge:Nimm immer fernen Eintrag"},
188{ "Free","Frei" }, 187{ "Free","Frei" },
189{ "Friday","Freitag" }, 188{ "Friday","Freitag" },
190{ "Fri","Fr" }, 189{ "Fri","Fr" },
191{ "From:","Vom:" }, 190{ "From:","Vom:" },
192{ "Full &name:","Vor- und &Nachname:" }, 191{ "Full &name:","Vor- und &Nachname:" },
193{ "General","Allgemein" }, 192{ "General","Allgemein" },
194{ "German","Deutsch" }, 193{ "German","Deutsch" },
195{ "Gifts","Geschenke" }, 194{ "Gifts","Geschenke" },
196{ "Go to Today","Heute anzeigen" }, 195{ "Go to Today","Heute anzeigen" },
197{ "Help","Hilfe" }, 196{ "Help","Hilfe" },
198{ "Hide Dates","Daten ausblenden" }, 197{ "Hide Dates","Daten ausblenden" },
199{ "Highlight color:","Markierungen:" }, 198{ "Highlight color:","Markierungen:" },
200{ "Holiday color:","Freie Tage:" }, 199{ "Holiday color:","Freie Tage:" },
201{ "hour(s)","Stunde(n)" }, 200{ "hour(s)","Stunde(n)" },
202{ "In %1 days: ","In %1 Tagen: " }, 201{ "In %1 days: ","In %1 Tagen: " },
203{ "Incomplete Todo:","Unerledigte Aufgaben:" }, 202{ "Incomplete Todo:","Unerledigte Aufgaben:" },
204{ "Information","Information" }, 203{ "Information","Information" },
205{ "Invalid search expression,\ncannot perform ","Kann Suche nicht ausführen" }, 204{ "Invalid search expression,\ncannot perform ","Kann Suche nicht ausführen" },
206{ "Jan","Jan" }, 205{ "Jan","Jan" },
207{ "January","Januar" }, 206{ "January","Januar" },
208{ "JournalView:","Journal Ansicht:" }, 207{ "JournalView:","Journal Ansicht:" },
209{ "Journals","Journale" }, 208{ "Journals","Journale" },
210{ "Jul","Jul" }, 209{ "Jul","Jul" },
211{ "July","Juli" }, 210{ "July","Juli" },
212{ "Jump to date","Springe zum Datum" }, 211{ "Jump to date","Springe zum Datum" },
213{ "June","Juni" }, 212{ "June","Juni" },
214{ "Jun","Jun" }, 213{ "Jun","Jun" },
215{ "Key Bindings...","Tastenzuordnung..." }, 214{ "Key Bindings...","Tastenzuordnung..." },
216{ "Kids","Kinder" }, 215{ "Kids","Kinder" },
217{ "Known Problems...","Bekannte Probleme..." }, 216{ "Known Problems...","Bekannte Probleme..." },
218{ "KO/Pi Find ","KO/Pi Suchdialog " }, 217{ "KO/Pi Find ","KO/Pi Suchdialog " },
219{ "KO/Pi Find: ","KO/Pi Suchen: " }, 218{ "KO/Pi Find: ","KO/Pi Suchen: " },
220{ "KO/Pi is starting ... "," KO/Pi startet ... \n... Zeit für eine Kaffeepause ..." }, 219{ "KO/Pi is starting ... "," KO/Pi startet ... \n... Zeit für eine Kaffeepause ..." },
221{ "Language:(needs restart)","Sprache (Neustart!)" }, 220{ "Language:(needs restart)","Sprache (Neustart!)" },
222{ "Language:","Sprache" }, 221{ "Language:","Sprache" },
223{ "Large","Etwas mehr" }, 222{ "Large","Etwas mehr" },
224{ "List View:","Listenansicht:" }, 223{ "List View:","Listenansicht:" },
225{ "List View","Listenansicht" }, 224{ "List View","Listenansicht" },
226{ "Load/Save","Laden/Speichern" }, 225{ "Load/Save","Laden/Speichern" },
227{ "Load Template","Lade Vorlage" }, 226{ "Load Template","Lade Vorlage" },
228{ "Locale","Localisation" }, 227{ "Locale","Localisation" },
229{ "Local temp file:","Lokale temp. Datei:" }, 228{ "Local temp file:","Lokale temp. Datei:" },
230{ "Location: ","Ort: " }, 229{ "Location: ","Ort: " },
231{ "Location:","Ort:" }, 230{ "Location:","Ort:" },
232{ "Mail client","Mail Programm" }, 231{ "Mail client","Mail Programm" },
233{ "Mail Client","Mail Programm" }, 232{ "Mail Client","Mail Programm" },
234{ "March","März" }, 233{ "March","März" },
235{ "Mar","Mär" }, 234{ "Mar","Mär" },
236{ "May","Mai" }, 235{ "May","Mai" },
237{ "M. Bains line:","M. Bains Linie:" }, 236{ "M. Bains line:","M. Bains Linie:" },
238{ "Medium","Medium" }, 237{ "Medium","Medium" },
239{ "Method","Methode" }, 238{ "Method","Methode" },
240{ "minute(s)","Minute(n)" }, 239{ "minute(s)","Minute(n)" },
241{ "Monday","Montag" }, 240{ "Monday","Montag" },
242{ "Mon","Mo" }, 241{ "Mon","Mo" },
243{ "Monthly","Monatlich" }, 242{ "Monthly","Monatlich" },
244{ "Month not long enough","Monat ist nicht lang genug" }, 243{ "Month not long enough","Monat ist nicht lang genug" },
245{ "month(s)","Monat(e)" }, 244{ "month(s)","Monat(e)" },
246{ "Month view:","Monatsansicht:" }, 245{ "Month view:","Monatsansicht:" },
247{ "Month view uses category colors","Monatsansicht zeigt Kategorie Farben" }, 246{ "Month view uses category colors","Monatsansicht zeigt Kategorie Farben" },
248{ "Todo view uses category colors","To-Do Ansicht zeigt Kategorie Farben" }, 247{ "Todo view uses category colors","To-Do Ansicht zeigt Kategorie Farben" },
249{ "Move &Down","Nach unten verschieben" }, 248{ "Move &Down","Nach unten verschieben" },
250{ "Move &Up","Nach oben verschieben" }, 249{ "Move &Up","Nach oben verschieben" },
251{ "Name:","Name:" }, 250{ "Name:","Name:" },
252{ "Name","Name" }, 251{ "Name","Name" },
253{ "\nAre you sure you want\nto delete this event?","\nSind Sie sicher, dass Sie\nden Termin löschen möchten?" }, 252{ "\nAre you sure you want\nto delete this event?","\nSind Sie sicher, dass Sie\nden Termin löschen möchten?" },
254{ "%n Days","%n Tage" }, 253{ "%n Days","%n Tage" },
255{ "Never","Nie" }, 254{ "Never","Nie" },
256{ "New event...","Neuer Termin..." }, 255{ "New event...","Neuer Termin..." },
257{ "New event","Neuer Termin" }, 256{ "New event","Neuer Termin" },
258{ "New Event...","Neuer Termin..." }, 257{ "New Event...","Neuer Termin..." },
259{ "New Events/Todos should","Neue Termine/Todos sollten" }, 258{ "New Events/Todos should","Neue Termine/Todos sollten" },
260{ "&New","&Neu" }, 259{ "&New","&Neu" },
261{ "New","Neu", }, 260{ "New","Neu", },
262{ "New Sub-Todo...","Neues Sub-Todo..." }, 261{ "New Sub-Todo...","Neues Sub-Todo..." },
263{ "New Todo...","Neues Todo..." }, 262{ "New Todo...","Neues Todo..." },
264{ "Next Alarm: ","Nächster Alarm: ", }, 263{ "Next Alarm: ","Nächster Alarm: ", },
265{ "&Next Day","&Nächster Tag", }, 264{ "&Next Day","&Nächster Tag", },
266{ "Next days view uses full window","Nächste-X-Tage nutzt Vollbild" }, 265{ "Next days view uses full window","Nächste-X-Tage nutzt Vollbild" },
267{ "Next month","Nächster Monat" }, 266{ "Next month","Nächster Monat" },
268{ "&Next Week","&Nächste Woche" }, 267{ "&Next Week","&Nächste Woche" },
269{ "Next year","Nächstes Jahr" }, 268{ "Next year","Nächstes Jahr" },
270{ "Next Year","Nächstes Jahr" }, 269{ "Next Year","Nächstes Jahr" },
271{ "%n h","%n Std" }, 270{ "%n h","%n Std" },
272{ "No ending date","Kein End-Datum", }, 271{ "No ending date","Kein End-Datum", },
273{ "No event, nothing to do.","Kein Termin, nichts zu tun.", }, 272{ "No event, nothing to do.","Kein Termin, nichts zu tun.", },
274{ "No event selected.","Kein Termin selektiert" }, 273{ "No event selected.","Kein Termin selektiert" },
275{ "No","Nein" }, 274{ "No","Nein" },
276{ "No program set","Kein Programm ausgewählt", }, 275{ "No program set","Kein Programm ausgewählt", },
277{ "Normal","Normal" }, 276{ "Normal","Normal" },
278{ "[No selection]","Keine Selektion", }, 277{ "[No selection]","Keine Selektion", },
279{ "No sound set","Kein Sound ausgewählt", }, 278{ "No sound set","Kein Sound ausgewählt", },
280{ "no time ","keine Zeit ", }, 279{ "no time ","keine Zeit ", },
281{ "no time","keine Zeit", }, 280{ "no time","keine Zeit", },
282{ "No Time","Keine Zeit" }, 281{ "No Time","Keine Zeit" },
283{ "November","November" }, 282{ "November","November" },
284{ "Nov","Nov", }, 283{ "Nov","Nov", },
285{ "\nThis event recurs\nover multiple dates.\n","\nDieser Termin wiederholt sich an mehreren Tagen.\n" }, 284{ "\nThis event recurs\nover multiple dates.\n","\nDieser Termin wiederholt sich an mehreren Tagen.\n" },
286{ "occurrence(s)","Vorkommen" }, 285{ "occurrence(s)","Vorkommen" },
287{ "October","Oktober" }, 286{ "October","Oktober" },
288{ "Oct","Okt", }, 287{ "Oct","Okt", },
289{ "O-due!","Ü-fällig! " }, 288{ "O-due!","Ü-fällig! " },
290{ "&OK","&OK" }, 289{ "&OK","&OK" },
291{ "Ok+Show!","Ok+Anzeigen" }, 290{ "Ok+Show!","Ok+Anzeigen" },
292{ "Organizer: %1","Organisator %1" }, 291{ "Organizer: %1","Organisator %1" },
293{ "Organizer","Organisator" }, 292{ "Organizer","Organisator" },
294{ "Owner: ","Besitzer: " }, 293{ "Owner: ","Besitzer: " },
295{ "Owner:","Besitzer:" }, 294{ "Owner:","Besitzer:" },
296{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" }, 295{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" },
297{ "Pick a date to display","Wähle einen Tag zum anzeigen aus" }, 296{ "Pick a date to display","Wähle einen Tag zum anzeigen aus" },
298{ "Please specify a valid due date.","Bitte gültiges Fälligkeitsdatum angeben."}, 297{ "Please specify a valid due date.","Bitte gültiges Fälligkeitsdatum angeben."},
299{ "Please specify a valid end date, for example '%1'.","Bitte gültiges Enddatum angeben, z.B.'%1'." }, 298{ "Please specify a valid end date, for example '%1'.","Bitte gültiges Enddatum angeben, z.B.'%1'." },
300{ "Please specify a valid start date.","Bitte gültiges Startdatum angeben." }, 299{ "Please specify a valid start date.","Bitte gültiges Startdatum angeben." },
301{ "Please specify a valid start date, for example '%1'.","Bitte gültiges Startdatum angeben, z.B. '%1'." }, 300{ "Please specify a valid start date, for example '%1'.","Bitte gültiges Startdatum angeben, z.B. '%1'." },
302{ "Please specify a valid start time.","Bitte gültige Startzeit angeben."}, 301{ "Please specify a valid start time.","Bitte gültige Startzeit angeben."},
303{ "Please specify a valid start time, for example '%1'.","Bitte gültige Startzeit angeben, z.B. '%1'." }, 302{ "Please specify a valid start time, for example '%1'.","Bitte gültige Startzeit angeben, z.B. '%1'." },
304{ "Preferences - some settings need a restart (nr)","Einstellungen - teilweise Neustart erforderlich (bn)" }, 303{ "Preferences - some settings need a restart (nr)","Einstellungen - teilweise Neustart erforderlich (bn)" },
305{ "&Previous Day","Vorheriger Tag" }, 304{ "&Previous Day","Vorheriger Tag" },
306{ "Previous month","Vorheriger Monat" }, 305{ "Previous month","Vorheriger Monat" },
307{ "Previous Month","Vorheriger Monat" }, 306{ "Previous Month","Vorheriger Monat" },
308{ "&Previous Week","Vorherige Woche" }, 307{ "&Previous Week","Vorherige Woche" },
309{ "Previous year","Vorheriges Jahr" }, 308{ "Previous year","Vorheriges Jahr" },
310{ "Previous Year","Vorheriges Jahr" }, 309{ "Previous Year","Vorheriges Jahr" },
311{ "Printing","Drucken" }, 310{ "Printing","Drucken" },
312{ "Priority:","Priorität:" }, 311{ "Priority:","Priorität:" },
313{ "Private","Privat" }, 312{ "Private","Privat" },
314{ "Proceed","Weiter" }, 313{ "Proceed","Weiter" },
315{ "Public","Öffentlich" }, 314{ "Public","Öffentlich" },
316{ "Purge","Entferne" }, 315{ "Purge","Entferne" },
317{ "Purge Completed","Entferne erledigte ToDos" }, 316{ "Purge Completed","Entferne erledigte ToDos" },
318{ "Purge To-Dos","Todos bereinigen" }, 317{ "Purge To-Dos","Todos bereinigen" },
319{ "read-only","schreibgeschützt" }, 318{ "read-only","schreibgeschützt" },
320{ "Recur every","Wiederh. alle" }, 319{ "Recur every","Wiederh. alle" },
321{ "Recur in the month of","Wiederh. im Monat" }, 320{ "Recur in the month of","Wiederh. im Monat" },
322{ "Recur on the","Wiederh. am" }, 321{ "Recur on the","Wiederh. am" },
323{ "Recur on this day","Wiederh. am diesen Tag" }, 322{ "Recur on this day","Wiederh. am diesen Tag" },
324{ "Recurrence Range...","Wiederholungs Zeitraum..." }, 323{ "Recurrence Range...","Wiederholungs Zeitraum..." },
325{ "Recurrence Range","Wiederholungs Zeitraum" }, 324{ "Recurrence Range","Wiederholungs Zeitraum" },
326{ "Recurrence Rule","Wiederholungs Regel" }, 325{ "Recurrence Rule","Wiederholungs Regel" },
327{ "Recurrence","Wiederholung" }, 326{ "Recurrence","Wiederholung" },
328{ "Recurs","Wiederholung" }, 327{ "Recurs","Wiederholung" },
329{"&Reject","Abweisen"}, 328{"&Reject","Abweisen"},
330{ "Reminder:","Alarm:" }, 329{ "Reminder:","Alarm:" },
331{ "Rem.:","Alarm:" }, 330{ "Rem.:","Alarm:" },
332{ "Rem.","Alarm:" }, 331{ "Rem.","Alarm:" },
333{ "Remote file:","Remote Datei:"}, 332{ "Remote file:","Remote Datei:"},
334{ "Remote IP:","Remote (ferne) IP:" }, 333{ "Remote IP:","Remote (ferne) IP:" },
335{ "Remote syncing (via ssh/scp) network settings ","Remote Sync (via ssh/scp) Netzwerk Einstellungen " }, 334{ "Remote syncing (via ssh/scp) network settings ","Remote Sync (via ssh/scp) Netzwerk Einstellungen " },
336{ "Remote user:","Remote Benutzer"}, 335{ "Remote user:","Remote Benutzer"},
337{ "&Remove","Entfe&rnen" }, 336{ "&Remove","Entfe&rnen" },
338{ "Remove","Entfernen" }, 337{ "Remove","Entfernen" },
339{ "Request response","Bemerkung anfordern" }, 338{ "Request response","Bemerkung anfordern" },
340{ "Role:","Rolle:" }, 339{ "Role:","Rolle:" },
341{ "Role","Rolle" }, 340{ "Role","Rolle" },
342{ "Sat","Sa" }, 341{ "Sat","Sa" },
343{ "Saturday","Samstag" }, 342{ "Saturday","Samstag" },
344{ "Search for:","Suche nach:" }, 343{ "Search for:","Suche nach:" },
345{ "Search In","Suche in" }, 344{ "Search In","Suche in" },
346{ "Search...","Suche..." }, 345{ "Search...","Suche..." },
347{ "Search","Suche" }, 346{ "Search","Suche" },
348{ "Select Addresses","Wähle Adressen" }, 347{ "Select Addresses","Wähle Adressen" },
349{ "Select all","Selektiere Alle" }, 348{ "Select all","Selektiere Alle" },
350{ "Select a month","Wähle Monat" }, 349{ "Select a month","Wähle Monat" },
351{ "Select a week","Wähle Woche" }, 350{ "Select a week","Wähle Woche" },
352{ "Select a year","Wähle Jahr" }, 351{ "Select a year","Wähle Jahr" },
353{ "Send directly","Sende direkt" }, 352{ "Send directly","Sende direkt" },
354{ "&Send Messages","&Sende Nachrichten", }, 353{ "&Send Messages","&Sende Nachrichten", },
355{ "Sep","Sep" }, 354{ "Sep","Sep" },
356{ "September","September" }, 355{ "September","September" },
357{ "Shopping","Einkaufen" }, 356{ "Shopping","Einkaufen" },
358{ "Use short date in (WN/E) view","Kurzdatum in (WN/Termin) Ansicht" }, 357{ "Use short date in (WN/E) view","Kurzdatum in (WN/Termin) Ansicht" },
359{ "Show Dates","Zeige Daten" }, 358{ "Show Dates","Zeige Daten" },
360{ "Show events that recur daily in date nav.","Zeige tägl.wiederh.Term.in Datums Nav." }, 359{ "Show events that recur daily in date nav.","Zeige tägl.wiederh.Term.in Datums Nav." },
361{ "Show Event...","Zeige Termin..." }, 360{ "Show Event...","Zeige Termin..." },
362{ "Show ev. that recur weekly in date nav.","Zeige wöch.wiederh.Term.in Datums Nav." }, 361{ "Show ev. that recur weekly in date nav.","Zeige wöch.wiederh.Term.in Datums Nav." },
363{ "Show Marcus Bains line","Zeige Marcus Bains Linie" }, 362{ "Show Marcus Bains line","Zeige Marcus Bains Linie" },
364{ "Show summary after syncing","Zeige Zusammenfassung nach Sync." }, 363{ "Show summary after syncing","Zeige Zusammenfassung nach Sync." },
365{ "Show time as:","Zeige Zeit als" }, 364{ "Show time as:","Zeige Zeit als" },
366{ "Show Todo...","Zeige To-Do" }, 365{ "Show Todo...","Zeige To-Do" },
367{ "Show topmost todo prios in What's N.:","Anz. höchster Prios in What's N.:"}, 366{ "Show topmost todo prios in What's N.:","Anz. höchster Prios in What's N.:"},
368{ "Show topmost todo prios in What's Next:","Anz. höchster Prios in What's Next:"}, 367{ "Show topmost todo prios in What's Next:","Anz. höchster Prios in What's Next:"},
369{ "Show vertical screen (Needs restart)","Vertikaler Bildschirm-Layout (Neustart!)" }, 368{ "Show vertical screen (Needs restart)","Vertikaler Bildschirm-Layout (Neustart!)" },
370{ "&Show","Zeige" }, 369{ "&Show","Zeige" },
371{ "Show...","Zeige..." }, 370{ "Show...","Zeige..." },
372{ "Show","Zeige" }, 371{ "Show","Zeige" },
373{ "Small","Klein" }, 372{ "Small","Klein" },
374{ "Sorry","Entschuldigung" }, 373{ "Sorry","Entschuldigung" },
375{"Sorry, the copy command failed!\nCommand was:\n","Der Kopierbefehl schlug fehl!\nBefehl war:\n"}, 374{"Sorry, the copy command failed!\nCommand was:\n","Der Kopierbefehl schlug fehl!\nBefehl war:\n"},
376{ "Start:","Start:" }, 375{ "Start:","Start:" },
377{ "Start Date","Start Datum" }, 376{ "Start Date","Start Datum" },
378{ "Start date: %1","Start Datum: %1" }, 377{ "Start date: %1","Start Datum: %1" },
379{ "Start Time","Start Zeit" }, 378{ "Start Time","Start Zeit" },
380{ "Status:","Status:" }, 379{ "Status:","Status:" },
381{ "Status","Status:" }, 380{ "Status","Status:" },
382{ "Summaries","Titel" }, 381{ "Summaries","Titel" },
383{ "Summary:","Titel:" }, 382{ "Summary:","Titel:" },
384{ "Summary","Titel" }, 383{ "Summary","Titel" },
385{ "Sunday","Sonntag" }, 384{ "Sunday","Sonntag" },
386{ "Sun","So" }, 385{ "Sun","So" },
387{ "Sync preferences:","Sync Einstellungen" }, 386{ "Sync preferences:","Sync Einstellungen" },
388{ "Sync Prefs","Sync Einstellungen" }, 387{ "Sync Prefs","Sync Einstellungen" },
389{ "Syncronize","Daten abgleich" }, 388{ "Syncronize","Daten abgleich" },
390{ "Take local entry on conflict","Nimm lokalen Eintrag beim Konflikt" }, 389{ "Take local entry on conflict","Nimm lokalen Eintrag beim Konflikt" },
391{ "Take newest entry on conflict","Nimm neuesten Eintrag beim Konflikt" }, 390{ "Take newest entry on conflict","Nimm neuesten Eintrag beim Konflikt" },
392{ "Take remote entry on conflict","Nimm fernen Eintrag beim Konflikt" }, 391{ "Take remote entry on conflict","Nimm fernen Eintrag beim Konflikt" },
393{ "Template '%1' does not contain a valid Todo.","Template '%1' enthält kein gültiges To-Do" }, 392{ "Template '%1' does not contain a valid Todo.","Template '%1' enthält kein gültiges To-Do" },
394{ "Template does not contain a valid Event.","Template '%1' enthält keinen gültigen Termin" }, 393{ "Template does not contain a valid Event.","Template '%1' enthält keinen gültigen Termin" },
395{ "Template...","Vorlage..." }, 394{ "Template...","Vorlage..." },
396{ "This day","Dieser Tag" }, 395{ "This day","Dieser Tag" },
397{ "This is an experimental feature. ","Dieses Feature ist experimentel" }, 396{ "This is an experimental feature. ","Dieses Feature ist experimentel" },
398{ "This item will be\npermanently deleted.","Dieser Eintrag wird\nkomplett gelöscht." }, 397{ "This item will be\npermanently deleted.","Dieser Eintrag wird\nkomplett gelöscht." },
399{ "This item will be permanently deleted.", "Dieser Eintrag wird komplett gelöscht." }, 398{ "This item will be permanently deleted.", "Dieser Eintrag wird komplett gelöscht." },
400{ "Thu","Do" }, 399{ "Thu","Do" },
401{ "Thursday","Donnerstag" }, 400{ "Thursday","Donnerstag" },
402{ "Time associated","Mit Zeit" }, 401{ "Time associated","Mit Zeit" },
403{ "Time bar:","Uhrzeit Zeile:" }, 402{ "Time bar:","Uhrzeit Zeile:" },
404{ "Time && Date","Zeit und Datum" }, 403{ "Time && Date","Zeit und Datum" },
405{ "Time Format","Zeit Format" }, 404{ "Time Format","Zeit Format" },
406{ "Time Format(nr):","Zeit Format(Neustart!)" }, 405{ "Time Format(nr):","Zeit Format(Neustart!)" },
407{ "Date Labels:","Datumsleiste:" }, 406{ "Date Labels:","Datumsleiste:" },
408{ "Time: ","Zeit: " }, 407{ "Time: ","Zeit: " },
409{ "Timezone:","Zeitzone:" }, 408{ "Timezone:","Zeitzone:" },
410{ "Tiny","Sehr klein" }, 409{ "Tiny","Sehr klein" },
411{ "To: ","Bis: " }, 410{ "To: ","Bis: " },
412{ "To:","Bis:" }, 411{ "To:","Bis:" },
413{ "Today: ","Heute: " }, 412{ "Today: ","Heute: " },
414{ "Todo due today color:","Heute fällige To-Do's" }, 413{ "Todo due today color:","Heute fällige To-Do's" },
415{ "To-do items:","To-Do items:" }, 414{ "To-do items:","To-Do items:" },
416{ "Todo overdue color:","Überfällige To-Do's" }, 415{ "Todo overdue color:","Überfällige To-Do's" },
417{ "Todo","Todo" }, 416{ "Todo","Todo" },
418{ "To-do view shows completed Todos","To-do Ansicht zeigt erledigte To-dos" }, 417{ "To-do view shows completed Todos","To-do Ansicht zeigt erledigte To-dos" },
419{ "ToDoView:","Todo Ansicht:" }, 418{ "ToDoView:","Todo Ansicht:" },
420{ "Toggle Alarm","Wechsle Alarm" }, 419{ "Toggle Alarm","Wechsle Alarm" },
421{ "Toggle Allday","Umschalten Ganztag" }, 420{ "Toggle Allday","Umschalten Ganztag" },
422{ "Tomorrow: ","Morgen: " }, 421{ "Tomorrow: ","Morgen: " },
423{ "Tue","Di" }, 422{ "Tue","Di" },
424{ "Tuesday","Dienstag" }, 423{ "Tuesday","Dienstag" },
425{ "Two entries are in conflict, if: ","Zwei Einträge haben einen Konflikt, wenn:" }, 424{ "Two entries are in conflict, if: ","Zwei Einträge haben einen Konflikt, wenn:" },
426{ "Unable to find template '%1'.","Kann Vorlage '%1' nicht finden." }, 425{ "Unable to find template '%1'.","Kann Vorlage '%1' nicht finden." },
427{ "Unknown","Unbekannt" }, 426{ "Unknown","Unbekannt" },
428{ "Up","Hinauf" }, 427{ "Up","Hinauf" },
429{ "Use password (if not, ask when syncing)","Passwort: (sonst jedesmal anfragen)" }, 428{ "Use password (if not, ask when syncing)","Passwort: (sonst jedesmal anfragen)" },
430{ "User defined","Benutzerdefiniert" }, 429{ "User defined","Benutzerdefiniert" },
431{ "User long date:","Format langes Datum:" }, 430{ "User long date:","Format langes Datum:" },
432{ "User short date:","Forma kurzes Datum:" }, 431{ "User short date:","Forma kurzes Datum:" },
433{ "View","Ansicht" }, 432{ "View","Ansicht" },
434{ "View Fonts","Schriftarten Ansichten" }, 433{ "View Fonts","Schriftarten Ansichten" },
435{ "Views","Ansichten" }, 434{ "Views","Ansichten" },
436{ "Wed","Mi" }, 435{ "Wed","Mi" },
437{ "Wednesday","Mittwoch" }, 436{ "Wednesday","Mittwoch" },
438{ "Week %1","Woche %1" }, 437{ "Week %1","Woche %1" },
439{ "Weekly","Wöchentlich" }, 438{ "Weekly","Wöchentlich" },
440{ "Week starts on Sunday","Woche beginnt Sonntags" }, 439{ "Week starts on Sunday","Woche beginnt Sonntags" },
441{ "What's Next View:","What's Next Anz." }, 440{ "What's Next View:","What's Next Anz." },
442{ "What's next ?","Was kommt als nächstes?(What's Next)" }, 441{ "What's next ?","Was kommt als nächstes?(What's Next)" },
443{ "Working Hours","Tägliche Arbeitszeit" }, 442{ "Working Hours","Tägliche Arbeitszeit" },
444{ "Working hours color:","Arbeitszeit in der Agenda Ansicht:" }, 443{ "Working hours color:","Arbeitszeit in der Agenda Ansicht:" },
445{ "Write back existing entries only","Nur exisitierende Einträge zurückschreiben" }, 444{ "Write back existing entries only","Nur exisitierende Einträge zurückschreiben" },
446{ "Write back synced file","Syncronisierte Datei zurückschreiben" }, 445{ "Write back synced file","Syncronisierte Datei zurückschreiben" },
447{ "Yearly","Jährlich" }, 446{ "Yearly","Jährlich" },
448{ "year(s)","Jahr(e)" }, 447{ "year(s)","Jahr(e)" },
449{ "Yes","Ja" }, 448{ "Yes","Ja" },
450{ "You have %d item(s) selected.\n","Sie haben %d Einträge ausgewählt.\n" }, 449{ "You have %d item(s) selected.\n","Sie haben %d Einträge ausgewählt.\n" },
451{ "You have to restart KOrganizer for this setting to take effect.","Sie müssem Korganizer neu starten, damit diese Einstellung aktiviert wird." }, 450{ "You have to restart KOrganizer for this setting to take effect.","Sie müssem Korganizer neu starten, damit diese Einstellung aktiviert wird." },
452{ "week(s) on:","Woche(n) am: " }, 451{ "week(s) on:","Woche(n) am: " },
453{ "Full menu bar(nr)","Volle Menuleiste(bn)" }, 452{ "Full menu bar(nr)","Volle Menuleiste(bn)" },
454{ "Timezone has daylight saving","Zeitzone hat Sommerzeit" }, 453{ "Timezone has daylight saving","Zeitzone hat Sommerzeit" },
455{ "Actual start and end is the\nsunday before this date.","Tatsächlicher Beginn/Ende ist der\nSonntag vor diesem Datum!" }, 454{ "Actual start and end is the\nsunday before this date.","Tatsächlicher Beginn/Ende ist der\nSonntag vor diesem Datum!" },
456{ "The year in the date is ignored.","Das Jahr vom Datum wird ignoriert." }, 455{ "The year in the date is ignored.","Das Jahr vom Datum wird ignoriert." },
457{ "Daylight start:","Sommerzeit Beginn:" }, 456{ "Daylight start:","Sommerzeit Beginn:" },
458{ "Daylight end:","Sommerzeit Ende:" }, 457{ "Daylight end:","Sommerzeit Ende:" },
459{ "Time Zone","Zeitzone" }, 458{ "Time Zone","Zeitzone" },
460{ "Monday 19 April 2004: %A %d %B %Y","Montag 19 April 2004: %A %d %B %Y" }, 459{ "Monday 19 April 2004: %A %d %B %Y","Montag 19 April 2004: %A %d %B %Y" },
461{ "%A: Monday --- %a: Mon","%A: Montag --- %a: Mon" }, 460{ "%A: Monday --- %a: Mon","%A: Montag --- %a: Mon" },
462{ "minutely","minütlich" }, 461{ "minutely","minütlich" },
463{ "hourly","stündlich" }, 462{ "hourly","stündlich" },
464{ "daily","täglich" }, 463{ "daily","täglich" },
465{ "weekly","wöchentlich" }, 464{ "weekly","wöchentlich" },
466{ "monthly","monatlich" }, 465{ "monthly","monatlich" },
467{ "day-monthly","tag-monatlich" }, 466{ "day-monthly","tag-monatlich" },
468{ "month-yearly","monat-jährlich" }, 467{ "month-yearly","monat-jährlich" },
469{ "day-yearly","tag-jährlich" }, 468{ "day-yearly","tag-jährlich" },
470{ "position-yearly","pos-jährlich" }, 469{ "position-yearly","pos-jährlich" },
471{ "Edit item on doubleclick (if not, show)","Editiere mit Doppelklick(wenn nicht, zeige)" }, 470{ "Edit item on doubleclick (if not, show)","Editiere mit Doppelklick(wenn nicht, zeige)" },
472{ "Highlight current day in agenda","Hebe >>heute<< in Agenda hervor" }, 471{ "Highlight current day in agenda","Hebe >>heute<< in Agenda hervor" },
473{ "Use light color for highlight current day","Helle Farbe für >>heute<< Hervorhebung" }, 472{ "Use light color for highlight current day","Helle Farbe für >>heute<< Hervorhebung" },
474{ "Highlight selection in Time Edit","Hebe Auswahl in Zeit Edit hervor" }, 473{ "Highlight selection in Time Edit","Hebe Auswahl in Zeit Edit hervor" },
475{ "Hold fullscreen on view change","Behalte Vollbild bei Ansichswechsel" }, 474{ "Hold fullscreen on view change","Behalte Vollbild bei Ansichswechsel" },
476{ "Hold non-fullscreen on view change","Behalte Nicht-Vollbild bei Ansichtsw." }, 475{ "Hold non-fullscreen on view change","Behalte Nicht-Vollbild bei Ansichtsw." },
477{ "Event list view uses full window","Listenansicht nutzt Vollbild" }, 476{ "Event list view uses full window","Listenansicht nutzt Vollbild" },
478{ "Set agenda to DayBeginsAt on change","Setze Agenda auf TagBeginntUm bei Wechsel" }, 477{ "Set agenda to DayBeginsAt on change","Setze Agenda auf TagBeginntUm bei Wechsel" },
479{ "Set agenda to current time on change","Setze Agenda auf gegenw.Zeit bei Wechsel" }, 478{ "Set agenda to current time on change","Setze Agenda auf gegenw.Zeit bei Wechsel" },
480{ "Listview uses monthly timespan","Listenansicht zeigt monatliche Zeitspanne" }, 479{ "Listview uses monthly timespan","Listenansicht zeigt monatliche Zeitspanne" },
481{ "ViewChange","Ansichtswechsel" }, 480{ "ViewChange","Ansichtswechsel" },
482{ "Default alarm *.wav file:","Standard Alarm *.wav Datei:" }, 481{ "Default alarm *.wav file:","Standard Alarm *.wav Datei:" },
483{ "This setting is useless for 5500 user!","Diese Einst. ist nutzlos für 5500 Nutzer" }, 482{ "This setting is useless for 5500 user!","Diese Einst. ist nutzlos für 5500 Nutzer" },
484{ "File","Datei" }, 483{ "File","Datei" },
485{ "Clone...","Dupliziere.." }, 484{ "Clone...","Dupliziere.." },
486{ "Move...","Bewege..." }, 485{ "Move...","Bewege..." },
487{ "Beam...","Sende via IR..." }, 486{ "Beam...","Sende via IR..." },
488{ "&Clone...","Dupliziere.." }, 487{ "&Clone...","Dupliziere.." },
489{ "&Move...","Bewege..." }, 488{ "&Move...","Bewege..." },
490{ "&Beam...","Sende via IR..." }, 489{ "&Beam...","Sende via IR..." },
491{ "Show Completed","Zeige erledigte Todos" }, 490{ "Show Completed","Zeige erledigte Todos" },
492{ "Show Quick Todo","Zeige Quick Todo" }, 491{ "Show Quick Todo","Zeige Quick Todo" },
493{ "Unparent Todo","Un-sub Todo" }, 492{ "Unparent Todo","Un-sub Todo" },
494{ "Save selected to file...","Speichere Selektierte..." }, 493{ "Save selected to file...","Speichere Selektierte..." },
495{ "Add Categ. to selected...","Füge zu Selekt. Kateg. hinzu..." }, 494{ "Add Categ. to selected...","Füge zu Selekt. Kateg. hinzu..." },
496{ "Set Categ. for selected...","Setze Kateg. für Selekt." }, 495{ "Set Categ. for selected...","Setze Kateg. für Selekt." },
497{ "Beam selected via IR","Sende Selekt. via IR..." }, 496{ "Beam selected via IR","Sende Selekt. via IR..." },
498{ "Search","Suchen" }, 497{ "Search","Suchen" },
499{ "Date Picker","Datum auswählen" }, 498{ "Date Picker","Datum auswählen" },
500{ "Day View","Tagesansicht" }, 499{ "Day View","Tagesansicht" },
501{ "Work Week","Arbeitswoche" }, 500{ "Work Week","Arbeitswoche" },
502{ "Week","Wochenansicht" }, 501{ "Week","Wochenansicht" },
503{ "Month","Monatsansicht" }, 502{ "Month","Monatsansicht" },
504{ "Todo View","Todo Liste" }, 503{ "Todo View","Todo Liste" },
505{ "Journal","Journal Ansicht" }, 504{ "Journal","Journal Ansicht" },
506{ "Next days","Nächste Tage" }, 505{ "Next days","Nächste Tage" },
507{ "Print agenda selection...","Drucke Agendaselektion..." }, 506{ "Print agenda selection...","Drucke Agendaselektion..." },
508{ "Toggle DateNavigator","Navigator umschalten" }, 507{ "Toggle DateNavigator","Navigator umschalten" },
509{ "Toggle FilterView","Filteransicht umschalten" }, 508{ "Toggle FilterView","Filteransicht umschalten" },
510{ "Prev. month","Vorheriger Monat" }, 509{ "Prev. month","Vorheriger Monat" },
511{ "Go backward","Gehe zurück" }, 510{ "Go backward","Gehe zurück" },
512{ "Go forward","Gehe weiter" }, 511{ "Go forward","Gehe weiter" },
513{ "Synchronize","Synchronisieren" }, 512{ "Synchronize","Synchronisieren" },
514{ "AgendaSize","Agendagröße" }, 513{ "AgendaSize","Agendagröße" },
515{ "Import (*.ics/*.vcs) file","Importiere (*.ics/*.vcs) Datei" }, 514{ "Import (*.ics/*.vcs) file","Importiere (*.ics/*.vcs) Datei" },
516{ "Import last file","Importiere letzte Datei" }, 515{ "Import last file","Importiere letzte Datei" },
517{ "Import Opie/Qtopia Cal.","Importiere Opie/Qtopia Kal." }, 516{ "Import Opie/Qtopia Cal.","Importiere Opie/Qtopia Kal." },
518{ "Load Calendar Backup","Lade Kalender Backup" }, 517{ "Load Calendar Backup","Lade Kalender Backup" },
519{ "Save Calendar Backup","Speichere Kalender Backup" }, 518{ "Save Calendar Backup","Speichere Kalender Backup" },
520{ "Export VCalendar","Exportiere VCalendar" }, 519{ "Export VCalendar","Exportiere VCalendar" },
521{ "Manage new categories...","Verwalte neue Kategorien..." }, 520{ "Manage new categories...","Verwalte neue Kategorien..." },
522{ "Beam complete calendar...","Sende kompletten Kalender via IR" }, 521{ "Beam complete calendar...","Sende kompletten Kalender via IR" },
523{ "Beam filtered calendar...","Sende gefilterten Kalender via IR" }, 522{ "Beam filtered calendar...","Sende gefilterten Kalender via IR" },
524{ "Remote via ssh","Über Netzwerk via ssh" }, 523{ "Remote via ssh","Über Netzwerk via ssh" },
525{ "With local file","Mit lokaler Datei" }, 524{ "With local file","Mit lokaler Datei" },
526{ "With last file","Mit letzter Datei" }, 525{ "With last file","Mit letzter Datei" },
527{ "KO/Pi: Ready for beaming","KO/Pi: Bereit zum Senden" }, 526{ "KO/Pi: Ready for beaming","KO/Pi: Bereit zum Senden" },
528{ "KO/Pi:Beaming done","KO/Pi: Senden erfolgt" }, 527{ "KO/Pi:Beaming done","KO/Pi: Senden erfolgt" },
529{ "Save filename","Speichern: Dateinamen wählen" }, 528{ "Save filename","Speichern: Dateinamen wählen" },
530{ "File already exists!\nOld file from:\n%1\nOverwrite?\n","Dateiname existiert bereits!\nAlte Datei vom:\n%1\nÜberschreiben?\n" }, 529{ "File already exists!\nOld file from:\n%1\nOverwrite?\n","Dateiname existiert bereits!\nAlte Datei vom:\n%1\nÜberschreiben?\n" },
531{ "KO/Pi: Warning!","KO/Pi: Warnung!" }, 530{ "KO/Pi: Warning!","KO/Pi: Warnung!" },
532{ "Overwrite!","Überschreibe!" }, 531{ "Overwrite!","Überschreibe!" },
533{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" }, 532{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" },
534{ "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" }, 533{ "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" },
535{ "KO/Pi Confirmation","KO/Pi Bestätigung" }, 534{ "KO/Pi Confirmation","KO/Pi Bestätigung" },
536{ "Close dialog to abort deletion!","Schließe Dialog um das Löschen abzubrechen!" }, 535{ "Close dialog to abort deletion!","Schließe Dialog um das Löschen abzubrechen!" },
537{ "Deleting item %d ...","Lösche Eintrag %d ..." }, 536{ "Deleting item %d ...","Lösche Eintrag %d ..." },
538{ "%d items remaining in list.","%d Einträge sind in der Liste verblieben." }, 537{ "%d items remaining in list.","%d Einträge sind in der Liste verblieben." },
539{ "Size","Größe" }, 538{ "Size","Größe" },
540{ "Date","Datum" }, 539{ "Date","Datum" },
541{ "Mime Type","Datei Typ" }, 540{ "Mime Type","Datei Typ" },
542{ "All Files","Alle Dateien" }, 541{ "All Files","Alle Dateien" },
543{ "Files","Dateien" }, 542{ "Files","Dateien" },
544{ "Documents","DoKumente" }, 543{ "Documents","DoKumente" },
545{ "Select Categories","Selektiere Kategorien" }, 544{ "Select Categories","Selektiere Kategorien" },
546{ " &Deselect All "," Auswahl aufheben " }, 545{ " &Deselect All "," Auswahl aufheben " },
547{ "A&dd","Hinzu" }, 546{ "A&dd","Hinzu" },
548{ "&Modify","Ändern" }, 547{ "&Modify","Ändern" },
549{ "Edit Categories","Editiere Kategorien" }, 548{ "Edit Categories","Editiere Kategorien" },
550{ " &Edit Categories "," &Editiere Kategorien " }, 549{ " &Edit Categories "," &Editiere Kategorien " },
551{ "Beam Options","Beam Einstellungen" }, 550{ "Beam Options","Beam Einstellungen" },
552{ " With timezone "," Mit Zeitzone " }, 551{ " With timezone "," Mit Zeitzone " },
553{ " Local time ", " Lokale Zeit " }, 552{ " Local time ", " Lokale Zeit " },
554{ "Manage new Categories","Verwalte neue Kategorien" }, 553{ "Manage new Categories","Verwalte neue Kategorien" },
555{ "Add to category list","Füge zur Kategorieliste hinzu" }, 554{ "Add to category list","Füge zur Kategorieliste hinzu" },
556{ "Remove from Events/Todos","Entferne von Terminen/Todos" }, 555{ "Remove from Events/Todos","Entferne von Terminen/Todos" },
557{ "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 " }, 556{ "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 " },
558{ "New categories not in list:","Kategorien, die nicht in der Liste sind:" }, 557{ "New categories not in list:","Kategorien, die nicht in der Liste sind:" },
559{ "File format","Datei Format" }, 558{ "File format","Datei Format" },
560{ "Time format","Zeit Format" }, 559{ "Time format","Zeit Format" },
561{ "Delete all\ncompleted To-Dos?","Lösche alle\nerledigten To-Dos?" }, 560{ "Delete all\ncompleted To-Dos?","Lösche alle\nerledigten To-Dos?" },
562{ "KO/Pi:Saving Data to File ...","KO/Pi: Speichere Kalender in Datei ..." }, 561{ "KO/Pi:Saving Data to File ...","KO/Pi: Speichere Kalender in Datei ..." },
563{ "KO/Pi:File Saved. Needed %d sec, %d ms","KO/Pi: Abgespeichert in %d sec, %d ms" }, 562{ "KO/Pi:File Saved. Needed %d sec, %d ms","KO/Pi: Abgespeichert in %d sec, %d ms" },
564{ "h","Std" }, 563{ "h","Std" },
565{ "min","Min" }, 564{ "min","Min" },
566{ "hou","Std" }, 565{ "hou","Std" },
567{ "day","Tag" }, 566{ "day","Tag" },
568{ "French","Französich" }, 567{ "French","Französich" },
569{ "Time","Zeit" }, 568{ "Time","Zeit" },
570{ "Event Viewer","Termin Ansicht" }, 569{ "Event Viewer","Termin Ansicht" },
571{ "Cancel Sync","Sync Abbrechen" }, 570{ "Cancel Sync","Sync Abbrechen" },
572{ "Remote","Fern" }, 571{ "Remote","Fern" },
573{ "Local","Lokal" }, 572{ "Local","Lokal" },
574{ "Conflict! Please choose entry","Konflikt! Bitte Eintrag wählen" }, 573{ "Conflict! Please choose entry","Konflikt! Bitte Eintrag wählen" },
575{ "Local: ","Lokal: " }, 574{ "Local: ","Lokal: " },
576{ "Remote: ","Fern: " }, 575{ "Remote: ","Fern: " },
577{ "Last modified: ","Zuletzt geändert: " }, 576{ "Last modified: ","Zuletzt geändert: " },
578{ "Location: ","Ort: " }, 577{ "Location: ","Ort: " },
579{ "<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>","<p><b>Von:</b> %1 </p><p><b>Bis:</b> %2</p>" }, 578{ "<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>","<p><b>Von:</b> %1 </p><p><b>Bis:</b> %2</p>" },
580{ "<p><b>On:</b> %1</p>","<p><b>Am:</b> %1</p>" }, 579{ "<p><b>On:</b> %1</p>","<p><b>Am:</b> %1</p>" },
581{ "<p><b>From:</b> %1</p> ","<p><b>Von:</b> %1</p> " }, 580{ "<p><b>From:</b> %1</p> ","<p><b>Von:</b> %1</p> " },
582{ "<p><b>To:</b> %1</p>","<p><b>Bis:</b> %1</p>" }, 581{ "<p><b>To:</b> %1</p>","<p><b>Bis:</b> %1</p>" },
583{ "<p><b>On:</b> %1</p> ","<p><b>Am:</b> %1</p> " }, 582{ "<p><b>On:</b> %1</p> ","<p><b>Am:</b> %1</p> " },
584{ "<p><b>From:</b> %1 <b>To:</b> %2</p>","<p><b>Von:</b> %1 <b>Bis:</b> %2</p>" }, 583{ "<p><b>From:</b> %1 <b>To:</b> %2</p>","<p><b>Von:</b> %1 <b>Bis:</b> %2</p>" },
585{ "This is a %1 recurring event.","Das ist ein %1 wiederholender Termin." }, 584{ "This is a %1 recurring event.","Das ist ein %1 wiederholender Termin." },
586{ "<b>Next recurrence is on:</b>","<b>Nächste Wiederholung ist am:</b>" }, 585{ "<b>Next recurrence is on:</b>","<b>Nächste Wiederholung ist am:</b>" },
587{ "<b>Last recurrence was on:</b>","<b>Letzte Wiederholung war am:</b>" }, 586{ "<b>Last recurrence was on:</b>","<b>Letzte Wiederholung war am:</b>" },
588{ "( %1 min before )","( %1 min vorher )" }, 587{ "( %1 min before )","( %1 min vorher )" },
589{ "<b>Alarm on: ","<b>Alarm am: " }, 588{ "<b>Alarm on: ","<b>Alarm am: " },
590{ "<b>Details: </b>","<b>Details: </b>" }, 589{ "<b>Details: </b>","<b>Details: </b>" },
591{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" }, 590{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" },
592{ "<p><i>%1 % completed</i></p>","<p><i>%1 % erledigt</i></p>" }, 591{ "<p><i>%1 % completed</i></p>","<p><i>%1 % erledigt</i></p>" },
593{ "Organizer","Organisator" }, 592{ "Organizer","Organisator" },
594{ "Save","Speichern" }, 593{ "Save","Speichern" },
595{ "Exit (+save)","Beenden (+ speichern)" }, 594{ "Exit (+save)","Beenden (+ speichern)" },
596{ "Home","Zuhause" }, 595{ "Home","Zuhause" },
597{ "Office","Büro" }, 596{ "Office","Büro" },
598{ "Libary","Bücherei" }, 597{ "Libary","Bücherei" },
599{ "Doctor","Arzt" }, 598{ "Doctor","Arzt" },
600{ "Beach","Strand" }, 599{ "Beach","Strand" },
601{ "Conference room","Konferenzraum" }, 600{ "Conference room","Konferenzraum" },
602{ "Drive Home","Heimfahrt" }, 601{ "Drive Home","Heimfahrt" },
603{ "Watch TV","Tv gucken" }, 602{ "Watch TV","Tv gucken" },
604{ "Phone call","Telefonanruf" }, 603{ "Phone call","Telefonanruf" },
605{ "Pay bill","Rechnung bezahlen" }, 604{ "Pay bill","Rechnung bezahlen" },
606{ "Read book","Buch lesen" }, 605{ "Read book","Buch lesen" },
607{ "Watering plants","Pflanzen giessen" }, 606{ "Watering plants","Pflanzen giessen" },
608{"Appointment","Verabredung" }, 607{"Appointment","Verabredung" },
609{"Birthday","Geburtstag" }, 608{"Birthday","Geburtstag" },
610{"Business","Geschäft" }, 609{"Business","Geschäft" },
611{"Business Travel","Geschäftsreise" }, 610{"Business Travel","Geschäftsreise" },
612{"Cinema","Kino" }, 611{"Cinema","Kino" },
613{"Customer","Kunde" }, 612{"Customer","Kunde" },
614{"Break","Pause" }, 613{"Break","Pause" },
615{"Breakfast","Frühstück" }, 614{"Breakfast","Frühstück" },
616{"Competition","Wettkampf" }, 615{"Competition","Wettkampf" },
617{"Dinner","Abendessen" }, 616{"Dinner","Abendessen" },
618{"Education","Erziehung" }, 617{"Education","Erziehung" },
619{"Family","Familie" }, 618{"Family","Familie" },
620{"Favorites","Favoriten" }, 619{"Favorites","Favoriten" },
621{"Festival","Festival" }, 620{"Festival","Festival" },
622{"Fishing","Angeln" }, 621{"Fishing","Angeln" },
623{"Flight","Flug" }, 622{"Flight","Flug" },
624{"Gifts","Geschenk" }, 623{"Gifts","Geschenk" },
625{"Holiday","Feiertag" }, 624{"Holiday","Feiertag" },
626{"Holiday Cards","Ansichtskarten" }, 625{"Holiday Cards","Ansichtskarten" },
627{"Hot Contacts","Heisse Kontakte" }, 626{"Hot Contacts","Heisse Kontakte" },
628{"Hiking","Wandern" }, 627{"Hiking","Wandern" },
629{"Hunting","Jagen" }, 628{"Hunting","Jagen" },
630{"Key Customer","Wichtiger Kunde" }, 629{"Key Customer","Wichtiger Kunde" },
631{"Kids","Kinder" }, 630{"Kids","Kinder" },
632{"Lunch","Mittagessen" }, 631{"Lunch","Mittagessen" },
633{"Meeting","Treffen" }, 632{"Meeting","Treffen" },
634{"Miscellaneous","Verschiedenes" }, 633{"Miscellaneous","Verschiedenes" },
635{"Partner","Partner" }, 634{"Partner","Partner" },
636{"Party","Partie" }, 635{"Party","Partie" },
637{"Personal","Privat" }, 636{"Personal","Privat" },
638{"Personal Travel","Privatreise"}, 637{"Personal Travel","Privatreise"},
639{"PHB","PHB" }, 638{"PHB","PHB" },
640{"Phone Calls","Telefonanruf" }, 639{"Phone Calls","Telefonanruf" },
641{"Projects","Projekt" }, 640{"Projects","Projekt" },
642{"Recurring","Wiederholend" }, 641{"Recurring","Wiederholend" },
643{"School","Schule" }, 642{"School","Schule" },
644{"Shopping","Einkaufen" }, 643{"Shopping","Einkaufen" },
645{"Speach","Rede" }, 644{"Speach","Rede" },
646{"Special Occasion","Spez.Gelegenheit" }, 645{"Special Occasion","Spez.Gelegenheit" },
647{"Sports","Sport" }, 646{"Sports","Sport" },
648{"Talk","Vortrag" }, 647{"Talk","Vortrag" },
649{"Travel","Reise" }, 648{"Travel","Reise" },
650{"TV","TV" }, 649{"TV","TV" },
651{"Germany","Deutschland" }, 650{"Germany","Deutschland" },
652{"Sweden","Schweden" }, 651{"Sweden","Schweden" },
653{"Forest","Wald" }, 652{"Forest","Wald" },
654{ "Desert","Wüste" }, 653{ "Desert","Wüste" },
655{ "Kitchen","Küche" }, 654{ "Kitchen","Küche" },
656{ "Lake","See" }, 655{ "Lake","See" },
657{"University","Universität"}, 656{"University","Universität"},
658{"Vacation","Urlaub" }, 657{"Vacation","Urlaub" },
659{"VIP","VIP" }, 658{"VIP","VIP" },
660{ "Import Sharp Calendar","Importiere Sharp Kalender" }, 659{ "Import Sharp Calendar","Importiere Sharp Kalender" },
661{ "This todo has been cancelled!","Dieses Todo wurde gecancelt!" }, 660{ "This todo has been cancelled!","Dieses Todo wurde gecancelt!" },
662{ "This event has been cancelled!","Dieser Termin wurde gecancelt!" }, 661{ "This event has been cancelled!","Dieser Termin wurde gecancelt!" },
663{ "Cancelled","Gecancelt" }, 662{ "Cancelled","Gecancelt" },
664{ "Multiple sync","Mehrfach Sync" }, 663{ "Multiple sync","Mehrfach Sync" },
665{ "Local file","Lokale Datei" }, 664{ "Local file","Lokale Datei" },
666{ "Last file","Letzte Datei" }, 665{ "Last file","Letzte Datei" },
667{ "Keys + Colors...","Tasten + Farben..." }, 666{ "Keys + Colors...","Tasten + Farben..." },
668{ "Mini icons in toolbar(nr)","Mini Icons in ToolBar(bn)" }, 667{ "Mini icons in toolbar(nr)","Mini Icons in ToolBar(bn)" },
669{ "Quick load/save (w/o Unicode)","Schnelles Laden/Speichern (o Unicode)" }, 668{ "Quick load/save (w/o Unicode)","Schnelles Laden/Speichern (o Unicode)" },
670{ "Choose...","Wähle..." }, 669{ "Choose...","Wähle..." },
671{ "Use colors for application:","Setze Farben für Programm:" }, 670{ "Use colors for application:","Setze Farben für Programm:" },
672{ "Buttons, menus, etc.:","Knöpfe, Menu, etc.:" }, 671{ "Buttons, menus, etc.:","Knöpfe, Menu, etc.:" },
673{ "Frames, labels, etc.:","Rahmen, Label, etc.:" }, 672{ "Frames, labels, etc.:","Rahmen, Label, etc.:" },
674{ "Show parent To-Do's in What's Next view","Zeige Ober-Todo in What's Next Anz." }, 673{ "Show parent To-Do's in What's Next view","Zeige Ober-Todo in What's Next Anz." },
675{ "Show location in What's Next view","Zeige Ort in What's Next Anz." }, 674{ "Show location in What's Next view","Zeige Ort in What's Next Anz." },
676{ "Show events that recur ","Zeige Termine, die sich wiederholen:" }, 675{ "Show events that recur ","Zeige Termine, die sich wiederholen:" },
677{ "Show in every cell ","Zeige in jeder Zelle " }, 676{ "Show in every cell ","Zeige in jeder Zelle " },
678{ "short month","kurzen Monat" }, 677{ "short month","kurzen Monat" },
679{ "icons","Icons" }, 678{ "icons","Icons" },
680{ "Show Sat/Sun together","Zeige Sam/Son zusammen" }, 679{ "Show Sat/Sun together","Zeige Sam/Son zusammen" },
681{ "Categorie colors are applied to text","Kategorie Farben färben Text" }, 680{ "Categorie colors are applied to text","Kategorie Farben färben Text" },
682{ "Month view uses day colors","Monatsansicht zeigt Tagesfarben" }, 681{ "Month view uses day colors","Monatsansicht zeigt Tagesfarben" },
683{ "Day color odd months","Tagesfarbe ungerade Monate" }, 682{ "Day color odd months","Tagesfarbe ungerade Monate" },
684{ "Day color even months","Tagesfarbe gerade Monate" }, 683{ "Day color even months","Tagesfarbe gerade Monate" },
685{ "Color for Sundays + category \"Holiday\"","Farbe für Sonntag + Kateg.\" Feiertag\"" }, 684{ "Color for Sundays + category \"Holiday\"","Farbe für Sonntag + Kateg.\" Feiertag\"" },
686{ "To-do view shows complete as 'xx %'","Zeige Prozent erledigt als 'xx %'" }, 685{ "To-do view shows complete as 'xx %'","Zeige Prozent erledigt als 'xx %'" },
687{ "Small To-do view uses smaller font","Kleine To-do Ansicht nutzt kleineren Font" }, 686{ "Small To-do view uses smaller font","Kleine To-do Ansicht nutzt kleineren Font" },
688{ "Colors are applied to text","Farben werden auf Text angewendet" }, 687{ "Colors are applied to text","Farben werden auf Text angewendet" },
689{ "Use internal alarm notification","Nutze interne Alarm Benachrichtigung" }, 688{ "Use internal alarm notification","Nutze interne Alarm Benachrichtigung" },
690{ "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" }, 689{ "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" },
691{ "Play beeps count:","Anzahl der Alarmpiepse: " }, 690{ "Play beeps count:","Anzahl der Alarmpiepse: " },
692{ "Beeps interval in sec:","Zeitintervall der Alarmpiepse: " }, 691{ "Beeps interval in sec:","Zeitintervall der Alarmpiepse: " },
693{ "Default suspend time in min:","Standard Supendierungs Zeit: " }, 692{ "Default suspend time in min:","Standard Supendierungs Zeit: " },
694{ "Auto suspend count:","Anzahl der auto Suspendierungen" }, 693{ "Auto suspend count:","Anzahl der auto Suspendierungen" },
695{ "Alarm *.wav file for newly created alarm:","Alarm *.wav Datei für neu angelegte Alarme:" }, 694{ "Alarm *.wav file for newly created alarm:","Alarm *.wav Datei für neu angelegte Alarme:" },
696{ "New profile","Neues Profil" }, 695{ "New profile","Neues Profil" },
697{ "Clone profile","Klone Profil" }, 696{ "Clone profile","Klone Profil" },
698{ "Delete profile","Lösche Profil" }, 697{ "Delete profile","Lösche Profil" },
699{ "Profile:","Profil:" }, 698{ "Profile:","Profil:" },
700{ "Include in multiple sync","Beziehe Profil in mehrfach Sync mit ein" }, 699{ "Include in multiple sync","Beziehe Profil in mehrfach Sync mit ein" },
701{ "Force: Take local entry always","Erzwinge: Nimm immer lokalen Eintrag" }, 700{ "Force: Take local entry always","Erzwinge: Nimm immer lokalen Eintrag" },
702{ "Force: Take remote entry always","Erzwinge: Nimm immer fernen Eintrag" }, 701{ "Force: Take remote entry always","Erzwinge: Nimm immer fernen Eintrag" },
703{ "Show summary after sync","Zeige Zusammenfassung nach dem Synchronisieren" }, 702{ "Show summary after sync","Zeige Zusammenfassung nach dem Synchronisieren" },
704{ "Write back file","Schreibe Datei zurück" }, 703{ "Write back file","Schreibe Datei zurück" },
705{ "Remote file (w down/upload command)","Entfernte Datei (via down/upload Kommando)" }, 704{ "Remote file (w down/upload command)","Entfernte Datei (via down/upload Kommando)" },
706{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" }, 705{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" },
707{ "Local device name:","Name dieses Gerätes:" }, 706{ "Local device name:","Name dieses Gerätes:" },
708{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" }, 707{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" },
709{ "Sync preferences","Synchronisations Einstellungen" }, 708{ "Sync preferences","Synchronisations Einstellungen" },
710{ "Profile kind","Profil Art" }, 709{ "Profile kind","Profil Art" },
711{ "Local file","Lokale Datei" }, 710{ "Local file","Lokale Datei" },
712{ "Local file:","Lokale Datei:" }, 711{ "Local file:","Lokale Datei:" },
713{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" }, 712{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" },
714{ "Fill in default values for:","Setze Beispiel Werte ein für:" }, 713{ "Fill in default values for:","Setze Beispiel Werte ein für:" },
715{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" }, 714{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" },
716{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"}, 715{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"},
717{ "Device","Gerät:" }, 716{ "Device","Gerät:" },
718{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" }, 717{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" },
719{ "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" }, 718{ "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" },
720{ "Synchronization successful","Synchronisation erfolgreich" }, 719{ "Synchronization successful","Synchronisation erfolgreich" },
721{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." }, 720{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." },
722{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" }, 721{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" },
723{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" }, 722{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" },
724{ "Enter password","Passwort eingeben" }, 723{ "Enter password","Passwort eingeben" },
725{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" }, 724{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" },
726{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." }, 725{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." },
727{ "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" }, 726{ "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" },
728{ "Writing back file result: ","Resultat des Dateizurückschreibens: " }, 727{ "Writing back file result: ","Resultat des Dateizurückschreibens: " },
729{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" }, 728{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" },
730{ "Edit Calendar Filters","Editiere Kalendar Filter" }, 729{ "Edit Calendar Filters","Editiere Kalendar Filter" },
731{ "Enter filter name:","Neuer Filter Name:" }, 730{ "Enter filter name:","Neuer Filter Name:" },
732{ "Add Filter","Filter hinzufügen" }, 731{ "Add Filter","Filter hinzufügen" },
733{ "Question","Frage" }, 732{ "Question","Frage" },
734{ "Filter position: ","Filter Position: " }, 733{ "Filter position: ","Filter Position: " },
735{ "Month View","Monatsansicht" }, 734{ "Month View","Monatsansicht" },
736{ "This profil cannot be deleted!\n","Dieses Profil kann\nnicht gelöscht werden!" }, 735{ "This profil cannot be deleted!\n","Dieses Profil kann\nnicht gelöscht werden!" },
737{ "KO/Pi config error","KO/Pi Konfig. Fehler" }, 736{ "KO/Pi config error","KO/Pi Konfig. Fehler" },
738{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" }, 737{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" },
739{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile haben denselben Namen!\nBitte unterschiedliche Namen wählen!" }, 738{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile haben denselben Namen!\nBitte unterschiedliche Namen wählen!" },
740{ "Access: ","Zugriff: " }, 739{ "Access: ","Zugriff: " },
741{ "Needs Action","Aktion notwendig" }, 740{ "Needs Action","Aktion notwendig" },
742{ "Accepted","Akzeptiert" }, 741{ "Accepted","Akzeptiert" },
743{ "Declined","Abgelehnt" }, 742{ "Declined","Abgelehnt" },
744{ "Tentative","Vorläufig" }, 743{ "Tentative","Vorläufig" },
745{ "Delegated","Beauftragt" }, 744{ "Delegated","Beauftragt" },
746{ "Completed","Vollständig" }, 745{ "Completed","Vollständig" },
747{ "In Process","In Bearbeitung" }, 746{ "In Process","In Bearbeitung" },
748{ "Participant","Teilnehmer" }, 747{ "Participant","Teilnehmer" },
749{ "Optional Participant","Möglicher Teilnehmer" }, 748{ "Optional Participant","Möglicher Teilnehmer" },
750{ "Observer","Beobachter" }, 749{ "Observer","Beobachter" },
751{ "Chair","Vorsitzender" }, 750{ "Chair","Vorsitzender" },
752{ "Not supported \non desktop!\n","" }, 751{ "Not supported \non desktop!\n","" },
753{ "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. " }, 752{ "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. " },
754{ "Date range: ","Datums Zeitspanne: " }, 753{ "Date range: ","Datums Zeitspanne: " },
755{ "Not supported \non PDA!\n","Nicht verfügbar\nauf dem PDA. " }, 754{ "Not supported \non PDA!\n","Nicht verfügbar\nauf dem PDA. " },
756{ "Syncing - close to abort!","Syncing-schließe um abzubrechen." }, 755{ "Syncing - close to abort!","Syncing-schließe um abzubrechen." },
757{ "Add / remove events","Add./entferne Termine" }, 756{ "Add / remove events","Add./entferne Termine" },
758{ "File does not exist:\n '%1'.","Datei existiert nicht:\n '%1'." }, 757{ "File does not exist:\n '%1'.","Datei existiert nicht:\n '%1'." },
759{ "Couldn't load calendar\n '%1'.","Kann Kalender nicht laden:\n '%1'." }, 758{ "Couldn't load calendar\n '%1'.","Kann Kalender nicht laden:\n '%1'." },
760{ "\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" }, 759{ "\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" },
761{ "Overwrite","Überschreiben" }, 760{ "Overwrite","Überschreiben" },
762{ "Sync+save","Syncen+speichern" }, 761{ "Sync+save","Syncen+speichern" },
763{ "Default","Standard" }, 762{ "Default","Standard" },
764{ " Categories added to list! "," Kategorien zur Liste hinzugefügt! " }, 763{ " Categories added to list! "," Kategorien zur Liste hinzugefügt! " },
765{ " %d items?"," %d Einträge?" }, 764{ " %d items?"," %d Einträge?" },
766{ "\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?" }, 765{ "\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?" },
767{ " ?\n\nDelete:\n"," ?\n\nLösche:\n" }, 766{ " ?\n\nDelete:\n"," ?\n\nLösche:\n" },
768{ "Current","Aktuelle" }, 767{ "Current","Aktuelle" },
769{ "\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" }, 768{ "\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" },
770{ "All","Alle" }, 769{ "All","Alle" },
771{ "Data Loss Warning","Datenverlust Warnung" }, 770{ "Data Loss Warning","Datenverlust Warnung" },
772{ "Proceed","Weitermachen" }, 771{ "Proceed","Weitermachen" },
773{ "The journal entries can not be\nexported to a vCalendar file.","Die Journal Einträge können\nnicht in eine vCalendar\nDatei exportiert werden!" }, 772{ "The journal entries can not be\nexported to a vCalendar file.","Die Journal Einträge können\nnicht in eine vCalendar\nDatei exportiert werden!" },
774{ "Filter disabled ","Filter abgeschaltet" }, 773{ "Filter disabled ","Filter abgeschaltet" },
775{ "Filter selected: ","Gewählter Filter: " }, 774{ "Filter selected: ","Gewählter Filter: " },
776{ "Toggle Cancel","Gecancelt ändern" }, 775{ "Toggle Cancel","Gecancelt ändern" },
777{ "&Toggle Cancel","Gecancel&t ändern" }, 776{ "&Toggle Cancel","Gecancel&t ändern" },
778{ "Configure Toolbar","Konfiguriere Toolbar" }, 777{ "Configure Toolbar","Konfiguriere Toolbar" },
779{ "Stretched TB","Gedehnte TB" }, 778{ "Stretched TB","Gedehnte TB" },
780{ "Import file \n...%1\ndoes not exist!\nNothing imported!\n","Import Datei \n...%1\nexistiert nicht!\nNichts importiert!\n" }, 779{ "Import file \n...%1\ndoes not exist!\nNothing imported!\n","Import Datei \n...%1\nexistiert nicht!\nNichts importiert!\n" },
781{ "Import filename(*.ics/*.vcs)","Import Dateiname(*.ics/*.vcs)" }, 780{ "Import filename(*.ics/*.vcs)","Import Dateiname(*.ics/*.vcs)" },
782{ "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" }, 781{ "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" },
783{ "Not supported \non desktop!\n","Nur verfügbar auf PDA!" }, 782{ "Not supported \non desktop!\n","Nur verfügbar auf PDA!" },
784{ "Imported file successfully","Datei erfolgreich importiert" }, 783{ "Imported file successfully","Datei erfolgreich importiert" },
785{ "Error importing file","Fehler beim Importieren der Datei" }, 784{ "Error importing file","Fehler beim Importieren der Datei" },
786{ "Export vcal filename(*.vcs)","Export vcal Dateiname(*.vcs)" }, 785{ "Export vcal filename(*.vcs)","Export vcal Dateiname(*.vcs)" },
787{ "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" }, 786{ "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" },
788{ "Overwrite!","Überschreiben!" }, 787{ "Overwrite!","Überschreiben!" },
789{ "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" }, 788{ "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" },
790{ "Load backup filename","Lade Backup Dateiname" }, 789{ "Load backup filename","Lade Backup Dateiname" },
791{ "Backup file\ndoes not exist!\nNothing loaded!","Backup Datei\nexistiert nicht!\nNichts geladen!" }, 790{ "Backup file\ndoes not exist!\nNothing loaded!","Backup Datei\nexistiert nicht!\nNichts geladen!" },
792{ "KO/Pi:Loaded %1","KO/Pi:Geladen %1" }, 791{ "KO/Pi:Loaded %1","KO/Pi:Geladen %1" },
793{ "Save backup filename","Speichere Backup Dateiname" }, 792{ "Save backup filename","Speichere Backup Dateiname" },
794{ "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" }, 793{ "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" },
795{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" }, 794{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" },
796{ "Details of attendee","Teilnehmerdetails" }, 795{ "Details of attendee","Teilnehmerdetails" },
797{ "Work phone:\n","Telefon Arbeit:\n" }, 796{ "Work phone:\n","Telefon Arbeit:\n" },
798{ "Work mobile phone:\n","Mobiltelefon Arbeit:\n" }, 797{ "Work mobile phone:\n","Mobiltelefon Arbeit:\n" },
799{ "Home phone:\n","Telefon privat:\n" }, 798{ "Home phone:\n","Telefon privat:\n" },
800{ "Mobile home phone:\n","Mobiltelefon privat:\n" }, 799{ "Mobile home phone:\n","Mobiltelefon privat:\n" },
801{ "Email:\n","Email:\n" }, 800{ "Email:\n","Email:\n" },
802{ "Alarm disabled","Alarm deaktiviert" }, 801{ "Alarm disabled for this item","Alarm deaktiviert für dieses Item" },
803{ "Audio.Al.: ","Audio Al.: " }, 802{ "Audio Al.: ","Audio Al.: " },
804{ "Proc.Al.: ","Proc.Al.: " }, 803{ "Proc.Al.: ","Proz.Al.: " },
805{ "No sound set","Kein Sound definiert" }, 804{ "No sound set","Kein Sound definiert" },
806{ "*.wav|Wav Files","*.wav|Wav Dateien" }, 805{ "*.wav|Wav Files","*.wav|Wav Dateien" },
807{ "No program set","Kein Programm definiert" }, 806{ "No program set","Kein Programm definiert" },
808{ "Running '%1'","Ausführen '%1'" }, 807{ "Running '%1'","Ausführen '%1'" },
809{ "Playing '%1'","Abspielen '%1'" }, 808{ "Playing '%1'","Abspielen '%1'" },
810{ "Show Sync Events in WN/Agenda view","Zeige Sync Events in WN/Agenda Ansicht" }, 809{ "Show Sync Events in WN/Agenda view","Zeige Sync Events in WN/Agenda Ansicht" },
811{ "User defined (usertranslation.txt)","Benutzerdefiniert (usertranslation.txt)" }, 810{ "User defined (usertranslation.txt)","Benutzerdefiniert (usertranslation.txt)" },
812{ "Load!","Laden!" }, 811{ "Load!","Laden!" },
813{ "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" }, 812{ "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" },
814{ "KO/Pi Features and hints","KO/Pi Eigenschaften und Tipps" }, 813{ "KO/Pi Features and hints","KO/Pi Eigenschaften und Tipps" },
815{ "KO/Pi User translation HowTo","KO/Pi Benutzer-Übersetzung HowTo" }, 814{ "KO/Pi User translation HowTo","KO/Pi Benutzer-Übersetzung HowTo" },
816{ "KO/Pi Synchronization HowTo","KO/Pi Synchronisation HowTo" }, 815{ "KO/Pi Synchronization HowTo","KO/Pi Synchronisation HowTo" },
817{ "Features + hints...","Eigenschaften + Tipps..." }, 816{ "Features + hints...","Eigenschaften + Tipps..." },
818{ "User translation...","Benutzer Übersetzung..." }, 817{ "User translation...","Benutzer Übersetzung..." },
819{ "Sync HowTo...","Synchronisation HowTo..." }, 818{ "Sync HowTo...","Synchronisation HowTo..." },
820{ "Print calendar...","Drucke Kalender..." }, 819{ "Print calendar...","Drucke Kalender..." },
821{ "Anniversary","Jahrestag" }, 820{ "Anniversary","Jahrestag" },
822{ "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" }, 821{ "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" },
823{ "Import Birthdays (KA/Pi)","Importiere Geburtstage (KA/Pi)" }, 822{ "Import Birthdays (KA/Pi)","Importiere Geburtstage (KA/Pi)" },
824{ "Next recurrence is on: ","Nächste Wiederholung ist am:" }, 823{ "Next recurrence is on: ","Nächste Wiederholung ist am:" },
825{ "<b>Alarm on: </b>","<b>Alarm am: </b>" }, 824{ "<b>Alarm on: </b>","<b>Alarm am: </b>" },
826{ "<b>Access: </b>","<b>Zugriff: </b>" }, 825{ "<b>Access: </b>","<b>Zugriff: </b>" },
827{ "(%1 min before)","(%1 min vorher)" }, 826{ "(%1 min before)","(%1 min vorher)" },
828{ "<b>Categories: </b>","<b>Kategorien: </b>" }, 827{ "<b>Categories: </b>","<b>Kategorien: </b>" },
829{ "Save Journal/Description...","Speichere Journal/Details..." }, 828{ "Save Journal/Description...","Speichere Journal/Details..." },
830{ "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." }, 829{ "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." },
831{ "Continue","Weitermachen" }, 830{ "Continue","Weitermachen" },
832{ " birthdays/anniversaries added!"," Geburts-/Jahrestage hinzugefügt" }, 831{ " birthdays/anniversaries added!"," Geburts-/Jahrestage hinzugefügt" },
833{ "Attendee:","Teilnehmer:" }, 832{ "Attendee:","Teilnehmer:" },
834{ "Click OK to search ->","Klicke zum Suchen auf OK ->" }, 833{ "Click OK to search ->","Klicke zum Suchen auf OK ->" },
835{ "On day ","Am Tag " }, 834{ "On day ","Am Tag " },
836{ "%1 of ","%1 des Monats" }, 835{ "%1 of ","%1 des Monats" },
837{ "%1 of the year","%1 des Jahres" }, 836{ "%1 of the year","%1 des Jahres" },
838{ "Anonymous","Anonymo" }, 837{ "Anonymous","Anonymo" },
839{ "nobody@nowhere","niemand@nirgendwo" }, 838{ "nobody@nowhere","niemand@nirgendwo" },
840{ "calendar.html","calendar.html" }, 839{ "calendar.html","calendar.html" },
841{ " Local Time"," Locale Zeit" }, 840{ " Local Time"," Locale Zeit" },
842{ "Unknown Name","Unbekannter Name" }, 841{ "Unknown Name","Unbekannter Name" },
843{ "unknown@nowhere","unbekannt@nirgendwo" }, 842{ "unknown@nowhere","unbekannt@nirgendwo" },
844{ "Beam via IR!","Beam via IR!" }, 843{ "Beam via IR!","Beam via IR!" },
845{ "Next Month","Nächster Monat" }, 844{ "Next Month","Nächster Monat" },
846{ "Prio","Prio" }, 845{ "Prio","Prio" },
847{ "Reparent Todo","Mache Sub-Todo" }, 846{ "Reparent Todo","Mache Sub-Todo" },
848{ "tomorrow","morgen" }, 847{ "tomorrow","morgen" },
849{ "today","heute" }, 848{ "today","heute" },
850{ "yesterday","gestern" }, 849{ "yesterday","gestern" },
851{ "Ok","Ok" }, 850{ "Ok","Ok" },
852{ "Ok+Agenda","Ok+Agenda" }, 851{ "Ok+Agenda","Ok+Agenda" },
853{ "Email","Email" }, 852{ "Email","Email" },
854{ "RSVP","RSVP" }, 853{ "RSVP","RSVP" },
855{ "Email:","Email:" }, 854{ "Email:","Email:" },
856{ "Appointment Time ","Termin Zeit " }, 855{ "Appointment Time ","Termin Zeit " },
857{ "2","2" }, 856{ "2","2" },
858{ "3","3" }, 857{ "3","3" },
859{ "4","4" }, 858{ "4","4" },
860{ " 0 %"," 0 %" }, 859{ " 0 %"," 0 %" },
861{ " 20 %"," 20 %" }, 860{ " 20 %"," 20 %" },
862{ " 40 %"," 40 %" }, 861{ " 40 %"," 40 %" },
863{ " 60 %"," 60 %" }, 862{ " 60 %"," 60 %" },
864{ " 80 %"," 80 %" }, 863{ " 80 %"," 80 %" },
865{ "100 %","100 %" }, 864{ "100 %","100 %" },
866{ "Filter","Filter" }, 865{ "Filter","Filter" },
867{ "Configure","Konfiguriere" }, 866{ "Configure","Konfiguriere" },
868{ "What's Next","What's Next" }, 867{ "What's Next","What's Next" },
869{ "Complete calendar...","Kompletten Kalender..." }, 868{ "Complete calendar...","Kompletten Kalender..." },
870{ "Filtered calendar...","Gefilterten Kalender..." }, 869{ "Filtered calendar...","Gefilterten Kalender..." },
871{ "Export to phone","Exportiere zum Handy" }, 870{ "Export to phone","Exportiere zum Handy" },
872{ "Beam receive enabled","Beam Empfang an" }, 871{ "Beam receive enabled","Beam Empfang an" },
873{ "What's new?","Was ist neu?" }, 872{ "What's new?","Was ist neu?" },
874{ "FAQ...","FAQ..." }, 873{ "FAQ...","FAQ..." },
875{ "Licence...","Licence..." }, 874{ "Licence...","Licence..." },
876{ "What's This?","What's This?" }, 875{ "What's This?","What's This?" },
877{ "&Edit...","&Editiere..." }, 876{ "&Edit...","&Editiere..." },
878{ "Oktober","Oktober" }, 877{ "Oktober","Oktober" },
879{ "Title","Titel" }, 878{ "Title","Titel" },
880{ "%1 %","%1 %" }, 879{ "%1 %","%1 %" },
881{ "Enable Pi-Sync","Schalte Pi-Sync an" }, 880{ "Enable Pi-Sync","Schalte Pi-Sync an" },
882{ "Import!","Importiere!" }, 881{ "Import!","Importiere!" },
883{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" }, 882{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" },
884{ "Export to phone options","Export ans Handy Optionen" }, 883{ "Export to phone options","Export ans Handy Optionen" },
885{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." }, 884{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." },
886{ "I/O device: ","I/O device: " }, 885{ "I/O device: ","I/O device: " },
887{ "Connection: ","Connection: " }, 886{ "Connection: ","Connection: " },
888{ "Model(opt.): ","Model(opt.): " }, 887{ "Model(opt.): ","Model(opt.): " },
889{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" }, 888{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" },
890{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " }, 889{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " },
891{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nToDo/Kalender Daten auf dem Handy!" }, 890{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nToDo/Kalender Daten auf dem Handy!" },
892{ "Export to mobile phone!","Exportiere auf das Handy!" }, 891{ "Export to mobile phone!","Exportiere auf das Handy!" },
893{ "Export complete calendar","Exportiere kompletten Kalender" }, 892{ "Export complete calendar","Exportiere kompletten Kalender" },
894{ "Writing to phone...","Sende Daten ans Handy..." }, 893{ "Writing to phone...","Sende Daten ans Handy..." },
895{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" }, 894{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" },
896{ "Retry","Nochmal versuchen" }, 895{ "Retry","Nochmal versuchen" },
897{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" }, 896{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" },
898{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" }, 897{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" },
899{ "Error exporting to phone!","Fehler beim Export auf das Handy!" }, 898{ "Error exporting to phone!","Fehler beim Export auf das Handy!" },
900{ "Export filtered calendar","Exportiere gefilterten Kalender" }, 899{ "Export filtered calendar","Exportiere gefilterten Kalender" },
901{ "Preferences","Vorlieben" }, 900{ "Preferences","Vorlieben" },
902{ "Global","Global" }, 901{ "Global","Global" },
903{ "Phone","Phone" }, 902{ "Phone","Phone" },
904{ "SMS","SMS" }, 903{ "SMS","SMS" },
905{ "Fax","Fax" }, 904{ "Fax","Fax" },
906{ "Pager","Pager" }, 905{ "Pager","Pager" },
907{ "SIP","SIP" }, 906{ "SIP","SIP" },
908{ "Italian","Italienisch" }, 907{ "Italian","Italienisch" },
909{ "24:00","24:00" }, 908{ "24:00","24:00" },
910{ "12:00am","12:00am" }, 909{ "12:00am","12:00am" },
911{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" }, 910{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" },
912{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" }, 911{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" },
913{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" }, 912{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" },
914{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" }, 913{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" },
915{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" }, 914{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" },
916{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" }, 915{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" },
917{ "Used Mail Client","Benutzter Mail Client" }, 916{ "Used Mail Client","Benutzter Mail Client" },
918{ "Channel:","Channel:" }, 917{ "Channel:","Channel:" },
919{ "Message:","Message:" }, 918{ "Message:","Message:" },
920{ "Parameters:","Parameter:" }, 919{ "Parameters:","Parameter:" },
921{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" }, 920{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" },
922{ "extra Message:","extra Message:" }, 921{ "extra Message:","extra Message:" },
923{ "extra Parameters:","extra Parameter:" }, 922{ "extra Parameters:","extra Parameter:" },
924{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" }, 923{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" },
925{ "External Apps.","Externe Appl." }, 924{ "External Apps.","Externe Appl." },
926{ "24 hours","24 Std." }, 925{ "24 hours","24 Std." },
927{ "3 hours","3 Std." }, 926{ "3 hours","3 Std." },
928{ "1 hour","1 Std." }, 927{ "1 hour","1 Std." },
929{ "15 minutes","15 Min." }, 928{ "15 minutes","15 Min." },
930{ "5 minutes","5 Min." }, 929{ "5 minutes","5 Min." },
931{ "1 minute","1 Min." }, 930{ "1 minute","1 Min." },
932{ "23","23" }, 931{ "23","23" },
933{ "Mon 15","Mon 15" }, 932{ "Mon 15","Mon 15" },
934{ "Configure KO","Konfiguriere KO" }, 933{ "Configure KO","Konfiguriere KO" },
935{ "Event text","Termin Text" }, 934{ "Event text","Termin Text" },
936{ "ToDo","ToDo" }, 935{ "ToDo","ToDo" },
937{ "Today","Heute" }, 936{ "Today","Heute" },
938{ "What's Next View","What's Next Ansicht" }, 937{ "What's Next View","What's Next Ansicht" },
939{ "Show Sync Events in \nWhat's Next/Agenda view","Zeige Sync Termine in \nWhat's Next/Agenda view" }, 938{ "Show Sync Events in \nWhat's Next/Agenda view","Zeige Sync Termine in \nWhat's Next/Agenda view" },
940{ "Use short date in \nWhat's Next/Event view","Zeige Kurzdatum in \nWhat's Next/Event view" }, 939{ "Use short date in \nWhat's Next/Event view","Zeige Kurzdatum in \nWhat's Next/Event view" },
941{ "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" }, 940{ "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" },
942{ "Alarm","Alarm" }, 941{ "Alarm","Alarm" },
943{ "Used %1 Client","Benutzter %1 Client" }, 942{ "Used %1 Client","Benutzter %1 Client" },
944{ "No email client installed","Kein Email Klient installiert" }, 943{ "No email client installed","Kein Email Klient installiert" },
945{ "Userdefined email client","Benutzerdef. Email Klient" }, 944{ "Userdefined email client","Benutzerdef. Email Klient" },
946{ "OM/Pi email client","OM/Pi Email Klient" }, 945{ "OM/Pi email client","OM/Pi Email Klient" },
947{ "Include in multiple ","Beziehe in multiple " }, 946{ "Include in multiple ","Beziehe in multiple " },
948{ "calendar ","Kalender " }, 947{ "calendar ","Kalender " },
949{ "addressbook ","Adressbuch " }, 948{ "addressbook ","Adressbuch " },
950{ "pwmanager","PWmanager" }, 949{ "pwmanager","PWmanager" },
951{ " sync"," Sync ein" }, 950{ " sync"," Sync ein" },
952{ "Write back synced data","Schreibe gesyncte Daten zurück" }, 951{ "Write back synced data","Schreibe gesyncte Daten zurück" },
953{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" }, 952{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" },
954{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" }, 953{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" },
955{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " }, 954{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " },
956{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" }, 955{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" },
957{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" }, 956{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" },
958{ "Help...","Hilfe..." }, 957{ "Help...","Hilfe..." },
959{ "Local file Cal:","Lokale Datei Kal:" }, 958{ "Local file Cal:","Lokale Datei Kal:" },
960{ "Local file ABook:","Lokale Datei ABuch:" }, 959{ "Local file ABook:","Lokale Datei ABuch:" },
961{ "Local file PWMgr:","Lokale Datei PWMgr:" }, 960{ "Local file PWMgr:","Lokale Datei PWMgr:" },
962{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" }, 961{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" },
963{ "Calendar:","Kalender:" }, 962{ "Calendar:","Kalender:" },
964{ "AddressBook:","AdressBuch:" }, 963{ "AddressBook:","AdressBuch:" },
965{ "PWManager:","PWManager:" }, 964{ "PWManager:","PWManager:" },
966{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" }, 965{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" },
967{ "ssh/scp","ssh/scp" }, 966{ "ssh/scp","ssh/scp" },
968{ "ftp","ftp" }, 967{ "ftp","ftp" },
969{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" }, 968{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" },
970{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" }, 969{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" },
971{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" }, 970{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" },
972{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" }, 971{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" },
973{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" }, 972{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" },
974{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" }, 973{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" },
975{ "KDE-Pim sync config","KDE-Pim sync Konfig" }, 974{ "KDE-Pim sync config","KDE-Pim sync Konfig" },
976{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" }, 975{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" },
977{ "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" }, 976{ "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" },
978{ "Port number (Default: %1)","Port Nummer (Default: %1)" }, 977{ "Port number (Default: %1)","Port Nummer (Default: %1)" },
979{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" }, 978{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" },
980{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" }, 979{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" },
981{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" }, 980{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" },
982{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" }, 981{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" },
983{ "Disable Pi-Sync","Schalte Pi-Sync aus" }, 982{ "Disable Pi-Sync","Schalte Pi-Sync aus" },
984{ "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!" }, 983{ "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!" },
985{ "KDE-Pim Sync","KDE-Pim Sync" }, 984{ "KDE-Pim Sync","KDE-Pim Sync" },
986{ "Multiple profiles","Multi-Sync Profile" }, 985{ "Multiple profiles","Multi-Sync Profile" },
987{ "Device: ","Gerät: " }, 986{ "Device: ","Gerät: " },
988{ "Multiple sync started.","Multi-Sync gestartet." }, 987{ "Multiple sync started.","Multi-Sync gestartet." },
989{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" }, 988{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" },
990{ "Turn filter on","Schalte Filter an" }, 989{ "Turn filter on","Schalte Filter an" },
991{ "Turn filter off","Schalte Filter aus" }, 990{ "Turn filter off","Schalte Filter aus" },
992{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" }, 991{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" },
993{ "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" }, 992{ "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" },
994{ "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" }, 993{ "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" },
995{ "<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" }, 994{ "<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" },
996{ "<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" }, 995{ "<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" },
997{ "<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" }, 996{ "<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" },
998{ "<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" }, 997{ "<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" },
999{ "<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" }, 998{ "<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" },
1000{ "<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" }, 999{ "<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" },
1001{ "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" }, 1000{ "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" },
1002{ "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" }, 1001{ "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" },
1003{ "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" }, 1002{ "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" },
1004{ "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" }, 1003{ "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" },
1005{ "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" }, 1004{ "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" },
1006{ "<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" }, 1005{ "<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" },
1007{ "<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" }, 1006{ "<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" },
1008{ "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" }, 1007{ "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" },
1009{ "<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" }, 1008{ "<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" },
1010{ "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" }, 1009{ "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" },
1011{ "<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" }, 1010{ "<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" },
1012{ "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" }, 1011{ "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" },
1013{ "<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" }, 1012{ "<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" },
1014{ "<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" }, 1013{ "<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" },
1015{ "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" }, 1014{ "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" },
1016{ "<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" }, 1015{ "<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" },
1017{ "<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" }, 1016{ "<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" },
1018{ "<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" }, 1017{ "<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" },
1019{ "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" }, 1018{ "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" },
1020{ "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" }, 1019{ "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" },
1021{ "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" }, 1020{ "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" },
1022{ "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" }, 1021{ "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" },
1023{ "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" }, 1022{ "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" },
1024{ "<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" }, 1023{ "<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" },
1025{ "<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" }, 1024{ "<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" },
1026{ "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" }, 1025{ "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" },
1027{ "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" }, 1026{ "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" },
1028{ "<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" }, 1027{ "<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" },
1029{ "<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" }, 1028{ "<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" },
1030{ "<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" }, 1029{ "<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" },
1031{ "<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" }, 1030{ "<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" },
1032{ "<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" }, 1031{ "<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" },
1033{ "<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" }, 1032{ "<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" },
1034{ "<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" }, 1033{ "<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" },
1035{ "<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 " }, 1034{ "<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 " },
1036{ "<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" }, 1035{ "<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" },
1037{ "<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" }, 1036{ "<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" },
1038{ "<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" }, 1037{ "<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" },
1039{ "<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" }, 1038{ "<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" },
1040{ "<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" }, 1039{ "<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" },
1041{ "<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" }, 1040{ "<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" },
1042{ "<p><h2>KO/Pi key shortcuts:</h2></p>\n","<p><h2>KO/Pi Tastatur Kurzbefehle:</h2></p>\n" }, 1041{ "<p><h2>KO/Pi key shortcuts:</h2></p>\n","<p><h2>KO/Pi Tastatur Kurzbefehle:</h2></p>\n" },
1043{ "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" }, 1042{ "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" },
1044{ "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" }, 1043{ "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" },
1045{ "\nhttp://sourceforge.net/projects/kdepimpi\n","\nhttp://sourceforge.net/projects/kdepimpi\n" }, 1044{ "\nhttp://sourceforge.net/projects/kdepimpi\n","\nhttp://sourceforge.net/projects/kdepimpi\n" },
1046{ "\nor report them in the bugtracker on\n","\noder trage sie in dem Bugtracker ein auf\n" }, 1045{ "\nor report them in the bugtracker on\n","\noder trage sie in dem Bugtracker ein auf\n" },
1047{ "\nPlease report unexpected behaviour to\nlutz@pi-sync.net\n","\nBitte melde fehlerhaftes Verhalten an\nlutz@pi-sync.net\n" }, 1046{ "\nPlease report unexpected behaviour to\nlutz@pi-sync.net\n","\nBitte melde fehlerhaftes Verhalten an\nlutz@pi-sync.net\n" },
1048{ "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" }, 1047{ "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" },
1049{ "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" }, 1048{ "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" },
1050{ "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" }, 1049{ "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" },
1051{ "KO/Pi FAQ","KO/Pi FAQ" }, 1050{ "KO/Pi FAQ","KO/Pi FAQ" },
1052{ "(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" }, 1051{ "(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" },
1053{ "PDA-Edition\nfor: Zaurus 5x00 / 7x0 / 8x0\n","PDA-Edition\nfür: Zaurus 5x00 / 7x0 / 8x0\n" }, 1052{ "PDA-Edition\nfor: Zaurus 5x00 / 7x0 / 8x0\n","PDA-Edition\nfür: Zaurus 5x00 / 7x0 / 8x0\n" },
1054{ "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" }, 1053{ "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" },
1055{ "About KOrganizer/Pi","Über KOrganizer/Pi" }, 1054{ "About KOrganizer/Pi","Über KOrganizer/Pi" },
1056{ "From: ","Von: " }, 1055{ "From: ","Von: " },
1057{ "Remove sync info","Entferne Sync Info" }, 1056{ "Remove sync info","Entferne Sync Info" },
1058{ "For all profiles","Für alle Profile" }, 1057{ "For all profiles","Für alle Profile" },
1059{ "Hide not Running","Verstecke nicht Laufende" }, 1058{ "Hide not Running","Verstecke nicht Laufende" },
1060{ "ME","ME" }, 1059{ "ME","ME" },
1061{ "Toolbar","Toolbar" }, 1060{ "Toolbar","Toolbar" },
1062{ "Undo Delete...","Löschen rückgängig machen..." }, 1061{ "Undo Delete...","Löschen rückgängig machen..." },
1063{ "Undo Delete","Löschen rückgängig machen" }, 1062{ "Undo Delete","Löschen rückgängig machen" },
1064{ "KDE Sync HowTo...","KDE Sync HowTo..." }, 1063{ "KDE Sync HowTo...","KDE Sync HowTo..." },
1065{ "Multi Sync HowTo...","Multi Sync HowTo..." }, 1064{ "Multi Sync HowTo...","Multi Sync HowTo..." },
1066{ "Januar","Januar" }, 1065{ "Januar","Januar" },
1067{ "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" }, 1066{ "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" },
1068{ "No Filter","Kein Filter" }, 1067{ "No Filter","Kein Filter" },
1069{ "Multiple Sync options","Multi Sync Optionen" }, 1068{ "Multiple Sync options","Multi Sync Optionen" },
1070{ "Sync algo options","Sync Ablauf Optionen" }, 1069{ "Sync algo options","Sync Ablauf Optionen" },
1071{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" }, 1070{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" },
1072{ "Incoming calendar filter:","Eingehender Kalender Filter:" }, 1071{ "Incoming calendar filter:","Eingehender Kalender Filter:" },
1073{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" }, 1072{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" },
1074{ "Write back options","Optionen zum Zurückschreiben" }, 1073{ "Write back options","Optionen zum Zurückschreiben" },
1075{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" }, 1074{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" },
1076{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" }, 1075{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" },
1077{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" }, 1076{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" },
1078{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" }, 1077{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" },
1079{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" }, 1078{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" },
1080{ "Time period","Zeitspanne" }, 1079{ "Time period","Zeitspanne" },
1081{ "From ","Von " }, 1080{ "From ","Von " },
1082{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " }, 1081{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " },
1083{ " weeks in the future "," Wochen in der Zukunft " }, 1082{ " weeks in the future "," Wochen in der Zukunft " },
1084{ "Profile kind specific settings","Profil Art abhängige Einstellungen" }, 1083{ "Profile kind specific settings","Profil Art abhängige Einstellungen" },
1085{ "Local temp file:","Lokale temp Datei:" }, 1084{ "Local temp file:","Lokale temp Datei:" },
1086{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" }, 1085{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" },
1087{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" }, 1086{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" },
1088 1087
1089 1088
1090 1089
1091 1090
1092{ "Language","Sprache" }, 1091{ "Language","Sprache" },
1093{ "Time Format","Zeit Format" }, 1092{ "Time Format","Zeit Format" },
1094{ "Time Zone","Zeit Zone" }, 1093{ "Time Zone","Zeit Zone" },
1095{ "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" }, 1094{ "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" },
1096{ "<b>Set new data storage dir:</b>","<b>Setze neues Datenspeicherverzeichnis:</b>" }, 1095{ "<b>Set new data storage dir:</b>","<b>Setze neues Datenspeicherverzeichnis:</b>" },
1097{ "Not existing dirs are created automatically","Nicht existierende Verzeichnisse werden erstellt" }, 1096{ "Not existing dirs are created automatically","Nicht existierende Verzeichnisse werden erstellt" },
1098{ "Save settings","Speichere Einstellungen" }, 1097{ "Save settings","Speichere Einstellungen" },
1099{ "Save standard","Speichere Standard" }, 1098{ "Save standard","Speichere Standard" },
1100{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" }, 1099{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" },
1101{ "The settings of the storage\ndir is saved in the file\n%1","Die Einstellungen des Speicherverzeichnisses\nwerden in folgender Datei gespeichert:\n%1" }, 1100{ "The settings of the storage\ndir is saved in the file\n%1","Die Einstellungen des Speicherverzeichnisses\nwerden in folgender Datei gespeichert:\n%1" },
1102{ "Data storage path","Daten Speicherpfad" }, 1101{ "Data storage path","Daten Speicherpfad" },
1103{ "Language","Sprache" }, 1102{ "Language","Sprache" },
1104{ "Show time in agenda items","Zeige Zeit in Agenda Items" }, 1103{ "Show time in agenda items","Zeige Zeit in Agenda Items" },
1105{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" }, 1104{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" },
1106{ "Show events, that are done in \nWhat's Next view","Zeige abgelaufene Termine in\nWhat's Next Ansicht" }, 1105{ "Show events, that are done in \nWhat's Next view","Zeige abgelaufene Termine in\nWhat's Next Ansicht" },
1107{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos in To-do Ansicht" }, 1106{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos in To-do Ansicht" },
1108{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" }, 1107{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" },
1109{ "KO/Pi","KO/Pi" }, 1108{ "KO/Pi","KO/Pi" },
1110{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" }, 1109{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" },
1111{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." }, 1110{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." },
1112{ "Sound.Al.: ","Sound.Al.: " }, 1111{ "Sound.Al.: ","Sound.Al.: " },
1113{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" }, 1112{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" },
1114{ "Restore","Wiederherstellen" }, 1113{ "Restore","Wiederherstellen" },
1115{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklicht\nwiederherstellen?" }, 1114{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklicht\nwiederherstellen?" },
1116{ "% completed","% komplett" }, 1115{ "% completed","% komplett" },
1117{ "%d item(s) found.","%d Item(s) gefunden." }, 1116{ "%d item(s) found.","%d Item(s) gefunden." },
1118{ "Set complete","Setze auf erledigt" }, 1117{ "Set complete","Setze auf erledigt" },
1119{ "(cancelled)","(gecancelt)" }, 1118{ "(cancelled)","(gecancelt)" },
1120{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" }, 1119{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" },
1121{ " Local time "," Locale Zeit " }, 1120{ " Local time "," Locale Zeit " },
1122{ "Form2","Form2" }, 1121{ "Form2","Form2" },
1123{ "Filter enabled","Filter angeschaltet" }, 1122{ "Filter enabled","Filter angeschaltet" },
1124{ "Edit Filters","Ändere Filter" }, 1123{ "Edit Filters","Ändere Filter" },
1125{ "Print What's Next View...","Drucke What's Next Ansicht..." }, 1124{ "Print What's Next View...","Drucke What's Next Ansicht..." },
1126{ "Agenda","Agenda" }, 1125{ "Agenda","Agenda" },
1127{ " ("," (" }, 1126{ " ("," (" },
1128{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" }, 1127{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" },
1129{ "Print","Print" }, 1128{ "Print","Print" },
1130{ "&Setup Printer...","Drucker &Setup..." }, 1129{ "&Setup Printer...","Drucker &Setup..." },
1131{ "View Type","Zeige Typ" }, 1130{ "View Type","Zeige Typ" },
1132{ "Page &orientation:","Seiten Ausrichtung:" }, 1131{ "Page &orientation:","Seiten Ausrichtung:" },
1133{ "Use Default of Selected Style","Default des selektierten Stils" }, 1132{ "Use Default of Selected Style","Default des selektierten Stils" },
1134{ "Use Default Setting of Printer","Default Einstellung des Druckers" }, 1133{ "Use Default Setting of Printer","Default Einstellung des Druckers" },
1135{ "Portrait","Portrait" }, 1134{ "Portrait","Portrait" },
1136{ "Landscape","Landschaft" }, 1135{ "Landscape","Landschaft" },
1137{ "Print day","Drucke Tag" }, 1136{ "Print day","Drucke Tag" },
1138{ "CalPrintDay_Base","CalPrintDay_Base" }, 1137{ "CalPrintDay_Base","CalPrintDay_Base" },
1139{ "Date && Time Range","Datum && Zeitspanne" }, 1138{ "Date && Time Range","Datum && Zeitspanne" },
1140{ "&End date:","&Enddatum:" }, 1139{ "&End date:","&Enddatum:" },
1141{ "&Start date:","&Startdatum:" }, 1140{ "&Start date:","&Startdatum:" },
1142{ "Start &time:","Startzeit:" }, 1141{ "Start &time:","Startzeit:" },
1143{ "End ti&me:","Endzeit:" }, 1142{ "End ti&me:","Endzeit:" },
1144{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Ereignisse einzuschliessen" }, 1143{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Ereignisse einzuschliessen" },
1145{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" }, 1144{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" },
1146{ "Alt+D","Alt+D" }, 1145{ "Alt+D","Alt+D" },
1147{ "&Use colors","Nutze Farben" }, 1146{ "&Use colors","Nutze Farben" },
1148{ "Alt+U","Alt+U" }, 1147{ "Alt+U","Alt+U" },
1149{ "Print week","Drucke Woche" }, 1148{ "Print week","Drucke Woche" },
1150{ "CalPrintWeek_Base","CalPrintWeek_Base" }, 1149{ "CalPrintWeek_Base","CalPrintWeek_Base" },
1151{ "Use &colors","Nutze Farben" }, 1150{ "Use &colors","Nutze Farben" },
1152{ "Type of View","Typ der Ansicht" }, 1151{ "Type of View","Typ der Ansicht" },
1153{ "Print as &Filofax page","Drucke als &Filofax Seite" }, 1152{ "Print as &Filofax page","Drucke als &Filofax Seite" },
1154{ "Alt+F","Alt+F" }, 1153{ "Alt+F","Alt+F" },
1155{ "Print as &timetable view:","Drucke als Zeittabelle:" }, 1154{ "Print as &timetable view:","Drucke als Zeittabelle:" },
1156{ "Alt+T","Alt+T" }, 1155{ "Alt+T","Alt+T" },
1157{ "Print as split week view","Drucke als gesplittete Wochenansicht" }, 1156{ "Print as split week view","Drucke als gesplittete Wochenansicht" },
1158{ "Print month","Drucke Monat" }, 1157{ "Print month","Drucke Monat" },
1159{ "CalPrintMonth_Base","CalPrintMonth_Base" }, 1158{ "CalPrintMonth_Base","CalPrintMonth_Base" },
1160{ "&Start month:","&Startmonat:" }, 1159{ "&Start month:","&Startmonat:" },
1161{ "&End month:","&Endmonat:" }, 1160{ "&End month:","&Endmonat:" },
1162{ "Print week &numbers","Drucke Wochen Nummer(n)" }, 1161{ "Print week &numbers","Drucke Wochen Nummer(n)" },
1163{ "Print todos","Drucke Todos" }, 1162{ "Print todos","Drucke Todos" },
1164{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" }, 1163{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" },
1165{ "Include &description of the item","Inclusive Itembeschreibung" }, 1164{ "Include &description of the item","Inclusive Itembeschreibung" },
1166{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" }, 1165{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" },
1167{ "Include &priority of the item","Inclusive Priorität des Items" }, 1166{ "Include &priority of the item","Inclusive Priorität des Items" },
1168{ "Items to Print","Zu druckende Items" }, 1167{ "Items to Print","Zu druckende Items" },
1169{ "&From:","Von:" }, 1168{ "&From:","Von:" },
1170{ "&To:","Bis:" }, 1169{ "&To:","Bis:" },
1171{ "Print &all todo items","Drucke alle Todo Items" }, 1170{ "Print &all todo items","Drucke alle Todo Items" },
1172{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" }, 1171{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" },
1173{ "Only items due in the &range:","Nur Items in dem Zeitraum:" }, 1172{ "Only items due in the &range:","Nur Items in dem Zeitraum:" },
1174{ "Todo List","Todo Liste" }, 1173{ "Todo List","Todo Liste" },
1175{ "&Title:","&Titel:" }, 1174{ "&Title:","&Titel:" },
1176{ "Co&nnect subtodos with its parent","Verbinde Unter-Todos mit ihren Ober-Todos" }, 1175{ "Co&nnect subtodos with its parent","Verbinde Unter-Todos mit ihren Ober-Todos" },
1177{ "Todo list","Todo Liste" }, 1176{ "Todo list","Todo Liste" },
1178{ "&Print...","Drucke..." }, 1177{ "&Print...","Drucke..." },
1179{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" }, 1178{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" },
1180{ "[Unconfigured]","[Unkonfiguriert]" }, 1179{ "[Unconfigured]","[Unkonfiguriert]" },
1181{ "OK","OK" }, 1180{ "OK","OK" },
1182{ "FilterEditor","FilterEditor" }, 1181{ "FilterEditor","FilterEditor" },
1183{ "Include","Inclusive" }, 1182{ "Include","Inclusive" },
1184{ "Exclude","Exclusive" }, 1183{ "Exclude","Exclusive" },
1185{ "Edit Selection...","Editiere Selektion..." }, 1184{ "Edit Selection...","Editiere Selektion..." },
1186{ "recurring events","wiederholende Ereignisse" }, 1185{ "recurring events","wiederholende Ereignisse" },
1187{ "completed to-dos","erledigte Todos" }, 1186{ "completed to-dos","erledigte Todos" },
1188{ "events","Ereignisse" }, 1187{ "events","Ereignisse" },
1189{ "todos","Todos" }, 1188{ "todos","Todos" },
1190{ "journals","Journale" }, 1189{ "journals","Journale" },
1191{ "public","öffentlich" }, 1190{ "public","öffentlich" },
1192{ "private","privat" }, 1191{ "private","privat" },
1193{ "confidential","vertraulich" }, 1192{ "confidential","vertraulich" },
1194{ "","" }, 1193{ "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Unter-Todos.\nAlle erledigten Unter-Todos\nwerden auch gelöscht!" },
1194{ "Yesterday","Gestern" },
1195{ "Day after tomorrow","Übermorgen" },
1196{ "Tomorrow","Morgen" },
1197{ "Day before yesterday","Vorgestern" },
1195{ "","" }, 1198{ "","" },
1196{ "","" }, 1199{ "","" },
1197{ "","" }, 1200{ "","" },
1198{ "","" }, 1201{ "","" },
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 8f05276..038da54 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -1,3885 +1,3905 @@
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("using extern time for calendar sync: %s ", mLastCalendarSync.toString().latin1() ); 951 qDebug("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("mLastCalendarSync %s full: %d",mLastCalendarSync.toString().latin1(), fullDateRange); 1000 qDebug("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("********** %d %d ", mGlobalSyncMode == SYNC_MODE_NORMAL, mSyncManager->syncWithDesktop() ); 1227 qDebug("********** %d %d ", mGlobalSyncMode == SYNC_MODE_NORMAL, mSyncManager->syncWithDesktop() );
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 QString mes; 1232 QString mes;
1233 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 ); 1233 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 QString delmess; 1234 QString delmess;
1235 if ( delFut ) { 1235 if ( delFut ) {
1236 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); 1236 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 mes += delmess; 1237 mes += delmess;
1238 } 1238 }
1239 mes = i18n("Local calendar changed!\n") +mes; 1239 mes = i18n("Local calendar changed!\n") +mes;
1240 mCalendar->checkAlarmForIncidence( 0, true ); 1240 mCalendar->checkAlarmForIncidence( 0, true );
1241 qDebug( mes ); 1241 qDebug( mes );
1242 if ( mSyncManager->mShowSyncSummary ) { 1242 if ( mSyncManager->mShowSyncSummary ) {
1243 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes, 1243 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes,
1244 i18n("KO/Pi Synchronization"),i18n("Write back"))) { 1244 i18n("KO/Pi Synchronization"),i18n("Write back"))) {
1245 qDebug("cancelled "); 1245 qDebug("cancelled ");
1246 return false; 1246 return false;
1247 } 1247 }
1248 } 1248 }
1249 return syncOK; 1249 return syncOK;
1250} 1250}
1251 1251
1252void CalendarView::setSyncDevice( QString s ) 1252void CalendarView::setSyncDevice( QString s )
1253{ 1253{
1254 mCurrentSyncDevice= s; 1254 mCurrentSyncDevice= s;
1255} 1255}
1256void CalendarView::setSyncName( QString s ) 1256void CalendarView::setSyncName( QString s )
1257{ 1257{
1258 mCurrentSyncName= s; 1258 mCurrentSyncName= s;
1259} 1259}
1260bool CalendarView::syncCalendar(QString filename, int mode) 1260bool CalendarView::syncCalendar(QString filename, int mode)
1261{ 1261{
1262 //qDebug("syncCalendar %s ", filename.latin1()); 1262 //qDebug("syncCalendar %s ", filename.latin1());
1263 mGlobalSyncMode = SYNC_MODE_NORMAL; 1263 mGlobalSyncMode = SYNC_MODE_NORMAL;
1264 CalendarLocal* calendar = new CalendarLocal(); 1264 CalendarLocal* calendar = new CalendarLocal();
1265 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1265 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1266 FileStorage* storage = new FileStorage( calendar ); 1266 FileStorage* storage = new FileStorage( calendar );
1267 bool syncOK = false; 1267 bool syncOK = false;
1268 storage->setFileName( filename ); 1268 storage->setFileName( filename );
1269 // qDebug("loading ... "); 1269 // qDebug("loading ... ");
1270 if ( storage->load() ) { 1270 if ( storage->load() ) {
1271 getEventViewerDialog()->setSyncMode( true ); 1271 getEventViewerDialog()->setSyncMode( true );
1272 syncOK = synchronizeCalendar( mCalendar, calendar, mode ); 1272 syncOK = synchronizeCalendar( mCalendar, calendar, mode );
1273 getEventViewerDialog()->setSyncMode( false ); 1273 getEventViewerDialog()->setSyncMode( false );
1274 if ( syncOK ) { 1274 if ( syncOK ) {
1275 if ( mSyncManager->mWriteBackFile ) 1275 if ( mSyncManager->mWriteBackFile )
1276 { 1276 {
1277 storage->setSaveFormat( new ICalFormat() ); 1277 storage->setSaveFormat( new ICalFormat() );
1278 storage->save(); 1278 storage->save();
1279 } 1279 }
1280 } 1280 }
1281 setModified( true ); 1281 setModified( true );
1282 } 1282 }
1283 delete storage; 1283 delete storage;
1284 delete calendar; 1284 delete calendar;
1285 if ( syncOK ) 1285 if ( syncOK )
1286 updateView(); 1286 updateView();
1287 return syncOK; 1287 return syncOK;
1288} 1288}
1289 1289
1290void CalendarView::syncExternal( int mode ) 1290void CalendarView::syncExternal( int mode )
1291{ 1291{
1292 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 1292 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
1293 1293
1294 qApp->processEvents(); 1294 qApp->processEvents();
1295 CalendarLocal* calendar = new CalendarLocal(); 1295 CalendarLocal* calendar = new CalendarLocal();
1296 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1296 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1297 bool syncOK = false; 1297 bool syncOK = false;
1298 bool loadSuccess = false; 1298 bool loadSuccess = false;
1299 PhoneFormat* phoneFormat = 0; 1299 PhoneFormat* phoneFormat = 0;
1300 emit tempDisableBR(true); 1300 emit tempDisableBR(true);
1301#ifndef DESKTOP_VERSION 1301#ifndef DESKTOP_VERSION
1302 SharpFormat* sharpFormat = 0; 1302 SharpFormat* sharpFormat = 0;
1303 if ( mode == 0 ) { // sharp 1303 if ( mode == 0 ) { // sharp
1304 sharpFormat = new SharpFormat () ; 1304 sharpFormat = new SharpFormat () ;
1305 loadSuccess = sharpFormat->load( calendar, mCalendar ); 1305 loadSuccess = sharpFormat->load( calendar, mCalendar );
1306 1306
1307 } else 1307 } else
1308#endif 1308#endif
1309 if ( mode == 1 ) { // phone 1309 if ( mode == 1 ) { // phone
1310 phoneFormat = new PhoneFormat (mCurrentSyncDevice, 1310 phoneFormat = new PhoneFormat (mCurrentSyncDevice,
1311 mSyncManager->mPhoneDevice, 1311 mSyncManager->mPhoneDevice,
1312 mSyncManager->mPhoneConnection, 1312 mSyncManager->mPhoneConnection,
1313 mSyncManager->mPhoneModel); 1313 mSyncManager->mPhoneModel);
1314 loadSuccess = phoneFormat->load( calendar,mCalendar); 1314 loadSuccess = phoneFormat->load( calendar,mCalendar);
1315 1315
1316 } else { 1316 } else {
1317 emit tempDisableBR(false); 1317 emit tempDisableBR(false);
1318 return; 1318 return;
1319 } 1319 }
1320 if ( loadSuccess ) { 1320 if ( loadSuccess ) {
1321 getEventViewerDialog()->setSyncMode( true ); 1321 getEventViewerDialog()->setSyncMode( true );
1322 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 1322 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
1323 getEventViewerDialog()->setSyncMode( false ); 1323 getEventViewerDialog()->setSyncMode( false );
1324 qApp->processEvents(); 1324 qApp->processEvents();
1325 if ( syncOK ) { 1325 if ( syncOK ) {
1326 if ( mSyncManager->mWriteBackFile ) 1326 if ( mSyncManager->mWriteBackFile )
1327 { 1327 {
1328 QPtrList<Incidence> iL = mCalendar->rawIncidences(); 1328 QPtrList<Incidence> iL = mCalendar->rawIncidences();
1329 Incidence* inc = iL.first(); 1329 Incidence* inc = iL.first();
1330 if ( phoneFormat ) { 1330 if ( phoneFormat ) {
1331 while ( inc ) { 1331 while ( inc ) {
1332 inc->removeID(mCurrentSyncDevice); 1332 inc->removeID(mCurrentSyncDevice);
1333 inc = iL.next(); 1333 inc = iL.next();
1334 } 1334 }
1335 } 1335 }
1336#ifndef DESKTOP_VERSION 1336#ifndef DESKTOP_VERSION
1337 if ( sharpFormat ) 1337 if ( sharpFormat )
1338 sharpFormat->save(calendar); 1338 sharpFormat->save(calendar);
1339#endif 1339#endif
1340 if ( phoneFormat ) 1340 if ( phoneFormat )
1341 phoneFormat->save(calendar); 1341 phoneFormat->save(calendar);
1342 iL = calendar->rawIncidences(); 1342 iL = calendar->rawIncidences();
1343 inc = iL.first(); 1343 inc = iL.first();
1344 Incidence* loc; 1344 Incidence* loc;
1345 while ( inc ) { 1345 while ( inc ) {
1346 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) { 1346 if ( inc->tempSyncStat() == SYNC_TEMPSTATE_NEW_ID ) {
1347 loc = mCalendar->incidence(inc->uid() ); 1347 loc = mCalendar->incidence(inc->uid() );
1348 if ( loc ) { 1348 if ( loc ) {
1349 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) ); 1349 loc->setID(mCurrentSyncDevice, inc->getID(mCurrentSyncDevice) );
1350 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) ); 1350 loc->setCsum( mCurrentSyncDevice, inc->getCsum(mCurrentSyncDevice) );
1351 } 1351 }
1352 } 1352 }
1353 inc = iL.next(); 1353 inc = iL.next();
1354 } 1354 }
1355 Incidence* lse = getLastSyncEvent(); 1355 Incidence* lse = getLastSyncEvent();
1356 if ( lse ) { 1356 if ( lse ) {
1357 lse->setReadOnly( false ); 1357 lse->setReadOnly( false );
1358 lse->setDescription( "" ); 1358 lse->setDescription( "" );
1359 lse->setReadOnly( true ); 1359 lse->setReadOnly( true );
1360 } 1360 }
1361 } 1361 }
1362 } else { 1362 } else {
1363 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") ); 1363 topLevelWidget()->setCaption( i18n("Sync cancelled or failed.") );
1364 } 1364 }
1365 setModified( true ); 1365 setModified( true );
1366 } else { 1366 } else {
1367 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ; 1367 QString question = i18n("Sorry, the database access\ncommand failed!\n\nNothing synced!\n") ;
1368 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"), 1368 QMessageBox::information( 0, i18n("KO/Pi Import - ERROR"),
1369 question, i18n("Ok")) ; 1369 question, i18n("Ok")) ;
1370 1370
1371 } 1371 }
1372 delete calendar; 1372 delete calendar;
1373 updateView(); 1373 updateView();
1374 emit tempDisableBR(false); 1374 emit tempDisableBR(false);
1375 return ;//syncOK; 1375 return ;//syncOK;
1376 1376
1377} 1377}
1378 1378
1379bool CalendarView::importBday() 1379bool CalendarView::importBday()
1380{ 1380{
1381#ifndef KORG_NOKABC 1381#ifndef KORG_NOKABC
1382 1382
1383#ifdef DESKTOP_VERSION 1383#ifdef DESKTOP_VERSION
1384 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 1384 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
1385 KABC::AddressBook::Iterator it; 1385 KABC::AddressBook::Iterator it;
1386 int count = 0; 1386 int count = 0;
1387 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1387 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1388 ++count; 1388 ++count;
1389 } 1389 }
1390 QProgressBar bar(count,0 ); 1390 QProgressBar bar(count,0 );
1391 int w = 300; 1391 int w = 300;
1392 if ( QApplication::desktop()->width() < 320 ) 1392 if ( QApplication::desktop()->width() < 320 )
1393 w = 220; 1393 w = 220;
1394 int h = bar.sizeHint().height() ; 1394 int h = bar.sizeHint().height() ;
1395 int dw = QApplication::desktop()->width(); 1395 int dw = QApplication::desktop()->width();
1396 int dh = QApplication::desktop()->height(); 1396 int dh = QApplication::desktop()->height();
1397 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1397 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1398 bar.show(); 1398 bar.show();
1399 bar.setCaption (i18n("Reading addressbook - close to abort!") ); 1399 bar.setCaption (i18n("Reading addressbook - close to abort!") );
1400 qApp->processEvents(); 1400 qApp->processEvents();
1401 count = 0; 1401 count = 0;
1402 int addCount = 0; 1402 int addCount = 0;
1403 KCal::Attendee* a = 0; 1403 KCal::Attendee* a = 0;
1404 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 1404 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
1405 if ( ! bar.isVisible() ) 1405 if ( ! bar.isVisible() )
1406 return false; 1406 return false;
1407 bar.setProgress( count++ ); 1407 bar.setProgress( count++ );
1408 qApp->processEvents(); 1408 qApp->processEvents();
1409 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() ); 1409 //qDebug("add BDay %s %s", (*it).realName().latin1(),(*it).birthday().date().toString().latin1() );
1410 if ( (*it).birthday().date().isValid() ){ 1410 if ( (*it).birthday().date().isValid() ){
1411 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1411 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1412 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) ) 1412 if ( addAnniversary( (*it).birthday().date(), (*it).assembledName(), a, true ) )
1413 ++addCount; 1413 ++addCount;
1414 } 1414 }
1415 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d"); 1415 QDate anni = KGlobal::locale()->readDate( (*it).custom("KADDRESSBOOK", "X-Anniversary" ), "%Y-%m-%d");
1416 if ( anni.isValid() ){ 1416 if ( anni.isValid() ){
1417 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ; 1417 a = new KCal::Attendee( (*it).realName(), (*it).preferredEmail(),false,KCal::Attendee::NeedsAction,KCal::Attendee::ReqParticipant,(*it).uid()) ;
1418 if ( addAnniversary( anni, (*it).assembledName(), a, false ) ) 1418 if ( addAnniversary( anni, (*it).assembledName(), a, false ) )
1419 ++addCount; 1419 ++addCount;
1420 } 1420 }
1421 } 1421 }
1422 updateView(); 1422 updateView();
1423 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 1423 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
1424#else //DESKTOP_VERSION 1424#else //DESKTOP_VERSION
1425 1425
1426 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); 1426 ExternalAppHandler::instance()->requestBirthdayListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/);
1427 // the result should now arrive through method insertBirthdays 1427 // the result should now arrive through method insertBirthdays
1428 1428
1429#endif //DESKTOP_VERSION 1429#endif //DESKTOP_VERSION
1430 1430
1431#endif //KORG_NOKABC 1431#endif //KORG_NOKABC
1432 1432
1433 1433
1434 return true; 1434 return true;
1435} 1435}
1436 1436
1437// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI 1437// This method will be called from Ka/Pi as a response to requestBirthdayListFromKAPI
1438void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList, 1438void CalendarView::insertBirthdays(const QString& uid, const QStringList& birthdayList,
1439 const QStringList& anniversaryList, const QStringList& realNameList, 1439 const QStringList& anniversaryList, const QStringList& realNameList,
1440 const QStringList& emailList, const QStringList& assembledNameList, 1440 const QStringList& emailList, const QStringList& assembledNameList,
1441 const QStringList& uidList) 1441 const QStringList& uidList)
1442{ 1442{
1443 qDebug("CalendarView::insertBirthdays"); 1443 qDebug("CalendarView::insertBirthdays");
1444 if (uid == this->name()) 1444 if (uid == this->name())
1445 { 1445 {
1446 int count = birthdayList.count(); 1446 int count = birthdayList.count();
1447 int addCount = 0; 1447 int addCount = 0;
1448 KCal::Attendee* a = 0; 1448 KCal::Attendee* a = 0;
1449 1449
1450 qDebug("CalView 1 %i", count); 1450 qDebug("CalView 1 %i", count);
1451 1451
1452 QProgressBar bar(count,0 ); 1452 QProgressBar bar(count,0 );
1453 int w = 300; 1453 int w = 300;
1454 if ( QApplication::desktop()->width() < 320 ) 1454 if ( QApplication::desktop()->width() < 320 )
1455 w = 220; 1455 w = 220;
1456 int h = bar.sizeHint().height() ; 1456 int h = bar.sizeHint().height() ;
1457 int dw = QApplication::desktop()->width(); 1457 int dw = QApplication::desktop()->width();
1458 int dh = QApplication::desktop()->height(); 1458 int dh = QApplication::desktop()->height();
1459 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 1459 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
1460 bar.show(); 1460 bar.show();
1461 bar.setCaption (i18n("inserting birthdays - close to abort!") ); 1461 bar.setCaption (i18n("inserting birthdays - close to abort!") );
1462 qApp->processEvents(); 1462 qApp->processEvents();
1463 1463
1464 QDate birthday; 1464 QDate birthday;
1465 QDate anniversary; 1465 QDate anniversary;
1466 QString realName; 1466 QString realName;
1467 QString email; 1467 QString email;
1468 QString assembledName; 1468 QString assembledName;
1469 QString uid; 1469 QString uid;
1470 bool ok = true; 1470 bool ok = true;
1471 for ( int i = 0; i < count; i++) 1471 for ( int i = 0; i < count; i++)
1472 { 1472 {
1473 if ( ! bar.isVisible() ) 1473 if ( ! bar.isVisible() )
1474 return; 1474 return;
1475 bar.setProgress( i ); 1475 bar.setProgress( i );
1476 qApp->processEvents(); 1476 qApp->processEvents();
1477 1477
1478 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok); 1478 birthday = KGlobal::locale()->readDate(birthdayList[i], KLocale::ISODate, &ok);
1479 if (!ok) { 1479 if (!ok) {
1480 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1()); 1480 ;//qDebug("CalendarView::insertBirthdays found invalid birthday: %s",birthdayList[i].latin1());
1481 } 1481 }
1482 1482
1483 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok); 1483 anniversary = KGlobal::locale()->readDate(anniversaryList[i], KLocale::ISODate, &ok);
1484 if (!ok) { 1484 if (!ok) {
1485 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1()); 1485 ;//qDebug("CalendarView::insertBirthdays found invalid anniversary: %s",anniversaryList[i].latin1());
1486 } 1486 }
1487 realName = realNameList[i]; 1487 realName = realNameList[i];
1488 email = emailList[i]; 1488 email = emailList[i];
1489 assembledName = assembledNameList[i]; 1489 assembledName = assembledNameList[i];
1490 uid = uidList[i]; 1490 uid = uidList[i];
1491 //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() ); 1491 //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 1492
1493 if ( birthday.isValid() ){ 1493 if ( birthday.isValid() ){
1494 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 1494 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
1495 KCal::Attendee::ReqParticipant,uid) ; 1495 KCal::Attendee::ReqParticipant,uid) ;
1496 if ( addAnniversary( birthday, assembledName, a, true ) ) 1496 if ( addAnniversary( birthday, assembledName, a, true ) )
1497 ++addCount; 1497 ++addCount;
1498 } 1498 }
1499 1499
1500 if ( anniversary.isValid() ){ 1500 if ( anniversary.isValid() ){
1501 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction, 1501 a = new KCal::Attendee( realName, email,false,KCal::Attendee::NeedsAction,
1502 KCal::Attendee::ReqParticipant,uid) ; 1502 KCal::Attendee::ReqParticipant,uid) ;
1503 if ( addAnniversary( anniversary, assembledName, a, false ) ) 1503 if ( addAnniversary( anniversary, assembledName, a, false ) )
1504 ++addCount; 1504 ++addCount;
1505 } 1505 }
1506 } 1506 }
1507 1507
1508 updateView(); 1508 updateView();
1509 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!")); 1509 topLevelWidget()->setCaption(QString::number( addCount )+ i18n(" birthdays/anniversaries added!"));
1510 1510
1511 } 1511 }
1512 1512
1513} 1513}
1514 1514
1515 1515
1516 1516
1517bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday) 1517bool CalendarView::addAnniversary( QDate date, QString name, KCal::Attendee* a, bool birthday)
1518{ 1518{
1519 //qDebug("addAnni "); 1519 //qDebug("addAnni ");
1520 Event * ev = new Event(); 1520 Event * ev = new Event();
1521 if ( a ) { 1521 if ( a ) {
1522 ev->addAttendee( a ); 1522 ev->addAttendee( a );
1523 } 1523 }
1524 QString kind; 1524 QString kind;
1525 if ( birthday ) 1525 if ( birthday )
1526 kind = i18n( "Birthday" ); 1526 kind = i18n( "Birthday" );
1527 else 1527 else
1528 kind = i18n( "Anniversary" ); 1528 kind = i18n( "Anniversary" );
1529 ev->setSummary( name + " - " + kind ); 1529 ev->setSummary( name + " - " + kind );
1530 ev->setOrganizer(a->email()); 1530 ev->setOrganizer(a->email());
1531 ev->setCategories( kind ); 1531 ev->setCategories( kind );
1532 ev->setDtStart( QDateTime(date) ); 1532 ev->setDtStart( QDateTime(date) );
1533 ev->setDtEnd( QDateTime(date) ); 1533 ev->setDtEnd( QDateTime(date) );
1534 ev->setFloats( true ); 1534 ev->setFloats( true );
1535 Recurrence * rec = ev->recurrence(); 1535 Recurrence * rec = ev->recurrence();
1536 rec->setYearly(Recurrence::rYearlyMonth,1,-1); 1536 rec->setYearly(Recurrence::rYearlyMonth,1,-1);
1537 rec->addYearlyNum( date.month() ); 1537 rec->addYearlyNum( date.month() );
1538 if ( !mCalendar->addAnniversaryNoDup( ev ) ) { 1538 if ( !mCalendar->addAnniversaryNoDup( ev ) ) {
1539 delete ev; 1539 delete ev;
1540 return false; 1540 return false;
1541 } 1541 }
1542 return true; 1542 return true;
1543 1543
1544} 1544}
1545bool CalendarView::importQtopia( const QString &categories, 1545bool CalendarView::importQtopia( const QString &categories,
1546 const QString &datebook, 1546 const QString &datebook,
1547 const QString &todolist ) 1547 const QString &todolist )
1548{ 1548{
1549 1549
1550 QtopiaFormat qtopiaFormat; 1550 QtopiaFormat qtopiaFormat;
1551 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1551 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1552 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories ); 1552 if ( !categories.isEmpty() ) qtopiaFormat.load( mCalendar, categories );
1553 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook ); 1553 if ( !datebook.isEmpty() ) qtopiaFormat.load( mCalendar, datebook );
1554 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist ); 1554 if ( !todolist.isEmpty() ) qtopiaFormat.load( mCalendar, todolist );
1555 1555
1556 updateView(); 1556 updateView();
1557 return true; 1557 return true;
1558 1558
1559#if 0 1559#if 0
1560 mGlobalSyncMode = SYNC_MODE_QTOPIA; 1560 mGlobalSyncMode = SYNC_MODE_QTOPIA;
1561 mCurrentSyncDevice = "qtopia-XML"; 1561 mCurrentSyncDevice = "qtopia-XML";
1562 if ( mSyncManager->mAskForPreferences ) 1562 if ( mSyncManager->mAskForPreferences )
1563 edit_sync_options(); 1563 edit_sync_options();
1564 qApp->processEvents(); 1564 qApp->processEvents();
1565 CalendarLocal* calendar = new CalendarLocal(); 1565 CalendarLocal* calendar = new CalendarLocal();
1566 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 1566 calendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
1567 bool syncOK = false; 1567 bool syncOK = false;
1568 QtopiaFormat qtopiaFormat; 1568 QtopiaFormat qtopiaFormat;
1569 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories)); 1569 qtopiaFormat.setCategoriesList ( &(KOPrefs::instance()->mCustomCategories));
1570 bool loadOk = true; 1570 bool loadOk = true;
1571 if ( !categories.isEmpty() ) 1571 if ( !categories.isEmpty() )
1572 loadOk = qtopiaFormat.load( calendar, categories ); 1572 loadOk = qtopiaFormat.load( calendar, categories );
1573 if ( loadOk && !datebook.isEmpty() ) 1573 if ( loadOk && !datebook.isEmpty() )
1574 loadOk = qtopiaFormat.load( calendar, datebook ); 1574 loadOk = qtopiaFormat.load( calendar, datebook );
1575 if ( loadOk && !todolist.isEmpty() ) 1575 if ( loadOk && !todolist.isEmpty() )
1576 loadOk = qtopiaFormat.load( calendar, todolist ); 1576 loadOk = qtopiaFormat.load( calendar, todolist );
1577 1577
1578 if ( loadOk ) { 1578 if ( loadOk ) {
1579 getEventViewerDialog()->setSyncMode( true ); 1579 getEventViewerDialog()->setSyncMode( true );
1580 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs ); 1580 syncOK = synchronizeCalendar( mCalendar, calendar, mSyncManager->mSyncAlgoPrefs );
1581 getEventViewerDialog()->setSyncMode( false ); 1581 getEventViewerDialog()->setSyncMode( false );
1582 qApp->processEvents(); 1582 qApp->processEvents();
1583 if ( syncOK ) { 1583 if ( syncOK ) {
1584 if ( mSyncManager->mWriteBackFile ) 1584 if ( mSyncManager->mWriteBackFile )
1585 { 1585 {
1586 // write back XML file 1586 // write back XML file
1587 1587
1588 } 1588 }
1589 setModified( true ); 1589 setModified( true );
1590 } 1590 }
1591 } else { 1591 } else {
1592 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ; 1592 QString question = i18n("Sorry, the file loading\ncommand failed!\n\nNothing synced!\n") ;
1593 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"), 1593 QMessageBox::information( 0, i18n("KO/Pi Sync - ERROR"),
1594 question, i18n("Ok")) ; 1594 question, i18n("Ok")) ;
1595 } 1595 }
1596 delete calendar; 1596 delete calendar;
1597 updateView(); 1597 updateView();
1598 return syncOK; 1598 return syncOK;
1599 1599
1600 1600
1601#endif 1601#endif
1602 1602
1603} 1603}
1604 1604
1605void CalendarView::setSyncEventsReadOnly() 1605void CalendarView::setSyncEventsReadOnly()
1606{ 1606{
1607 Event * ev; 1607 Event * ev;
1608 QPtrList<Event> eL = mCalendar->rawEvents(); 1608 QPtrList<Event> eL = mCalendar->rawEvents();
1609 ev = eL.first(); 1609 ev = eL.first();
1610 while ( ev ) { 1610 while ( ev ) {
1611 if ( ev->uid().left(15) == QString("last-syncEvent-") ) 1611 if ( ev->uid().left(15) == QString("last-syncEvent-") )
1612 ev->setReadOnly( true ); 1612 ev->setReadOnly( true );
1613 ev = eL.next(); 1613 ev = eL.next();
1614 } 1614 }
1615} 1615}
1616bool CalendarView::openCalendar(QString filename, bool merge) 1616bool CalendarView::openCalendar(QString filename, bool merge)
1617{ 1617{
1618 1618
1619 if (filename.isEmpty()) { 1619 if (filename.isEmpty()) {
1620 return false; 1620 return false;
1621 } 1621 }
1622 1622
1623 if (!QFile::exists(filename)) { 1623 if (!QFile::exists(filename)) {
1624 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename)); 1624 KMessageBox::error(this,i18n("File does not exist:\n '%1'.").arg(filename));
1625 return false; 1625 return false;
1626 } 1626 }
1627 1627
1628 globalFlagBlockAgenda = 1; 1628 globalFlagBlockAgenda = 1;
1629 if (!merge) mCalendar->close(); 1629 if (!merge) mCalendar->close();
1630 1630
1631 mStorage->setFileName( filename ); 1631 mStorage->setFileName( filename );
1632 1632
1633 if ( mStorage->load() ) { 1633 if ( mStorage->load() ) {
1634 if ( merge ) ;//setModified( true ); 1634 if ( merge ) ;//setModified( true );
1635 else { 1635 else {
1636 //setModified( true ); 1636 //setModified( true );
1637 mViewManager->setDocumentId( filename ); 1637 mViewManager->setDocumentId( filename );
1638 mDialogManager->setDocumentId( filename ); 1638 mDialogManager->setDocumentId( filename );
1639 mTodoList->setDocumentId( filename ); 1639 mTodoList->setDocumentId( filename );
1640 } 1640 }
1641 globalFlagBlockAgenda = 2; 1641 globalFlagBlockAgenda = 2;
1642 // if ( getLastSyncEvent() ) 1642 // if ( getLastSyncEvent() )
1643 // getLastSyncEvent()->setReadOnly( true ); 1643 // getLastSyncEvent()->setReadOnly( true );
1644 mCalendar->reInitAlarmSettings(); 1644 mCalendar->reInitAlarmSettings();
1645 setSyncEventsReadOnly(); 1645 setSyncEventsReadOnly();
1646 updateUnmanagedViews(); 1646 updateUnmanagedViews();
1647 updateView(); 1647 updateView();
1648 if ( filename != MainWindow::defaultFileName() ) { 1648 if ( filename != MainWindow::defaultFileName() ) {
1649 saveCalendar( MainWindow::defaultFileName() ); 1649 saveCalendar( MainWindow::defaultFileName() );
1650 } else { 1650 } else {
1651 QFileInfo finf ( MainWindow::defaultFileName()); 1651 QFileInfo finf ( MainWindow::defaultFileName());
1652 if ( finf.exists() ) { 1652 if ( finf.exists() ) {
1653 setLoadedFileVersion( finf.lastModified () ); 1653 setLoadedFileVersion( finf.lastModified () );
1654 } 1654 }
1655 } 1655 }
1656 return true; 1656 return true;
1657 } else { 1657 } else {
1658 // while failing to load, the calendar object could 1658 // while failing to load, the calendar object could
1659 // have become partially populated. Clear it out. 1659 // have become partially populated. Clear it out.
1660 if ( !merge ) { 1660 if ( !merge ) {
1661 mCalendar->close(); 1661 mCalendar->close();
1662 mViewManager->setDocumentId( filename ); 1662 mViewManager->setDocumentId( filename );
1663 mDialogManager->setDocumentId( filename ); 1663 mDialogManager->setDocumentId( filename );
1664 mTodoList->setDocumentId( filename ); 1664 mTodoList->setDocumentId( filename );
1665 } 1665 }
1666 1666
1667 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename)); 1667 //KMessageBox::error(this,i18n("Couldn't load calendar\n '%1'.").arg(filename));
1668 1668
1669 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) ); 1669 QTimer::singleShot ( 1, this, SLOT ( showOpenError() ) );
1670 globalFlagBlockAgenda = 2; 1670 globalFlagBlockAgenda = 2;
1671 mCalendar->reInitAlarmSettings(); 1671 mCalendar->reInitAlarmSettings();
1672 setSyncEventsReadOnly(); 1672 setSyncEventsReadOnly();
1673 updateUnmanagedViews(); 1673 updateUnmanagedViews();
1674 updateView(); 1674 updateView();
1675 } 1675 }
1676 return false; 1676 return false;
1677} 1677}
1678void CalendarView::showOpenError() 1678void CalendarView::showOpenError()
1679{ 1679{
1680 KMessageBox::error(this,i18n("Couldn't load calendar\n.")); 1680 KMessageBox::error(this,i18n("Couldn't load calendar\n."));
1681} 1681}
1682void CalendarView::setLoadedFileVersion(QDateTime dt) 1682void CalendarView::setLoadedFileVersion(QDateTime dt)
1683{ 1683{
1684 loadedFileVersion = dt; 1684 loadedFileVersion = dt;
1685} 1685}
1686bool CalendarView::checkFileChanged(QString fn) 1686bool CalendarView::checkFileChanged(QString fn)
1687{ 1687{
1688 QFileInfo finf ( fn ); 1688 QFileInfo finf ( fn );
1689 if ( !finf.exists() ) 1689 if ( !finf.exists() )
1690 return true; 1690 return true;
1691 QDateTime dt = finf.lastModified (); 1691 QDateTime dt = finf.lastModified ();
1692 if ( dt <= loadedFileVersion ) 1692 if ( dt <= loadedFileVersion )
1693 return false; 1693 return false;
1694 return true; 1694 return true;
1695 1695
1696} 1696}
1697void CalendarView::watchSavedFile() 1697void CalendarView::watchSavedFile()
1698{ 1698{
1699 QFileInfo finf ( MainWindow::defaultFileName()); 1699 QFileInfo finf ( MainWindow::defaultFileName());
1700 if ( !finf.exists() ) 1700 if ( !finf.exists() )
1701 return; 1701 return;
1702 QDateTime dt = finf.lastModified (); 1702 QDateTime dt = finf.lastModified ();
1703 if ( dt < loadedFileVersion ) { 1703 if ( dt < loadedFileVersion ) {
1704 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1()); 1704 //qDebug("watch %s %s ", dt.toString().latin1(), loadedFileVersion.toString().latin1());
1705 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) ); 1705 QTimer::singleShot( 1000 , this, SLOT ( watchSavedFile() ) );
1706 return; 1706 return;
1707 } 1707 }
1708 loadedFileVersion = dt; 1708 loadedFileVersion = dt;
1709} 1709}
1710 1710
1711bool CalendarView::checkFileVersion(QString fn) 1711bool CalendarView::checkFileVersion(QString fn)
1712{ 1712{
1713 QFileInfo finf ( fn ); 1713 QFileInfo finf ( fn );
1714 if ( !finf.exists() ) 1714 if ( !finf.exists() )
1715 return true; 1715 return true;
1716 QDateTime dt = finf.lastModified (); 1716 QDateTime dt = finf.lastModified ();
1717 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1()); 1717 //qDebug("loaded file version %s",loadedFileVersion.toString().latin1());
1718 //qDebug("file on disk version %s",dt.toString().latin1()); 1718 //qDebug("file on disk version %s",dt.toString().latin1());
1719 if ( dt <= loadedFileVersion ) 1719 if ( dt <= loadedFileVersion )
1720 return true; 1720 return true;
1721 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)) , 1721 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)) ,
1722 i18n("KO/Pi Warning"),i18n("Overwrite"), 1722 i18n("KO/Pi Warning"),i18n("Overwrite"),
1723 i18n("Sync+save")); 1723 i18n("Sync+save"));
1724 1724
1725 if ( km == KMessageBox::Cancel ) 1725 if ( km == KMessageBox::Cancel )
1726 return false; 1726 return false;
1727 if ( km == KMessageBox::Yes ) 1727 if ( km == KMessageBox::Yes )
1728 return true; 1728 return true;
1729 1729
1730 setSyncDevice("deleteaftersync" ); 1730 setSyncDevice("deleteaftersync" );
1731 mSyncManager->mAskForPreferences = true; 1731 mSyncManager->mAskForPreferences = true;
1732 mSyncManager->mSyncAlgoPrefs = 3; 1732 mSyncManager->mSyncAlgoPrefs = 3;
1733 mSyncManager->mWriteBackFile = false; 1733 mSyncManager->mWriteBackFile = false;
1734 mSyncManager->mWriteBackExistingOnly = false; 1734 mSyncManager->mWriteBackExistingOnly = false;
1735 mSyncManager->mShowSyncSummary = false; 1735 mSyncManager->mShowSyncSummary = false;
1736 syncCalendar( fn, 3 ); 1736 syncCalendar( fn, 3 );
1737 Event * e = getLastSyncEvent(); 1737 Event * e = getLastSyncEvent();
1738 mCalendar->deleteEvent ( e ); 1738 mCalendar->deleteEvent ( e );
1739 updateView(); 1739 updateView();
1740 return true; 1740 return true;
1741} 1741}
1742 1742
1743bool CalendarView::saveCalendar( QString filename ) 1743bool CalendarView::saveCalendar( QString filename )
1744{ 1744{
1745 1745
1746 // Store back all unsaved data into calendar object 1746 // Store back all unsaved data into calendar object
1747 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() ); 1747 // qDebug("file %s %d ", filename.latin1() , mViewManager->currentView() );
1748 if ( mViewManager->currentView() ) 1748 if ( mViewManager->currentView() )
1749 mViewManager->currentView()->flushView(); 1749 mViewManager->currentView()->flushView();
1750 1750
1751 1751
1752 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2); 1752 QDateTime lfv = QDateTime::currentDateTime().addSecs( -2);
1753 mStorage->setSaveFormat( new ICalFormat() ); 1753 mStorage->setSaveFormat( new ICalFormat() );
1754 mStorage->setFileName( filename ); 1754 mStorage->setFileName( filename );
1755 bool success; 1755 bool success;
1756 success = mStorage->save(); 1756 success = mStorage->save();
1757 if ( !success ) { 1757 if ( !success ) {
1758 return false; 1758 return false;
1759 } 1759 }
1760 if ( filename == MainWindow::defaultFileName() ) { 1760 if ( filename == MainWindow::defaultFileName() ) {
1761 setLoadedFileVersion( lfv ); 1761 setLoadedFileVersion( lfv );
1762 watchSavedFile(); 1762 watchSavedFile();
1763 } 1763 }
1764 return true; 1764 return true;
1765} 1765}
1766 1766
1767void CalendarView::closeCalendar() 1767void CalendarView::closeCalendar()
1768{ 1768{
1769 1769
1770 // child windows no longer valid 1770 // child windows no longer valid
1771 emit closingDown(); 1771 emit closingDown();
1772 1772
1773 mCalendar->close(); 1773 mCalendar->close();
1774 setModified(false); 1774 setModified(false);
1775 updateView(); 1775 updateView();
1776} 1776}
1777 1777
1778void CalendarView::archiveCalendar() 1778void CalendarView::archiveCalendar()
1779{ 1779{
1780 mDialogManager->showArchiveDialog(); 1780 mDialogManager->showArchiveDialog();
1781} 1781}
1782 1782
1783 1783
1784void CalendarView::readSettings() 1784void CalendarView::readSettings()
1785{ 1785{
1786 1786
1787 1787
1788 // mViewManager->showAgendaView(); 1788 // mViewManager->showAgendaView();
1789 QString str; 1789 QString str;
1790 //qDebug("CalendarView::readSettings() "); 1790 //qDebug("CalendarView::readSettings() ");
1791 // read settings from the KConfig, supplying reasonable 1791 // read settings from the KConfig, supplying reasonable
1792 // defaults where none are to be found 1792 // defaults where none are to be found
1793 KConfig *config = KOGlobals::config(); 1793 KConfig *config = KOGlobals::config();
1794#ifndef KORG_NOSPLITTER 1794#ifndef KORG_NOSPLITTER
1795 config->setGroup("KOrganizer Geometry"); 1795 config->setGroup("KOrganizer Geometry");
1796 1796
1797 QValueList<int> sizes = config->readIntListEntry("Separator1"); 1797 QValueList<int> sizes = config->readIntListEntry("Separator1");
1798 if (sizes.count() != 2) { 1798 if (sizes.count() != 2) {
1799 sizes << mDateNavigator->minimumSizeHint().width(); 1799 sizes << mDateNavigator->minimumSizeHint().width();
1800 sizes << 300; 1800 sizes << 300;
1801 } 1801 }
1802 mPanner->setSizes(sizes); 1802 mPanner->setSizes(sizes);
1803 1803
1804 sizes = config->readIntListEntry("Separator2"); 1804 sizes = config->readIntListEntry("Separator2");
1805 if ( ( mResourceView && sizes.count() == 4 ) || 1805 if ( ( mResourceView && sizes.count() == 4 ) ||
1806 ( !mResourceView && sizes.count() == 3 ) ) { 1806 ( !mResourceView && sizes.count() == 3 ) ) {
1807 mLeftSplitter->setSizes(sizes); 1807 mLeftSplitter->setSizes(sizes);
1808 } 1808 }
1809#endif 1809#endif
1810 globalFlagBlockAgenda = 1; 1810 globalFlagBlockAgenda = 1;
1811 mViewManager->showAgendaView(); 1811 mViewManager->showAgendaView();
1812 //mViewManager->readSettings( config ); 1812 //mViewManager->readSettings( config );
1813 mTodoList->restoreLayout(config,QString("Todo Layout")); 1813 mTodoList->restoreLayout(config,QString("Todo Layout"));
1814 readFilterSettings(config); 1814 readFilterSettings(config);
1815 config->setGroup( "Views" ); 1815 config->setGroup( "Views" );
1816 int dateCount = config->readNumEntry( "ShownDatesCount", 7 ); 1816 int dateCount = config->readNumEntry( "ShownDatesCount", 7 );
1817 if ( dateCount == 5 ) mNavigator->selectWorkWeek(); 1817 if ( dateCount == 5 ) mNavigator->selectWorkWeek();
1818 else if ( dateCount == 7 ) mNavigator->selectWeek(); 1818 else if ( dateCount == 7 ) mNavigator->selectWeek();
1819 else mNavigator->selectDates( dateCount ); 1819 else mNavigator->selectDates( dateCount );
1820 // mViewManager->readSettings( config ); 1820 // mViewManager->readSettings( config );
1821 updateConfig(); 1821 updateConfig();
1822 globalFlagBlockAgenda = 2; 1822 globalFlagBlockAgenda = 2;
1823 mViewManager->readSettings( config ); 1823 mViewManager->readSettings( config );
1824#ifdef DESKTOP_VERSION 1824#ifdef DESKTOP_VERSION
1825 config->setGroup("WidgetLayout"); 1825 config->setGroup("WidgetLayout");
1826 QStringList list; 1826 QStringList list;
1827 list = config->readListEntry("MainLayout"); 1827 list = config->readListEntry("MainLayout");
1828 int x,y,w,h; 1828 int x,y,w,h;
1829 if ( ! list.isEmpty() ) { 1829 if ( ! list.isEmpty() ) {
1830 x = list[0].toInt(); 1830 x = list[0].toInt();
1831 y = list[1].toInt(); 1831 y = list[1].toInt();
1832 w = list[2].toInt(); 1832 w = list[2].toInt();
1833 h = list[3].toInt(); 1833 h = list[3].toInt();
1834 topLevelWidget()->setGeometry(x,y,w,h); 1834 topLevelWidget()->setGeometry(x,y,w,h);
1835 1835
1836 } else { 1836 } else {
1837 topLevelWidget()->setGeometry( 40 ,40 , 640, 440); 1837 topLevelWidget()->setGeometry( 40 ,40 , 640, 440);
1838 } 1838 }
1839 list = config->readListEntry("EditEventLayout"); 1839 list = config->readListEntry("EditEventLayout");
1840 if ( ! list.isEmpty() ) { 1840 if ( ! list.isEmpty() ) {
1841 x = list[0].toInt(); 1841 x = list[0].toInt();
1842 y = list[1].toInt(); 1842 y = list[1].toInt();
1843 w = list[2].toInt(); 1843 w = list[2].toInt();
1844 h = list[3].toInt(); 1844 h = list[3].toInt();
1845 mEventEditor->setGeometry(x,y,w,h); 1845 mEventEditor->setGeometry(x,y,w,h);
1846 1846
1847 } 1847 }
1848 list = config->readListEntry("EditTodoLayout"); 1848 list = config->readListEntry("EditTodoLayout");
1849 if ( ! list.isEmpty() ) { 1849 if ( ! list.isEmpty() ) {
1850 x = list[0].toInt(); 1850 x = list[0].toInt();
1851 y = list[1].toInt(); 1851 y = list[1].toInt();
1852 w = list[2].toInt(); 1852 w = list[2].toInt();
1853 h = list[3].toInt(); 1853 h = list[3].toInt();
1854 mTodoEditor->setGeometry(x,y,w,h); 1854 mTodoEditor->setGeometry(x,y,w,h);
1855 1855
1856 } 1856 }
1857 list = config->readListEntry("ViewerLayout"); 1857 list = config->readListEntry("ViewerLayout");
1858 if ( ! list.isEmpty() ) { 1858 if ( ! list.isEmpty() ) {
1859 x = list[0].toInt(); 1859 x = list[0].toInt();
1860 y = list[1].toInt(); 1860 y = list[1].toInt();
1861 w = list[2].toInt(); 1861 w = list[2].toInt();
1862 h = list[3].toInt(); 1862 h = list[3].toInt();
1863 getEventViewerDialog()->setGeometry(x,y,w,h); 1863 getEventViewerDialog()->setGeometry(x,y,w,h);
1864 } 1864 }
1865#endif 1865#endif
1866 1866
1867} 1867}
1868 1868
1869 1869
1870void CalendarView::writeSettings() 1870void CalendarView::writeSettings()
1871{ 1871{
1872 // kdDebug() << "CalendarView::writeSettings" << endl; 1872 // kdDebug() << "CalendarView::writeSettings" << endl;
1873 1873
1874 KConfig *config = KOGlobals::config(); 1874 KConfig *config = KOGlobals::config();
1875 1875
1876#ifndef KORG_NOSPLITTER 1876#ifndef KORG_NOSPLITTER
1877 config->setGroup("KOrganizer Geometry"); 1877 config->setGroup("KOrganizer Geometry");
1878 1878
1879 QValueList<int> list = mPanner->sizes(); 1879 QValueList<int> list = mPanner->sizes();
1880 config->writeEntry("Separator1",list); 1880 config->writeEntry("Separator1",list);
1881 1881
1882 list = mLeftSplitter->sizes(); 1882 list = mLeftSplitter->sizes();
1883 config->writeEntry("Separator2",list); 1883 config->writeEntry("Separator2",list);
1884#endif 1884#endif
1885 1885
1886 mViewManager->writeSettings( config ); 1886 mViewManager->writeSettings( config );
1887 mTodoList->saveLayout(config,QString("Todo Layout")); 1887 mTodoList->saveLayout(config,QString("Todo Layout"));
1888 mDialogManager->writeSettings( config ); 1888 mDialogManager->writeSettings( config );
1889 //KOPrefs::instance()->usrWriteConfig(); 1889 //KOPrefs::instance()->usrWriteConfig();
1890 KOPrefs::instance()->writeConfig(); 1890 KOPrefs::instance()->writeConfig();
1891 1891
1892 writeFilterSettings(config); 1892 writeFilterSettings(config);
1893 1893
1894 config->setGroup( "Views" ); 1894 config->setGroup( "Views" );
1895 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() ); 1895 config->writeEntry( "ShownDatesCount", mNavigator->selectedDates().count() );
1896 1896
1897#ifdef DESKTOP_VERSION 1897#ifdef DESKTOP_VERSION
1898 config->setGroup("WidgetLayout"); 1898 config->setGroup("WidgetLayout");
1899 QStringList list ;//= config->readListEntry("MainLayout"); 1899 QStringList list ;//= config->readListEntry("MainLayout");
1900 int x,y,w,h; 1900 int x,y,w,h;
1901 QWidget* wid; 1901 QWidget* wid;
1902 wid = topLevelWidget(); 1902 wid = topLevelWidget();
1903 x = wid->geometry().x(); 1903 x = wid->geometry().x();
1904 y = wid->geometry().y(); 1904 y = wid->geometry().y();
1905 w = wid->width(); 1905 w = wid->width();
1906 h = wid->height(); 1906 h = wid->height();
1907 list.clear(); 1907 list.clear();
1908 list << QString::number( x ); 1908 list << QString::number( x );
1909 list << QString::number( y ); 1909 list << QString::number( y );
1910 list << QString::number( w ); 1910 list << QString::number( w );
1911 list << QString::number( h ); 1911 list << QString::number( h );
1912 config->writeEntry("MainLayout",list ); 1912 config->writeEntry("MainLayout",list );
1913 1913
1914 wid = mEventEditor; 1914 wid = mEventEditor;
1915 x = wid->geometry().x(); 1915 x = wid->geometry().x();
1916 y = wid->geometry().y(); 1916 y = wid->geometry().y();
1917 w = wid->width(); 1917 w = wid->width();
1918 h = wid->height(); 1918 h = wid->height();
1919 list.clear(); 1919 list.clear();
1920 list << QString::number( x ); 1920 list << QString::number( x );
1921 list << QString::number( y ); 1921 list << QString::number( y );
1922 list << QString::number( w ); 1922 list << QString::number( w );
1923 list << QString::number( h ); 1923 list << QString::number( h );
1924 config->writeEntry("EditEventLayout",list ); 1924 config->writeEntry("EditEventLayout",list );
1925 1925
1926 wid = mTodoEditor; 1926 wid = mTodoEditor;
1927 x = wid->geometry().x(); 1927 x = wid->geometry().x();
1928 y = wid->geometry().y(); 1928 y = wid->geometry().y();
1929 w = wid->width(); 1929 w = wid->width();
1930 h = wid->height(); 1930 h = wid->height();
1931 list.clear(); 1931 list.clear();
1932 list << QString::number( x ); 1932 list << QString::number( x );
1933 list << QString::number( y ); 1933 list << QString::number( y );
1934 list << QString::number( w ); 1934 list << QString::number( w );
1935 list << QString::number( h ); 1935 list << QString::number( h );
1936 config->writeEntry("EditTodoLayout",list ); 1936 config->writeEntry("EditTodoLayout",list );
1937 wid = getEventViewerDialog(); 1937 wid = getEventViewerDialog();
1938 x = wid->geometry().x(); 1938 x = wid->geometry().x();
1939 y = wid->geometry().y(); 1939 y = wid->geometry().y();
1940 w = wid->width(); 1940 w = wid->width();
1941 h = wid->height(); 1941 h = wid->height();
1942 list.clear(); 1942 list.clear();
1943 list << QString::number( x ); 1943 list << QString::number( x );
1944 list << QString::number( y ); 1944 list << QString::number( y );
1945 list << QString::number( w ); 1945 list << QString::number( w );
1946 list << QString::number( h ); 1946 list << QString::number( h );
1947 config->writeEntry("ViewerLayout",list ); 1947 config->writeEntry("ViewerLayout",list );
1948 wid = mDialogManager->getSearchDialog(); 1948 wid = mDialogManager->getSearchDialog();
1949 if ( wid ) { 1949 if ( wid ) {
1950 x = wid->geometry().x(); 1950 x = wid->geometry().x();
1951 y = wid->geometry().y(); 1951 y = wid->geometry().y();
1952 w = wid->width(); 1952 w = wid->width();
1953 h = wid->height(); 1953 h = wid->height();
1954 list.clear(); 1954 list.clear();
1955 list << QString::number( x ); 1955 list << QString::number( x );
1956 list << QString::number( y ); 1956 list << QString::number( y );
1957 list << QString::number( w ); 1957 list << QString::number( w );
1958 list << QString::number( h ); 1958 list << QString::number( h );
1959 config->writeEntry("SearchLayout",list ); 1959 config->writeEntry("SearchLayout",list );
1960 } 1960 }
1961#endif 1961#endif
1962 1962
1963 1963
1964 config->sync(); 1964 config->sync();
1965} 1965}
1966 1966
1967void CalendarView::readFilterSettings(KConfig *config) 1967void CalendarView::readFilterSettings(KConfig *config)
1968{ 1968{
1969 // kdDebug() << "CalendarView::readFilterSettings()" << endl; 1969 // kdDebug() << "CalendarView::readFilterSettings()" << endl;
1970 1970
1971 mFilters.clear(); 1971 mFilters.clear();
1972 1972
1973 config->setGroup("General"); 1973 config->setGroup("General");
1974 QStringList filterList = config->readListEntry("CalendarFilters"); 1974 QStringList filterList = config->readListEntry("CalendarFilters");
1975 1975
1976 QStringList::ConstIterator it = filterList.begin(); 1976 QStringList::ConstIterator it = filterList.begin();
1977 QStringList::ConstIterator end = filterList.end(); 1977 QStringList::ConstIterator end = filterList.end();
1978 while(it != end) { 1978 while(it != end) {
1979 // kdDebug() << " filter: " << (*it) << endl; 1979 // kdDebug() << " filter: " << (*it) << endl;
1980 1980
1981 CalFilter *filter; 1981 CalFilter *filter;
1982 filter = new CalFilter(*it); 1982 filter = new CalFilter(*it);
1983 config->setGroup("Filter_" + (*it)); 1983 config->setGroup("Filter_" + (*it));
1984 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) ); 1984 //qDebug("readFilterSettings %d ",config->readNumEntry("Criteria",0) );
1985 filter->setCriteria(config->readNumEntry("Criteria",0)); 1985 filter->setCriteria(config->readNumEntry("Criteria",0));
1986 filter->setCategoryList(config->readListEntry("CategoryList")); 1986 filter->setCategoryList(config->readListEntry("CategoryList"));
1987 mFilters.append(filter); 1987 mFilters.append(filter);
1988 1988
1989 ++it; 1989 ++it;
1990 } 1990 }
1991 1991
1992 if (mFilters.count() == 0) { 1992 if (mFilters.count() == 0) {
1993 CalFilter *filter = new CalFilter(i18n("Default")); 1993 CalFilter *filter = new CalFilter(i18n("Default"));
1994 mFilters.append(filter); 1994 mFilters.append(filter);
1995 } 1995 }
1996 mFilterView->updateFilters(); 1996 mFilterView->updateFilters();
1997 config->setGroup("FilterView"); 1997 config->setGroup("FilterView");
1998 1998
1999 mFilterView->blockSignals(true); 1999 mFilterView->blockSignals(true);
2000 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled")); 2000 mFilterView->setFiltersEnabled(config->readBoolEntry("FilterEnabled"));
2001 mFilterView->setSelectedFilter(config->readEntry("Current Filter")); 2001 mFilterView->setSelectedFilter(config->readEntry("Current Filter"));
2002 mFilterView->blockSignals(false); 2002 mFilterView->blockSignals(false);
2003 // We do it manually to avoid it being done twice by the above calls 2003 // We do it manually to avoid it being done twice by the above calls
2004 updateFilter(); 2004 updateFilter();
2005} 2005}
2006 2006
2007void CalendarView::writeFilterSettings(KConfig *config) 2007void CalendarView::writeFilterSettings(KConfig *config)
2008{ 2008{
2009 // kdDebug() << "CalendarView::writeFilterSettings()" << endl; 2009 // kdDebug() << "CalendarView::writeFilterSettings()" << endl;
2010 2010
2011 QStringList filterList; 2011 QStringList filterList;
2012 2012
2013 CalFilter *filter = mFilters.first(); 2013 CalFilter *filter = mFilters.first();
2014 while(filter) { 2014 while(filter) {
2015 // kdDebug() << " fn: " << filter->name() << endl; 2015 // kdDebug() << " fn: " << filter->name() << endl;
2016 filterList << filter->name(); 2016 filterList << filter->name();
2017 config->setGroup("Filter_" + filter->name()); 2017 config->setGroup("Filter_" + filter->name());
2018 config->writeEntry("Criteria",filter->criteria()); 2018 config->writeEntry("Criteria",filter->criteria());
2019 config->writeEntry("CategoryList",filter->categoryList()); 2019 config->writeEntry("CategoryList",filter->categoryList());
2020 filter = mFilters.next(); 2020 filter = mFilters.next();
2021 } 2021 }
2022 config->setGroup("General"); 2022 config->setGroup("General");
2023 config->writeEntry("CalendarFilters",filterList); 2023 config->writeEntry("CalendarFilters",filterList);
2024 2024
2025 config->setGroup("FilterView"); 2025 config->setGroup("FilterView");
2026 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled()); 2026 config->writeEntry("FilterEnabled",mFilterView->filtersEnabled());
2027 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name()); 2027 config->writeEntry("Current Filter",mFilterView->selectedFilter()->name());
2028} 2028}
2029 2029
2030 2030
2031void CalendarView::goToday() 2031void CalendarView::goToday()
2032{ 2032{
2033 if ( mViewManager->currentView()->isMonthView() ) 2033 if ( mViewManager->currentView()->isMonthView() )
2034 mNavigator->selectTodayMonth(); 2034 mNavigator->selectTodayMonth();
2035 else 2035 else
2036 mNavigator->selectToday(); 2036 mNavigator->selectToday();
2037} 2037}
2038 2038
2039void CalendarView::goNext() 2039void CalendarView::goNext()
2040{ 2040{
2041 mNavigator->selectNext(); 2041 mNavigator->selectNext();
2042} 2042}
2043 2043
2044void CalendarView::goPrevious() 2044void CalendarView::goPrevious()
2045{ 2045{
2046 mNavigator->selectPrevious(); 2046 mNavigator->selectPrevious();
2047} 2047}
2048void CalendarView::goNextMonth() 2048void CalendarView::goNextMonth()
2049{ 2049{
2050 mNavigator->selectNextMonth(); 2050 mNavigator->selectNextMonth();
2051} 2051}
2052 2052
2053void CalendarView::goPreviousMonth() 2053void CalendarView::goPreviousMonth()
2054{ 2054{
2055 mNavigator->selectPreviousMonth(); 2055 mNavigator->selectPreviousMonth();
2056} 2056}
2057void CalendarView::writeLocale() 2057void CalendarView::writeLocale()
2058{ 2058{
2059 //KPimGlobalPrefs::instance()->setGlobalConfig(); 2059 //KPimGlobalPrefs::instance()->setGlobalConfig();
2060#if 0 2060#if 0
2061 KGlobal::locale()->setHore24Format( !KOPrefs::instance()->mPreferredTime ); 2061 KGlobal::locale()->setHore24Format( !KOPrefs::instance()->mPreferredTime );
2062 KGlobal::locale()->setWeekStartMonday( !KOPrefs::instance()->mWeekStartsOnSunday ); 2062 KGlobal::locale()->setWeekStartMonday( !KOPrefs::instance()->mWeekStartsOnSunday );
2063 KGlobal::locale()->setIntDateFormat( (KLocale::IntDateFormat)KOPrefs::instance()->mPreferredDate ); 2063 KGlobal::locale()->setIntDateFormat( (KLocale::IntDateFormat)KOPrefs::instance()->mPreferredDate );
2064 KGlobal::locale()->setLanguage( KOPrefs::instance()->mPreferredLanguage ); 2064 KGlobal::locale()->setLanguage( KOPrefs::instance()->mPreferredLanguage );
2065 QString dummy = KOPrefs::instance()->mUserDateFormatLong; 2065 QString dummy = KOPrefs::instance()->mUserDateFormatLong;
2066 KGlobal::locale()->setDateFormat(dummy.replace( QRegExp("K"), QString(",") )); 2066 KGlobal::locale()->setDateFormat(dummy.replace( QRegExp("K"), QString(",") ));
2067 dummy = KOPrefs::instance()->mUserDateFormatShort; 2067 dummy = KOPrefs::instance()->mUserDateFormatShort;
2068 KGlobal::locale()->setDateFormatShort(dummy.replace( QRegExp("K"), QString(",") )); 2068 KGlobal::locale()->setDateFormatShort(dummy.replace( QRegExp("K"), QString(",") ));
2069 KGlobal::locale()->setDaylightSaving( KOPrefs::instance()->mUseDaylightsaving, 2069 KGlobal::locale()->setDaylightSaving( KOPrefs::instance()->mUseDaylightsaving,
2070 KOPrefs::instance()->mDaylightsavingStart, 2070 KOPrefs::instance()->mDaylightsavingStart,
2071 KOPrefs::instance()->mDaylightsavingEnd ); 2071 KOPrefs::instance()->mDaylightsavingEnd );
2072 KGlobal::locale()->setTimezone( KPimGlobalPrefs::instance()->mTimeZoneId ); 2072 KGlobal::locale()->setTimezone( KPimGlobalPrefs::instance()->mTimeZoneId );
2073#endif 2073#endif
2074} 2074}
2075void CalendarView::updateConfig() 2075void CalendarView::updateConfig()
2076{ 2076{
2077 writeLocale(); 2077 writeLocale();
2078 if ( KOPrefs::instance()->mUseAppColors ) 2078 if ( KOPrefs::instance()->mUseAppColors )
2079 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 2079 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
2080 emit configChanged(); 2080 emit configChanged();
2081 mTodoList->updateConfig(); 2081 mTodoList->updateConfig();
2082 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont); 2082 // mDateNavigator->setFont ( KOPrefs::instance()->mDateNavigatorFont);
2083 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2083 mCalendar->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2084 // To make the "fill window" configurations work 2084 // To make the "fill window" configurations work
2085 //mViewManager->raiseCurrentView(); 2085 //mViewManager->raiseCurrentView();
2086} 2086}
2087 2087
2088 2088
2089void CalendarView::eventChanged(Event *event) 2089void CalendarView::eventChanged(Event *event)
2090{ 2090{
2091 changeEventDisplay(event,KOGlobals::EVENTEDITED); 2091 changeEventDisplay(event,KOGlobals::EVENTEDITED);
2092 //updateUnmanagedViews(); 2092 //updateUnmanagedViews();
2093} 2093}
2094 2094
2095void CalendarView::eventAdded(Event *event) 2095void CalendarView::eventAdded(Event *event)
2096{ 2096{
2097 changeEventDisplay(event,KOGlobals::EVENTADDED); 2097 changeEventDisplay(event,KOGlobals::EVENTADDED);
2098} 2098}
2099 2099
2100void CalendarView::eventToBeDeleted(Event *) 2100void CalendarView::eventToBeDeleted(Event *)
2101{ 2101{
2102 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl; 2102 kdDebug() << "CalendarView::eventToBeDeleted(): to be implemented" << endl;
2103} 2103}
2104 2104
2105void CalendarView::eventDeleted() 2105void CalendarView::eventDeleted()
2106{ 2106{
2107 changeEventDisplay(0,KOGlobals::EVENTDELETED); 2107 changeEventDisplay(0,KOGlobals::EVENTDELETED);
2108} 2108}
2109void CalendarView::changeTodoDisplay(Todo *which, int action) 2109void CalendarView::changeTodoDisplay(Todo *which, int action)
2110{ 2110{
2111 changeIncidenceDisplay((Incidence *)which, action); 2111 changeIncidenceDisplay((Incidence *)which, action);
2112 mDateNavigator->updateView(); //LR 2112 mDateNavigator->updateView(); //LR
2113 //mDialogManager->updateSearchDialog(); 2113 //mDialogManager->updateSearchDialog();
2114 2114
2115 if (which) { 2115 if (which) {
2116 mViewManager->updateWNview(); 2116 mViewManager->updateWNview();
2117 //mTodoList->updateView(); 2117 //mTodoList->updateView();
2118 } 2118 }
2119 2119
2120} 2120}
2121 2121
2122void CalendarView::changeIncidenceDisplay(Incidence *which, int action) 2122void CalendarView::changeIncidenceDisplay(Incidence *which, int action)
2123{ 2123{
2124 updateUnmanagedViews(); 2124 updateUnmanagedViews();
2125 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action ); 2125 //qDebug(" CalendarView::changeIncidenceDisplay++++++++++++++++++++++++++ %d %d ",which, action );
2126 if ( action == KOGlobals::EVENTDELETED ) { //delete 2126 if ( action == KOGlobals::EVENTDELETED ) { //delete
2127 mCalendar->checkAlarmForIncidence( 0, true ); 2127 mCalendar->checkAlarmForIncidence( 0, true );
2128 if ( mEventViewerDialog ) 2128 if ( mEventViewerDialog )
2129 mEventViewerDialog->hide(); 2129 mEventViewerDialog->hide();
2130 } 2130 }
2131 else 2131 else
2132 mCalendar->checkAlarmForIncidence( which , false ); 2132 mCalendar->checkAlarmForIncidence( which , false );
2133} 2133}
2134 2134
2135// most of the changeEventDisplays() right now just call the view's 2135// most of the changeEventDisplays() right now just call the view's
2136// total update mode, but they SHOULD be recoded to be more refresh-efficient. 2136// total update mode, but they SHOULD be recoded to be more refresh-efficient.
2137void CalendarView::changeEventDisplay(Event *which, int action) 2137void CalendarView::changeEventDisplay(Event *which, int action)
2138{ 2138{
2139 // kdDebug() << "CalendarView::changeEventDisplay" << endl; 2139 // kdDebug() << "CalendarView::changeEventDisplay" << endl;
2140 changeIncidenceDisplay((Incidence *)which, action); 2140 changeIncidenceDisplay((Incidence *)which, action);
2141 mDateNavigator->updateView(); 2141 mDateNavigator->updateView();
2142 //mDialogManager->updateSearchDialog(); 2142 //mDialogManager->updateSearchDialog();
2143 2143
2144 if (which) { 2144 if (which) {
2145 // If there is an event view visible update the display 2145 // If there is an event view visible update the display
2146 mViewManager->currentView()->changeEventDisplay(which,action); 2146 mViewManager->currentView()->changeEventDisplay(which,action);
2147 // TODO: check, if update needed 2147 // TODO: check, if update needed
2148 // if (which->getTodoStatus()) { 2148 // if (which->getTodoStatus()) {
2149 mTodoList->updateView(); 2149 mTodoList->updateView();
2150 // } 2150 // }
2151 } else { 2151 } else {
2152 mViewManager->currentView()->updateView(); 2152 mViewManager->currentView()->updateView();
2153 } 2153 }
2154} 2154}
2155 2155
2156 2156
2157void CalendarView::updateTodoViews() 2157void CalendarView::updateTodoViews()
2158{ 2158{
2159 2159
2160 mTodoList->updateView(); 2160 mTodoList->updateView();
2161 mViewManager->currentView()->updateView(); 2161 mViewManager->currentView()->updateView();
2162 2162
2163} 2163}
2164 2164
2165 2165
2166void CalendarView::updateView(const QDate &start, const QDate &end) 2166void CalendarView::updateView(const QDate &start, const QDate &end)
2167{ 2167{
2168 mTodoList->updateView(); 2168 mTodoList->updateView();
2169 mViewManager->updateView(start, end); 2169 mViewManager->updateView(start, end);
2170 //mDateNavigator->updateView(); 2170 //mDateNavigator->updateView();
2171} 2171}
2172 2172
2173void CalendarView::updateView() 2173void CalendarView::updateView()
2174{ 2174{
2175 DateList tmpList = mNavigator->selectedDates(); 2175 DateList tmpList = mNavigator->selectedDates();
2176 2176
2177 if ( KOPrefs::instance()->mHideNonStartedTodos ) 2177 if ( KOPrefs::instance()->mHideNonStartedTodos )
2178 mTodoList->updateView(); 2178 mTodoList->updateView();
2179 // We assume that the navigator only selects consecutive days. 2179 // We assume that the navigator only selects consecutive days.
2180 updateView( tmpList.first(), tmpList.last() ); 2180 updateView( tmpList.first(), tmpList.last() );
2181} 2181}
2182 2182
2183void CalendarView::updateUnmanagedViews() 2183void CalendarView::updateUnmanagedViews()
2184{ 2184{
2185 mDateNavigator->updateDayMatrix(); 2185 mDateNavigator->updateDayMatrix();
2186} 2186}
2187 2187
2188int CalendarView::msgItemDelete() 2188int CalendarView::msgItemDelete(const QString name)
2189{ 2189{
2190 return KMessageBox::warningContinueCancel(this, 2190 return KMessageBox::warningContinueCancel(this,name +"\n\n"+
2191 i18n("This item will be\npermanently deleted."), 2191 i18n("This item will be\npermanently deleted."),
2192 i18n("KO/Pi Confirmation"),i18n("Delete")); 2192 i18n("KO/Pi Confirmation"),i18n("Delete"));
2193} 2193}
2194 2194
2195 2195
2196void CalendarView::edit_cut() 2196void CalendarView::edit_cut()
2197{ 2197{
2198 Event *anEvent=0; 2198 Event *anEvent=0;
2199 2199
2200 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2200 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2201 2201
2202 if (mViewManager->currentView()->isEventView()) { 2202 if (mViewManager->currentView()->isEventView()) {
2203 if ( incidence && incidence->type() == "Event" ) { 2203 if ( incidence && incidence->type() == "Event" ) {
2204 anEvent = static_cast<Event *>(incidence); 2204 anEvent = static_cast<Event *>(incidence);
2205 } 2205 }
2206 } 2206 }
2207 2207
2208 if (!anEvent) { 2208 if (!anEvent) {
2209 KNotifyClient::beep(); 2209 KNotifyClient::beep();
2210 return; 2210 return;
2211 } 2211 }
2212 DndFactory factory( mCalendar ); 2212 DndFactory factory( mCalendar );
2213 factory.cutEvent(anEvent); 2213 factory.cutEvent(anEvent);
2214 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2214 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2215} 2215}
2216 2216
2217void CalendarView::edit_copy() 2217void CalendarView::edit_copy()
2218{ 2218{
2219 Event *anEvent=0; 2219 Event *anEvent=0;
2220 2220
2221 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2221 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2222 2222
2223 if (mViewManager->currentView()->isEventView()) { 2223 if (mViewManager->currentView()->isEventView()) {
2224 if ( incidence && incidence->type() == "Event" ) { 2224 if ( incidence && incidence->type() == "Event" ) {
2225 anEvent = static_cast<Event *>(incidence); 2225 anEvent = static_cast<Event *>(incidence);
2226 } 2226 }
2227 } 2227 }
2228 2228
2229 if (!anEvent) { 2229 if (!anEvent) {
2230 KNotifyClient::beep(); 2230 KNotifyClient::beep();
2231 return; 2231 return;
2232 } 2232 }
2233 DndFactory factory( mCalendar ); 2233 DndFactory factory( mCalendar );
2234 factory.copyEvent(anEvent); 2234 factory.copyEvent(anEvent);
2235} 2235}
2236 2236
2237void CalendarView::edit_paste() 2237void CalendarView::edit_paste()
2238{ 2238{
2239 QDate date = mNavigator->selectedDates().first(); 2239 QDate date = mNavigator->selectedDates().first();
2240 2240
2241 DndFactory factory( mCalendar ); 2241 DndFactory factory( mCalendar );
2242 Event *pastedEvent = factory.pasteEvent( date ); 2242 Event *pastedEvent = factory.pasteEvent( date );
2243 2243
2244 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 2244 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
2245} 2245}
2246 2246
2247void CalendarView::edit_options() 2247void CalendarView::edit_options()
2248{ 2248{
2249 mDialogManager->showOptionsDialog(); 2249 mDialogManager->showOptionsDialog();
2250 //writeSettings(); 2250 //writeSettings();
2251} 2251}
2252 2252
2253 2253
2254void CalendarView::slotSelectPickerDate( QDate d) 2254void CalendarView::slotSelectPickerDate( QDate d)
2255{ 2255{
2256 mDateFrame->hide(); 2256 mDateFrame->hide();
2257 if ( mDatePickerMode == 1 ) { 2257 if ( mDatePickerMode == 1 ) {
2258 mNavigator->slotDaySelect( d ); 2258 mNavigator->slotDaySelect( d );
2259 } else if ( mDatePickerMode == 2 ) { 2259 } else if ( mDatePickerMode == 2 ) {
2260 if ( mMoveIncidence->type() == "Todo" ) { 2260 if ( mMoveIncidence->type() == "Todo" ) {
2261 Todo * to = (Todo *) mMoveIncidence; 2261 Todo * to = (Todo *) mMoveIncidence;
2262 QTime tim; 2262 QTime tim;
2263 if ( to->hasDueDate() ) 2263 if ( to->hasDueDate() )
2264 tim = to->dtDue().time(); 2264 tim = to->dtDue().time();
2265 else { 2265 else {
2266 tim = QTime ( 0,0,0 ); 2266 tim = QTime ( 0,0,0 );
2267 to->setFloats( true ); 2267 to->setFloats( true );
2268 to->setHasDueDate( true ); 2268 to->setHasDueDate( true );
2269 } 2269 }
2270 QDateTime dt ( d,tim ); 2270 QDateTime dt ( d,tim );
2271 to->setDtDue( dt ); 2271 to->setDtDue( dt );
2272 todoChanged( to ); 2272 todoChanged( to );
2273 } else { 2273 } else {
2274 if ( mMoveIncidence->doesRecur() ) { 2274 if ( mMoveIncidence->doesRecur() ) {
2275#if 0 2275#if 0
2276 // PENDING implement this 2276 // PENDING implement this
2277 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate ); 2277 Incidence* newInc = mMoveIncidence->recreateCloneException( mMoveIncidenceOldDate );
2278 mCalendar()->addIncidence( newInc ); 2278 mCalendar()->addIncidence( newInc );
2279 if ( mMoveIncidence->type() == "Todo" ) 2279 if ( mMoveIncidence->type() == "Todo" )
2280 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED ); 2280 emit todoMoved((Todo*)mMoveIncidence, KOGlobals::EVENTEDITED );
2281 else 2281 else
2282 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED); 2282 emit incidenceChanged(mMoveIncidence, KOGlobals::EVENTEDITED);
2283 mMoveIncidence = newInc; 2283 mMoveIncidence = newInc;
2284 2284
2285#endif 2285#endif
2286 } 2286 }
2287 QTime tim = mMoveIncidence->dtStart().time(); 2287 QTime tim = mMoveIncidence->dtStart().time();
2288 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); 2288 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd());
2289 QDateTime dt ( d,tim ); 2289 QDateTime dt ( d,tim );
2290 mMoveIncidence->setDtStart( dt ); 2290 mMoveIncidence->setDtStart( dt );
2291 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); 2291 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) );
2292 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); 2292 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED);
2293 } 2293 }
2294 2294
2295 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); 2295 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 );
2296 } 2296 }
2297} 2297}
2298 2298
2299void CalendarView::removeCategories() 2299void CalendarView::removeCategories()
2300{ 2300{
2301 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 2301 QPtrList<Incidence> incList = mCalendar->rawIncidences();
2302 QStringList catList = KOPrefs::instance()->mCustomCategories; 2302 QStringList catList = KOPrefs::instance()->mCustomCategories;
2303 QStringList catIncList; 2303 QStringList catIncList;
2304 QStringList newCatList; 2304 QStringList newCatList;
2305 Incidence* inc = incList.first(); 2305 Incidence* inc = incList.first();
2306 int i; 2306 int i;
2307 int count = 0; 2307 int count = 0;
2308 while ( inc ) { 2308 while ( inc ) {
2309 newCatList.clear(); 2309 newCatList.clear();
2310 catIncList = inc->categories() ; 2310 catIncList = inc->categories() ;
2311 for( i = 0; i< catIncList.count(); ++i ) { 2311 for( i = 0; i< catIncList.count(); ++i ) {
2312 if ( catList.contains (catIncList[i])) 2312 if ( catList.contains (catIncList[i]))
2313 newCatList.append( catIncList[i] ); 2313 newCatList.append( catIncList[i] );
2314 } 2314 }
2315 newCatList.sort(); 2315 newCatList.sort();
2316 inc->setCategories( newCatList.join(",") ); 2316 inc->setCategories( newCatList.join(",") );
2317 inc = incList.next(); 2317 inc = incList.next();
2318 } 2318 }
2319} 2319}
2320 2320
2321int CalendarView::addCategories() 2321int CalendarView::addCategories()
2322{ 2322{
2323 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 2323 QPtrList<Incidence> incList = mCalendar->rawIncidences();
2324 QStringList catList = KOPrefs::instance()->mCustomCategories; 2324 QStringList catList = KOPrefs::instance()->mCustomCategories;
2325 QStringList catIncList; 2325 QStringList catIncList;
2326 Incidence* inc = incList.first(); 2326 Incidence* inc = incList.first();
2327 int i; 2327 int i;
2328 int count = 0; 2328 int count = 0;
2329 while ( inc ) { 2329 while ( inc ) {
2330 catIncList = inc->categories() ; 2330 catIncList = inc->categories() ;
2331 for( i = 0; i< catIncList.count(); ++i ) { 2331 for( i = 0; i< catIncList.count(); ++i ) {
2332 if ( !catList.contains (catIncList[i])) { 2332 if ( !catList.contains (catIncList[i])) {
2333 catList.append( catIncList[i] ); 2333 catList.append( catIncList[i] );
2334 //qDebug("add cat %s ", catIncList[i].latin1()); 2334 //qDebug("add cat %s ", catIncList[i].latin1());
2335 ++count; 2335 ++count;
2336 } 2336 }
2337 } 2337 }
2338 inc = incList.next(); 2338 inc = incList.next();
2339 } 2339 }
2340 catList.sort(); 2340 catList.sort();
2341 KOPrefs::instance()->mCustomCategories = catList; 2341 KOPrefs::instance()->mCustomCategories = catList;
2342 return count; 2342 return count;
2343} 2343}
2344 2344
2345void CalendarView::manageCategories() 2345void CalendarView::manageCategories()
2346{ 2346{
2347 KOCatPrefs* cp = new KOCatPrefs(); 2347 KOCatPrefs* cp = new KOCatPrefs();
2348 cp->show(); 2348 cp->show();
2349 int w =cp->sizeHint().width() ; 2349 int w =cp->sizeHint().width() ;
2350 int h = cp->sizeHint().height() ; 2350 int h = cp->sizeHint().height() ;
2351 int dw = QApplication::desktop()->width(); 2351 int dw = QApplication::desktop()->width();
2352 int dh = QApplication::desktop()->height(); 2352 int dh = QApplication::desktop()->height();
2353 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2353 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2354 if ( !cp->exec() ) { 2354 if ( !cp->exec() ) {
2355 delete cp; 2355 delete cp;
2356 return; 2356 return;
2357 } 2357 }
2358 int count = 0; 2358 int count = 0;
2359 if ( cp->addCat() ) { 2359 if ( cp->addCat() ) {
2360 count = addCategories(); 2360 count = addCategories();
2361 if ( count ) { 2361 if ( count ) {
2362 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! ")); 2362 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! "));
2363 writeSettings(); 2363 writeSettings();
2364 } else 2364 } else
2365 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! ")); 2365 topLevelWidget()->setCaption(QString::number( 0 )+ i18n(" Categories added to list! "));
2366 } else { 2366 } else {
2367 removeCategories(); 2367 removeCategories();
2368 updateView(); 2368 updateView();
2369 } 2369 }
2370 delete cp; 2370 delete cp;
2371} 2371}
2372 2372
2373void CalendarView::beamIncidence(Incidence * Inc) 2373void CalendarView::beamIncidence(Incidence * Inc)
2374{ 2374{
2375 QPtrList<Incidence> delSel ; 2375 QPtrList<Incidence> delSel ;
2376 delSel.append(Inc); 2376 delSel.append(Inc);
2377 beamIncidenceList( delSel ); 2377 beamIncidenceList( delSel );
2378} 2378}
2379void CalendarView::beamCalendar() 2379void CalendarView::beamCalendar()
2380{ 2380{
2381 QPtrList<Incidence> delSel = mCalendar->rawIncidences(); 2381 QPtrList<Incidence> delSel = mCalendar->rawIncidences();
2382 //qDebug("beamCalendar() "); 2382 //qDebug("beamCalendar() ");
2383 beamIncidenceList( delSel ); 2383 beamIncidenceList( delSel );
2384} 2384}
2385void CalendarView::beamFilteredCalendar() 2385void CalendarView::beamFilteredCalendar()
2386{ 2386{
2387 QPtrList<Incidence> delSel = mCalendar->incidences(); 2387 QPtrList<Incidence> delSel = mCalendar->incidences();
2388 //qDebug("beamFilteredCalendar() "); 2388 //qDebug("beamFilteredCalendar() ");
2389 beamIncidenceList( delSel ); 2389 beamIncidenceList( delSel );
2390} 2390}
2391void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel ) 2391void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel )
2392{ 2392{
2393 if ( beamDialog->exec () == QDialog::Rejected ) 2393 if ( beamDialog->exec () == QDialog::Rejected )
2394 return; 2394 return;
2395#ifdef DESKTOP_VERSION 2395#ifdef DESKTOP_VERSION
2396 QString fn = locateLocal( "tmp", "kopibeamfile" ); 2396 QString fn = locateLocal( "tmp", "kopibeamfile" );
2397#else 2397#else
2398 QString fn = "/tmp/kopibeamfile"; 2398 QString fn = "/tmp/kopibeamfile";
2399#endif 2399#endif
2400 QString mes; 2400 QString mes;
2401 bool createbup = true; 2401 bool createbup = true;
2402 if ( createbup ) { 2402 if ( createbup ) {
2403 QString description = "\n"; 2403 QString description = "\n";
2404 CalendarLocal* cal = new CalendarLocal(); 2404 CalendarLocal* cal = new CalendarLocal();
2405 if ( beamDialog->beamLocal() ) 2405 if ( beamDialog->beamLocal() )
2406 cal->setLocalTime(); 2406 cal->setLocalTime();
2407 else 2407 else
2408 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 2408 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
2409 Incidence *incidence = delSel.first(); 2409 Incidence *incidence = delSel.first();
2410 bool addText = false; 2410 bool addText = false;
2411 if ( delSel.count() < 10 ) 2411 if ( delSel.count() < 10 )
2412 addText = true; 2412 addText = true;
2413 else { 2413 else {
2414 description.sprintf(i18n(" %d items?"),delSel.count() ); 2414 description.sprintf(i18n(" %d items?"),delSel.count() );
2415 } 2415 }
2416 while ( incidence ) { 2416 while ( incidence ) {
2417 Incidence *in = incidence->clone(); 2417 Incidence *in = incidence->clone();
2418 if ( ! in->summary().isEmpty() ) { 2418 if ( ! in->summary().isEmpty() ) {
2419 in->setDescription(""); 2419 in->setDescription("");
2420 } else { 2420 } else {
2421 in->setSummary( in->description().left(20)); 2421 in->setSummary( in->description().left(20));
2422 in->setDescription(""); 2422 in->setDescription("");
2423 } 2423 }
2424 if ( addText ) 2424 if ( addText )
2425 description += in->summary() + "\n"; 2425 description += in->summary() + "\n";
2426 cal->addIncidence( in ); 2426 cal->addIncidence( in );
2427 incidence = delSel.next(); 2427 incidence = delSel.next();
2428 } 2428 }
2429 if ( beamDialog->beamVcal() ) { 2429 if ( beamDialog->beamVcal() ) {
2430 fn += ".vcs"; 2430 fn += ".vcs";
2431 FileStorage storage( cal, fn, new VCalFormat ); 2431 FileStorage storage( cal, fn, new VCalFormat );
2432 storage.save(); 2432 storage.save();
2433 } else { 2433 } else {
2434 fn += ".ics"; 2434 fn += ".ics";
2435 FileStorage storage( cal, fn, new ICalFormat( ) ); 2435 FileStorage storage( cal, fn, new ICalFormat( ) );
2436 storage.save(); 2436 storage.save();
2437 } 2437 }
2438 delete cal; 2438 delete cal;
2439 mes = i18n("KO/Pi: Ready for beaming"); 2439 mes = i18n("KO/Pi: Ready for beaming");
2440 topLevelWidget()->setCaption(mes); 2440 topLevelWidget()->setCaption(mes);
2441 KApplication::convert2latin1( fn ); 2441 KApplication::convert2latin1( fn );
2442#ifndef DESKTOP_VERSION 2442#ifndef DESKTOP_VERSION
2443 Ir *ir = new Ir( this ); 2443 Ir *ir = new Ir( this );
2444 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 2444 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
2445 ir->send( fn, description, "text/x-vCalendar" ); 2445 ir->send( fn, description, "text/x-vCalendar" );
2446#endif 2446#endif
2447 } 2447 }
2448} 2448}
2449void CalendarView::beamDone( Ir *ir ) 2449void CalendarView::beamDone( Ir *ir )
2450{ 2450{
2451#ifndef DESKTOP_VERSION 2451#ifndef DESKTOP_VERSION
2452 delete ir; 2452 delete ir;
2453#endif 2453#endif
2454 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") ); 2454 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") );
2455 topLevelWidget()->raise(); 2455 topLevelWidget()->raise();
2456} 2456}
2457 2457
2458void CalendarView::moveIncidence(Incidence * inc ) 2458void CalendarView::moveIncidence(Incidence * inc )
2459{ 2459{
2460 if ( !inc ) return; 2460 if ( !inc ) return;
2461 // qDebug("showDatePickerForIncidence( ) "); 2461 // qDebug("showDatePickerForIncidence( ) ");
2462 if ( mDateFrame->isVisible() ) 2462 if ( mDateFrame->isVisible() )
2463 mDateFrame->hide(); 2463 mDateFrame->hide();
2464 else { 2464 else {
2465 int w =mDatePicker->sizeHint().width()+2*mDateFrame->lineWidth() ; 2465 int w =mDatePicker->sizeHint().width()+2*mDateFrame->lineWidth() ;
2466 int h = mDatePicker->sizeHint().height()+2*mDateFrame->lineWidth() ; 2466 int h = mDatePicker->sizeHint().height()+2*mDateFrame->lineWidth() ;
2467 int dw = QApplication::desktop()->width(); 2467 int dw = QApplication::desktop()->width();
2468 int dh = QApplication::desktop()->height(); 2468 int dh = QApplication::desktop()->height();
2469 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2469 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2470 mDateFrame->show(); 2470 mDateFrame->show();
2471 } 2471 }
2472 mDatePickerMode = 2; 2472 mDatePickerMode = 2;
2473 mMoveIncidence = inc ; 2473 mMoveIncidence = inc ;
2474 QDate da; 2474 QDate da;
2475 if ( mMoveIncidence->type() == "Todo" ) { 2475 if ( mMoveIncidence->type() == "Todo" ) {
2476 Todo * to = (Todo *) mMoveIncidence; 2476 Todo * to = (Todo *) mMoveIncidence;
2477 if ( to->hasDueDate() ) 2477 if ( to->hasDueDate() )
2478 da = to->dtDue().date(); 2478 da = to->dtDue().date();
2479 else 2479 else
2480 da = QDate::currentDate(); 2480 da = QDate::currentDate();
2481 } else { 2481 } else {
2482 da = mMoveIncidence->dtStart().date(); 2482 da = mMoveIncidence->dtStart().date();
2483 } 2483 }
2484 //PENDING set date for recurring incidence to date of recurrence 2484 //PENDING set date for recurring incidence to date of recurrence
2485 //mMoveIncidenceOldDate; 2485 //mMoveIncidenceOldDate;
2486 mDatePicker->setDate( da ); 2486 mDatePicker->setDate( da );
2487} 2487}
2488void CalendarView::showDatePicker( ) 2488void CalendarView::showDatePicker( )
2489{ 2489{
2490 //qDebug("CalendarView::showDatePicker( ) "); 2490 //qDebug("CalendarView::showDatePicker( ) ");
2491 if ( mDateFrame->isVisible() ) 2491 if ( mDateFrame->isVisible() )
2492 mDateFrame->hide(); 2492 mDateFrame->hide();
2493 else { 2493 else {
2494 int w =mDatePicker->sizeHint().width() ; 2494 int w =mDatePicker->sizeHint().width() ;
2495 int h = mDatePicker->sizeHint().height() ; 2495 int h = mDatePicker->sizeHint().height() ;
2496 int dw = QApplication::desktop()->width(); 2496 int dw = QApplication::desktop()->width();
2497 int dh = QApplication::desktop()->height(); 2497 int dh = QApplication::desktop()->height();
2498 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2498 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2499 mDateFrame->show(); 2499 mDateFrame->show();
2500 } 2500 }
2501 mDatePickerMode = 1; 2501 mDatePickerMode = 1;
2502 mDatePicker->setDate( mNavigator->selectedDates().first() ); 2502 mDatePicker->setDate( mNavigator->selectedDates().first() );
2503} 2503}
2504 2504
2505void CalendarView::showEventEditor() 2505void CalendarView::showEventEditor()
2506{ 2506{
2507#ifdef DESKTOP_VERSION 2507#ifdef DESKTOP_VERSION
2508 mEventEditor->show(); 2508 mEventEditor->show();
2509#else 2509#else
2510 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) { 2510 if ( mEventEditor->width() < QApplication::desktop()->width() -60 || mEventEditor->width() > QApplication::desktop()->width() ) {
2511 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 2511 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
2512 qDebug("CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() ); 2512 qDebug("CalendarView: recreate mEventEditor %d %d", mEventEditor->width(), QApplication::desktop()->width() );
2513 delete mEventEditor; 2513 delete mEventEditor;
2514 mEventEditor = mDialogManager->getEventEditor(); 2514 mEventEditor = mDialogManager->getEventEditor();
2515 } 2515 }
2516 mEventEditor->showMaximized(); 2516 mEventEditor->showMaximized();
2517 topLevelWidget()->setCaption( i18n("") ); 2517 topLevelWidget()->setCaption( i18n("") );
2518#endif 2518#endif
2519} 2519}
2520void CalendarView::showTodoEditor() 2520void CalendarView::showTodoEditor()
2521{ 2521{
2522#ifdef DESKTOP_VERSION 2522#ifdef DESKTOP_VERSION
2523 mTodoEditor->show(); 2523 mTodoEditor->show();
2524#else 2524#else
2525 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) { 2525 if ( mTodoEditor->width() < QApplication::desktop()->width() -60|| mTodoEditor->width() > QApplication::desktop()->width() ) {
2526 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") ); 2526 topLevelWidget()->setCaption( i18n("Recreating edit dialog. Please wait...") );
2527 qDebug("CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() ); 2527 qDebug("CalendarView: recreate mTodoEditor %d %d ", mTodoEditor->width() ,QApplication::desktop()->width() );
2528 delete mTodoEditor; 2528 delete mTodoEditor;
2529 mTodoEditor = mDialogManager->getTodoEditor(); 2529 mTodoEditor = mDialogManager->getTodoEditor();
2530 } 2530 }
2531 mTodoEditor->showMaximized(); 2531 mTodoEditor->showMaximized();
2532 topLevelWidget()->setCaption( i18n("") ); 2532 topLevelWidget()->setCaption( i18n("") );
2533#endif 2533#endif
2534} 2534}
2535 2535
2536void CalendarView::cloneIncidence() 2536void CalendarView::cloneIncidence()
2537{ 2537{
2538 Incidence *incidence = currentSelection(); 2538 Incidence *incidence = currentSelection();
2539 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 2539 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
2540 if ( incidence ) { 2540 if ( incidence ) {
2541 cloneIncidence(incidence); 2541 cloneIncidence(incidence);
2542 } 2542 }
2543} 2543}
2544void CalendarView::moveIncidence() 2544void CalendarView::moveIncidence()
2545{ 2545{
2546 Incidence *incidence = currentSelection(); 2546 Incidence *incidence = currentSelection();
2547 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 2547 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
2548 if ( incidence ) { 2548 if ( incidence ) {
2549 moveIncidence(incidence); 2549 moveIncidence(incidence);
2550 } 2550 }
2551} 2551}
2552void CalendarView::beamIncidence() 2552void CalendarView::beamIncidence()
2553{ 2553{
2554 Incidence *incidence = currentSelection(); 2554 Incidence *incidence = currentSelection();
2555 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 2555 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
2556 if ( incidence ) { 2556 if ( incidence ) {
2557 beamIncidence(incidence); 2557 beamIncidence(incidence);
2558 } 2558 }
2559} 2559}
2560void CalendarView::toggleCancelIncidence() 2560void CalendarView::toggleCancelIncidence()
2561{ 2561{
2562 Incidence *incidence = currentSelection(); 2562 Incidence *incidence = currentSelection();
2563 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 2563 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
2564 if ( incidence ) { 2564 if ( incidence ) {
2565 cancelIncidence(incidence); 2565 cancelIncidence(incidence);
2566 } 2566 }
2567} 2567}
2568 2568
2569 2569
2570void CalendarView::cancelIncidence(Incidence * inc ) 2570void CalendarView::cancelIncidence(Incidence * inc )
2571{ 2571{
2572 inc->setCancelled( ! inc->cancelled() ); 2572 inc->setCancelled( ! inc->cancelled() );
2573 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); 2573 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED );
2574 updateView(); 2574 updateView();
2575} 2575}
2576void CalendarView::cloneIncidence(Incidence * orgInc ) 2576void CalendarView::cloneIncidence(Incidence * orgInc )
2577{ 2577{
2578 Incidence * newInc = orgInc->clone(); 2578 Incidence * newInc = orgInc->clone();
2579 newInc->recreate(); 2579 newInc->recreate();
2580 2580
2581 if ( newInc->type() == "Todo" ) { 2581 if ( newInc->type() == "Todo" ) {
2582 Todo* t = (Todo*) newInc; 2582 Todo* t = (Todo*) newInc;
2583 showTodoEditor(); 2583 showTodoEditor();
2584 mTodoEditor->editTodo( t ); 2584 mTodoEditor->editTodo( t );
2585 if ( mTodoEditor->exec() ) { 2585 if ( mTodoEditor->exec() ) {
2586 mCalendar->addTodo( t ); 2586 mCalendar->addTodo( t );
2587 updateView(); 2587 updateView();
2588 } else { 2588 } else {
2589 delete t; 2589 delete t;
2590 } 2590 }
2591 } 2591 }
2592 else { 2592 else {
2593 Event* e = (Event*) newInc; 2593 Event* e = (Event*) newInc;
2594 showEventEditor(); 2594 showEventEditor();
2595 mEventEditor->editEvent( e ); 2595 mEventEditor->editEvent( e );
2596 if ( mEventEditor->exec() ) { 2596 if ( mEventEditor->exec() ) {
2597 mCalendar->addEvent( e ); 2597 mCalendar->addEvent( e );
2598 updateView(); 2598 updateView();
2599 } else { 2599 } else {
2600 delete e; 2600 delete e;
2601 } 2601 }
2602 } 2602 }
2603} 2603}
2604 2604
2605void CalendarView::newEvent() 2605void CalendarView::newEvent()
2606{ 2606{
2607 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 2607 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
2608 KOAgendaView *aView = mViewManager->agendaView(); 2608 KOAgendaView *aView = mViewManager->agendaView();
2609 if (aView) { 2609 if (aView) {
2610 if (aView->selectionStart().isValid()) { 2610 if (aView->selectionStart().isValid()) {
2611 if (aView->selectedIsAllDay()) { 2611 if (aView->selectedIsAllDay()) {
2612 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 2612 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
2613 } else { 2613 } else {
2614 newEvent(aView->selectionStart(),aView->selectionEnd()); 2614 newEvent(aView->selectionStart(),aView->selectionEnd());
2615 } 2615 }
2616 return; 2616 return;
2617 } 2617 }
2618 } 2618 }
2619 2619
2620 QDate date = mNavigator->selectedDates().first(); 2620 QDate date = mNavigator->selectedDates().first();
2621 QDateTime current = QDateTime::currentDateTime(); 2621 QDateTime current = QDateTime::currentDateTime();
2622 if ( date <= current.date() ) { 2622 if ( date <= current.date() ) {
2623 int hour = current.time().hour() +1; 2623 int hour = current.time().hour() +1;
2624 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 2624 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
2625 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 2625 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
2626 } else 2626 } else
2627 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 2627 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
2628 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 2628 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
2629 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 2629 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
2630} 2630}
2631 2631
2632void CalendarView::newEvent(QDateTime fh) 2632void CalendarView::newEvent(QDateTime fh)
2633{ 2633{
2634 newEvent(fh, 2634 newEvent(fh,
2635 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 2635 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
2636} 2636}
2637 2637
2638void CalendarView::newEvent(QDate dt) 2638void CalendarView::newEvent(QDate dt)
2639{ 2639{
2640 newEvent(QDateTime(dt, QTime(0,0,0)), 2640 newEvent(QDateTime(dt, QTime(0,0,0)),
2641 QDateTime(dt, QTime(0,0,0)), true); 2641 QDateTime(dt, QTime(0,0,0)), true);
2642} 2642}
2643 2643
2644void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 2644void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
2645{ 2645{
2646 2646
2647 showEventEditor(); 2647 showEventEditor();
2648 mEventEditor->newEvent(fromHint,toHint,allDay); 2648 mEventEditor->newEvent(fromHint,toHint,allDay);
2649 if ( mFilterView->filtersEnabled() ) { 2649 if ( mFilterView->filtersEnabled() ) {
2650 CalFilter *filter = mFilterView->selectedFilter(); 2650 CalFilter *filter = mFilterView->selectedFilter();
2651 if (filter && filter->showCategories()) { 2651 if (filter && filter->showCategories()) {
2652 mEventEditor->setCategories(filter->categoryList().join(",") ); 2652 mEventEditor->setCategories(filter->categoryList().join(",") );
2653 } 2653 }
2654 if ( filter ) 2654 if ( filter )
2655 mEventEditor->setSecrecy( filter->getSecrecy() ); 2655 mEventEditor->setSecrecy( filter->getSecrecy() );
2656 } 2656 }
2657} 2657}
2658void CalendarView::todoAdded(Todo * t) 2658void CalendarView::todoAdded(Todo * t)
2659{ 2659{
2660 2660
2661 changeTodoDisplay ( t ,KOGlobals::EVENTADDED); 2661 changeTodoDisplay ( t ,KOGlobals::EVENTADDED);
2662 updateTodoViews(); 2662 updateTodoViews();
2663} 2663}
2664void CalendarView::todoChanged(Todo * t) 2664void CalendarView::todoChanged(Todo * t)
2665{ 2665{
2666 emit todoModified( t, 4 ); 2666 emit todoModified( t, 4 );
2667 // updateTodoViews(); 2667 // updateTodoViews();
2668} 2668}
2669void CalendarView::todoToBeDeleted(Todo *) 2669void CalendarView::todoToBeDeleted(Todo *)
2670{ 2670{
2671 //qDebug("todoToBeDeleted(Todo *) "); 2671 //qDebug("todoToBeDeleted(Todo *) ");
2672 updateTodoViews(); 2672 updateTodoViews();
2673} 2673}
2674void CalendarView::todoDeleted() 2674void CalendarView::todoDeleted()
2675{ 2675{
2676 //qDebug(" todoDeleted()"); 2676 //qDebug(" todoDeleted()");
2677 updateTodoViews(); 2677 updateTodoViews();
2678} 2678}
2679 2679
2680 2680
2681 2681
2682void CalendarView::newTodo() 2682void CalendarView::newTodo()
2683{ 2683{
2684 2684
2685 showTodoEditor(); 2685 showTodoEditor();
2686 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),0,true); 2686 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),0,true);
2687 if ( mFilterView->filtersEnabled() ) { 2687 if ( mFilterView->filtersEnabled() ) {
2688 CalFilter *filter = mFilterView->selectedFilter(); 2688 CalFilter *filter = mFilterView->selectedFilter();
2689 if (filter && filter->showCategories()) { 2689 if (filter && filter->showCategories()) {
2690 mTodoEditor->setCategories(filter->categoryList().join(",") ); 2690 mTodoEditor->setCategories(filter->categoryList().join(",") );
2691 } 2691 }
2692 if ( filter ) 2692 if ( filter )
2693 mTodoEditor->setSecrecy( filter->getSecrecy() ); 2693 mTodoEditor->setSecrecy( filter->getSecrecy() );
2694 } 2694 }
2695} 2695}
2696 2696
2697void CalendarView::newSubTodo() 2697void CalendarView::newSubTodo()
2698{ 2698{
2699 Todo *todo = selectedTodo(); 2699 Todo *todo = selectedTodo();
2700 if ( todo ) newSubTodo( todo ); 2700 if ( todo ) newSubTodo( todo );
2701} 2701}
2702 2702
2703void CalendarView::newSubTodo(Todo *parentEvent) 2703void CalendarView::newSubTodo(Todo *parentEvent)
2704{ 2704{
2705 2705
2706 showTodoEditor(); 2706 showTodoEditor();
2707 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),parentEvent,true); 2707 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),parentEvent,true);
2708} 2708}
2709 2709
2710void CalendarView::newFloatingEvent() 2710void CalendarView::newFloatingEvent()
2711{ 2711{
2712 DateList tmpList = mNavigator->selectedDates(); 2712 DateList tmpList = mNavigator->selectedDates();
2713 QDate date = tmpList.first(); 2713 QDate date = tmpList.first();
2714 2714
2715 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), 2715 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ),
2716 QDateTime( date, QTime( 12, 0, 0 ) ), true ); 2716 QDateTime( date, QTime( 12, 0, 0 ) ), true );
2717} 2717}
2718 2718
2719 2719
2720void CalendarView::editEvent( Event *event ) 2720void CalendarView::editEvent( Event *event )
2721{ 2721{
2722 2722
2723 if ( !event ) return; 2723 if ( !event ) return;
2724 if ( event->isReadOnly() ) { 2724 if ( event->isReadOnly() ) {
2725 showEvent( event ); 2725 showEvent( event );
2726 return; 2726 return;
2727 } 2727 }
2728 showEventEditor(); 2728 showEventEditor();
2729 mEventEditor->editEvent( event , mFlagEditDescription); 2729 mEventEditor->editEvent( event , mFlagEditDescription);
2730} 2730}
2731void CalendarView::editJournal( Journal *jour ) 2731void CalendarView::editJournal( Journal *jour )
2732{ 2732{
2733 if ( !jour ) return; 2733 if ( !jour ) return;
2734 mDialogManager->hideSearchDialog(); 2734 mDialogManager->hideSearchDialog();
2735 mViewManager->showJournalView(); 2735 mViewManager->showJournalView();
2736 mNavigator->slotDaySelect( jour->dtStart().date() ); 2736 mNavigator->slotDaySelect( jour->dtStart().date() );
2737} 2737}
2738void CalendarView::editTodo( Todo *todo ) 2738void CalendarView::editTodo( Todo *todo )
2739{ 2739{
2740 if ( !todo ) return; 2740 if ( !todo ) return;
2741 2741
2742 if ( todo->isReadOnly() ) { 2742 if ( todo->isReadOnly() ) {
2743 showTodo( todo ); 2743 showTodo( todo );
2744 return; 2744 return;
2745 } 2745 }
2746 showTodoEditor(); 2746 showTodoEditor();
2747 mTodoEditor->editTodo( todo ,mFlagEditDescription); 2747 mTodoEditor->editTodo( todo ,mFlagEditDescription);
2748 2748
2749} 2749}
2750 2750
2751KOEventViewerDialog* CalendarView::getEventViewerDialog() 2751KOEventViewerDialog* CalendarView::getEventViewerDialog()
2752{ 2752{
2753 if ( !mEventViewerDialog ) { 2753 if ( !mEventViewerDialog ) {
2754 mEventViewerDialog = new KOEventViewerDialog(this); 2754 mEventViewerDialog = new KOEventViewerDialog(this);
2755 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) ); 2755 connect( mEventViewerDialog, SIGNAL( editIncidence( Incidence* )), this, SLOT(editIncidence( Incidence* ) ) );
2756 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig())); 2756 connect( this, SIGNAL(configChanged()), mEventViewerDialog, SLOT(updateConfig()));
2757 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)), 2757 connect( mEventViewerDialog, SIGNAL(jumpToTime( const QDate &)),
2758 dateNavigator(), SLOT( selectWeek( const QDate & ) ) ); 2758 dateNavigator(), SLOT( selectWeek( const QDate & ) ) );
2759 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ), 2759 connect( mEventViewerDialog, SIGNAL(showAgendaView( bool ) ),
2760 viewManager(), SLOT( showAgendaView( bool ) ) ); 2760 viewManager(), SLOT( showAgendaView( bool ) ) );
2761 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ), 2761 connect( mEventViewerDialog, SIGNAL( todoCompleted(Todo *) ),
2762 this, SLOT( todoChanged(Todo *) ) ); 2762 this, SLOT( todoChanged(Todo *) ) );
2763 mEventViewerDialog->resize( 640, 480 ); 2763 mEventViewerDialog->resize( 640, 480 );
2764 2764
2765 } 2765 }
2766 return mEventViewerDialog; 2766 return mEventViewerDialog;
2767} 2767}
2768void CalendarView::showEvent(Event *event) 2768void CalendarView::showEvent(Event *event)
2769{ 2769{
2770 getEventViewerDialog()->setEvent(event); 2770 getEventViewerDialog()->setEvent(event);
2771 getEventViewerDialog()->showMe(); 2771 getEventViewerDialog()->showMe();
2772} 2772}
2773 2773
2774void CalendarView::showTodo(Todo *event) 2774void CalendarView::showTodo(Todo *event)
2775{ 2775{
2776 getEventViewerDialog()->setTodo(event); 2776 getEventViewerDialog()->setTodo(event);
2777 getEventViewerDialog()->showMe(); 2777 getEventViewerDialog()->showMe();
2778} 2778}
2779void CalendarView::showJournal( Journal *jour ) 2779void CalendarView::showJournal( Journal *jour )
2780{ 2780{
2781 getEventViewerDialog()->setJournal(jour); 2781 getEventViewerDialog()->setJournal(jour);
2782 getEventViewerDialog()->showMe(); 2782 getEventViewerDialog()->showMe();
2783 2783
2784} 2784}
2785// void CalendarView::todoModified (Todo *event, int changed) 2785// void CalendarView::todoModified (Todo *event, int changed)
2786// { 2786// {
2787// // if (mDialogList.find (event) != mDialogList.end ()) { 2787// // if (mDialogList.find (event) != mDialogList.end ()) {
2788// // kdDebug() << "Todo modified and open" << endl; 2788// // kdDebug() << "Todo modified and open" << endl;
2789// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event]; 2789// // KOTodoEditor* temp = (KOTodoEditor *) mDialogList[event];
2790// // temp->modified (changed); 2790// // temp->modified (changed);
2791 2791
2792// // } 2792// // }
2793 2793
2794// mViewManager->updateView(); 2794// mViewManager->updateView();
2795// } 2795// }
2796 2796
2797void CalendarView::appointment_show() 2797void CalendarView::appointment_show()
2798{ 2798{
2799 Event *anEvent = 0; 2799 Event *anEvent = 0;
2800 2800
2801 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2801 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2802 2802
2803 if (mViewManager->currentView()->isEventView()) { 2803 if (mViewManager->currentView()->isEventView()) {
2804 if ( incidence && incidence->type() == "Event" ) { 2804 if ( incidence && incidence->type() == "Event" ) {
2805 anEvent = static_cast<Event *>(incidence); 2805 anEvent = static_cast<Event *>(incidence);
2806 } 2806 }
2807 } 2807 }
2808 2808
2809 if (!anEvent) { 2809 if (!anEvent) {
2810 KNotifyClient::beep(); 2810 KNotifyClient::beep();
2811 return; 2811 return;
2812 } 2812 }
2813 2813
2814 showEvent(anEvent); 2814 showEvent(anEvent);
2815} 2815}
2816 2816
2817void CalendarView::appointment_edit() 2817void CalendarView::appointment_edit()
2818{ 2818{
2819 Event *anEvent = 0; 2819 Event *anEvent = 0;
2820 2820
2821 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2821 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2822 2822
2823 if (mViewManager->currentView()->isEventView()) { 2823 if (mViewManager->currentView()->isEventView()) {
2824 if ( incidence && incidence->type() == "Event" ) { 2824 if ( incidence && incidence->type() == "Event" ) {
2825 anEvent = static_cast<Event *>(incidence); 2825 anEvent = static_cast<Event *>(incidence);
2826 } 2826 }
2827 } 2827 }
2828 2828
2829 if (!anEvent) { 2829 if (!anEvent) {
2830 KNotifyClient::beep(); 2830 KNotifyClient::beep();
2831 return; 2831 return;
2832 } 2832 }
2833 2833
2834 editEvent(anEvent); 2834 editEvent(anEvent);
2835} 2835}
2836 2836
2837void CalendarView::appointment_delete() 2837void CalendarView::appointment_delete()
2838{ 2838{
2839 Event *anEvent = 0; 2839 Event *anEvent = 0;
2840 2840
2841 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2841 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2842 2842
2843 if (mViewManager->currentView()->isEventView()) { 2843 if (mViewManager->currentView()->isEventView()) {
2844 if ( incidence && incidence->type() == "Event" ) { 2844 if ( incidence && incidence->type() == "Event" ) {
2845 anEvent = static_cast<Event *>(incidence); 2845 anEvent = static_cast<Event *>(incidence);
2846 } 2846 }
2847 } 2847 }
2848 2848
2849 if (!anEvent) { 2849 if (!anEvent) {
2850 KNotifyClient::beep(); 2850 KNotifyClient::beep();
2851 return; 2851 return;
2852 } 2852 }
2853 2853
2854 deleteEvent(anEvent); 2854 deleteEvent(anEvent);
2855} 2855}
2856 2856
2857void CalendarView::todo_resub( Todo * parent, Todo * sub ) 2857void CalendarView::todo_resub( Todo * parent, Todo * sub )
2858{ 2858{
2859 if (!sub) return; 2859 if (!sub) return;
2860 if (!parent) return; 2860 if (!parent) return;
2861 if ( sub->relatedTo() ) 2861 if ( sub->relatedTo() )
2862 sub->relatedTo()->removeRelation(sub); 2862 sub->relatedTo()->removeRelation(sub);
2863 sub->setRelatedTo(parent); 2863 sub->setRelatedTo(parent);
2864 sub->setRelatedToUid(parent->uid()); 2864 sub->setRelatedToUid(parent->uid());
2865 parent->addRelation(sub); 2865 parent->addRelation(sub);
2866 sub->updated(); 2866 sub->updated();
2867 parent->updated(); 2867 parent->updated();
2868 setModified(true); 2868 setModified(true);
2869 updateView(); 2869 updateView();
2870} 2870}
2871void CalendarView::todo_unsub(Todo *anTodo ) 2871void CalendarView::todo_unsub(Todo *anTodo )
2872{ 2872{
2873 // Todo *anTodo = selectedTodo(); 2873 // Todo *anTodo = selectedTodo();
2874 if (!anTodo) return; 2874 if (!anTodo) return;
2875 if (!anTodo->relatedTo()) return; 2875 if (!anTodo->relatedTo()) return;
2876 anTodo->relatedTo()->removeRelation(anTodo); 2876 anTodo->relatedTo()->removeRelation(anTodo);
2877 anTodo->setRelatedTo(0); 2877 anTodo->setRelatedTo(0);
2878 anTodo->updated(); 2878 anTodo->updated();
2879 anTodo->setRelatedToUid(""); 2879 anTodo->setRelatedToUid("");
2880 setModified(true); 2880 setModified(true);
2881 updateView(); 2881 updateView();
2882} 2882}
2883 2883
2884void CalendarView::deleteTodo(Todo *todo) 2884void CalendarView::deleteTodo(Todo *todo)
2885{ 2885{
2886 if (!todo) { 2886 if (!todo) {
2887 KNotifyClient::beep(); 2887 KNotifyClient::beep();
2888 return; 2888 return;
2889 } 2889 }
2890 if (KOPrefs::instance()->mConfirm) { 2890 if (KOPrefs::instance()->mConfirm) {
2891 switch (msgItemDelete()) { 2891 QString text = todo->summary().left(20);
2892 if (!todo->relations().isEmpty()) {
2893 text += i18n("\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!");
2894
2895 }
2896 switch (msgItemDelete(text)) {
2892 case KMessageBox::Continue: // OK 2897 case KMessageBox::Continue: // OK
2898 bool deleteT = false;
2893 if (!todo->relations().isEmpty()) { 2899 if (!todo->relations().isEmpty()) {
2894 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."), 2900 deleteT = removeCompletedSubTodos( todo );
2895 i18n("Delete To-Do")); 2901 }
2896 } else { 2902 // deleteT == true: todo already deleted in removeCompletedSubTodos
2903 if ( !deleteT ) {
2897 checkExternalId( todo ); 2904 checkExternalId( todo );
2898 calendar()->deleteTodo(todo); 2905 calendar()->deleteTodo(todo);
2899 changeTodoDisplay( todo,KOGlobals::EVENTDELETED ); 2906 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2900 updateView(); 2907 updateView();
2901 } 2908 }
2902 break; 2909 break;
2903 } // switch 2910 } // switch
2904 } else { 2911 } else {
2905 if (!todo->relations().isEmpty()) { 2912 checkExternalId( todo );
2906 KMessageBox::sorry(this,i18n("Cannot delete To-Do\nwhich has children."), 2913 mCalendar->deleteTodo(todo);
2907 i18n("Delete To-Do")); 2914 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2908 } else { 2915 updateView();
2909 checkExternalId( todo );
2910 mCalendar->deleteTodo(todo);
2911 changeTodoDisplay( todo,KOGlobals::EVENTDELETED );
2912 updateView();
2913 }
2914 } 2916 }
2917
2915 emit updateSearchDialog(); 2918 emit updateSearchDialog();
2916} 2919}
2917void CalendarView::deleteJournal(Journal *jour) 2920void CalendarView::deleteJournal(Journal *jour)
2918{ 2921{
2919 if (!jour) { 2922 if (!jour) {
2920 KNotifyClient::beep(); 2923 KNotifyClient::beep();
2921 return; 2924 return;
2922 } 2925 }
2923 if (KOPrefs::instance()->mConfirm) { 2926 if (KOPrefs::instance()->mConfirm) {
2924 switch (msgItemDelete()) { 2927 switch (msgItemDelete( jour->description().left(20))) {
2925 case KMessageBox::Continue: // OK 2928 case KMessageBox::Continue: // OK
2926 calendar()->deleteJournal(jour); 2929 calendar()->deleteJournal(jour);
2927 updateView(); 2930 updateView();
2928 break; 2931 break;
2929 } // switch 2932 } // switch
2930 } else { 2933 } else {
2931 calendar()->deleteJournal(jour);; 2934 calendar()->deleteJournal(jour);;
2932 updateView(); 2935 updateView();
2933 } 2936 }
2934 emit updateSearchDialog(); 2937 emit updateSearchDialog();
2935} 2938}
2936 2939
2937void CalendarView::deleteEvent(Event *anEvent) 2940void CalendarView::deleteEvent(Event *anEvent)
2938{ 2941{
2939 if (!anEvent) { 2942 if (!anEvent) {
2940 KNotifyClient::beep(); 2943 KNotifyClient::beep();
2941 return; 2944 return;
2942 } 2945 }
2943 2946
2944 if (anEvent->recurrence()->doesRecur()) { 2947 if (anEvent->recurrence()->doesRecur()) {
2945 QDate itemDate = mViewManager->currentSelectionDate(); 2948 QDate itemDate = mViewManager->currentSelectionDate();
2946 int km; 2949 int km;
2947 if (!itemDate.isValid()) { 2950 if (!itemDate.isValid()) {
2948 //kdDebug() << "Date Not Valid" << endl; 2951 //kdDebug() << "Date Not Valid" << endl;
2949 if (KOPrefs::instance()->mConfirm) { 2952 if (KOPrefs::instance()->mConfirm) {
2950 km = KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) + 2953 km = KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) +
2951 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"), 2954 i18n("\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?"),
2952 i18n("KO/Pi Confirmation"),i18n("Delete All")); 2955 i18n("KO/Pi Confirmation"),i18n("Delete All"));
2953 if ( km == KMessageBox::Continue ) 2956 if ( km == KMessageBox::Continue )
2954 km = KMessageBox::No; // No = all below 2957 km = KMessageBox::No; // No = all below
2955 } else 2958 } else
2956 km = KMessageBox::No; 2959 km = KMessageBox::No;
2957 } else { 2960 } else {
2958 km = KMessageBox::warningYesNoCancel(this,anEvent->summary().left(25) + 2961 km = KMessageBox::warningYesNoCancel(this,anEvent->summary().left(25) +
2959 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+ 2962 i18n("\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n")+
2960 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"), 2963 KGlobal::locale()->formatDate(itemDate)+i18n(" ?\n\nDelete:\n"),
2961 i18n("KO/Pi Confirmation"),i18n("Current"), 2964 i18n("KO/Pi Confirmation"),i18n("Current"),
2962 i18n("All")); 2965 i18n("All"));
2963 } 2966 }
2964 switch(km) { 2967 switch(km) {
2965 2968
2966 case KMessageBox::No: // Continue // all 2969 case KMessageBox::No: // Continue // all
2967 //qDebug("KMessageBox::No "); 2970 //qDebug("KMessageBox::No ");
2968 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 2971 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
2969 schedule(Scheduler::Cancel,anEvent); 2972 schedule(Scheduler::Cancel,anEvent);
2970 2973
2971 checkExternalId( anEvent); 2974 checkExternalId( anEvent);
2972 mCalendar->deleteEvent(anEvent); 2975 mCalendar->deleteEvent(anEvent);
2973 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED); 2976 changeEventDisplay(anEvent,KOGlobals::EVENTDELETED);
2974 break; 2977 break;
2975 2978
2976 // Disabled because it does not work 2979 // Disabled because it does not work
2977 //#if 0 2980 //#if 0
2978 case KMessageBox::Yes: // just this one 2981 case KMessageBox::Yes: // just this one
2979 //QDate qd = mNavigator->selectedDates().first(); 2982 //QDate qd = mNavigator->selectedDates().first();
2980 //if (!qd.isValid()) { 2983 //if (!qd.isValid()) {
2981 // kdDebug() << "no date selected, or invalid date" << endl; 2984 // kdDebug() << "no date selected, or invalid date" << endl;
2982 // KNotifyClient::beep(); 2985 // KNotifyClient::beep();
2983 // return; 2986 // return;
2984 //} 2987 //}
2985 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1); 2988 //while (!anEvent->recursOn(qd)) qd = qd.addDays(1);
2986 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) { 2989 if (itemDate!=QDate(1,1,1) || itemDate.isValid()) {
2987 anEvent->addExDate(itemDate); 2990 anEvent->addExDate(itemDate);
2988 int duration = anEvent->recurrence()->duration(); 2991 int duration = anEvent->recurrence()->duration();
2989 if ( duration > 0 ) { 2992 if ( duration > 0 ) {
2990 anEvent->recurrence()->setDuration( duration - 1 ); 2993 anEvent->recurrence()->setDuration( duration - 1 );
2991 } 2994 }
2992 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED); 2995 changeEventDisplay(anEvent, KOGlobals::EVENTEDITED);
2993 } 2996 }
2994 break; 2997 break;
2995 //#endif 2998 //#endif
2996 } // switch 2999 } // switch
2997 } else { 3000 } else {
2998 if (KOPrefs::instance()->mConfirm) { 3001 if (KOPrefs::instance()->mConfirm) {
2999 switch (KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) + 3002 switch (KMessageBox::warningContinueCancel(this,anEvent->summary().left(25) +
3000 i18n("\nAre you sure you want\nto delete this event?"), 3003 i18n("\nAre you sure you want\nto delete this event?"),
3001 i18n("KO/Pi Confirmation"),i18n("Delete"))) { 3004 i18n("KO/Pi Confirmation"),i18n("Delete"))) {
3002 case KMessageBox::Continue: // OK 3005 case KMessageBox::Continue: // OK
3003 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 3006 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
3004 schedule(Scheduler::Cancel,anEvent); 3007 schedule(Scheduler::Cancel,anEvent);
3005 checkExternalId( anEvent); 3008 checkExternalId( anEvent);
3006 mCalendar->deleteEvent(anEvent); 3009 mCalendar->deleteEvent(anEvent);
3007 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 3010 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
3008 break; 3011 break;
3009 } // switch 3012 } // switch
3010 } else { 3013 } else {
3011 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0) 3014 if (anEvent->organizer()==KOPrefs::instance()->email() && anEvent->attendeeCount()>0)
3012 schedule(Scheduler::Cancel,anEvent); 3015 schedule(Scheduler::Cancel,anEvent);
3013 checkExternalId( anEvent); 3016 checkExternalId( anEvent);
3014 mCalendar->deleteEvent(anEvent); 3017 mCalendar->deleteEvent(anEvent);
3015 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 3018 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
3016 } 3019 }
3017 } // if-else 3020 } // if-else
3018 emit updateSearchDialog(); 3021 emit updateSearchDialog();
3019} 3022}
3020 3023
3021bool CalendarView::deleteEvent(const QString &uid) 3024bool CalendarView::deleteEvent(const QString &uid)
3022{ 3025{
3023 Event *ev = mCalendar->event(uid); 3026 Event *ev = mCalendar->event(uid);
3024 if (ev) { 3027 if (ev) {
3025 deleteEvent(ev); 3028 deleteEvent(ev);
3026 return true; 3029 return true;
3027 } else { 3030 } else {
3028 return false; 3031 return false;
3029 } 3032 }
3030} 3033}
3031 3034
3032/*****************************************************************************/ 3035/*****************************************************************************/
3033 3036
3034void CalendarView::action_mail() 3037void CalendarView::action_mail()
3035{ 3038{
3036#ifndef KORG_NOMAIL 3039#ifndef KORG_NOMAIL
3037 KOMailClient mailClient; 3040 KOMailClient mailClient;
3038 3041
3039 Incidence *incidence = currentSelection(); 3042 Incidence *incidence = currentSelection();
3040 3043
3041 if (!incidence) { 3044 if (!incidence) {
3042 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 3045 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
3043 return; 3046 return;
3044 } 3047 }
3045 if(incidence->attendeeCount() == 0 ) { 3048 if(incidence->attendeeCount() == 0 ) {
3046 KMessageBox::sorry(this, 3049 KMessageBox::sorry(this,
3047 i18n("Can't generate mail:\nNo attendees defined.\n")); 3050 i18n("Can't generate mail:\nNo attendees defined.\n"));
3048 return; 3051 return;
3049 } 3052 }
3050 3053
3051 CalendarLocal cal_tmp; 3054 CalendarLocal cal_tmp;
3052 Event *event = 0; 3055 Event *event = 0;
3053 Event *ev = 0; 3056 Event *ev = 0;
3054 if ( incidence && incidence->type() == "Event" ) { 3057 if ( incidence && incidence->type() == "Event" ) {
3055 event = static_cast<Event *>(incidence); 3058 event = static_cast<Event *>(incidence);
3056 ev = new Event(*event); 3059 ev = new Event(*event);
3057 cal_tmp.addEvent(ev); 3060 cal_tmp.addEvent(ev);
3058 } 3061 }
3059 ICalFormat mForm(); 3062 ICalFormat mForm();
3060 QString attachment = mForm.toString( &cal_tmp ); 3063 QString attachment = mForm.toString( &cal_tmp );
3061 if (ev) delete(ev); 3064 if (ev) delete(ev);
3062 3065
3063 mailClient.mailAttendees(currentSelection(), attachment); 3066 mailClient.mailAttendees(currentSelection(), attachment);
3064 3067
3065#endif 3068#endif
3066 3069
3067#if 0 3070#if 0
3068 Event *anEvent = 0; 3071 Event *anEvent = 0;
3069 if (mViewManager->currentView()->isEventView()) { 3072 if (mViewManager->currentView()->isEventView()) {
3070 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first()); 3073 anEvent = dynamic_cast<Event *>((mViewManager->currentView()->selectedIncidences()).first());
3071 } 3074 }
3072 3075
3073 if (!anEvent) { 3076 if (!anEvent) {
3074 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected.")); 3077 KMessageBox::sorry(this,i18n("Can't generate mail:\nNo event selected."));
3075 return; 3078 return;
3076 } 3079 }
3077 if(anEvent->attendeeCount() == 0 ) { 3080 if(anEvent->attendeeCount() == 0 ) {
3078 KMessageBox::sorry(this, 3081 KMessageBox::sorry(this,
3079 i18n("Can't generate mail:\nNo attendees defined.\n")); 3082 i18n("Can't generate mail:\nNo attendees defined.\n"));
3080 return; 3083 return;
3081 } 3084 }
3082 3085
3083 mailobject.emailEvent(anEvent); 3086 mailobject.emailEvent(anEvent);
3084#endif 3087#endif
3085} 3088}
3086 3089
3087 3090
3088void CalendarView::schedule_publish(Incidence *incidence) 3091void CalendarView::schedule_publish(Incidence *incidence)
3089{ 3092{
3090 Event *event = 0; 3093 Event *event = 0;
3091 Todo *todo = 0; 3094 Todo *todo = 0;
3092 3095
3093 if (incidence == 0) { 3096 if (incidence == 0) {
3094 incidence = mViewManager->currentView()->selectedIncidences().first(); 3097 incidence = mViewManager->currentView()->selectedIncidences().first();
3095 if (incidence == 0) { 3098 if (incidence == 0) {
3096 incidence = mTodoList->selectedIncidences().first(); 3099 incidence = mTodoList->selectedIncidences().first();
3097 } 3100 }
3098 } 3101 }
3099 if ( incidence && incidence->type() == "Event" ) { 3102 if ( incidence && incidence->type() == "Event" ) {
3100 event = static_cast<Event *>(incidence); 3103 event = static_cast<Event *>(incidence);
3101 } else { 3104 } else {
3102 if ( incidence && incidence->type() == "Todo" ) { 3105 if ( incidence && incidence->type() == "Todo" ) {
3103 todo = static_cast<Todo *>(incidence); 3106 todo = static_cast<Todo *>(incidence);
3104 } 3107 }
3105 } 3108 }
3106 3109
3107 if (!event && !todo) { 3110 if (!event && !todo) {
3108 KMessageBox::sorry(this,i18n("No event selected.")); 3111 KMessageBox::sorry(this,i18n("No event selected."));
3109 return; 3112 return;
3110 } 3113 }
3111 3114
3112 PublishDialog *publishdlg = new PublishDialog(); 3115 PublishDialog *publishdlg = new PublishDialog();
3113 if (incidence->attendeeCount()>0) { 3116 if (incidence->attendeeCount()>0) {
3114 QPtrList<Attendee> attendees = incidence->attendees(); 3117 QPtrList<Attendee> attendees = incidence->attendees();
3115 attendees.first(); 3118 attendees.first();
3116 while ( attendees.current()!=0 ) { 3119 while ( attendees.current()!=0 ) {
3117 publishdlg->addAttendee(attendees.current()); 3120 publishdlg->addAttendee(attendees.current());
3118 attendees.next(); 3121 attendees.next();
3119 } 3122 }
3120 } 3123 }
3121 bool send = true; 3124 bool send = true;
3122 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) { 3125 if ( KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail ) {
3123 if ( publishdlg->exec() != QDialog::Accepted ) 3126 if ( publishdlg->exec() != QDialog::Accepted )
3124 send = false; 3127 send = false;
3125 } 3128 }
3126 if ( send ) { 3129 if ( send ) {
3127 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 3130 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
3128 if ( event ) { 3131 if ( event ) {
3129 Event *ev = new Event(*event); 3132 Event *ev = new Event(*event);
3130 ev->registerObserver(0); 3133 ev->registerObserver(0);
3131 ev->clearAttendees(); 3134 ev->clearAttendees();
3132 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 3135 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
3133 delete(ev); 3136 delete(ev);
3134 } 3137 }
3135 } else { 3138 } else {
3136 if ( todo ) { 3139 if ( todo ) {
3137 Todo *ev = new Todo(*todo); 3140 Todo *ev = new Todo(*todo);
3138 ev->registerObserver(0); 3141 ev->registerObserver(0);
3139 ev->clearAttendees(); 3142 ev->clearAttendees();
3140 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) { 3143 if (!dlg->addMessage(ev,Scheduler::Publish,publishdlg->addresses())) {
3141 delete(ev); 3144 delete(ev);
3142 } 3145 }
3143 } 3146 }
3144 } 3147 }
3145 } 3148 }
3146 delete publishdlg; 3149 delete publishdlg;
3147} 3150}
3148 3151
3149void CalendarView::schedule_request(Incidence *incidence) 3152void CalendarView::schedule_request(Incidence *incidence)
3150{ 3153{
3151 schedule(Scheduler::Request,incidence); 3154 schedule(Scheduler::Request,incidence);
3152} 3155}
3153 3156
3154void CalendarView::schedule_refresh(Incidence *incidence) 3157void CalendarView::schedule_refresh(Incidence *incidence)
3155{ 3158{
3156 schedule(Scheduler::Refresh,incidence); 3159 schedule(Scheduler::Refresh,incidence);
3157} 3160}
3158 3161
3159void CalendarView::schedule_cancel(Incidence *incidence) 3162void CalendarView::schedule_cancel(Incidence *incidence)
3160{ 3163{
3161 schedule(Scheduler::Cancel,incidence); 3164 schedule(Scheduler::Cancel,incidence);
3162} 3165}
3163 3166
3164void CalendarView::schedule_add(Incidence *incidence) 3167void CalendarView::schedule_add(Incidence *incidence)
3165{ 3168{
3166 schedule(Scheduler::Add,incidence); 3169 schedule(Scheduler::Add,incidence);
3167} 3170}
3168 3171
3169void CalendarView::schedule_reply(Incidence *incidence) 3172void CalendarView::schedule_reply(Incidence *incidence)
3170{ 3173{
3171 schedule(Scheduler::Reply,incidence); 3174 schedule(Scheduler::Reply,incidence);
3172} 3175}
3173 3176
3174void CalendarView::schedule_counter(Incidence *incidence) 3177void CalendarView::schedule_counter(Incidence *incidence)
3175{ 3178{
3176 schedule(Scheduler::Counter,incidence); 3179 schedule(Scheduler::Counter,incidence);
3177} 3180}
3178 3181
3179void CalendarView::schedule_declinecounter(Incidence *incidence) 3182void CalendarView::schedule_declinecounter(Incidence *incidence)
3180{ 3183{
3181 schedule(Scheduler::Declinecounter,incidence); 3184 schedule(Scheduler::Declinecounter,incidence);
3182} 3185}
3183 3186
3184void CalendarView::schedule_publish_freebusy(int daysToPublish) 3187void CalendarView::schedule_publish_freebusy(int daysToPublish)
3185{ 3188{
3186 QDateTime start = QDateTime::currentDateTime(); 3189 QDateTime start = QDateTime::currentDateTime();
3187 QDateTime end = start.addDays(daysToPublish); 3190 QDateTime end = start.addDays(daysToPublish);
3188 3191
3189 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end); 3192 FreeBusy *freebusy = new FreeBusy(mCalendar, start, end);
3190 freebusy->setOrganizer(KOPrefs::instance()->email()); 3193 freebusy->setOrganizer(KOPrefs::instance()->email());
3191 3194
3192 3195
3193 PublishDialog *publishdlg = new PublishDialog(); 3196 PublishDialog *publishdlg = new PublishDialog();
3194 if ( publishdlg->exec() == QDialog::Accepted ) { 3197 if ( publishdlg->exec() == QDialog::Accepted ) {
3195 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 3198 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
3196 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) { 3199 if (!dlg->addMessage(freebusy,Scheduler::Publish,publishdlg->addresses())) {
3197 delete(freebusy); 3200 delete(freebusy);
3198 } 3201 }
3199 } 3202 }
3200 delete publishdlg; 3203 delete publishdlg;
3201} 3204}
3202 3205
3203void CalendarView::schedule(Scheduler::Method method, Incidence *incidence) 3206void CalendarView::schedule(Scheduler::Method method, Incidence *incidence)
3204{ 3207{
3205 Event *event = 0; 3208 Event *event = 0;
3206 Todo *todo = 0; 3209 Todo *todo = 0;
3207 3210
3208 if (incidence == 0) { 3211 if (incidence == 0) {
3209 incidence = mViewManager->currentView()->selectedIncidences().first(); 3212 incidence = mViewManager->currentView()->selectedIncidences().first();
3210 if (incidence == 0) { 3213 if (incidence == 0) {
3211 incidence = mTodoList->selectedIncidences().first(); 3214 incidence = mTodoList->selectedIncidences().first();
3212 } 3215 }
3213 } 3216 }
3214 if ( incidence && incidence->type() == "Event" ) { 3217 if ( incidence && incidence->type() == "Event" ) {
3215 event = static_cast<Event *>(incidence); 3218 event = static_cast<Event *>(incidence);
3216 } 3219 }
3217 if ( incidence && incidence->type() == "Todo" ) { 3220 if ( incidence && incidence->type() == "Todo" ) {
3218 todo = static_cast<Todo *>(incidence); 3221 todo = static_cast<Todo *>(incidence);
3219 } 3222 }
3220 3223
3221 if (!event && !todo) { 3224 if (!event && !todo) {
3222 KMessageBox::sorry(this,i18n("No event selected.")); 3225 KMessageBox::sorry(this,i18n("No event selected."));
3223 return; 3226 return;
3224 } 3227 }
3225 3228
3226 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) { 3229 if( incidence->attendeeCount() == 0 && method != Scheduler::Publish ) {
3227 KMessageBox::sorry(this,i18n("The event has no attendees.")); 3230 KMessageBox::sorry(this,i18n("The event has no attendees."));
3228 return; 3231 return;
3229 } 3232 }
3230 3233
3231 Event *ev = 0; 3234 Event *ev = 0;
3232 if (event) ev = new Event(*event); 3235 if (event) ev = new Event(*event);
3233 Todo *to = 0; 3236 Todo *to = 0;
3234 if (todo) to = new Todo(*todo); 3237 if (todo) to = new Todo(*todo);
3235 3238
3236 if (method == Scheduler::Reply || method == Scheduler::Refresh) { 3239 if (method == Scheduler::Reply || method == Scheduler::Refresh) {
3237 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email()); 3240 Attendee *me = incidence->attendeeByMails(KOPrefs::instance()->mAdditionalMails,KOPrefs::instance()->email());
3238 if (!me) { 3241 if (!me) {
3239 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails.")); 3242 KMessageBox::sorry(this,i18n("Could not find your attendee entry.\nPlease check the emails."));
3240 return; 3243 return;
3241 } 3244 }
3242 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) { 3245 if (me->status()==Attendee::NeedsAction && me->RSVP() && method==Scheduler::Reply) {
3243 StatusDialog *statdlg = new StatusDialog(this); 3246 StatusDialog *statdlg = new StatusDialog(this);
3244 if (!statdlg->exec()==QDialog::Accepted) return; 3247 if (!statdlg->exec()==QDialog::Accepted) return;
3245 me->setStatus( statdlg->status() ); 3248 me->setStatus( statdlg->status() );
3246 delete(statdlg); 3249 delete(statdlg);
3247 } 3250 }
3248 Attendee *menew = new Attendee(*me); 3251 Attendee *menew = new Attendee(*me);
3249 if (ev) { 3252 if (ev) {
3250 ev->clearAttendees(); 3253 ev->clearAttendees();
3251 ev->addAttendee(menew,false); 3254 ev->addAttendee(menew,false);
3252 } else { 3255 } else {
3253 if (to) { 3256 if (to) {
3254 todo->clearAttendees(); 3257 todo->clearAttendees();
3255 todo->addAttendee(menew,false); 3258 todo->addAttendee(menew,false);
3256 } 3259 }
3257 } 3260 }
3258 } 3261 }
3259 3262
3260 OutgoingDialog *dlg = mDialogManager->outgoingDialog(); 3263 OutgoingDialog *dlg = mDialogManager->outgoingDialog();
3261 if (ev) { 3264 if (ev) {
3262 if ( !dlg->addMessage(ev,method) ) delete(ev); 3265 if ( !dlg->addMessage(ev,method) ) delete(ev);
3263 } else { 3266 } else {
3264 if (to) { 3267 if (to) {
3265 if ( !dlg->addMessage(to,method) ) delete(to); 3268 if ( !dlg->addMessage(to,method) ) delete(to);
3266 } 3269 }
3267 } 3270 }
3268} 3271}
3269 3272
3270void CalendarView::openAddressbook() 3273void CalendarView::openAddressbook()
3271{ 3274{
3272 KRun::runCommand("kaddressbook"); 3275 KRun::runCommand("kaddressbook");
3273} 3276}
3274 3277
3275void CalendarView::setModified(bool modified) 3278void CalendarView::setModified(bool modified)
3276{ 3279{
3277 if ( modified ) 3280 if ( modified )
3278 emit signalmodified(); 3281 emit signalmodified();
3279 if (mModified != modified) { 3282 if (mModified != modified) {
3280 mModified = modified; 3283 mModified = modified;
3281 emit modifiedChanged(mModified); 3284 emit modifiedChanged(mModified);
3282 } 3285 }
3283} 3286}
3284 3287
3285bool CalendarView::isReadOnly() 3288bool CalendarView::isReadOnly()
3286{ 3289{
3287 return mReadOnly; 3290 return mReadOnly;
3288} 3291}
3289 3292
3290void CalendarView::setReadOnly(bool readOnly) 3293void CalendarView::setReadOnly(bool readOnly)
3291{ 3294{
3292 if (mReadOnly != readOnly) { 3295 if (mReadOnly != readOnly) {
3293 mReadOnly = readOnly; 3296 mReadOnly = readOnly;
3294 emit readOnlyChanged(mReadOnly); 3297 emit readOnlyChanged(mReadOnly);
3295 } 3298 }
3296} 3299}
3297 3300
3298bool CalendarView::isModified() 3301bool CalendarView::isModified()
3299{ 3302{
3300 return mModified; 3303 return mModified;
3301} 3304}
3302 3305
3303void CalendarView::printSetup() 3306void CalendarView::printSetup()
3304{ 3307{
3305#ifndef KORG_NOPRINTER 3308#ifndef KORG_NOPRINTER
3306 createPrinter(); 3309 createPrinter();
3307 3310
3308 mCalPrinter->setupPrinter(); 3311 mCalPrinter->setupPrinter();
3309#endif 3312#endif
3310} 3313}
3311 3314
3312void CalendarView::print() 3315void CalendarView::print()
3313{ 3316{
3314#ifndef KORG_NOPRINTER 3317#ifndef KORG_NOPRINTER
3315 createPrinter(); 3318 createPrinter();
3316 3319
3317 DateList tmpDateList = mNavigator->selectedDates(); 3320 DateList tmpDateList = mNavigator->selectedDates();
3318 mCalPrinter->print(CalPrinter::Month, 3321 mCalPrinter->print(CalPrinter::Month,
3319 tmpDateList.first(), tmpDateList.last()); 3322 tmpDateList.first(), tmpDateList.last());
3320#endif 3323#endif
3321} 3324}
3322 3325
3323void CalendarView::printPreview() 3326void CalendarView::printPreview()
3324{ 3327{
3325#ifndef KORG_NOPRINTER 3328#ifndef KORG_NOPRINTER
3326 kdDebug() << "CalendarView::printPreview()" << endl; 3329 kdDebug() << "CalendarView::printPreview()" << endl;
3327 3330
3328 createPrinter(); 3331 createPrinter();
3329 3332
3330 DateList tmpDateList = mNavigator->selectedDates(); 3333 DateList tmpDateList = mNavigator->selectedDates();
3331 3334
3332 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(), 3335 mViewManager->currentView()->printPreview(mCalPrinter,tmpDateList.first(),
3333 tmpDateList.last()); 3336 tmpDateList.last());
3334#endif 3337#endif
3335} 3338}
3336 3339
3337void CalendarView::exportICalendar() 3340void CalendarView::exportICalendar()
3338{ 3341{
3339 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this); 3342 QString filename = KFileDialog::getSaveFileName("icalout.ics",i18n("*.ics|ICalendars"),this);
3340 3343
3341 // Force correct extension 3344 // Force correct extension
3342 if (filename.right(4) != ".ics") filename += ".ics"; 3345 if (filename.right(4) != ".ics") filename += ".ics";
3343 3346
3344 FileStorage storage( mCalendar, filename, new ICalFormat() ); 3347 FileStorage storage( mCalendar, filename, new ICalFormat() );
3345 storage.save(); 3348 storage.save();
3346} 3349}
3347 3350
3348bool CalendarView::exportVCalendar( QString filename ) 3351bool CalendarView::exportVCalendar( QString filename )
3349{ 3352{
3350 if (mCalendar->journals().count() > 0) { 3353 if (mCalendar->journals().count() > 0) {
3351 int result = KMessageBox::warningContinueCancel(this, 3354 int result = KMessageBox::warningContinueCancel(this,
3352 i18n("The journal entries can not be\nexported to a vCalendar file."), 3355 i18n("The journal entries can not be\nexported to a vCalendar file."),
3353 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"), 3356 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"),
3354 true); 3357 true);
3355 if (result != KMessageBox::Continue) return false; 3358 if (result != KMessageBox::Continue) return false;
3356 } 3359 }
3357 3360
3358 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this); 3361 //QString filename = KFileDialog::getSaveFileName("vcalout.vcs",i18n("*.vcs|VCalendars"),this);
3359 3362
3360 // Force correct extension 3363 // Force correct extension
3361 if (filename.right(4) != ".vcs") filename += ".vcs"; 3364 if (filename.right(4) != ".vcs") filename += ".vcs";
3362 3365
3363 FileStorage storage( mCalendar, filename, new VCalFormat ); 3366 FileStorage storage( mCalendar, filename, new VCalFormat );
3364 return storage.save(); 3367 return storage.save();
3365 3368
3366} 3369}
3367 3370
3368void CalendarView::eventUpdated(Incidence *) 3371void CalendarView::eventUpdated(Incidence *)
3369{ 3372{
3370 setModified(); 3373 setModified();
3371 // Don't call updateView here. The code, which has caused the update of the 3374 // Don't call updateView here. The code, which has caused the update of the
3372 // event is responsible for updating the view. 3375 // event is responsible for updating the view.
3373 // updateView(); 3376 // updateView();
3374} 3377}
3375 3378
3376void CalendarView::adaptNavigationUnits() 3379void CalendarView::adaptNavigationUnits()
3377{ 3380{
3378 if (mViewManager->currentView()->isEventView()) { 3381 if (mViewManager->currentView()->isEventView()) {
3379 int days = mViewManager->currentView()->currentDateCount(); 3382 int days = mViewManager->currentView()->currentDateCount();
3380 if (days == 1) { 3383 if (days == 1) {
3381 emit changeNavStringPrev(i18n("&Previous Day")); 3384 emit changeNavStringPrev(i18n("&Previous Day"));
3382 emit changeNavStringNext(i18n("&Next Day")); 3385 emit changeNavStringNext(i18n("&Next Day"));
3383 } else { 3386 } else {
3384 emit changeNavStringPrev(i18n("&Previous Week")); 3387 emit changeNavStringPrev(i18n("&Previous Week"));
3385 emit changeNavStringNext(i18n("&Next Week")); 3388 emit changeNavStringNext(i18n("&Next Week"));
3386 } 3389 }
3387 } 3390 }
3388} 3391}
3389 3392
3390void CalendarView::processMainViewSelection( Incidence *incidence ) 3393void CalendarView::processMainViewSelection( Incidence *incidence )
3391{ 3394{
3392 if ( incidence ) mTodoList->clearSelection(); 3395 if ( incidence ) mTodoList->clearSelection();
3393 processIncidenceSelection( incidence ); 3396 processIncidenceSelection( incidence );
3394} 3397}
3395 3398
3396void CalendarView::processTodoListSelection( Incidence *incidence ) 3399void CalendarView::processTodoListSelection( Incidence *incidence )
3397{ 3400{
3398 if ( incidence && mViewManager->currentView() ) { 3401 if ( incidence && mViewManager->currentView() ) {
3399 mViewManager->currentView()->clearSelection(); 3402 mViewManager->currentView()->clearSelection();
3400 } 3403 }
3401 processIncidenceSelection( incidence ); 3404 processIncidenceSelection( incidence );
3402} 3405}
3403 3406
3404void CalendarView::processIncidenceSelection( Incidence *incidence ) 3407void CalendarView::processIncidenceSelection( Incidence *incidence )
3405{ 3408{
3406 if ( incidence == mSelectedIncidence ) return; 3409 if ( incidence == mSelectedIncidence ) return;
3407 3410
3408 mSelectedIncidence = incidence; 3411 mSelectedIncidence = incidence;
3409 3412
3410 emit incidenceSelected( mSelectedIncidence ); 3413 emit incidenceSelected( mSelectedIncidence );
3411 3414
3412 if ( incidence && incidence->type() == "Event" ) { 3415 if ( incidence && incidence->type() == "Event" ) {
3413 Event *event = static_cast<Event *>( incidence ); 3416 Event *event = static_cast<Event *>( incidence );
3414 if ( event->organizer() == KOPrefs::instance()->email() ) { 3417 if ( event->organizer() == KOPrefs::instance()->email() ) {
3415 emit organizerEventsSelected( true ); 3418 emit organizerEventsSelected( true );
3416 } else { 3419 } else {
3417 emit organizerEventsSelected(false); 3420 emit organizerEventsSelected(false);
3418 } 3421 }
3419 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 3422 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
3420 KOPrefs::instance()->email() ) ) { 3423 KOPrefs::instance()->email() ) ) {
3421 emit groupEventsSelected( true ); 3424 emit groupEventsSelected( true );
3422 } else { 3425 } else {
3423 emit groupEventsSelected(false); 3426 emit groupEventsSelected(false);
3424 } 3427 }
3425 return; 3428 return;
3426 } else { 3429 } else {
3427 if ( incidence && incidence->type() == "Todo" ) { 3430 if ( incidence && incidence->type() == "Todo" ) {
3428 emit todoSelected( true ); 3431 emit todoSelected( true );
3429 Todo *event = static_cast<Todo *>( incidence ); 3432 Todo *event = static_cast<Todo *>( incidence );
3430 if ( event->organizer() == KOPrefs::instance()->email() ) { 3433 if ( event->organizer() == KOPrefs::instance()->email() ) {
3431 emit organizerEventsSelected( true ); 3434 emit organizerEventsSelected( true );
3432 } else { 3435 } else {
3433 emit organizerEventsSelected(false); 3436 emit organizerEventsSelected(false);
3434 } 3437 }
3435 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails, 3438 if (event->attendeeByMails( KOPrefs::instance()->mAdditionalMails,
3436 KOPrefs::instance()->email() ) ) { 3439 KOPrefs::instance()->email() ) ) {
3437 emit groupEventsSelected( true ); 3440 emit groupEventsSelected( true );
3438 } else { 3441 } else {
3439 emit groupEventsSelected(false); 3442 emit groupEventsSelected(false);
3440 } 3443 }
3441 return; 3444 return;
3442 } else { 3445 } else {
3443 emit todoSelected( false ); 3446 emit todoSelected( false );
3444 emit organizerEventsSelected(false); 3447 emit organizerEventsSelected(false);
3445 emit groupEventsSelected(false); 3448 emit groupEventsSelected(false);
3446 } 3449 }
3447 return; 3450 return;
3448 } 3451 }
3449 3452
3450 /* if ( incidence && incidence->type() == "Todo" ) { 3453 /* if ( incidence && incidence->type() == "Todo" ) {
3451 emit todoSelected( true ); 3454 emit todoSelected( true );
3452 } else { 3455 } else {
3453 emit todoSelected( false ); 3456 emit todoSelected( false );
3454 }*/ 3457 }*/
3455} 3458}
3456 3459
3457 3460
3458void CalendarView::checkClipboard() 3461void CalendarView::checkClipboard()
3459{ 3462{
3460#ifndef KORG_NODND 3463#ifndef KORG_NODND
3461 if (ICalDrag::canDecode(QApplication::clipboard()->data())) { 3464 if (ICalDrag::canDecode(QApplication::clipboard()->data())) {
3462 emit pasteEnabled(true); 3465 emit pasteEnabled(true);
3463 } else { 3466 } else {
3464 emit pasteEnabled(false); 3467 emit pasteEnabled(false);
3465 } 3468 }
3466#endif 3469#endif
3467} 3470}
3468 3471
3469void CalendarView::showDates(const DateList &selectedDates) 3472void CalendarView::showDates(const DateList &selectedDates)
3470{ 3473{
3471 // kdDebug() << "CalendarView::selectDates()" << endl; 3474 // kdDebug() << "CalendarView::selectDates()" << endl;
3472 3475
3473 3476
3474 if ( !mBlockShowDates ) { 3477 if ( !mBlockShowDates ) {
3475 if ( mViewManager->currentView() ) { 3478 if ( mViewManager->currentView() ) {
3476 updateView( selectedDates.first(), selectedDates.last() ); 3479 updateView( selectedDates.first(), selectedDates.last() );
3477 } else { 3480 } else {
3478 mViewManager->showAgendaView(); 3481 mViewManager->showAgendaView();
3479 } 3482 }
3480 } 3483 }
3481 3484
3482 QString selDates; 3485 QString selDates;
3483 selDates = KGlobal::locale()->formatDate( selectedDates.first(), true); 3486 selDates = KGlobal::locale()->formatDate( selectedDates.first(), true);
3484 if (selectedDates.first() < selectedDates.last() ) 3487 if (selectedDates.first() < selectedDates.last() )
3485 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true); 3488 selDates += " - " + KGlobal::locale()->formatDate( selectedDates.last(),true);
3489 else {
3490 QString addString;
3491 if ( selectedDates.first() == QDateTime::currentDateTime().date() )
3492 addString = i18n("Today");
3493 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(1) )
3494 addString = i18n("Tomorrow");
3495 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) )
3496 addString = i18n("Yesterday");
3497 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) )
3498 addString = i18n("Day before yesterday");
3499 else if ( selectedDates.first() == QDateTime::currentDateTime().date().addDays(2) )
3500 addString = i18n("Day after tomorrow");
3501 if ( !addString.isEmpty() ) {
3502 topLevelWidget()->setCaption( addString+", " + selDates );
3503 return;
3504 }
3505 }
3486 topLevelWidget()->setCaption( i18n("Dates: ") + selDates ); 3506 topLevelWidget()->setCaption( i18n("Dates: ") + selDates );
3487 3507
3488} 3508}
3489 3509
3490QPtrList<CalFilter> CalendarView::filters() 3510QPtrList<CalFilter> CalendarView::filters()
3491{ 3511{
3492 return mFilters; 3512 return mFilters;
3493 3513
3494} 3514}
3495void CalendarView::editFilters() 3515void CalendarView::editFilters()
3496{ 3516{
3497 // kdDebug() << "CalendarView::editFilters()" << endl; 3517 // kdDebug() << "CalendarView::editFilters()" << endl;
3498 3518
3499 CalFilter *filter = mFilters.first(); 3519 CalFilter *filter = mFilters.first();
3500 while(filter) { 3520 while(filter) {
3501 kdDebug() << " Filter: " << filter->name() << endl; 3521 kdDebug() << " Filter: " << filter->name() << endl;
3502 filter = mFilters.next(); 3522 filter = mFilters.next();
3503 } 3523 }
3504 3524
3505 mDialogManager->showFilterEditDialog(&mFilters); 3525 mDialogManager->showFilterEditDialog(&mFilters);
3506} 3526}
3507void CalendarView::toggleFilter() 3527void CalendarView::toggleFilter()
3508{ 3528{
3509 showFilter(! mFilterView->isVisible()); 3529 showFilter(! mFilterView->isVisible());
3510} 3530}
3511 3531
3512KOFilterView *CalendarView::filterView() 3532KOFilterView *CalendarView::filterView()
3513{ 3533{
3514 return mFilterView; 3534 return mFilterView;
3515} 3535}
3516void CalendarView::selectFilter( int fil ) 3536void CalendarView::selectFilter( int fil )
3517{ 3537{
3518 mFilterView->setSelectedFilter( fil ); 3538 mFilterView->setSelectedFilter( fil );
3519} 3539}
3520void CalendarView::showFilter(bool visible) 3540void CalendarView::showFilter(bool visible)
3521{ 3541{
3522 if (visible) mFilterView->show(); 3542 if (visible) mFilterView->show();
3523 else mFilterView->hide(); 3543 else mFilterView->hide();
3524} 3544}
3525void CalendarView::toggleFilerEnabled( ) 3545void CalendarView::toggleFilerEnabled( )
3526{ 3546{
3527 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() ); 3547 mFilterView->setFiltersEnabled ( !mFilterView->filtersEnabled() );
3528 if ( !mFilterView->filtersEnabled() ) 3548 if ( !mFilterView->filtersEnabled() )
3529 topLevelWidget()->setCaption( i18n("Filter disabled ") ); 3549 topLevelWidget()->setCaption( i18n("Filter disabled ") );
3530 3550
3531} 3551}
3532void CalendarView::updateFilter() 3552void CalendarView::updateFilter()
3533{ 3553{
3534 CalFilter *filter = mFilterView->selectedFilter(); 3554 CalFilter *filter = mFilterView->selectedFilter();
3535 if (filter) { 3555 if (filter) {
3536 if (mFilterView->filtersEnabled()) { 3556 if (mFilterView->filtersEnabled()) {
3537 topLevelWidget()->setCaption( i18n("Filter selected: ")+filter->name() ); 3557 topLevelWidget()->setCaption( i18n("Filter selected: ")+filter->name() );
3538 filter->setEnabled(true); 3558 filter->setEnabled(true);
3539 } 3559 }
3540 else filter->setEnabled(false); 3560 else filter->setEnabled(false);
3541 mCalendar->setFilter(filter); 3561 mCalendar->setFilter(filter);
3542 updateView(); 3562 updateView();
3543 } 3563 }
3544} 3564}
3545 3565
3546void CalendarView::filterEdited() 3566void CalendarView::filterEdited()
3547{ 3567{
3548 mFilterView->updateFilters(); 3568 mFilterView->updateFilters();
3549 updateFilter(); 3569 updateFilter();
3550 writeSettings(); 3570 writeSettings();
3551} 3571}
3552 3572
3553 3573
3554void CalendarView::takeOverEvent() 3574void CalendarView::takeOverEvent()
3555{ 3575{
3556 Incidence *incidence = currentSelection(); 3576 Incidence *incidence = currentSelection();
3557 3577
3558 if (!incidence) return; 3578 if (!incidence) return;
3559 3579
3560 incidence->setOrganizer(KOPrefs::instance()->email()); 3580 incidence->setOrganizer(KOPrefs::instance()->email());
3561 incidence->recreate(); 3581 incidence->recreate();
3562 incidence->setReadOnly(false); 3582 incidence->setReadOnly(false);
3563 3583
3564 updateView(); 3584 updateView();
3565} 3585}
3566 3586
3567void CalendarView::takeOverCalendar() 3587void CalendarView::takeOverCalendar()
3568{ 3588{
3569 // TODO: Create Calendar::allIncidences() function and use it here 3589 // TODO: Create Calendar::allIncidences() function and use it here
3570 3590
3571 QPtrList<Event> events = mCalendar->events(); 3591 QPtrList<Event> events = mCalendar->events();
3572 for(uint i=0; i<events.count(); ++i) { 3592 for(uint i=0; i<events.count(); ++i) {
3573 events.at(i)->setOrganizer(KOPrefs::instance()->email()); 3593 events.at(i)->setOrganizer(KOPrefs::instance()->email());
3574 events.at(i)->recreate(); 3594 events.at(i)->recreate();
3575 events.at(i)->setReadOnly(false); 3595 events.at(i)->setReadOnly(false);
3576 } 3596 }
3577 3597
3578 QPtrList<Todo> todos = mCalendar->todos(); 3598 QPtrList<Todo> todos = mCalendar->todos();
3579 for(uint i=0; i<todos.count(); ++i) { 3599 for(uint i=0; i<todos.count(); ++i) {
3580 todos.at(i)->setOrganizer(KOPrefs::instance()->email()); 3600 todos.at(i)->setOrganizer(KOPrefs::instance()->email());
3581 todos.at(i)->recreate(); 3601 todos.at(i)->recreate();
3582 todos.at(i)->setReadOnly(false); 3602 todos.at(i)->setReadOnly(false);
3583 } 3603 }
3584 3604
3585 QPtrList<Journal> journals = mCalendar->journals(); 3605 QPtrList<Journal> journals = mCalendar->journals();
3586 for(uint i=0; i<journals.count(); ++i) { 3606 for(uint i=0; i<journals.count(); ++i) {
3587 journals.at(i)->setOrganizer(KOPrefs::instance()->email()); 3607 journals.at(i)->setOrganizer(KOPrefs::instance()->email());
3588 journals.at(i)->recreate(); 3608 journals.at(i)->recreate();
3589 journals.at(i)->setReadOnly(false); 3609 journals.at(i)->setReadOnly(false);
3590 } 3610 }
3591 3611
3592 updateView(); 3612 updateView();
3593} 3613}
3594 3614
3595void CalendarView::showIntro() 3615void CalendarView::showIntro()
3596{ 3616{
3597 kdDebug() << "To be implemented." << endl; 3617 kdDebug() << "To be implemented." << endl;
3598} 3618}
3599 3619
3600QWidgetStack *CalendarView::viewStack() 3620QWidgetStack *CalendarView::viewStack()
3601{ 3621{
3602 return mRightFrame; 3622 return mRightFrame;
3603} 3623}
3604 3624
3605QWidget *CalendarView::leftFrame() 3625QWidget *CalendarView::leftFrame()
3606{ 3626{
3607 return mLeftFrame; 3627 return mLeftFrame;
3608} 3628}
3609 3629
3610DateNavigator *CalendarView::dateNavigator() 3630DateNavigator *CalendarView::dateNavigator()
3611{ 3631{
3612 return mNavigator; 3632 return mNavigator;
3613} 3633}
3614 3634
3615KDateNavigator* CalendarView::dateNavigatorWidget() 3635KDateNavigator* CalendarView::dateNavigatorWidget()
3616{ 3636{
3617 return mDateNavigator; 3637 return mDateNavigator;
3618} 3638}
3619void CalendarView::toggleDateNavigatorWidget() 3639void CalendarView::toggleDateNavigatorWidget()
3620{ 3640{
3621 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ; 3641 KOPrefs::instance()->mShowDateNavigator = !KOPrefs::instance()->mShowDateNavigator ;
3622 if (!KOPrefs::instance()->mShowDateNavigator ) 3642 if (!KOPrefs::instance()->mShowDateNavigator )
3623 mDateNavigator->hide(); 3643 mDateNavigator->hide();
3624 else 3644 else
3625 mDateNavigator->show(); 3645 mDateNavigator->show();
3626} 3646}
3627void CalendarView::addView(KOrg::BaseView *view) 3647void CalendarView::addView(KOrg::BaseView *view)
3628{ 3648{
3629 mViewManager->addView(view); 3649 mViewManager->addView(view);
3630} 3650}
3631 3651
3632void CalendarView::showView(KOrg::BaseView *view) 3652void CalendarView::showView(KOrg::BaseView *view)
3633{ 3653{
3634 mViewManager->showView(view, mLeftFrame->isVisible()); 3654 mViewManager->showView(view, mLeftFrame->isVisible());
3635} 3655}
3636 3656
3637Incidence *CalendarView::currentSelection() 3657Incidence *CalendarView::currentSelection()
3638{ 3658{
3639 return mViewManager->currentSelection(); 3659 return mViewManager->currentSelection();
3640} 3660}
3641void CalendarView::toggleAllDaySize() 3661void CalendarView::toggleAllDaySize()
3642{ 3662{
3643 /* 3663 /*
3644 if ( KOPrefs::instance()->mAllDaySize > 47 ) 3664 if ( KOPrefs::instance()->mAllDaySize > 47 )
3645 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2; 3665 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize /2;
3646 else 3666 else
3647 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2; 3667 KOPrefs::instance()->mAllDaySize = KOPrefs::instance()->mAllDaySize *2;
3648 */ 3668 */
3649 viewManager()->agendaView()->toggleAllDay(); 3669 viewManager()->agendaView()->toggleAllDay();
3650} 3670}
3651void CalendarView::toggleExpand() 3671void CalendarView::toggleExpand()
3652{ 3672{
3653 // if ( mLeftFrame->isHidden() ) { 3673 // if ( mLeftFrame->isHidden() ) {
3654 // mLeftFrame->show(); 3674 // mLeftFrame->show();
3655 // emit calendarViewExpanded( false ); 3675 // emit calendarViewExpanded( false );
3656 // } else { 3676 // } else {
3657 // mLeftFrame->hide(); 3677 // mLeftFrame->hide();
3658 // emit calendarViewExpanded( true ); 3678 // emit calendarViewExpanded( true );
3659 // } 3679 // }
3660 3680
3661 globalFlagBlockAgenda = 1; 3681 globalFlagBlockAgenda = 1;
3662 emit calendarViewExpanded( !mLeftFrame->isHidden() ); 3682 emit calendarViewExpanded( !mLeftFrame->isHidden() );
3663 globalFlagBlockAgenda = 5; 3683 globalFlagBlockAgenda = 5;
3664 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() ); 3684 mViewManager->raiseCurrentView( !mLeftFrame->isHidden() );
3665 //mViewManager->showView( 0, true ); 3685 //mViewManager->showView( 0, true );
3666} 3686}
3667 3687
3668void CalendarView::calendarModified( bool modified, Calendar * ) 3688void CalendarView::calendarModified( bool modified, Calendar * )
3669{ 3689{
3670 setModified( modified ); 3690 setModified( modified );
3671} 3691}
3672 3692
3673Todo *CalendarView::selectedTodo() 3693Todo *CalendarView::selectedTodo()
3674{ 3694{
3675 Incidence *incidence = currentSelection(); 3695 Incidence *incidence = currentSelection();
3676 if ( incidence && incidence->type() == "Todo" ) { 3696 if ( incidence && incidence->type() == "Todo" ) {
3677 return static_cast<Todo *>( incidence ); 3697 return static_cast<Todo *>( incidence );
3678 } 3698 }
3679 3699
3680 incidence = mTodoList->selectedIncidences().first(); 3700 incidence = mTodoList->selectedIncidences().first();
3681 if ( incidence && incidence->type() == "Todo" ) { 3701 if ( incidence && incidence->type() == "Todo" ) {
3682 return static_cast<Todo *>( incidence ); 3702 return static_cast<Todo *>( incidence );
3683 } 3703 }
3684 3704
3685 return 0; 3705 return 0;
3686} 3706}
3687 3707
3688void CalendarView::dialogClosing(Incidence *in) 3708void CalendarView::dialogClosing(Incidence *in)
3689{ 3709{
3690 // mDialogList.remove(in); 3710 // mDialogList.remove(in);
3691} 3711}
3692 3712
3693void CalendarView::showIncidence() 3713void CalendarView::showIncidence()
3694{ 3714{
3695 Incidence *incidence = currentSelection(); 3715 Incidence *incidence = currentSelection();
3696 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3716 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3697 if ( incidence ) { 3717 if ( incidence ) {
3698 ShowIncidenceVisitor v; 3718 ShowIncidenceVisitor v;
3699 v.act( incidence, this ); 3719 v.act( incidence, this );
3700 } 3720 }
3701} 3721}
3702void CalendarView::editIncidenceDescription() 3722void CalendarView::editIncidenceDescription()
3703{ 3723{
3704 mFlagEditDescription = true; 3724 mFlagEditDescription = true;
3705 editIncidence(); 3725 editIncidence();
3706 mFlagEditDescription = false; 3726 mFlagEditDescription = false;
3707} 3727}
3708void CalendarView::editIncidence() 3728void CalendarView::editIncidence()
3709{ 3729{
3710 // qDebug("editIncidence() "); 3730 // qDebug("editIncidence() ");
3711 Incidence *incidence = currentSelection(); 3731 Incidence *incidence = currentSelection();
3712 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3732 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3713 if ( incidence ) { 3733 if ( incidence ) {
3714 EditIncidenceVisitor v; 3734 EditIncidenceVisitor v;
3715 v.act( incidence, this ); 3735 v.act( incidence, this );
3716 } 3736 }
3717} 3737}
3718 3738
3719void CalendarView::deleteIncidence() 3739void CalendarView::deleteIncidence()
3720{ 3740{
3721 Incidence *incidence = currentSelection(); 3741 Incidence *incidence = currentSelection();
3722 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 3742 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
3723 if ( incidence ) { 3743 if ( incidence ) {
3724 deleteIncidence(incidence); 3744 deleteIncidence(incidence);
3725 } 3745 }
3726} 3746}
3727 3747
3728void CalendarView::showIncidence(Incidence *incidence) 3748void CalendarView::showIncidence(Incidence *incidence)
3729{ 3749{
3730 if ( incidence ) { 3750 if ( incidence ) {
3731 ShowIncidenceVisitor v; 3751 ShowIncidenceVisitor v;
3732 v.act( incidence, this ); 3752 v.act( incidence, this );
3733 } 3753 }
3734} 3754}
3735 3755
3736void CalendarView::editIncidence(Incidence *incidence) 3756void CalendarView::editIncidence(Incidence *incidence)
3737{ 3757{
3738 if ( incidence ) { 3758 if ( incidence ) {
3739 3759
3740 EditIncidenceVisitor v; 3760 EditIncidenceVisitor v;
3741 v.act( incidence, this ); 3761 v.act( incidence, this );
3742 3762
3743 } 3763 }
3744} 3764}
3745 3765
3746void CalendarView::deleteIncidence(Incidence *incidence) 3766void CalendarView::deleteIncidence(Incidence *incidence)
3747{ 3767{
3748 //qDebug(" CalendarView::deleteIncidence "); 3768 //qDebug(" CalendarView::deleteIncidence ");
3749 if ( incidence ) { 3769 if ( incidence ) {
3750 DeleteIncidenceVisitor v; 3770 DeleteIncidenceVisitor v;
3751 v.act( incidence, this ); 3771 v.act( incidence, this );
3752 } 3772 }
3753} 3773}
3754 3774
3755 3775
3756void CalendarView::lookForOutgoingMessages() 3776void CalendarView::lookForOutgoingMessages()
3757{ 3777{
3758 OutgoingDialog *ogd = mDialogManager->outgoingDialog(); 3778 OutgoingDialog *ogd = mDialogManager->outgoingDialog();
3759 ogd->loadMessages(); 3779 ogd->loadMessages();
3760} 3780}
3761 3781
3762void CalendarView::lookForIncomingMessages() 3782void CalendarView::lookForIncomingMessages()
3763{ 3783{
3764 IncomingDialog *icd = mDialogManager->incomingDialog(); 3784 IncomingDialog *icd = mDialogManager->incomingDialog();
3765 icd->retrieve(); 3785 icd->retrieve();
3766} 3786}
3767 3787
3768bool CalendarView::removeCompletedSubTodos( Todo* t ) 3788bool CalendarView::removeCompletedSubTodos( Todo* t )
3769{ 3789{
3770 bool deleteTodo = true; 3790 bool deleteTodo = true;
3771 QPtrList<Incidence> subTodos; 3791 QPtrList<Incidence> subTodos;
3772 Incidence *aTodo; 3792 Incidence *aTodo;
3773 subTodos = t->relations(); 3793 subTodos = t->relations();
3774 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) { 3794 for (aTodo = subTodos.first(); aTodo; aTodo = subTodos.next()) {
3775 if (! removeCompletedSubTodos( (Todo*) aTodo )) 3795 if (! removeCompletedSubTodos( (Todo*) aTodo ))
3776 deleteTodo = false; 3796 deleteTodo = false;
3777 } 3797 }
3778 if ( deleteTodo ) { 3798 if ( deleteTodo ) {
3779 if ( t->isCompleted() ) { 3799 if ( t->isCompleted() ) {
3780 checkExternalId( t ); 3800 checkExternalId( t );
3781 mCalendar->deleteTodo( t ); 3801 mCalendar->deleteTodo( t );
3782 changeTodoDisplay( t,KOGlobals::EVENTDELETED ); 3802 changeTodoDisplay( t,KOGlobals::EVENTDELETED );
3783 } 3803 }
3784 else 3804 else
3785 deleteTodo = false; 3805 deleteTodo = false;
3786 } 3806 }
3787 return deleteTodo; 3807 return deleteTodo;
3788 3808
3789} 3809}
3790void CalendarView::purgeCompleted() 3810void CalendarView::purgeCompleted()
3791{ 3811{
3792 int result = KMessageBox::warningContinueCancel(this, 3812 int result = KMessageBox::warningContinueCancel(this,
3793 i18n("Delete all\ncompleted To-Dos?"),i18n("Purge To-Dos"),i18n("Purge")); 3813 i18n("Delete all\ncompleted To-Dos?"),i18n("Purge To-Dos"),i18n("Purge"));
3794 3814
3795 if (result == KMessageBox::Continue) { 3815 if (result == KMessageBox::Continue) {
3796 3816
3797 QPtrList<Todo> todoCal; 3817 QPtrList<Todo> todoCal;
3798 QPtrList<Todo> rootTodos; 3818 QPtrList<Todo> rootTodos;
3799 //QPtrList<Incidence> rel; 3819 //QPtrList<Incidence> rel;
3800 Todo *aTodo;//, *rTodo; 3820 Todo *aTodo;//, *rTodo;
3801 Incidence *rIncidence; 3821 Incidence *rIncidence;
3802 bool childDelete = false; 3822 bool childDelete = false;
3803 bool deletedOne = true; 3823 bool deletedOne = true;
3804 todoCal = calendar()->todos(); 3824 todoCal = calendar()->todos();
3805 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) { 3825 for (aTodo = todoCal.first(); aTodo; aTodo = todoCal.next()) {
3806 if ( !aTodo->relatedTo() ) 3826 if ( !aTodo->relatedTo() )
3807 rootTodos.append( aTodo ); 3827 rootTodos.append( aTodo );
3808 } 3828 }
3809 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) { 3829 for (aTodo = rootTodos.first(); aTodo; aTodo = rootTodos.next()) {
3810 removeCompletedSubTodos( aTodo ); 3830 removeCompletedSubTodos( aTodo );
3811 } 3831 }
3812 3832
3813 updateView(); 3833 updateView();
3814 } 3834 }
3815} 3835}
3816 3836
3817void CalendarView::slotCalendarChanged() 3837void CalendarView::slotCalendarChanged()
3818{ 3838{
3819 ; 3839 ;
3820} 3840}
3821 3841
3822NavigatorBar *CalendarView::navigatorBar() 3842NavigatorBar *CalendarView::navigatorBar()
3823{ 3843{
3824 return mNavigatorBar; 3844 return mNavigatorBar;
3825} 3845}
3826 3846
3827 3847
3828 3848
3829void CalendarView::keyPressEvent ( QKeyEvent *e) 3849void CalendarView::keyPressEvent ( QKeyEvent *e)
3830{ 3850{
3831 //qDebug(" alendarView::keyPressEvent "); 3851 //qDebug(" alendarView::keyPressEvent ");
3832 e->ignore(); 3852 e->ignore();
3833} 3853}
3834 3854
3835 3855
3836bool CalendarView::sync(KSyncManager* manager, QString filename, int mode) 3856bool CalendarView::sync(KSyncManager* manager, QString filename, int mode)
3837{ 3857{
3838 // mSyncManager = manager; 3858 // mSyncManager = manager;
3839 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) { 3859 if ( filename == QDir::homeDirPath ()+"/.kdecalendardump.ics" ) {
3840 qDebug("SyncKDE request detected!"); 3860 qDebug("SyncKDE request detected!");
3841 } 3861 }
3842 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 3862 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
3843 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 3863 mCurrentSyncName = mSyncManager->getCurrentSyncName();
3844 return syncCalendar( filename, mode ); 3864 return syncCalendar( filename, mode );
3845} 3865}
3846bool CalendarView::syncExternal(KSyncManager* manager, QString resource) 3866bool CalendarView::syncExternal(KSyncManager* manager, QString resource)
3847{ 3867{
3848 //mSyncManager = manager; 3868 //mSyncManager = manager;
3849 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice(); 3869 mCurrentSyncDevice = mSyncManager->getCurrentSyncDevice();
3850 mCurrentSyncName = mSyncManager->getCurrentSyncName(); 3870 mCurrentSyncName = mSyncManager->getCurrentSyncName();
3851 if ( resource == "sharp" ) 3871 if ( resource == "sharp" )
3852 syncExternal( 0 ); 3872 syncExternal( 0 );
3853 if ( resource == "phone" ) 3873 if ( resource == "phone" )
3854 syncExternal( 1 ); 3874 syncExternal( 1 );
3855 // pending setmodified 3875 // pending setmodified
3856 return true; 3876 return true;
3857} 3877}
3858void CalendarView::setSyncManager(KSyncManager* manager) 3878void CalendarView::setSyncManager(KSyncManager* manager)
3859{ 3879{
3860 mSyncManager = manager; 3880 mSyncManager = manager;
3861} 3881}
3862 3882
3863void CalendarView::removeSyncInfo( QString syncProfile) 3883void CalendarView::removeSyncInfo( QString syncProfile)
3864{ 3884{
3865 qDebug("removeSyncInfo for profile %s ", syncProfile.latin1()); 3885 qDebug("removeSyncInfo for profile %s ", syncProfile.latin1());
3866 mCalendar->removeSyncInfo( syncProfile ); 3886 mCalendar->removeSyncInfo( syncProfile );
3867 3887
3868} 3888}
3869 3889
3870void CalendarView::undo_delete() 3890void CalendarView::undo_delete()
3871{ 3891{
3872 //qDebug("undo_delete() "); 3892 //qDebug("undo_delete() ");
3873 Incidence* undo = mCalendar->undoIncidence(); 3893 Incidence* undo = mCalendar->undoIncidence();
3874 if ( !undo ) { 3894 if ( !undo ) {
3875 KMessageBox::sorry(this,i18n("There is nothing to undo!"), 3895 KMessageBox::sorry(this,i18n("There is nothing to undo!"),
3876 i18n("KO/Pi")); 3896 i18n("KO/Pi"));
3877 return; 3897 return;
3878 } 3898 }
3879 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,undo->summary().left(25) + 3899 if ( KMessageBox::Continue ==KMessageBox::warningContinueCancel(this,undo->summary().left(25) +
3880 i18n("\nAre you sure you want\nto restore this?"), 3900 i18n("\nAre you sure you want\nto restore this?"),
3881 i18n("KO/Pi Confirmation"),i18n("Restore"))) { 3901 i18n("KO/Pi Confirmation"),i18n("Restore"))) {
3882 mCalendar->undoDeleteIncidence(); 3902 mCalendar->undoDeleteIncidence();
3883 updateView(); 3903 updateView();
3884 } 3904 }
3885} 3905}
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h
index e27da9a..c8d6bdd 100644
--- a/korganizer/calendarview.h
+++ b/korganizer/calendarview.h
@@ -1,610 +1,610 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000, 2001 3 Copyright (c) 2000, 2001
4 Cornelius Schumacher <schumacher@kde.org> 4 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24#ifndef CALENDARVIEW_H 24#ifndef CALENDARVIEW_H
25#define CALENDARVIEW_H 25#define CALENDARVIEW_H
26 26
27#include <qframe.h> 27#include <qframe.h>
28#include <qlayout.h> 28#include <qlayout.h>
29#include <qwidget.h> 29#include <qwidget.h>
30#include <qptrlist.h> 30#include <qptrlist.h>
31#include <qvbox.h> 31#include <qvbox.h>
32#include <qmap.h> 32#include <qmap.h>
33#ifndef DESKTOP_VERSION 33#ifndef DESKTOP_VERSION
34#include <qtopia/ir.h> 34#include <qtopia/ir.h>
35#else 35#else
36#define Ir char 36#define Ir char
37#endif 37#endif
38#include <libkcal/calendar.h> 38#include <libkcal/calendar.h>
39#include <libkcal/scheduler.h> 39#include <libkcal/scheduler.h>
40#include <libkcal/calendarresources.h> 40#include <libkcal/calendarresources.h>
41#include <libkcal/resourcecalendar.h> 41#include <libkcal/resourcecalendar.h>
42 42
43#include <korganizer/calendarviewbase.h> 43#include <korganizer/calendarviewbase.h>
44 44
45#include <ksyncmanager.h> 45#include <ksyncmanager.h>
46 46
47class QWidgetStack; 47class QWidgetStack;
48class QSplitter; 48class QSplitter;
49 49
50class CalPrinter; 50class CalPrinter;
51class KOFilterView; 51class KOFilterView;
52class KOViewManager; 52class KOViewManager;
53class KODialogManager; 53class KODialogManager;
54class KOTodoView; 54class KOTodoView;
55class KDateNavigator; 55class KDateNavigator;
56class DateNavigator; 56class DateNavigator;
57class KOIncidenceEditor; 57class KOIncidenceEditor;
58class KDatePicker; 58class KDatePicker;
59class ResourceView; 59class ResourceView;
60class NavigatorBar; 60class NavigatorBar;
61class KOEventEditor; 61class KOEventEditor;
62class KOTodoEditor ; 62class KOTodoEditor ;
63class KOEventViewerDialog; 63class KOEventViewerDialog;
64class KOBeamPrefs; 64class KOBeamPrefs;
65class KSyncProfile; 65class KSyncProfile;
66class AlarmDialog; 66class AlarmDialog;
67class KCal::Attendee; 67class KCal::Attendee;
68 68
69namespace KCal { class FileStorage; } 69namespace KCal { class FileStorage; }
70 70
71using namespace KCal; 71using namespace KCal;
72 72
73/** 73/**
74 This is the main calendar widget. It provides the different vies on t he 74 This is the main calendar widget. It provides the different vies on t he
75 calendar data as well as the date navigator. It also handles synchronisation 75 calendar data as well as the date navigator. It also handles synchronisation
76 of the different views and controls the different dialogs like preferences, 76 of the different views and controls the different dialogs like preferences,
77 event editor, search dialog etc. 77 event editor, search dialog etc.
78 78
79 @short main calendar view widget 79 @short main calendar view widget
80 @author Cornelius Schumacher 80 @author Cornelius Schumacher
81*/ 81*/
82class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface 82class CalendarView : public KOrg::CalendarViewBase, public KCal::Calendar::Observer, public KSyncInterface
83{ 83{
84 Q_OBJECT 84 Q_OBJECT
85 public: 85 public:
86 /** 86 /**
87 Constructs a new calendar view widget. 87 Constructs a new calendar view widget.
88 88
89 @param calendar calendar document 89 @param calendar calendar document
90 @param parent parent window 90 @param parent parent window
91 @param name Qt internal widget object name 91 @param name Qt internal widget object name
92 */ 92 */
93 CalendarView( CalendarResources *calendar, QWidget *parent = 0, 93 CalendarView( CalendarResources *calendar, QWidget *parent = 0,
94 const char *name = 0 ); 94 const char *name = 0 );
95 CalendarView( Calendar *calendar, QWidget *parent = 0, 95 CalendarView( Calendar *calendar, QWidget *parent = 0,
96 const char *name = 0 ); 96 const char *name = 0 );
97 virtual ~CalendarView(); 97 virtual ~CalendarView();
98 98
99 Calendar *calendar() { return mCalendar; } 99 Calendar *calendar() { return mCalendar; }
100 100
101 KOViewManager *viewManager(); 101 KOViewManager *viewManager();
102 KODialogManager *dialogManager(); 102 KODialogManager *dialogManager();
103 103
104 QDate startDate(); 104 QDate startDate();
105 QDate endDate(); 105 QDate endDate();
106 106
107 QWidgetStack *viewStack(); 107 QWidgetStack *viewStack();
108 QWidget *leftFrame(); 108 QWidget *leftFrame();
109 NavigatorBar *navigatorBar(); 109 NavigatorBar *navigatorBar();
110 110
111 DateNavigator *dateNavigator(); 111 DateNavigator *dateNavigator();
112 KDateNavigator *dateNavigatorWidget(); 112 KDateNavigator *dateNavigatorWidget();
113 113
114 void addView(KOrg::BaseView *); 114 void addView(KOrg::BaseView *);
115 void showView(KOrg::BaseView *); 115 void showView(KOrg::BaseView *);
116 KOEventViewerDialog* getEventViewerDialog(); 116 KOEventViewerDialog* getEventViewerDialog();
117 Incidence *currentSelection(); 117 Incidence *currentSelection();
118 118
119 signals: 119 signals:
120 void tempDisableBR(bool); 120 void tempDisableBR(bool);
121 /** This todo has been modified */ 121 /** This todo has been modified */
122 void todoModified(Todo *, int); 122 void todoModified(Todo *, int);
123 123
124 /** when change is made to options dialog, the topwidget will catch this 124 /** when change is made to options dialog, the topwidget will catch this
125 * and emit this signal which notifies all widgets which have registered 125 * and emit this signal which notifies all widgets which have registered
126 * for notification to update their settings. */ 126 * for notification to update their settings. */
127 void configChanged(); 127 void configChanged();
128 /** emitted when the topwidget is closing down, so that any attached 128 /** emitted when the topwidget is closing down, so that any attached
129 child windows can also close. */ 129 child windows can also close. */
130 void closingDown(); 130 void closingDown();
131 /** emitted right before we die */ 131 /** emitted right before we die */
132 void closed(QWidget *); 132 void closed(QWidget *);
133 133
134 /** Emitted when state of modified flag changes */ 134 /** Emitted when state of modified flag changes */
135 void modifiedChanged(bool); 135 void modifiedChanged(bool);
136 void signalmodified(); 136 void signalmodified();
137 137
138 /** Emitted when state of read-only flag changes */ 138 /** Emitted when state of read-only flag changes */
139 void readOnlyChanged(bool); 139 void readOnlyChanged(bool);
140 140
141 /** Emitted when the unit of navigation changes */ 141 /** Emitted when the unit of navigation changes */
142 void changeNavStringPrev(const QString &); 142 void changeNavStringPrev(const QString &);
143 void changeNavStringNext(const QString &); 143 void changeNavStringNext(const QString &);
144 144
145 /** Emitted when state of events selection has changed and user is organizer*/ 145 /** Emitted when state of events selection has changed and user is organizer*/
146 void organizerEventsSelected(bool); 146 void organizerEventsSelected(bool);
147 /** Emitted when state of events selection has changed and user is attendee*/ 147 /** Emitted when state of events selection has changed and user is attendee*/
148 void groupEventsSelected(bool); 148 void groupEventsSelected(bool);
149 /** 149 /**
150 Emitted when an incidence gets selected. If the selection is cleared the 150 Emitted when an incidence gets selected. If the selection is cleared the
151 signal is emitted with 0 as argument. 151 signal is emitted with 0 as argument.
152 */ 152 */
153 void incidenceSelected( Incidence * ); 153 void incidenceSelected( Incidence * );
154 /** Emitted, when a todoitem is selected or deselected. */ 154 /** Emitted, when a todoitem is selected or deselected. */
155 void todoSelected( bool ); 155 void todoSelected( bool );
156 156
157 /** 157 /**
158 Emitted, when clipboard content changes. Parameter indicates if paste 158 Emitted, when clipboard content changes. Parameter indicates if paste
159 is possible or not. 159 is possible or not.
160 */ 160 */
161 void pasteEnabled(bool); 161 void pasteEnabled(bool);
162 162
163 /** Emitted, when the number of incoming messages has changed. */ 163 /** Emitted, when the number of incoming messages has changed. */
164 void numIncomingChanged(int); 164 void numIncomingChanged(int);
165 165
166 /** Emitted, when the number of outgoing messages has changed. */ 166 /** Emitted, when the number of outgoing messages has changed. */
167 void numOutgoingChanged(int); 167 void numOutgoingChanged(int);
168 168
169 /** Send status message, which can e.g. be displayed in the status bar. */ 169 /** Send status message, which can e.g. be displayed in the status bar. */
170 void statusMessage(const QString &); 170 void statusMessage(const QString &);
171 171
172 void calendarViewExpanded( bool ); 172 void calendarViewExpanded( bool );
173 void updateSearchDialog(); 173 void updateSearchDialog();
174 174
175 175
176 public slots: 176 public slots:
177 void showOpenError(); 177 void showOpenError();
178 void watchSavedFile(); 178 void watchSavedFile();
179 void recheckTimerAlarm(); 179 void recheckTimerAlarm();
180 void checkNextTimerAlarm(); 180 void checkNextTimerAlarm();
181 void addAlarm(const QDateTime &qdt, const QString &noti ); 181 void addAlarm(const QDateTime &qdt, const QString &noti );
182 void addSuspendAlarm(const QDateTime &qdt, const QString &noti ); 182 void addSuspendAlarm(const QDateTime &qdt, const QString &noti );
183 void removeAlarm(const QDateTime &qdt, const QString &noti ); 183 void removeAlarm(const QDateTime &qdt, const QString &noti );
184 184
185 /** options dialog made a changed to the configuration. we catch this 185 /** options dialog made a changed to the configuration. we catch this
186 * and notify all widgets which need to update their configuration. */ 186 * and notify all widgets which need to update their configuration. */
187 void updateConfig(); 187 void updateConfig();
188 188
189 void insertBirthdays(const QString& uid, const QStringList& birthdayList, 189 void insertBirthdays(const QString& uid, const QStringList& birthdayList,
190 const QStringList& anniversaryList, const QStringList& realNameList, 190 const QStringList& anniversaryList, const QStringList& realNameList,
191 const QStringList& emailList, const QStringList& assembledNameList, 191 const QStringList& emailList, const QStringList& assembledNameList,
192 const QStringList& uidList); 192 const QStringList& uidList);
193 193
194 /** 194 /**
195 Load calendar from file \a filename. If \a merge is true, load 195 Load calendar from file \a filename. If \a merge is true, load
196 calendar into existing one, if it is false, clear calendar, before 196 calendar into existing one, if it is false, clear calendar, before
197 loading. Return true, if calendar could be successfully loaded. 197 loading. Return true, if calendar could be successfully loaded.
198 */ 198 */
199 bool openCalendar(QString filename, bool merge=false); 199 bool openCalendar(QString filename, bool merge=false);
200 bool syncCalendar(QString filename,int mode = 0 ); 200 bool syncCalendar(QString filename,int mode = 0 );
201 201
202 /** 202 /**
203 Save calendar data to file. Return true if calendar could be 203 Save calendar data to file. Return true if calendar could be
204 successfully saved. 204 successfully saved.
205 */ 205 */
206 bool saveCalendar(QString filename); 206 bool saveCalendar(QString filename);
207 207
208 /** 208 /**
209 Close calendar. Clear calendar data and reset views to display an empty 209 Close calendar. Clear calendar data and reset views to display an empty
210 calendar. 210 calendar.
211 */ 211 */
212 void closeCalendar(); 212 void closeCalendar();
213 213
214 /** Archive old events of calendar */ 214 /** Archive old events of calendar */
215 void archiveCalendar(); 215 void archiveCalendar();
216 216
217 void showIncidence(); 217 void showIncidence();
218 void editIncidence(); 218 void editIncidence();
219 void editIncidenceDescription(); 219 void editIncidenceDescription();
220 void deleteIncidence(); 220 void deleteIncidence();
221 void cloneIncidence(); 221 void cloneIncidence();
222 void moveIncidence(); 222 void moveIncidence();
223 void beamIncidence(); 223 void beamIncidence();
224 void toggleCancelIncidence(); 224 void toggleCancelIncidence();
225 225
226 /** create an editeventwin with supplied date/time, and if bool is true, 226 /** create an editeventwin with supplied date/time, and if bool is true,
227 * make the event take all day. */ 227 * make the event take all day. */
228 void newEvent(QDateTime, QDateTime, bool allDay = false); 228 void newEvent(QDateTime, QDateTime, bool allDay = false);
229 void newEvent(QDateTime fh); 229 void newEvent(QDateTime fh);
230 void newEvent(QDate dt); 230 void newEvent(QDate dt);
231 /** create new event without having a date hint. Takes current date as 231 /** create new event without having a date hint. Takes current date as
232 default hint. */ 232 default hint. */
233 void newEvent(); 233 void newEvent();
234 void newFloatingEvent(); 234 void newFloatingEvent();
235 235
236 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/ 236 /** Create a read-only viewer dialog for the supplied incidence. It calls the correct showXXX method*/
237 void showIncidence(Incidence *); 237 void showIncidence(Incidence *);
238 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/ 238 /** Create an editor for the supplied incidence. It calls the correct editXXX method*/
239 void editIncidence(Incidence *); 239 void editIncidence(Incidence *);
240 /** Delete the supplied incidence. It calls the correct deleteXXX method*/ 240 /** Delete the supplied incidence. It calls the correct deleteXXX method*/
241 void deleteIncidence(Incidence *); 241 void deleteIncidence(Incidence *);
242 void cloneIncidence(Incidence *); 242 void cloneIncidence(Incidence *);
243 void cancelIncidence(Incidence *); 243 void cancelIncidence(Incidence *);
244 /** Create an editor for the supplied event. */ 244 /** Create an editor for the supplied event. */
245 void editEvent(Event *); 245 void editEvent(Event *);
246 /** Delete the supplied event. */ 246 /** Delete the supplied event. */
247 void deleteEvent(Event *); 247 void deleteEvent(Event *);
248 /** Delete the event with the given unique ID. Returns false, if event wasn't 248 /** Delete the event with the given unique ID. Returns false, if event wasn't
249 found. */ 249 found. */
250 bool deleteEvent(const QString &uid); 250 bool deleteEvent(const QString &uid);
251 /** Create a read-only viewer dialog for the supplied event. */ 251 /** Create a read-only viewer dialog for the supplied event. */
252 void showEvent(Event *); 252 void showEvent(Event *);
253 253
254 void editJournal(Journal *); 254 void editJournal(Journal *);
255 void showJournal(Journal *); 255 void showJournal(Journal *);
256 void deleteJournal(Journal *); 256 void deleteJournal(Journal *);
257 /** Create an editor dialog for a todo */ 257 /** Create an editor dialog for a todo */
258 void editTodo(Todo *); 258 void editTodo(Todo *);
259 /** Create a read-only viewer dialog for the supplied todo */ 259 /** Create a read-only viewer dialog for the supplied todo */
260 void showTodo(Todo *); 260 void showTodo(Todo *);
261 /** create new todo */ 261 /** create new todo */
262 void newTodo(); 262 void newTodo();
263 /** create new todo with a parent todo */ 263 /** create new todo with a parent todo */
264 void newSubTodo(); 264 void newSubTodo();
265 /** create new todo with a parent todo */ 265 /** create new todo with a parent todo */
266 void newSubTodo(Todo *); 266 void newSubTodo(Todo *);
267 /** Delete todo */ 267 /** Delete todo */
268 void deleteTodo(Todo *); 268 void deleteTodo(Todo *);
269 269
270 270
271 /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is 271 /** Check if clipboard contains vCalendar event. The signal pasteEnabled() is
272 * emitted as result. */ 272 * emitted as result. */
273 void checkClipboard(); 273 void checkClipboard();
274 274
275 /** using the KConfig associated with the kapp variable, read in the 275 /** using the KConfig associated with the kapp variable, read in the
276 * settings from the config file. 276 * settings from the config file.
277 */ 277 */
278 void readSettings(); 278 void readSettings();
279 279
280 /** write current state to config file. */ 280 /** write current state to config file. */
281 void writeSettings(); 281 void writeSettings();
282 282
283 /** read settings for calendar filters */ 283 /** read settings for calendar filters */
284 void readFilterSettings(KConfig *config); 284 void readFilterSettings(KConfig *config);
285 285
286 /** write settings for calendar filters */ 286 /** write settings for calendar filters */
287 void writeFilterSettings(KConfig *config); 287 void writeFilterSettings(KConfig *config);
288 288
289 /** passes on the message that an event has changed to the currently 289 /** passes on the message that an event has changed to the currently
290 * activated view so that it can make appropriate display changes. */ 290 * activated view so that it can make appropriate display changes. */
291 void changeEventDisplay(Event *, int); 291 void changeEventDisplay(Event *, int);
292 void changeIncidenceDisplay(Incidence *, int); 292 void changeIncidenceDisplay(Incidence *, int);
293 void changeTodoDisplay(Todo *, int); 293 void changeTodoDisplay(Todo *, int);
294 294
295 void eventAdded(Event *); 295 void eventAdded(Event *);
296 void eventChanged(Event *); 296 void eventChanged(Event *);
297 void eventToBeDeleted(Event *); 297 void eventToBeDeleted(Event *);
298 void eventDeleted(); 298 void eventDeleted();
299 299
300 void todoAdded(Todo *); 300 void todoAdded(Todo *);
301 void todoChanged(Todo *); 301 void todoChanged(Todo *);
302 void todoToBeDeleted(Todo *); 302 void todoToBeDeleted(Todo *);
303 void todoDeleted(); 303 void todoDeleted();
304 304
305 void updateView(const QDate &start, const QDate &end); 305 void updateView(const QDate &start, const QDate &end);
306 void updateView(); 306 void updateView();
307 307
308 /** Full update of visible todo views */ 308 /** Full update of visible todo views */
309 void updateTodoViews(); 309 void updateTodoViews();
310 310
311 void updateUnmanagedViews(); 311 void updateUnmanagedViews();
312 312
313 /** cut the current appointment to the clipboard */ 313 /** cut the current appointment to the clipboard */
314 void edit_cut(); 314 void edit_cut();
315 315
316 /** copy the current appointment(s) to the clipboard */ 316 /** copy the current appointment(s) to the clipboard */
317 void edit_copy(); 317 void edit_copy();
318 318
319 /** paste the current vobject(s) in the clipboard buffer into calendar */ 319 /** paste the current vobject(s) in the clipboard buffer into calendar */
320 void edit_paste(); 320 void edit_paste();
321 321
322 /** edit viewing and configuration options. */ 322 /** edit viewing and configuration options. */
323 void edit_options(); 323 void edit_options();
324 /** 324 /**
325 Functions for printing, previewing a print, and setting up printing 325 Functions for printing, previewing a print, and setting up printing
326 parameters. 326 parameters.
327 */ 327 */
328 void print(); 328 void print();
329 void printSetup(); 329 void printSetup();
330 void printPreview(); 330 void printPreview();
331 331
332 /** Export as iCalendar file */ 332 /** Export as iCalendar file */
333 void exportICalendar(); 333 void exportICalendar();
334 334
335 /** Export as vCalendar file */ 335 /** Export as vCalendar file */
336 bool exportVCalendar( QString fn); 336 bool exportVCalendar( QString fn);
337 337
338 /** pop up a dialog to show an existing appointment. */ 338 /** pop up a dialog to show an existing appointment. */
339 void appointment_show(); 339 void appointment_show();
340 /** 340 /**
341 * pop up an Appointment Dialog to edit an existing appointment.Get 341 * pop up an Appointment Dialog to edit an existing appointment.Get
342 * information on the appointment from the list of unique IDs that is 342 * information on the appointment from the list of unique IDs that is
343 * currently in the View, called currIds. 343 * currently in the View, called currIds.
344 */ 344 */
345 void appointment_edit(); 345 void appointment_edit();
346 /** 346 /**
347 * pop up dialog confirming deletion of currently selected event in the 347 * pop up dialog confirming deletion of currently selected event in the
348 * View. 348 * View.
349 */ 349 */
350 void appointment_delete(); 350 void appointment_delete();
351 351
352 /** mails the currently selected event to a particular user as a vCalendar 352 /** mails the currently selected event to a particular user as a vCalendar
353 attachment. */ 353 attachment. */
354 void action_mail(); 354 void action_mail();
355 355
356 /* frees a subtodo from it's relation */ 356 /* frees a subtodo from it's relation */
357 void todo_unsub( Todo * ); 357 void todo_unsub( Todo * );
358 void todo_resub( Todo * parent, Todo * sub ); 358 void todo_resub( Todo * parent, Todo * sub );
359 359
360 /** Take ownership of selected event. */ 360 /** Take ownership of selected event. */
361 void takeOverEvent(); 361 void takeOverEvent();
362 362
363 /** Take ownership of all events in calendar. */ 363 /** Take ownership of all events in calendar. */
364 void takeOverCalendar(); 364 void takeOverCalendar();
365 365
366 /** query whether or not the calendar is "dirty". */ 366 /** query whether or not the calendar is "dirty". */
367 bool isModified(); 367 bool isModified();
368 /** set the state of calendar. Modified means "dirty", i.e. needing a save. */ 368 /** set the state of calendar. Modified means "dirty", i.e. needing a save. */
369 void setModified(bool modified=true); 369 void setModified(bool modified=true);
370 370
371 /** query if the calendar is read-only. */ 371 /** query if the calendar is read-only. */
372 bool isReadOnly(); 372 bool isReadOnly();
373 /** set state of calendar to read-only */ 373 /** set state of calendar to read-only */
374 void setReadOnly(bool readOnly=true); 374 void setReadOnly(bool readOnly=true);
375 375
376 void eventUpdated(Incidence *); 376 void eventUpdated(Incidence *);
377 377
378 /* iTIP scheduling actions */ 378 /* iTIP scheduling actions */
379 void schedule_publish(Incidence *incidence = 0); 379 void schedule_publish(Incidence *incidence = 0);
380 void schedule_request(Incidence *incidence = 0); 380 void schedule_request(Incidence *incidence = 0);
381 void schedule_refresh(Incidence *incidence = 0); 381 void schedule_refresh(Incidence *incidence = 0);
382 void schedule_cancel(Incidence *incidence = 0); 382 void schedule_cancel(Incidence *incidence = 0);
383 void schedule_add(Incidence *incidence = 0); 383 void schedule_add(Incidence *incidence = 0);
384 void schedule_reply(Incidence *incidence = 0); 384 void schedule_reply(Incidence *incidence = 0);
385 void schedule_counter(Incidence *incidence = 0); 385 void schedule_counter(Incidence *incidence = 0);
386 void schedule_declinecounter(Incidence *incidence = 0); 386 void schedule_declinecounter(Incidence *incidence = 0);
387 void schedule_publish_freebusy(int daysToPublish = 30); 387 void schedule_publish_freebusy(int daysToPublish = 30);
388 388
389 void openAddressbook(); 389 void openAddressbook();
390 390
391 void editFilters(); 391 void editFilters();
392 void toggleFilerEnabled(); 392 void toggleFilerEnabled();
393 QPtrList<CalFilter> filters(); 393 QPtrList<CalFilter> filters();
394 void toggleFilter(); 394 void toggleFilter();
395 void showFilter(bool visible); 395 void showFilter(bool visible);
396 void updateFilter(); 396 void updateFilter();
397 void filterEdited(); 397 void filterEdited();
398 void selectFilter( int ); 398 void selectFilter( int );
399 KOFilterView *filterView(); 399 KOFilterView *filterView();
400 400
401 void showIntro(); 401 void showIntro();
402 402
403 /** Move the curdatepient view date to today */ 403 /** Move the curdatepient view date to today */
404 void goToday(); 404 void goToday();
405 405
406 /** Move to the next date(s) in the current view */ 406 /** Move to the next date(s) in the current view */
407 void goNext(); 407 void goNext();
408 408
409 /** Move to the previous date(s) in the current view */ 409 /** Move to the previous date(s) in the current view */
410 void goPrevious(); 410 void goPrevious();
411 /** Move to the next date(s) in the current view */ 411 /** Move to the next date(s) in the current view */
412 void goNextMonth(); 412 void goNextMonth();
413 413
414 /** Move to the previous date(s) in the current view */ 414 /** Move to the previous date(s) in the current view */
415 void goPreviousMonth(); 415 void goPreviousMonth();
416 416
417 void toggleExpand(); 417 void toggleExpand();
418 void toggleDateNavigatorWidget(); 418 void toggleDateNavigatorWidget();
419 void toggleAllDaySize(); 419 void toggleAllDaySize();
420 void dialogClosing(Incidence *); 420 void dialogClosing(Incidence *);
421 421
422 /** Look for new messages in the inbox */ 422 /** Look for new messages in the inbox */
423 void lookForIncomingMessages(); 423 void lookForIncomingMessages();
424 /** Look for new messages in the outbox */ 424 /** Look for new messages in the outbox */
425 void lookForOutgoingMessages(); 425 void lookForOutgoingMessages();
426 426
427 void processMainViewSelection( Incidence * ); 427 void processMainViewSelection( Incidence * );
428 void processTodoListSelection( Incidence * ); 428 void processTodoListSelection( Incidence * );
429 429
430 void processIncidenceSelection( Incidence * ); 430 void processIncidenceSelection( Incidence * );
431 431
432 void purgeCompleted(); 432 void purgeCompleted();
433 bool removeCompletedSubTodos( Todo* ); 433 bool removeCompletedSubTodos( Todo* );
434 void slotCalendarChanged(); 434 void slotCalendarChanged();
435 bool importBday(); 435 bool importBday();
436 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday ); 436 bool addAnniversary( QDate data, QString name, KCal::Attendee* a , bool birthday );
437 bool importQtopia( const QString &categoriesFile, 437 bool importQtopia( const QString &categoriesFile,
438 const QString &datebookFile, 438 const QString &datebookFile,
439 const QString &tasklistFile ); 439 const QString &tasklistFile );
440 void syncExternal( int mode ); 440 void syncExternal( int mode );
441 void slotSelectPickerDate( QDate ) ; 441 void slotSelectPickerDate( QDate ) ;
442 void showDatePicker( ) ; 442 void showDatePicker( ) ;
443 void moveIncidence(Incidence *) ; 443 void moveIncidence(Incidence *) ;
444 void beamIncidence(Incidence *) ; 444 void beamIncidence(Incidence *) ;
445 void beamCalendar() ; 445 void beamCalendar() ;
446 void beamFilteredCalendar() ; 446 void beamFilteredCalendar() ;
447 void beamIncidenceList(QPtrList<Incidence>) ; 447 void beamIncidenceList(QPtrList<Incidence>) ;
448 void manageCategories(); 448 void manageCategories();
449 int addCategories(); 449 int addCategories();
450 void removeCategories(); 450 void removeCategories();
451 void setSyncDevice( QString ); 451 void setSyncDevice( QString );
452 void setSyncName( QString ); 452 void setSyncName( QString );
453 void showDay( QDate ); 453 void showDay( QDate );
454 void undo_delete(); 454 void undo_delete();
455 protected slots: 455 protected slots:
456 void timerAlarm(); 456 void timerAlarm();
457 void suspendAlarm(); 457 void suspendAlarm();
458 void beamDone( Ir *ir ); 458 void beamDone( Ir *ir );
459 /** Select a view or adapt the current view to display the specified dates. */ 459 /** Select a view or adapt the current view to display the specified dates. */
460 void showDates( const KCal::DateList & ); 460 void showDates( const KCal::DateList & );
461 void selectWeekNum ( int ); 461 void selectWeekNum ( int );
462 462
463 public: 463 public:
464 // show a standard warning 464 // show a standard warning
465 // returns KMsgBox::yesNoCancel() 465 // returns KMsgBox::yesNoCancel()
466 int msgCalModified(); 466 int msgCalModified();
467 virtual bool sync(KSyncManager* manager, QString filename, int mode); 467 virtual bool sync(KSyncManager* manager, QString filename, int mode);
468 468
469 virtual bool syncExternal(KSyncManager* manager, QString resource); 469 virtual bool syncExternal(KSyncManager* manager, QString resource);
470 virtual void removeSyncInfo( QString syncProfile); 470 virtual void removeSyncInfo( QString syncProfile);
471 void setSyncManager(KSyncManager* manager); 471 void setSyncManager(KSyncManager* manager);
472 void setLoadedFileVersion(QDateTime); 472 void setLoadedFileVersion(QDateTime);
473 bool checkFileVersion(QString fn); 473 bool checkFileVersion(QString fn);
474 bool checkFileChanged(QString fn); 474 bool checkFileChanged(QString fn);
475 Event* getLastSyncEvent(); 475 Event* getLastSyncEvent();
476 /** Adapt navigation units correpsonding to step size of navigation of the 476 /** Adapt navigation units correpsonding to step size of navigation of the
477 * current view. 477 * current view.
478 */ 478 */
479 void adaptNavigationUnits(); 479 void adaptNavigationUnits();
480 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode ); 480 bool synchronizeCalendar( Calendar* local, Calendar* remote, int mode );
481 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false ); 481 int takeEvent( Incidence* local, Incidence* remote, int mode, bool full = false );
482 //Attendee* getYourAttendee(Event *event); 482 //Attendee* getYourAttendee(Event *event);
483 void setBlockShowDates( bool b ) { mBlockShowDates = b ;} 483 void setBlockShowDates( bool b ) { mBlockShowDates = b ;}
484 protected: 484 protected:
485 void schedule(Scheduler::Method, Incidence *incidence = 0); 485 void schedule(Scheduler::Method, Incidence *incidence = 0);
486 486
487 // returns KMsgBox::OKCandel() 487 // returns KMsgBox::OKCandel()
488 int msgItemDelete(); 488 int msgItemDelete(const QString name);
489 void showEventEditor(); 489 void showEventEditor();
490 void showTodoEditor(); 490 void showTodoEditor();
491 void writeLocale(); 491 void writeLocale();
492 Todo *selectedTodo(); 492 Todo *selectedTodo();
493 493
494 private: 494 private:
495 bool mBlockShowDates; 495 bool mBlockShowDates;
496 KSyncManager* mSyncManager; 496 KSyncManager* mSyncManager;
497 AlarmDialog * mAlarmDialog; 497 AlarmDialog * mAlarmDialog;
498 QString mAlarmNotification; 498 QString mAlarmNotification;
499 QString mSuspendAlarmNotification; 499 QString mSuspendAlarmNotification;
500 QTimer* mSuspendTimer; 500 QTimer* mSuspendTimer;
501 QTimer* mAlarmTimer; 501 QTimer* mAlarmTimer;
502 QTimer* mRecheckAlarmTimer; 502 QTimer* mRecheckAlarmTimer;
503 void computeAlarm( QString ); 503 void computeAlarm( QString );
504 void startAlarm( QString, QString ); 504 void startAlarm( QString, QString );
505 void setSyncEventsReadOnly(); 505 void setSyncEventsReadOnly();
506 506
507 QDateTime loadedFileVersion; 507 QDateTime loadedFileVersion;
508 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete ); 508 void checkExternSyncEvent( QPtrList<Event> lastSync , Incidence* toDelete );
509 void checkExternalId( Incidence * inc ); 509 void checkExternalId( Incidence * inc );
510 int mGlobalSyncMode; 510 int mGlobalSyncMode;
511 QString mCurrentSyncDevice; 511 QString mCurrentSyncDevice;
512 QString mCurrentSyncName; 512 QString mCurrentSyncName;
513 KOBeamPrefs* beamDialog; 513 KOBeamPrefs* beamDialog;
514 void init(); 514 void init();
515 int mDatePickerMode; 515 int mDatePickerMode;
516 bool mFlagEditDescription; 516 bool mFlagEditDescription;
517 QDateTime mLastCalendarSync; 517 QDateTime mLastCalendarSync;
518 void createPrinter(); 518 void createPrinter();
519 519
520 void calendarModified( bool, Calendar * ); 520 void calendarModified( bool, Calendar * );
521 521
522 CalPrinter *mCalPrinter; 522 CalPrinter *mCalPrinter;
523 523
524 QSplitter *mPanner; 524 QSplitter *mPanner;
525 QSplitter *mLeftSplitter; 525 QSplitter *mLeftSplitter;
526 QWidget *mLeftFrame; 526 QWidget *mLeftFrame;
527 QWidgetStack *mRightFrame; 527 QWidgetStack *mRightFrame;
528 528
529 KDatePicker* mDatePicker; 529 KDatePicker* mDatePicker;
530 QVBox* mDateFrame; 530 QVBox* mDateFrame;
531 NavigatorBar *mNavigatorBar; 531 NavigatorBar *mNavigatorBar;
532 532
533 KDateNavigator *mDateNavigator; // widget showing small month view. 533 KDateNavigator *mDateNavigator; // widget showing small month view.
534 534
535 KOFilterView *mFilterView; 535 KOFilterView *mFilterView;
536 536
537 ResourceView *mResourceView; 537 ResourceView *mResourceView;
538 538
539 // calendar object for this viewing instance 539 // calendar object for this viewing instance
540 Calendar *mCalendar; 540 Calendar *mCalendar;
541 541
542 CalendarResourceManager *mResourceManager; 542 CalendarResourceManager *mResourceManager;
543 543
544 FileStorage *mStorage; 544 FileStorage *mStorage;
545 545
546 DateNavigator *mNavigator; 546 DateNavigator *mNavigator;
547 547
548 KOViewManager *mViewManager; 548 KOViewManager *mViewManager;
549 KODialogManager *mDialogManager; 549 KODialogManager *mDialogManager;
550 550
551 // Calendar filters 551 // Calendar filters
552 QPtrList<CalFilter> mFilters; 552 QPtrList<CalFilter> mFilters;
553 553
554 // various housekeeping variables. 554 // various housekeeping variables.
555 bool mModified; // flag indicating if calendar is modified 555 bool mModified; // flag indicating if calendar is modified
556 bool mReadOnly; // flag indicating if calendar is read-only 556 bool mReadOnly; // flag indicating if calendar is read-only
557 QDate mSaveSingleDate; 557 QDate mSaveSingleDate;
558 558
559 Incidence *mSelectedIncidence; 559 Incidence *mSelectedIncidence;
560 Incidence *mMoveIncidence; 560 Incidence *mMoveIncidence;
561 QDate mMoveIncidenceOldDate; 561 QDate mMoveIncidenceOldDate;
562 KOTodoView *mTodoList; 562 KOTodoView *mTodoList;
563 KOEventEditor * mEventEditor; 563 KOEventEditor * mEventEditor;
564 KOTodoEditor * mTodoEditor; 564 KOTodoEditor * mTodoEditor;
565 KOEventViewerDialog * mEventViewerDialog; 565 KOEventViewerDialog * mEventViewerDialog;
566 void keyPressEvent ( QKeyEvent *e) ; 566 void keyPressEvent ( QKeyEvent *e) ;
567 //QMap<Incidence*,KOIncidenceEditor*> mDialogList; 567 //QMap<Incidence*,KOIncidenceEditor*> mDialogList;
568}; 568};
569 569
570 570
571class CalendarViewVisitor : public Incidence::Visitor 571class CalendarViewVisitor : public Incidence::Visitor
572{ 572{
573 public: 573 public:
574 CalendarViewVisitor() : mView( 0 ) {} 574 CalendarViewVisitor() : mView( 0 ) {}
575 575
576 bool act( Incidence *incidence, CalendarView *view ) 576 bool act( Incidence *incidence, CalendarView *view )
577 { 577 {
578 mView = view; 578 mView = view;
579 return incidence->accept( *this ); 579 return incidence->accept( *this );
580 } 580 }
581 581
582 protected: 582 protected:
583 CalendarView *mView; 583 CalendarView *mView;
584}; 584};
585 585
586class ShowIncidenceVisitor : public CalendarViewVisitor 586class ShowIncidenceVisitor : public CalendarViewVisitor
587{ 587{
588 protected: 588 protected:
589 bool visit( Event *event ) { mView->showEvent( event ); return true; } 589 bool visit( Event *event ) { mView->showEvent( event ); return true; }
590 bool visit( Todo *todo ) { mView->showTodo( todo ); return true; } 590 bool visit( Todo *todo ) { mView->showTodo( todo ); return true; }
591 bool visit( Journal * j ) { mView->showJournal( j );return true; } 591 bool visit( Journal * j ) { mView->showJournal( j );return true; }
592}; 592};
593 593
594class EditIncidenceVisitor : public CalendarViewVisitor 594class EditIncidenceVisitor : public CalendarViewVisitor
595{ 595{
596 protected: 596 protected:
597 bool visit( Event *event ) { mView->editEvent( event ); return true; } 597 bool visit( Event *event ) { mView->editEvent( event ); return true; }
598 bool visit( Todo *todo ) { mView->editTodo( todo ); return true; } 598 bool visit( Todo *todo ) { mView->editTodo( todo ); return true; }
599 bool visit( Journal *j ) { mView->editJournal( j); return true; } 599 bool visit( Journal *j ) { mView->editJournal( j); return true; }
600}; 600};
601 601
602class DeleteIncidenceVisitor : public CalendarViewVisitor 602class DeleteIncidenceVisitor : public CalendarViewVisitor
603{ 603{
604 protected: 604 protected:
605 bool visit( Event *event ) { mView->deleteEvent( event ); return true; } 605 bool visit( Event *event ) { mView->deleteEvent( event ); return true; }
606 bool visit( Todo *todo ) { mView->deleteTodo( todo ); return true; } 606 bool visit( Todo *todo ) { mView->deleteTodo( todo ); return true; }
607 bool visit( Journal * j) {mView->deleteJournal( j ); return true; } 607 bool visit( Journal * j) {mView->deleteJournal( j ); return true; }
608}; 608};
609 609
610#endif 610#endif
diff --git a/korganizer/koeditorgeneral.cpp b/korganizer/koeditorgeneral.cpp
index 94e1f4c..b4fe965 100644
--- a/korganizer/koeditorgeneral.cpp
+++ b/korganizer/koeditorgeneral.cpp
@@ -1,504 +1,518 @@
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 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#include <qwidget.h> 24#include <qwidget.h>
25#include <qtooltip.h> 25#include <qtooltip.h>
26#include <qlayout.h> 26#include <qlayout.h>
27#include <qvbox.h> 27#include <qvbox.h>
28#include <qbuttongroup.h> 28#include <qbuttongroup.h>
29#include <qvgroupbox.h> 29#include <qvgroupbox.h>
30#include <qwidgetstack.h> 30#include <qwidgetstack.h>
31#include <qdatetime.h> 31#include <qdatetime.h>
32#include <qfile.h> 32#include <qfile.h>
33 33
34 34
35#include <kglobal.h> 35#include <kglobal.h>
36#include <kdebug.h> 36#include <kdebug.h>
37#include <klocale.h> 37#include <klocale.h>
38#include <kiconloader.h> 38#include <kiconloader.h>
39#include <kmessagebox.h> 39#include <kmessagebox.h>
40#include <kfiledialog.h> 40#include <kfiledialog.h>
41#include <kstandarddirs.h> 41#include <kstandarddirs.h>
42 42
43#include <libkcal/todo.h> 43#include <libkcal/todo.h>
44#include <libkcal/event.h> 44#include <libkcal/event.h>
45#include <libkdepim/categoryselectdialog.h> 45#include <libkdepim/categoryselectdialog.h>
46#include <libkdepim/kdateedit.h> 46#include <libkdepim/kdateedit.h>
47 47
48#include "koprefs.h" 48#include "koprefs.h"
49#include "koglobals.h" 49#include "koglobals.h"
50 50
51#include "koeditorgeneral.h" 51#include "koeditorgeneral.h"
52#include "kolocationbox.h" 52#include "kolocationbox.h"
53#ifndef DESKTOP_VERSION 53#ifndef DESKTOP_VERSION
54#include <qpe/qpeapplication.h> 54#include <qpe/qpeapplication.h>
55#else 55#else
56#include <qapplication.h> 56#include <qapplication.h>
57#endif 57#endif
58 58
59KOEditorGeneral::KOEditorGeneral(QObject* parent, const char* name) : 59KOEditorGeneral::KOEditorGeneral(QObject* parent, const char* name) :
60 QObject( parent, name) 60 QObject( parent, name)
61{ 61{
62} 62}
63 63
64KOEditorGeneral::~KOEditorGeneral() 64KOEditorGeneral::~KOEditorGeneral()
65{ 65{
66} 66}
67 67
68void KOEditorGeneral::initHeader(QWidget *parent,QBoxLayout *topLayout) 68void KOEditorGeneral::initHeader(QWidget *parent,QBoxLayout *topLayout)
69{ 69{
70 QGridLayout *headerLayout = new QGridLayout(topLayout); 70 QGridLayout *headerLayout = new QGridLayout(topLayout);
71 71
72#if 0 72#if 0
73 mOwnerLabel = new QLabel(i18n("Owner:"),parent); 73 mOwnerLabel = new QLabel(i18n("Owner:"),parent);
74 headerLayout->addMultiCellWidget(mOwnerLabel,0,0,0,1); 74 headerLayout->addMultiCellWidget(mOwnerLabel,0,0,0,1);
75#endif 75#endif
76 76
77 QLabel *summaryLabel = new QLabel(i18n("Summary:"),parent); 77 QLabel *summaryLabel = new QLabel(i18n("Summary:"),parent);
78 headerLayout->addWidget(summaryLabel,1,0); 78 headerLayout->addWidget(summaryLabel,1,0);
79 79
80 mSummaryEdit = new KOLocationBox(TRUE,parent, 10); 80 mSummaryEdit = new KOLocationBox(TRUE,parent, 10);
81 mSummaryEdit->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::MinimumExpanding ,FALSE) ); 81 mSummaryEdit->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::MinimumExpanding ,FALSE) );
82 //mSummaryEdit->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5 ,(QSizePolicy::SizeType)3 ,FALSE) ); 82 //mSummaryEdit->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5 ,(QSizePolicy::SizeType)3 ,FALSE) );
83 //qDebug("h %d %d ", summaryLabel->sizeHint().height(),mSummaryEdit->sizeHint().height() ); 83 //qDebug("h %d %d ", summaryLabel->sizeHint().height(),mSummaryEdit->sizeHint().height() );
84 int hei = (summaryLabel->sizeHint().height() + mSummaryEdit->sizeHint().height())/2; 84 int hei = (summaryLabel->sizeHint().height() + mSummaryEdit->sizeHint().height())/2;
85 if ( QApplication::desktop()->width() > 320 ) 85 if ( QApplication::desktop()->width() > 320 )
86 mSummaryEdit->setMaximumHeight( hei +6 ); 86 mSummaryEdit->setMaximumHeight( hei +6 );
87 //qDebug("%d %d %d %d %d %d ", QSizePolicy::Fixed , QSizePolicy::Minimum , QSizePolicy:: Maximum , QSizePolicy:: Preferred , QSizePolicy:: MinimumExpanding , QSizePolicy::Expanding ); 87 //qDebug("%d %d %d %d %d %d ", QSizePolicy::Fixed , QSizePolicy::Minimum , QSizePolicy:: Maximum , QSizePolicy:: Preferred , QSizePolicy:: MinimumExpanding , QSizePolicy::Expanding );
88 // SizeType { Fixed = 0, Minimum = MayGrow, Maximum = MayShrink, Preferred = MayGrow|MayShrink, MinimumExpanding = Minimum|ExpMask, Expanding = MinimumExpanding|MayShrink } 88 // SizeType { Fixed = 0, Minimum = MayGrow, Maximum = MayShrink, Preferred = MayGrow|MayShrink, MinimumExpanding = Minimum|ExpMask, Expanding = MinimumExpanding|MayShrink }
89 // mSummaryEdit = new QLineEdit(parent); 89 // mSummaryEdit = new QLineEdit(parent);
90 headerLayout->addWidget(mSummaryEdit,1,1); 90 headerLayout->addWidget(mSummaryEdit,1,1);
91 connect ( mSummaryEdit->lineEdit(), SIGNAL ( returnPressed() ), this, SIGNAL (allAccepted () ) ); 91 connect ( mSummaryEdit->lineEdit(), SIGNAL ( returnPressed() ), this, SIGNAL (allAccepted () ) );
92 92
93 QLabel *locationLabel = new QLabel(i18n("Location:"),parent); 93 QLabel *locationLabel = new QLabel(i18n("Location:"),parent);
94 headerLayout->addWidget(locationLabel,2,0); 94 headerLayout->addWidget(locationLabel,2,0);
95 95
96 mLocationEdit = new KOLocationBox(TRUE,parent,10); 96 mLocationEdit = new KOLocationBox(TRUE,parent,10);
97 mLocationEdit->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::MinimumExpanding ,FALSE) ); 97 mLocationEdit->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::MinimumExpanding ,FALSE) );
98 if ( QApplication::desktop()->width() > 320 ) 98 if ( QApplication::desktop()->width() > 320 )
99 mLocationEdit->setMaximumHeight( hei + 6); 99 mLocationEdit->setMaximumHeight( hei + 6);
100 100
101 // mLocationEdit = new QLineEdit(parent); 101 // mLocationEdit = new QLineEdit(parent);
102 connect ( mLocationEdit->lineEdit(), SIGNAL ( returnPressed() ), this, SIGNAL (allAccepted () ) ); 102 connect ( mLocationEdit->lineEdit(), SIGNAL ( returnPressed() ), this, SIGNAL (allAccepted () ) );
103 headerLayout->addWidget(mLocationEdit,2,1); 103 headerLayout->addWidget(mLocationEdit,2,1);
104 headerLayout->setColStretch( 1, 10); 104 headerLayout->setColStretch( 1, 10);
105} 105}
106void KOEditorGeneral::setFocusOn( int i ) 106void KOEditorGeneral::setFocusOn( int i )
107{ 107{
108 qApp->processEvents(); 108 qApp->processEvents();
109 if ( i == 1 ) { 109 if ( i == 1 ) {
110 mDescriptionEdit->setFocus(); 110 mDescriptionEdit->setFocus();
111 mDescriptionEdit->setCursorPosition( mDescriptionEdit->numLines (), 333); 111 mDescriptionEdit->setCursorPosition( mDescriptionEdit->numLines (), 333);
112 } 112 }
113 if ( i == 2 ) { 113 if ( i == 2 ) {
114 mSummaryEdit->setFocus(); 114 mSummaryEdit->setFocus();
115 } 115 }
116 116
117} 117}
118void KOEditorGeneral::editCategories() 118void KOEditorGeneral::editCategories()
119{ 119{
120 // qDebug("KOEditorGeneral::editCategories() "); 120 // qDebug("KOEditorGeneral::editCategories() ");
121 KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 ); 121 KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 );
122 connect(csd,SIGNAL(categoriesSelected(const QString &)), this ,SLOT(setCategories(const QString &))); 122 connect(csd,SIGNAL(categoriesSelected(const QString &)), this ,SLOT(setCategories(const QString &)));
123 //KOGlobals::fitDialogToScreen( csd ); 123 //KOGlobals::fitDialogToScreen( csd );
124 csd->setSelected( QStringList::split (",", mCategoriesLabel->text()) ); 124 csd->setSelected( QStringList::split (",", mCategoriesLabel->text()) );
125 csd->exec(); 125 csd->exec();
126 delete csd; 126 delete csd;
127} 127}
128void KOEditorGeneral::initCategories(QWidget *parent, QBoxLayout *topLayout) 128void KOEditorGeneral::initCategories(QWidget *parent, QBoxLayout *topLayout)
129{ 129{
130 QBoxLayout *categoriesLayout = new QHBoxLayout( topLayout ); 130 QBoxLayout *categoriesLayout = new QHBoxLayout( topLayout );
131 131
132 mCategoriesButton = new QPushButton(parent); 132 mCategoriesButton = new QPushButton(parent);
133 mCategoriesButton->setText(i18n("Categories...")); 133 mCategoriesButton->setText(i18n("Categories..."));
134 connect(mCategoriesButton,SIGNAL(clicked()),this, SLOT(editCategories() )); 134 connect(mCategoriesButton,SIGNAL(clicked()),this, SLOT(editCategories() ));
135 categoriesLayout->addWidget(mCategoriesButton); 135 categoriesLayout->addWidget(mCategoriesButton);
136 136
137 mCategoriesLabel = new QLabel(parent); 137 mCategoriesLabel = new QLabel(parent);
138 mCategoriesLabel->setFrameStyle(QFrame::Panel|QFrame::Sunken); 138 mCategoriesLabel->setFrameStyle(QFrame::Panel|QFrame::Sunken);
139 categoriesLayout->addWidget(mCategoriesLabel,1); 139 categoriesLayout->addWidget(mCategoriesLabel,1);
140} 140}
141 141
142void KOEditorGeneral::initSecrecy(QWidget *parent, QBoxLayout *topLayout) 142void KOEditorGeneral::initSecrecy(QWidget *parent, QBoxLayout *topLayout)
143{ 143{
144 QBoxLayout *secrecyLayout = new QHBoxLayout( topLayout ); 144 QBoxLayout *secrecyLayout = new QHBoxLayout( topLayout );
145 145
146 QLabel *secrecyLabel = new QLabel(i18n("Access:"),parent); 146 QLabel *secrecyLabel = new QLabel(i18n("Access:"),parent);
147 mCancelBox = new QCheckBox ( i18n("Cancelled"), parent); 147 mCancelBox = new QCheckBox ( i18n("Cancelled"), parent);
148 secrecyLayout->addWidget(mCancelBox); 148 secrecyLayout->addWidget(mCancelBox);
149 secrecyLayout->addWidget(secrecyLabel); 149 secrecyLayout->addWidget(secrecyLabel);
150 150
151 mSecrecyCombo = new QComboBox(parent); 151 mSecrecyCombo = new QComboBox(parent);
152 mSecrecyCombo->insertStringList(Incidence::secrecyList()); 152 mSecrecyCombo->insertStringList(Incidence::secrecyList());
153 secrecyLayout->addWidget(mSecrecyCombo); 153 secrecyLayout->addWidget(mSecrecyCombo);
154} 154}
155 155
156void KOEditorGeneral::initDescription(QWidget *parent,QBoxLayout *topLayout) 156void KOEditorGeneral::initDescription(QWidget *parent,QBoxLayout *topLayout)
157{ 157{
158 mDescriptionEdit = new KTextEdit(parent); 158 mDescriptionEdit = new KTextEdit(parent);
159 mDescriptionEdit->setFont(KOPrefs::instance()->mEditBoxFont ); 159 mDescriptionEdit->setFont(KOPrefs::instance()->mEditBoxFont );
160 mDescriptionEdit->append(""); 160 mDescriptionEdit->append("");
161 mDescriptionEdit->setReadOnly(false); 161 mDescriptionEdit->setReadOnly(false);
162 mDescriptionEdit->setOverwriteMode(false); 162 mDescriptionEdit->setOverwriteMode(false);
163 mDescriptionEdit->setWordWrap( KTextEdit::WidgetWidth ); 163 mDescriptionEdit->setWordWrap( KTextEdit::WidgetWidth );
164 topLayout->addWidget(mDescriptionEdit); 164 topLayout->addWidget(mDescriptionEdit);
165#ifndef DESKTOP_VERSION 165#ifndef DESKTOP_VERSION
166 QPEApplication::setStylusOperation( mDescriptionEdit, QPEApplication::RightOnHold ); 166 QPEApplication::setStylusOperation( mDescriptionEdit, QPEApplication::RightOnHold );
167#endif 167#endif
168 168
169} 169}
170 170
171void KOEditorGeneral::initAlarm(QWidget *parent,QBoxLayout *topLayout) 171void KOEditorGeneral::initAlarm(QWidget *parent,QBoxLayout *topLayout)
172{ 172{
173 QBoxLayout *alarmLayout = new QHBoxLayout(topLayout); 173 QBoxLayout *alarmLayout = new QHBoxLayout(topLayout);
174 174
175 //mAlarmBell = new QLabel(parent); 175 //mAlarmBell = new QLabel(parent);
176 //mAlarmBell->setPixmap(SmallIcon("bell")); 176 //mAlarmBell->setPixmap(SmallIcon("bell"));
177 //alarmLayout->addWidget(mAlarmBell); 177 //alarmLayout->addWidget(mAlarmBell);
178 if ( QApplication::desktop()->width() < 320 ) 178 if ( QApplication::desktop()->width() < 320 )
179 mAlarmButton = new QCheckBox(i18n("Rem."),parent); 179 mAlarmButton = new QCheckBox(i18n("Rem."),parent);
180 else 180 else
181 mAlarmButton = new QCheckBox(i18n("Reminder:"),parent); 181 mAlarmButton = new QCheckBox(i18n("Reminder:"),parent);
182 182
183 connect(mAlarmButton, SIGNAL(toggled(bool)), SLOT(enableAlarmEdit(bool))); 183 connect(mAlarmButton, SIGNAL(toggled(bool)), SLOT(enableAlarmEdit(bool)));
184 alarmLayout->addWidget(mAlarmButton); 184 alarmLayout->addWidget(mAlarmButton);
185 185
186 mAlarmTimeEdit = new QSpinBox ( 0, 9999, 1, parent, "mAlarmTimeEdit " ) ; 186 mAlarmTimeEdit = new QSpinBox ( 0, 9999, 1, parent, "mAlarmTimeEdit " ) ;
187 alarmLayout->addWidget(mAlarmTimeEdit); 187 alarmLayout->addWidget(mAlarmTimeEdit);
188 mAlarmIncrCombo = new QComboBox(false, parent); 188 mAlarmIncrCombo = new QComboBox(false, parent);
189 if ( QApplication::desktop()->width() < 320 ) { 189 if ( QApplication::desktop()->width() < 320 ) {
190 mAlarmIncrCombo->insertItem(i18n("min")); 190 mAlarmIncrCombo->insertItem(i18n("min"));
191 mAlarmIncrCombo->insertItem(i18n("hou")); 191 mAlarmIncrCombo->insertItem(i18n("hou"));
192 mAlarmIncrCombo->insertItem(i18n("day")); 192 mAlarmIncrCombo->insertItem(i18n("day"));
193 mAlarmTimeEdit->setMaximumWidth( mAlarmTimeEdit->sizeHint().width() ); 193 mAlarmTimeEdit->setMaximumWidth( mAlarmTimeEdit->sizeHint().width() );
194 mAlarmIncrCombo->setMaximumWidth( mAlarmIncrCombo->sizeHint().width() ); 194 mAlarmIncrCombo->setMaximumWidth( mAlarmIncrCombo->sizeHint().width() );
195 } else { 195 } else {
196 mAlarmIncrCombo->insertItem(i18n("minute(s)")); 196 mAlarmIncrCombo->insertItem(i18n("minute(s)"));
197 mAlarmIncrCombo->insertItem(i18n("hour(s)")); 197 mAlarmIncrCombo->insertItem(i18n("hour(s)"));
198 mAlarmIncrCombo->insertItem(i18n("day(s)")); 198 mAlarmIncrCombo->insertItem(i18n("day(s)"));
199 } 199 }
200 200
201 // mAlarmIncrCombo->setMinimumHeight(20); 201 // mAlarmIncrCombo->setMinimumHeight(20);
202 alarmLayout->addWidget(mAlarmIncrCombo); 202 alarmLayout->addWidget(mAlarmIncrCombo);
203 mAlarmSoundButton = new QPushButton(parent); 203 mAlarmSoundButton = new QPushButton(parent);
204 mAlarmSoundButton->setPixmap(SmallIcon("playsound")); 204 mAlarmSoundButton->setPixmap(SmallIcon("playsound"));
205 mAlarmSoundButton->setToggleButton(true); 205 mAlarmSoundButton->setToggleButton(true);
206 QToolTip::add(mAlarmSoundButton, i18n("No sound set")); 206 QToolTip::add(mAlarmSoundButton, i18n("No sound set"));
207 connect(mAlarmSoundButton, SIGNAL(clicked()), SLOT(pickAlarmSound())); 207 connect(mAlarmSoundButton, SIGNAL(clicked()), SLOT(pickAlarmSound()));
208 alarmLayout->addWidget(mAlarmSoundButton); 208 alarmLayout->addWidget(mAlarmSoundButton);
209 209
210 mAlarmProgramButton = new QPushButton(parent); 210 mAlarmProgramButton = new QPushButton(parent);
211 mAlarmProgramButton->setPixmap(SmallIcon("run")); 211 mAlarmProgramButton->setPixmap(SmallIcon("run"));
212 mAlarmProgramButton->setToggleButton(true); 212 mAlarmProgramButton->setToggleButton(true);
213 QToolTip::add(mAlarmProgramButton, i18n("No program set")); 213 QToolTip::add(mAlarmProgramButton, i18n("No program set"));
214 connect(mAlarmProgramButton, SIGNAL(clicked()), SLOT(pickAlarmProgram())); 214 connect(mAlarmProgramButton, SIGNAL(clicked()), SLOT(pickAlarmProgram()));
215 alarmLayout->addWidget(mAlarmProgramButton); 215 alarmLayout->addWidget(mAlarmProgramButton);
216 mAlarmSoundButton->setMaximumWidth( mAlarmSoundButton->sizeHint().width() + 4 ); 216 mAlarmSoundButton->setMaximumWidth( mAlarmSoundButton->sizeHint().width() + 4 );
217 mAlarmProgramButton->setMaximumWidth(mAlarmProgramButton->sizeHint().width() + 4 ); 217 mAlarmProgramButton->setMaximumWidth(mAlarmProgramButton->sizeHint().width() + 4 );
218 // if ( KOPrefs::instance()->mCompactDialogs ) { 218 // if ( KOPrefs::instance()->mCompactDialogs ) {
219 // mAlarmSoundButton->hide(); 219 // mAlarmSoundButton->hide();
220 // mAlarmProgramButton->hide(); 220 // mAlarmProgramButton->hide();
221 // } 221 // }
222} 222}
223 223
224void KOEditorGeneral::pickAlarmSound() 224void KOEditorGeneral::pickAlarmSound()
225{ 225{
226 226
227 //QString prefix = mAlarmSound; 227 //QString prefix = mAlarmSound;
228 if (!mAlarmSoundButton->isOn()) { 228 if (!mAlarmSoundButton->isOn()) {
229 //mAlarmSound = ""; 229 //mAlarmSound = "";
230 QToolTip::remove(mAlarmSoundButton); 230 QToolTip::remove(mAlarmSoundButton);
231 QToolTip::add(mAlarmSoundButton, i18n("No sound set")); 231 QToolTip::add(mAlarmSoundButton, i18n("No sound set"));
232 mAlarmProgramButton->setOn(true); 232 mAlarmProgramButton->setOn(true);
233 mAlarmSoundButton->setOn(false); 233 mAlarmSoundButton->setOn(false);
234 } else { 234 } else {
235 QString fileName(KFileDialog::getOpenFileName(mAlarmSound, 235 QString fileName(KFileDialog::getOpenFileName(mAlarmSound,
236 i18n("*.wav|Wav Files"), 0)); 236 i18n("*.wav|Wav Files"), 0));
237 if (!fileName.isEmpty()) { 237 if (!fileName.isEmpty()) {
238 mAlarmSound = fileName; 238 mAlarmSound = fileName;
239 QToolTip::remove(mAlarmSoundButton); 239 QToolTip::remove(mAlarmSoundButton);
240 QString dispStr = i18n("Playing '%1'").arg(fileName); 240 QString dispStr = i18n("Playing '%1'").arg(fileName);
241 QToolTip::add(mAlarmSoundButton, dispStr); 241 QToolTip::add(mAlarmSoundButton, dispStr);
242 mAlarmProgramButton->setOn(false); 242 mAlarmProgramButton->setOn(false);
243 mAlarmSoundButton->setOn(true); 243 mAlarmSoundButton->setOn(true);
244 } else { 244 } else {
245 mAlarmProgramButton->setOn(true); 245 mAlarmProgramButton->setOn(true);
246 mAlarmSoundButton->setOn(false); 246 mAlarmSoundButton->setOn(false);
247 247
248 } 248 }
249 } 249 }
250 250
251 if (mAlarmProgramButton->isOn()) 251 if (mAlarmProgramButton->isOn())
252 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + mAlarmProgram ); 252 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + mAlarmProgram );
253 if ( mAlarmSoundButton->isOn()) 253 if ( mAlarmSoundButton->isOn())
254 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Audio.Al.: ") + mAlarmSound ); 254 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Audio.Al.: ") + mAlarmSound );
255} 255}
256 256
257void KOEditorGeneral::pickAlarmProgram() 257void KOEditorGeneral::pickAlarmProgram()
258{ 258{
259 if (!mAlarmProgramButton->isOn()) { 259 if (!mAlarmProgramButton->isOn()) {
260 //mAlarmProgram = ""; 260 //mAlarmProgram = "";
261 QToolTip::remove(mAlarmProgramButton); 261 QToolTip::remove(mAlarmProgramButton);
262 QToolTip::add(mAlarmProgramButton, i18n("No program set")); 262 QToolTip::add(mAlarmProgramButton, i18n("No program set"));
263 mAlarmProgramButton->setOn(false); 263 mAlarmProgramButton->setOn(false);
264 mAlarmSoundButton->setOn(true); 264 mAlarmSoundButton->setOn(true);
265 } else { 265 } else {
266 QString fileName(KFileDialog::getOpenFileName(mAlarmProgram,i18n("Procedure Alarm.: ") , 0)); 266 QString fileName(KFileDialog::getOpenFileName(mAlarmProgram,i18n("Procedure Alarm.: ") , 0));
267 if (!fileName.isEmpty()) { 267 if (!fileName.isEmpty()) {
268 mAlarmProgram = fileName; 268 mAlarmProgram = fileName;
269 QToolTip::remove(mAlarmProgramButton); 269 QToolTip::remove(mAlarmProgramButton);
270 QString dispStr = i18n("Running '%1'").arg(fileName); 270 QString dispStr = i18n("Running '%1'").arg(fileName);
271 QToolTip::add(mAlarmProgramButton, dispStr); 271 QToolTip::add(mAlarmProgramButton, dispStr);
272 mAlarmSoundButton->setOn(false); 272 mAlarmSoundButton->setOn(false);
273 mAlarmProgramButton->setOn(true); 273 mAlarmProgramButton->setOn(true);
274 } else { 274 } else {
275 mAlarmProgramButton->setOn(false); 275 mAlarmProgramButton->setOn(false);
276 mAlarmSoundButton->setOn(true); 276 mAlarmSoundButton->setOn(true);
277 } 277 }
278 } 278 }
279 if (mAlarmProgramButton->isOn()) 279 if (mAlarmProgramButton->isOn())
280 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + mAlarmProgram ); 280 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + mAlarmProgram );
281 if ( mAlarmSoundButton->isOn()) 281 if ( mAlarmSoundButton->isOn())
282 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Sound.Al.: ") + mAlarmSound ); 282 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Sound.Al.: ") + mAlarmSound );
283} 283}
284 284
285 285
286QString KOEditorGeneral::getFittingPath( const QString s )
287{
288 int maxlen = 50;
289 if ( QApplication::desktop()->width() < 640 ) {
290 if ( QApplication::desktop()->width() < 320 )
291 maxlen = 22;
292 else
293 maxlen = 35;
294 }
295 if ( s.length() > maxlen ) {
296 return "..."+s.right(maxlen -3);
297 }
298 return s;
299}
286 300
287void KOEditorGeneral::enableAlarmEdit(bool enable) 301void KOEditorGeneral::enableAlarmEdit(bool enable)
288{ 302{
289 if ( enable ) { 303 if ( enable ) {
290 if (!mAlarmProgramButton->isOn() && !mAlarmSoundButton->isOn()) { 304 if (!mAlarmProgramButton->isOn() && !mAlarmSoundButton->isOn()) {
291 mAlarmSoundButton->setOn( true ); 305 mAlarmSoundButton->setOn( true );
292 if ( mAlarmSound.isEmpty() ) 306 if ( mAlarmSound.isEmpty() )
293 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile; 307 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile;
294 else { 308 else {
295 if ( ! QFile::exists( mAlarmSound ) ) 309 if ( ! QFile::exists( mAlarmSound ) )
296 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile; 310 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile;
297 } 311 }
298 } 312 }
299 if (mAlarmProgramButton->isOn()) 313 if (mAlarmProgramButton->isOn())
300 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + mAlarmProgram ); 314 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Proc.Al.: ") + getFittingPath(mAlarmProgram) );
301 if (!mAlarmSound.isEmpty() && mAlarmSoundButton->isOn()) 315 if (!mAlarmSound.isEmpty() && mAlarmSoundButton->isOn())
302 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Sound.Al.: ") + mAlarmSound ); 316 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Audio Al.: ") + getFittingPath(mAlarmSound) );
303 } 317 }
304 else { 318 else {
305 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Alarm disabled")); 319 ((QWidget*)parent())->topLevelWidget()->setCaption(i18n("Alarm disabled for this item"));
306 320
307 } 321 }
308 mAlarmTimeEdit->setEnabled(enable); 322 mAlarmTimeEdit->setEnabled(enable);
309 mAlarmSoundButton->setEnabled(enable); 323 mAlarmSoundButton->setEnabled(enable);
310 mAlarmProgramButton->setEnabled(enable); 324 mAlarmProgramButton->setEnabled(enable);
311 mAlarmIncrCombo->setEnabled(enable); 325 mAlarmIncrCombo->setEnabled(enable);
312} 326}
313 327
314void KOEditorGeneral::disableAlarmEdit(bool disable) 328void KOEditorGeneral::disableAlarmEdit(bool disable)
315{ 329{
316 enableAlarmEdit( !disable ); 330 enableAlarmEdit( !disable );
317} 331}
318 332
319void KOEditorGeneral::enableAlarm( bool enable ) 333void KOEditorGeneral::enableAlarm( bool enable )
320{ 334{
321 enableAlarmEdit( enable ); 335 enableAlarmEdit( enable );
322} 336}
323 337
324void KOEditorGeneral::alarmDisable(bool disable) 338void KOEditorGeneral::alarmDisable(bool disable)
325{ 339{
326 if (!disable) { 340 if (!disable) {
327 //mAlarmBell->setEnabled(true); 341 //mAlarmBell->setEnabled(true);
328 mAlarmButton->setEnabled(true); 342 mAlarmButton->setEnabled(true);
329 } else { 343 } else {
330 //mAlarmBell->setEnabled(false); 344 //mAlarmBell->setEnabled(false);
331 mAlarmButton->setEnabled(false); 345 mAlarmButton->setEnabled(false);
332 mAlarmButton->setChecked(false); 346 mAlarmButton->setChecked(false);
333 mAlarmTimeEdit->setEnabled(false); 347 mAlarmTimeEdit->setEnabled(false);
334 mAlarmSoundButton->setEnabled(false); 348 mAlarmSoundButton->setEnabled(false);
335 mAlarmProgramButton->setEnabled(false); 349 mAlarmProgramButton->setEnabled(false);
336 mAlarmIncrCombo->setEnabled(false); 350 mAlarmIncrCombo->setEnabled(false);
337 } 351 }
338} 352}
339 353
340void KOEditorGeneral::setCategories(const QString &str) 354void KOEditorGeneral::setCategories(const QString &str)
341{ 355{
342 mCategoriesLabel->setText(str); 356 mCategoriesLabel->setText(str);
343} 357}
344 358
345void KOEditorGeneral::setDefaults(bool allDay) 359void KOEditorGeneral::setDefaults(bool allDay)
346{ 360{
347#if 0 361#if 0
348 mOwnerLabel->setText(i18n("Owner: ") + KOPrefs::instance()->fullName()); 362 mOwnerLabel->setText(i18n("Owner: ") + KOPrefs::instance()->fullName());
349#endif 363#endif
350 364
351 enableAlarmEdit( !allDay ); 365 enableAlarmEdit( !allDay );
352 366
353 // TODO: Implement a KPrefsComboItem to solve this in a clean way. 367 // TODO: Implement a KPrefsComboItem to solve this in a clean way.
354 int alarmTime; 368 int alarmTime;
355 int a[] = { 1,5,10,15,30,60,180, 1440 }; 369 int a[] = { 1,5,10,15,30,60,180, 1440 };
356 int index = KOPrefs::instance()->mAlarmTime; 370 int index = KOPrefs::instance()->mAlarmTime;
357 if (index < 0 || index > 7) { 371 if (index < 0 || index > 7) {
358 alarmTime = 15; 372 alarmTime = 15;
359 } else { 373 } else {
360 alarmTime = a[index]; 374 alarmTime = a[index];
361 } 375 }
362 mAlarmButton ->setChecked( false ); 376 mAlarmButton ->setChecked( false );
363 mAlarmTimeEdit->setValue(alarmTime); 377 mAlarmTimeEdit->setValue(alarmTime);
364 mAlarmIncrCombo->setCurrentItem(0); 378 mAlarmIncrCombo->setCurrentItem(0);
365 enableAlarmEdit( false ); 379 enableAlarmEdit( false );
366 //alarmDisable (false); 380 //alarmDisable (false);
367 mSecrecyCombo->setCurrentItem(Incidence::SecrecyPublic); 381 mSecrecyCombo->setCurrentItem(Incidence::SecrecyPublic);
368 mCancelBox->setChecked( false ); 382 mCancelBox->setChecked( false );
369 mSummaryEdit->setEditText(""); 383 mSummaryEdit->setEditText("");
370 mLocationEdit->setEditText(""); 384 mLocationEdit->setEditText("");
371 mDescriptionEdit->setText(""); 385 mDescriptionEdit->setText("");
372 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile; 386 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile;
373 setCategories(""); 387 setCategories("");
374} 388}
375void KOEditorGeneral::setSecrecy( int num ) 389void KOEditorGeneral::setSecrecy( int num )
376{ 390{
377 mSecrecyCombo->setCurrentItem(num); 391 mSecrecyCombo->setCurrentItem(num);
378} 392}
379void KOEditorGeneral::readIncidence(Incidence *event) 393void KOEditorGeneral::readIncidence(Incidence *event)
380{ 394{
381 395
382 mAlarmIncrCombo->setCurrentItem(0); 396 mAlarmIncrCombo->setCurrentItem(0);
383 mSummaryEdit->setEditText(event->summary()); 397 mSummaryEdit->setEditText(event->summary());
384 mLocationEdit->setEditText(event->location()); 398 mLocationEdit->setEditText(event->location());
385 mDescriptionEdit->setText(event->description()); 399 mDescriptionEdit->setText(event->description());
386 400
387#if 0 401#if 0
388 // organizer information 402 // organizer information
389 mOwnerLabel->setText(i18n("Owner: ") + event->organizer()); 403 mOwnerLabel->setText(i18n("Owner: ") + event->organizer());
390#endif 404#endif
391 405
392 enableAlarmEdit( event->isAlarmEnabled() ); 406 enableAlarmEdit( event->isAlarmEnabled() );
393 //qDebug("KOEditorGeneral::readIncidence(Incidence *event) "); 407 //qDebug("KOEditorGeneral::readIncidence(Incidence *event) ");
394 if(!event->isAlarmEnabled()) { 408 if(!event->isAlarmEnabled()) {
395 // TODO: Implement a KPrefsComboItem to solve this in a clean way. 409 // TODO: Implement a KPrefsComboItem to solve this in a clean way.
396 int alarmTime; 410 int alarmTime;
397 int a[] = { 1,5,10,15,30,60,180, 1440 }; 411 int a[] = { 1,5,10,15,30,60,180, 1440 };
398 int index = KOPrefs::instance()->mAlarmTime; 412 int index = KOPrefs::instance()->mAlarmTime;
399 if (index < 0 || index > 7) { 413 if (index < 0 || index > 7) {
400 alarmTime = 15; 414 alarmTime = 15;
401 } else { 415 } else {
402 alarmTime = a[index]; 416 alarmTime = a[index];
403 } 417 }
404 mAlarmTimeEdit->setValue(alarmTime); 418 mAlarmTimeEdit->setValue(alarmTime);
405 } 419 }
406 mAlarmButton->setChecked( event->isAlarmEnabled() ); 420 mAlarmButton->setChecked( event->isAlarmEnabled() );
407 mSecrecyCombo->setCurrentItem(event->secrecy()); 421 mSecrecyCombo->setCurrentItem(event->secrecy());
408 mCancelBox->setChecked( event->cancelled() ); 422 mCancelBox->setChecked( event->cancelled() );
409 mAlarmProgramButton->setOn(false); 423 mAlarmProgramButton->setOn(false);
410 mAlarmSoundButton->setOn(false); 424 mAlarmSoundButton->setOn(false);
411 425
412 // set up alarm stuff 426 // set up alarm stuff
413 QPtrList<Alarm> alarms = event->alarms(); 427 QPtrList<Alarm> alarms = event->alarms();
414 Alarm* alarm; 428 Alarm* alarm;
415 mAlarmIncrCombo->setCurrentItem(0); 429 mAlarmIncrCombo->setCurrentItem(0);
416 for ( alarm = alarms.first(); alarm; alarm = alarms.next() ) { 430 for ( alarm = alarms.first(); alarm; alarm = alarms.next() ) {
417 int offset; 431 int offset;
418 if ( alarm->hasTime() ) { 432 if ( alarm->hasTime() ) {
419 QDateTime t = alarm->time(); 433 QDateTime t = alarm->time();
420 offset = event->dtStart().secsTo( t ); 434 offset = event->dtStart().secsTo( t );
421 } else { 435 } else {
422 offset = alarm->startOffset().asSeconds(); 436 offset = alarm->startOffset().asSeconds();
423 } 437 }
424 if ( offset != 0 ) { 438 if ( offset != 0 ) {
425 offset = offset / -60; // make minutes 439 offset = offset / -60; // make minutes
426 if (offset % 60 == 0) { // divides evenly into hours? 440 if (offset % 60 == 0) { // divides evenly into hours?
427 offset = offset / 60; 441 offset = offset / 60;
428 mAlarmIncrCombo->setCurrentItem(1); 442 mAlarmIncrCombo->setCurrentItem(1);
429 if (offset % 24 == 0) { // divides evenly into days? 443 if (offset % 24 == 0) { // divides evenly into days?
430 offset = offset / 24; 444 offset = offset / 24;
431 mAlarmIncrCombo->setCurrentItem(2); 445 mAlarmIncrCombo->setCurrentItem(2);
432 } 446 }
433 } 447 }
434 } 448 }
435 mAlarmTimeEdit->setValue( offset ); 449 mAlarmTimeEdit->setValue( offset );
436 if (alarm->type() == Alarm::Procedure) { 450 if (alarm->type() == Alarm::Procedure) {
437 451
438 mAlarmProgram = alarm->programFile(); 452 mAlarmProgram = alarm->programFile();
439 mAlarmProgramButton->setOn(true); 453 mAlarmProgramButton->setOn(true);
440 QString dispStr = i18n("Running '%1'").arg(mAlarmProgram); 454 QString dispStr = i18n("Running '%1'").arg(mAlarmProgram);
441 QToolTip::add(mAlarmProgramButton, dispStr); 455 QToolTip::add(mAlarmProgramButton, dispStr);
442 } 456 }
443 else if (alarm->type() == Alarm::Audio) { 457 else if (alarm->type() == Alarm::Audio) {
444 mAlarmSound = alarm->audioFile(); 458 mAlarmSound = alarm->audioFile();
445 if ( ! QFile::exists( mAlarmSound ) ) 459 if ( ! QFile::exists( mAlarmSound ) )
446 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile; 460 mAlarmSound = KOPrefs::instance()->mDefaultAlarmFile;
447 mAlarmSoundButton->setOn(true); 461 mAlarmSoundButton->setOn(true);
448 QString dispStr = i18n("Playing '%1'").arg(mAlarmSound); 462 QString dispStr = i18n("Playing '%1'").arg(mAlarmSound);
449 QToolTip::add(mAlarmSoundButton, dispStr); 463 QToolTip::add(mAlarmSoundButton, dispStr);
450 } 464 }
451 mAlarmButton->setChecked(alarm->enabled()); 465 mAlarmButton->setChecked(alarm->enabled());
452 enableAlarmEdit( alarm->enabled() ); 466 enableAlarmEdit( alarm->enabled() );
453 //qDebug("nableAlarmEdit( alarm->enabled() )********* "); 467 //qDebug("nableAlarmEdit( alarm->enabled() )********* ");
454 // TODO: Deal with multiple alarms 468 // TODO: Deal with multiple alarms
455 break; // For now, stop after the first alarm 469 break; // For now, stop after the first alarm
456 } 470 }
457 471
458 setCategories(event->categoriesStr()); 472 setCategories(event->categoriesStr());
459} 473}
460 474
461void KOEditorGeneral::writeIncidence(Incidence *event) 475void KOEditorGeneral::writeIncidence(Incidence *event)
462{ 476{
463 // kdDebug() << "KOEditorGeneral::writeEvent()" << endl; 477 // kdDebug() << "KOEditorGeneral::writeEvent()" << endl;
464 mLocationEdit->save(KOLocationBox::LOCATION); 478 mLocationEdit->save(KOLocationBox::LOCATION);
465 event->setSummary(mSummaryEdit->currentText()); 479 event->setSummary(mSummaryEdit->currentText());
466 event->setLocation(mLocationEdit->currentText()); 480 event->setLocation(mLocationEdit->currentText());
467 event->setDescription(mDescriptionEdit->text()); 481 event->setDescription(mDescriptionEdit->text());
468 event->setCategories(mCategoriesLabel->text()); 482 event->setCategories(mCategoriesLabel->text());
469 event->setSecrecy(mSecrecyCombo->currentItem()); 483 event->setSecrecy(mSecrecyCombo->currentItem());
470 event->setCancelled(mCancelBox->isChecked() );; 484 event->setCancelled(mCancelBox->isChecked() );;
471 // alarm stuff 485 // alarm stuff
472 if (mAlarmButton->isChecked()) { 486 if (mAlarmButton->isChecked()) {
473 if (event->alarms().count() == 0) 487 if (event->alarms().count() == 0)
474 event->newAlarm(); 488 event->newAlarm();
475 QPtrList<Alarm> alarms = event->alarms(); 489 QPtrList<Alarm> alarms = event->alarms();
476 Alarm *alarm; 490 Alarm *alarm;
477 for (alarm = alarms.first(); alarm; alarm = alarms.next() ) { 491 for (alarm = alarms.first(); alarm; alarm = alarms.next() ) {
478 alarm->setEnabled(true); 492 alarm->setEnabled(true);
479 int j = mAlarmTimeEdit->value()* -60; 493 int j = mAlarmTimeEdit->value()* -60;
480 if (mAlarmIncrCombo->currentItem() == 1) 494 if (mAlarmIncrCombo->currentItem() == 1)
481 j = j * 60; 495 j = j * 60;
482 else if (mAlarmIncrCombo->currentItem() == 2) 496 else if (mAlarmIncrCombo->currentItem() == 2)
483 j = j * (60 * 24); 497 j = j * (60 * 24);
484 alarm->setStartOffset( j ); 498 alarm->setStartOffset( j );
485 499
486 if (!mAlarmProgram.isEmpty() && mAlarmProgramButton->isOn()) { 500 if (!mAlarmProgram.isEmpty() && mAlarmProgramButton->isOn()) {
487 alarm->setProcedureAlarm(mAlarmProgram); 501 alarm->setProcedureAlarm(mAlarmProgram);
488 } 502 }
489 else if (!mAlarmSound.isEmpty() && mAlarmSoundButton->isOn()) 503 else if (!mAlarmSound.isEmpty() && mAlarmSoundButton->isOn())
490 alarm->setAudioAlarm(mAlarmSound); 504 alarm->setAudioAlarm(mAlarmSound);
491 else 505 else
492 alarm->setType(Alarm::Invalid); 506 alarm->setType(Alarm::Invalid);
493 //alarm->setAudioAlarm("default"); 507 //alarm->setAudioAlarm("default");
494 // TODO: Deal with multiple alarms 508 // TODO: Deal with multiple alarms
495 break; // For now, stop after the first alarm 509 break; // For now, stop after the first alarm
496 } 510 }
497 } else { 511 } else {
498 Alarm* alarm = event->alarms().first(); 512 Alarm* alarm = event->alarms().first();
499 if ( alarm ) { 513 if ( alarm ) {
500 alarm->setEnabled(false); 514 alarm->setEnabled(false);
501 alarm->setType(Alarm::Invalid); 515 alarm->setType(Alarm::Invalid);
502 } 516 }
503 } 517 }
504} 518}
diff --git a/korganizer/koeditorgeneral.h b/korganizer/koeditorgeneral.h
index c58335e..de8edaf 100644
--- a/korganizer/koeditorgeneral.h
+++ b/korganizer/koeditorgeneral.h
@@ -1,112 +1,113 @@
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 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23#ifndef KOEDITORGENERAL_H 23#ifndef KOEDITORGENERAL_H
24#define KOEDITORGENERAL_H 24#define KOEDITORGENERAL_H
25 25
26#include <qframe.h> 26#include <qframe.h>
27#include <qlabel.h> 27#include <qlabel.h>
28#include <qcheckbox.h> 28#include <qcheckbox.h>
29#include <qpushbutton.h> 29#include <qpushbutton.h>
30#include <qgroupbox.h> 30#include <qgroupbox.h>
31#include <qlineedit.h> 31#include <qlineedit.h>
32#include <qcombobox.h> 32#include <qcombobox.h>
33#include <qlistview.h> 33#include <qlistview.h>
34#include <qradiobutton.h> 34#include <qradiobutton.h>
35#include <qlayout.h> 35#include <qlayout.h>
36#include <qspinbox.h> 36#include <qspinbox.h>
37 37
38#include <ktextedit.h> 38#include <ktextedit.h>
39#include <krestrictedline.h> 39#include <krestrictedline.h>
40 40
41#include <libkcal/incidence.h> 41#include <libkcal/incidence.h>
42 42
43#include "ktimeedit.h" 43#include "ktimeedit.h"
44 44
45class KDateEdit; 45class KDateEdit;
46class KOLocationBox; 46class KOLocationBox;
47using namespace KCal; 47using namespace KCal;
48 48
49class KOEditorGeneral : public QObject 49class KOEditorGeneral : public QObject
50{ 50{
51 Q_OBJECT 51 Q_OBJECT
52 public: 52 public:
53 KOEditorGeneral (QObject* parent=0,const char* name=0); 53 KOEditorGeneral (QObject* parent=0,const char* name=0);
54 virtual ~KOEditorGeneral(); 54 virtual ~KOEditorGeneral();
55 void setFocusOn( int i ); 55 void setFocusOn( int i );
56 void initHeader(QWidget *,QBoxLayout *); 56 void initHeader(QWidget *,QBoxLayout *);
57 void initDescription(QWidget *,QBoxLayout *); 57 void initDescription(QWidget *,QBoxLayout *);
58 void initSecrecy(QWidget *,QBoxLayout *); 58 void initSecrecy(QWidget *,QBoxLayout *);
59 void initCategories(QWidget *,QBoxLayout *); 59 void initCategories(QWidget *,QBoxLayout *);
60 void initAlarm(QWidget *,QBoxLayout *); 60 void initAlarm(QWidget *,QBoxLayout *);
61 61
62 /** Set widgets to default values */ 62 /** Set widgets to default values */
63 void setDefaults(bool allDay); 63 void setDefaults(bool allDay);
64 /** Read event object and setup widgets accordingly */ 64 /** Read event object and setup widgets accordingly */
65 void readIncidence(Incidence *); 65 void readIncidence(Incidence *);
66 /** Write event settings to event object */ 66 /** Write event settings to event object */
67 void writeIncidence(Incidence *); 67 void writeIncidence(Incidence *);
68 68
69 /** Check if the input is valid. */ 69 /** Check if the input is valid. */
70 bool validateInput() { return true; } 70 bool validateInput() { return true; }
71 71
72 void enableAlarm( bool enable ); 72 void enableAlarm( bool enable );
73 void setSecrecy( int num ); 73 void setSecrecy( int num );
74 public slots: 74 public slots:
75 void setCategories(const QString &); 75 void setCategories(const QString &);
76 void editCategories(); 76 void editCategories();
77 77
78 protected slots: 78 protected slots:
79 void enableAlarmEdit( bool enable ); 79 void enableAlarmEdit( bool enable );
80 void disableAlarmEdit( bool disable ); 80 void disableAlarmEdit( bool disable );
81 void alarmDisable( bool disable ); 81 void alarmDisable( bool disable );
82 void pickAlarmSound(); 82 void pickAlarmSound();
83 void pickAlarmProgram(); 83 void pickAlarmProgram();
84 84
85 signals: 85 signals:
86 void openCategoryDialog(); 86 void openCategoryDialog();
87 void allAccepted(); 87 void allAccepted();
88 88
89 protected: 89 protected:
90 //QLineEdit *mSummaryEdit; 90 //QLineEdit *mSummaryEdit;
91 //QLineEdit *mLocationEdit; 91 //QLineEdit *mLocationEdit;
92 KOLocationBox *mSummaryEdit; 92 KOLocationBox *mSummaryEdit;
93 KOLocationBox *mLocationEdit; 93 KOLocationBox *mLocationEdit;
94 QLabel *mAlarmBell; 94 QLabel *mAlarmBell;
95 QCheckBox *mAlarmButton; 95 QCheckBox *mAlarmButton;
96 QSpinBox *mAlarmTimeEdit; 96 QSpinBox *mAlarmTimeEdit;
97 QPushButton *mAlarmSoundButton; 97 QPushButton *mAlarmSoundButton;
98 QPushButton *mAlarmProgramButton; 98 QPushButton *mAlarmProgramButton;
99 QComboBox *mAlarmIncrCombo; 99 QComboBox *mAlarmIncrCombo;
100 KTextEdit *mDescriptionEdit; 100 KTextEdit *mDescriptionEdit;
101 QLabel *mOwnerLabel; 101 QLabel *mOwnerLabel;
102 QComboBox *mSecrecyCombo; 102 QComboBox *mSecrecyCombo;
103 QCheckBox *mCancelBox; 103 QCheckBox *mCancelBox;
104 QPushButton *mCategoriesButton; 104 QPushButton *mCategoriesButton;
105 QLabel *mCategoriesLabel; 105 QLabel *mCategoriesLabel;
106 106
107 private: 107 private:
108 QString getFittingPath( const QString ) ;
108 QString mAlarmSound; 109 QString mAlarmSound;
109 QString mAlarmProgram; 110 QString mAlarmProgram;
110}; 111};
111 112
112#endif 113#endif
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp
index 97b4a03..30adb06 100644
--- a/korganizer/kotodoview.cpp
+++ b/korganizer/kotodoview.cpp
@@ -1,1157 +1,1152 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#include <qlayout.h> 24#include <qlayout.h>
25#include <qheader.h> 25#include <qheader.h>
26#include <qcursor.h> 26#include <qcursor.h>
27 27
28#include <qvbox.h> 28#include <qvbox.h>
29#include <kdebug.h> 29#include <kdebug.h>
30#include "koprefs.h" 30#include "koprefs.h"
31#include <klocale.h> 31#include <klocale.h>
32#include <kglobal.h> 32#include <kglobal.h>
33#include <kiconloader.h> 33#include <kiconloader.h>
34#include <kmessagebox.h> 34#include <kmessagebox.h>
35 35
36#include <libkcal/icaldrag.h> 36#include <libkcal/icaldrag.h>
37#include <libkcal/vcaldrag.h> 37#include <libkcal/vcaldrag.h>
38#include <libkcal/calfilter.h> 38#include <libkcal/calfilter.h>
39#include <libkcal/dndfactory.h> 39#include <libkcal/dndfactory.h>
40#include <libkcal/calendarresources.h> 40#include <libkcal/calendarresources.h>
41#include <libkcal/resourcecalendar.h> 41#include <libkcal/resourcecalendar.h>
42#include <kresources/resourceselectdialog.h> 42#include <kresources/resourceselectdialog.h>
43#ifndef DESKTOP_VERSION 43#ifndef DESKTOP_VERSION
44#include <qpe/qpeapplication.h> 44#include <qpe/qpeapplication.h>
45#else 45#else
46#include <qapplication.h> 46#include <qapplication.h>
47#endif 47#endif
48#ifndef KORG_NOPRINTER 48#ifndef KORG_NOPRINTER
49#include "calprinter.h" 49#include "calprinter.h"
50#endif 50#endif
51#include "docprefs.h" 51#include "docprefs.h"
52 52
53#include "kotodoview.h" 53#include "kotodoview.h"
54using namespace KOrg; 54using namespace KOrg;
55 55
56KOTodoListView::KOTodoListView(Calendar *calendar,QWidget *parent, 56KOTodoListView::KOTodoListView(Calendar *calendar,QWidget *parent,
57 const char *name) : 57 const char *name) :
58 KListView(parent,name) 58 KListView(parent,name)
59{ 59{
60 mName = QString ( name ); 60 mName = QString ( name );
61 mCalendar = calendar; 61 mCalendar = calendar;
62#ifndef DESKTOP_VERSION 62#ifndef DESKTOP_VERSION
63 QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold ); 63 QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold );
64#endif 64#endif
65 mOldCurrent = 0; 65 mOldCurrent = 0;
66 mMousePressed = false; 66 mMousePressed = false;
67 67
68 setAcceptDrops(true); 68 setAcceptDrops(true);
69 viewport()->setAcceptDrops(true); 69 viewport()->setAcceptDrops(true);
70 int size = 16; 70 int size = 16;
71 if (qApp->desktop()->width() < 300 ) 71 if (qApp->desktop()->width() < 300 )
72 size = 12; 72 size = 12;
73 setTreeStepSize( size + 6 ); 73 setTreeStepSize( size + 6 );
74 74
75} 75}
76 76
77void KOTodoListView::contentsDragEnterEvent(QDragEnterEvent *e) 77void KOTodoListView::contentsDragEnterEvent(QDragEnterEvent *e)
78{ 78{
79#ifndef KORG_NODND 79#ifndef KORG_NODND
80// kdDebug() << "KOTodoListView::contentsDragEnterEvent" << endl; 80// kdDebug() << "KOTodoListView::contentsDragEnterEvent" << endl;
81 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 81 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
82 !QTextDrag::canDecode( e ) ) { 82 !QTextDrag::canDecode( e ) ) {
83 e->ignore(); 83 e->ignore();
84 return; 84 return;
85 } 85 }
86 86
87 mOldCurrent = currentItem(); 87 mOldCurrent = currentItem();
88#endif 88#endif
89} 89}
90 90
91 91
92void KOTodoListView::contentsDragMoveEvent(QDragMoveEvent *e) 92void KOTodoListView::contentsDragMoveEvent(QDragMoveEvent *e)
93{ 93{
94#ifndef KORG_NODND 94#ifndef KORG_NODND
95// kdDebug() << "KOTodoListView::contentsDragMoveEvent" << endl; 95// kdDebug() << "KOTodoListView::contentsDragMoveEvent" << endl;
96 96
97 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 97 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
98 !QTextDrag::canDecode( e ) ) { 98 !QTextDrag::canDecode( e ) ) {
99 e->ignore(); 99 e->ignore();
100 return; 100 return;
101 } 101 }
102 102
103 e->accept(); 103 e->accept();
104#endif 104#endif
105} 105}
106 106
107void KOTodoListView::contentsDragLeaveEvent(QDragLeaveEvent *) 107void KOTodoListView::contentsDragLeaveEvent(QDragLeaveEvent *)
108{ 108{
109#ifndef KORG_NODND 109#ifndef KORG_NODND
110// kdDebug() << "KOTodoListView::contentsDragLeaveEvent" << endl; 110// kdDebug() << "KOTodoListView::contentsDragLeaveEvent" << endl;
111 111
112 setCurrentItem(mOldCurrent); 112 setCurrentItem(mOldCurrent);
113 setSelected(mOldCurrent,true); 113 setSelected(mOldCurrent,true);
114#endif 114#endif
115} 115}
116 116
117void KOTodoListView::contentsDropEvent(QDropEvent *e) 117void KOTodoListView::contentsDropEvent(QDropEvent *e)
118{ 118{
119#ifndef KORG_NODND 119#ifndef KORG_NODND
120// kdDebug() << "KOTodoListView::contentsDropEvent" << endl; 120// kdDebug() << "KOTodoListView::contentsDropEvent" << endl;
121 121
122 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 122 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
123 !QTextDrag::canDecode( e ) ) { 123 !QTextDrag::canDecode( e ) ) {
124 e->ignore(); 124 e->ignore();
125 return; 125 return;
126 } 126 }
127 127
128 DndFactory factory( mCalendar ); 128 DndFactory factory( mCalendar );
129 Todo *todo = factory.createDropTodo(e); 129 Todo *todo = factory.createDropTodo(e);
130 130
131 if (todo) { 131 if (todo) {
132 e->acceptAction(); 132 e->acceptAction();
133 133
134 KOTodoViewItem *destination = 134 KOTodoViewItem *destination =
135 (KOTodoViewItem *)itemAt(contentsToViewport(e->pos())); 135 (KOTodoViewItem *)itemAt(contentsToViewport(e->pos()));
136 Todo *destinationEvent = 0; 136 Todo *destinationEvent = 0;
137 if (destination) destinationEvent = destination->todo(); 137 if (destination) destinationEvent = destination->todo();
138 138
139 Todo *existingTodo = mCalendar->todo(todo->uid()); 139 Todo *existingTodo = mCalendar->todo(todo->uid());
140 140
141 if(existingTodo) { 141 if(existingTodo) {
142// kdDebug() << "Drop existing Todo" << endl; 142// kdDebug() << "Drop existing Todo" << endl;
143 Incidence *to = destinationEvent; 143 Incidence *to = destinationEvent;
144 while(to) { 144 while(to) {
145 if (to->uid() == todo->uid()) { 145 if (to->uid() == todo->uid()) {
146 KMessageBox::sorry(this, 146 KMessageBox::sorry(this,
147 i18n("Cannot move To-Do to itself or a child of itself"), 147 i18n("Cannot move To-Do to itself or a child of itself"),
148 i18n("Drop To-Do")); 148 i18n("Drop To-Do"));
149 delete todo; 149 delete todo;
150 return; 150 return;
151 } 151 }
152 to = to->relatedTo(); 152 to = to->relatedTo();
153 } 153 }
154 existingTodo->setRelatedTo(destinationEvent); 154 existingTodo->setRelatedTo(destinationEvent);
155 emit todoDropped(todo); 155 emit todoDropped(todo);
156 delete todo; 156 delete todo;
157 } else { 157 } else {
158// kdDebug() << "Drop new Todo" << endl; 158// kdDebug() << "Drop new Todo" << endl;
159 todo->setRelatedTo(destinationEvent); 159 todo->setRelatedTo(destinationEvent);
160 mCalendar->addTodo(todo); 160 mCalendar->addTodo(todo);
161 161
162 emit todoDropped(todo); 162 emit todoDropped(todo);
163 } 163 }
164 } 164 }
165 else { 165 else {
166 QString text; 166 QString text;
167 if (QTextDrag::decode(e,text)) { 167 if (QTextDrag::decode(e,text)) {
168 //QListViewItem *qlvi = itemAt( contentsToViewport(e->pos()) ); 168 //QListViewItem *qlvi = itemAt( contentsToViewport(e->pos()) );
169 KOTodoViewItem *todoi = static_cast<KOTodoViewItem *>(itemAt( contentsToViewport(e->pos()) )); 169 KOTodoViewItem *todoi = static_cast<KOTodoViewItem *>(itemAt( contentsToViewport(e->pos()) ));
170 kdDebug() << "Dropped : " << text << endl; 170 kdDebug() << "Dropped : " << text << endl;
171 QStringList emails = QStringList::split(",",text); 171 QStringList emails = QStringList::split(",",text);
172 for(QStringList::ConstIterator it = emails.begin();it!=emails.end();++it) { 172 for(QStringList::ConstIterator it = emails.begin();it!=emails.end();++it) {
173 kdDebug() << " Email: " << (*it) << endl; 173 kdDebug() << " Email: " << (*it) << endl;
174 int pos = (*it).find("<"); 174 int pos = (*it).find("<");
175 QString name = (*it).left(pos); 175 QString name = (*it).left(pos);
176 QString email = (*it).mid(pos); 176 QString email = (*it).mid(pos);
177 if (!email.isEmpty() && todoi) { 177 if (!email.isEmpty() && todoi) {
178 todoi->todo()->addAttendee(new Attendee(name,email)); 178 todoi->todo()->addAttendee(new Attendee(name,email));
179 } 179 }
180 } 180 }
181 } 181 }
182 else { 182 else {
183 kdDebug() << "KOTodoListView::contentsDropEvent(): Todo from drop not decodable" << endl; 183 kdDebug() << "KOTodoListView::contentsDropEvent(): Todo from drop not decodable" << endl;
184 e->ignore(); 184 e->ignore();
185 } 185 }
186 } 186 }
187#endif 187#endif
188} 188}
189 189
190void KOTodoListView::contentsMousePressEvent(QMouseEvent* e) 190void KOTodoListView::contentsMousePressEvent(QMouseEvent* e)
191{ 191{
192 QListView::contentsMousePressEvent(e); 192 QListView::contentsMousePressEvent(e);
193#ifndef KORG_NODND 193#ifndef KORG_NODND
194 QPoint p(contentsToViewport(e->pos())); 194 QPoint p(contentsToViewport(e->pos()));
195 QListViewItem *i = itemAt(p); 195 QListViewItem *i = itemAt(p);
196 if (i) { 196 if (i) {
197 // if the user clicked into the root decoration of the item, don't 197 // if the user clicked into the root decoration of the item, don't
198 // try to start a drag! 198 // try to start a drag!
199 if (p.x() > header()->sectionPos(header()->mapToIndex(0)) + 199 if (p.x() > header()->sectionPos(header()->mapToIndex(0)) +
200 treeStepSize() * (i->depth() + (rootIsDecorated() ? 1 : 0)) + 200 treeStepSize() * (i->depth() + (rootIsDecorated() ? 1 : 0)) +
201 itemMargin() || 201 itemMargin() ||
202 p.x() < header()->sectionPos(header()->mapToIndex(0))) { 202 p.x() < header()->sectionPos(header()->mapToIndex(0))) {
203 if (e->button()==Qt::LeftButton) { 203 if (e->button()==Qt::LeftButton) {
204 mPressPos = e->pos(); 204 mPressPos = e->pos();
205 mMousePressed = true; 205 mMousePressed = true;
206 } 206 }
207 } 207 }
208 } 208 }
209#endif 209#endif
210} 210}
211 211
212void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e) 212void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e)
213{ 213{
214 214
215#ifndef KORG_NODND 215#ifndef KORG_NODND
216// kdDebug() << "KOTodoListView::contentsMouseMoveEvent()" << endl; 216// kdDebug() << "KOTodoListView::contentsMouseMoveEvent()" << endl;
217 QListView::contentsMouseMoveEvent(e); 217 QListView::contentsMouseMoveEvent(e);
218 if (mMousePressed && (mPressPos - e->pos()).manhattanLength() > 218 if (mMousePressed && (mPressPos - e->pos()).manhattanLength() >
219 QApplication::startDragDistance()) { 219 QApplication::startDragDistance()) {
220 mMousePressed = false; 220 mMousePressed = false;
221 QListViewItem *item = itemAt(contentsToViewport(mPressPos)); 221 QListViewItem *item = itemAt(contentsToViewport(mPressPos));
222 if (item) { 222 if (item) {
223// kdDebug() << "Start Drag for item " << item->text(0) << endl; 223// kdDebug() << "Start Drag for item " << item->text(0) << endl;
224 DndFactory factory( mCalendar ); 224 DndFactory factory( mCalendar );
225 ICalDrag *vd = factory.createDragTodo( 225 ICalDrag *vd = factory.createDragTodo(
226 ((KOTodoViewItem *)item)->todo(),viewport()); 226 ((KOTodoViewItem *)item)->todo(),viewport());
227 if (vd->drag()) { 227 if (vd->drag()) {
228 kdDebug() << "KOTodoListView::contentsMouseMoveEvent(): Delete drag source" << endl; 228 kdDebug() << "KOTodoListView::contentsMouseMoveEvent(): Delete drag source" << endl;
229 } 229 }
230/* 230/*
231 QString source = fullPath(item); 231 QString source = fullPath(item);
232 if ( QFile::exists(source) ) { 232 if ( QFile::exists(source) ) {
233 QUriDrag* ud = new QUriDrag(viewport()); 233 QUriDrag* ud = new QUriDrag(viewport());
234 ud->setFilenames( source ); 234 ud->setFilenames( source );
235 if ( ud->drag() ) 235 if ( ud->drag() )
236 QMessageBox::information( this, "Drag source", 236 QMessageBox::information( this, "Drag source",
237 QString("Delete ")+source, "Not implemented" ); 237 QString("Delete ")+source, "Not implemented" );
238*/ 238*/
239 } 239 }
240 } 240 }
241#endif 241#endif
242} 242}
243void KOTodoListView::keyPressEvent ( QKeyEvent * e ) 243void KOTodoListView::keyPressEvent ( QKeyEvent * e )
244{ 244{
245 245
246 QListViewItem* cn; 246 QListViewItem* cn;
247 if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) { 247 if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) {
248 cn = currentItem(); 248 cn = currentItem();
249 if ( cn ) { 249 if ( cn ) {
250 KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); 250 KOTodoViewItem* ci = (KOTodoViewItem*)( cn );
251 if ( ci ){ 251 if ( ci ){
252 if ( e->state() == ShiftButton ) 252 if ( e->state() == ShiftButton )
253 ci->setOn( false ); 253 ci->setOn( false );
254 else 254 else
255 ci->setOn( true ); 255 ci->setOn( true );
256 cn = cn->nextSibling(); 256 cn = cn->nextSibling();
257 if ( cn ) { 257 if ( cn ) {
258 setCurrentItem ( cn ); 258 setCurrentItem ( cn );
259 ensureItemVisible ( cn ); 259 ensureItemVisible ( cn );
260 } 260 }
261 261
262 } 262 }
263 } 263 }
264 264
265 return; 265 return;
266 } 266 }
267 267
268 // qDebug("KOTodoListView::keyPressEvent "); 268 // qDebug("KOTodoListView::keyPressEvent ");
269 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) { 269 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) {
270 switch ( e->key() ) { 270 switch ( e->key() ) {
271 case Qt::Key_Down: 271 case Qt::Key_Down:
272 case Qt::Key_Up: 272 case Qt::Key_Up:
273 QListView::keyPressEvent ( e ); 273 QListView::keyPressEvent ( e );
274 break; 274 break;
275 case Qt::Key_Left: 275 case Qt::Key_Left:
276 case Qt::Key_Right: 276 case Qt::Key_Right:
277 QListView::keyPressEvent ( e ); 277 QListView::keyPressEvent ( e );
278 e->accept(); 278 e->accept();
279 return; 279 return;
280 break; 280 break;
281 default: 281 default:
282 e->ignore(); 282 e->ignore();
283 break; 283 break;
284 } 284 }
285 return; 285 return;
286 } 286 }
287 e->ignore(); 287 e->ignore();
288} 288}
289void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e) 289void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e)
290{ 290{
291 QListView::contentsMouseReleaseEvent(e); 291 QListView::contentsMouseReleaseEvent(e);
292 mMousePressed = false; 292 mMousePressed = false;
293} 293}
294 294
295void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e) 295void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e)
296{ 296{
297 if (!e) return; 297 if (!e) return;
298 298
299 QPoint vp = contentsToViewport(e->pos()); 299 QPoint vp = contentsToViewport(e->pos());
300 300
301 QListViewItem *item = itemAt(vp); 301 QListViewItem *item = itemAt(vp);
302 302
303 emit double_Clicked(item); 303 emit double_Clicked(item);
304 if (!item) return; 304 if (!item) return;
305 305
306 emit doubleClicked(item,vp,0); 306 emit doubleClicked(item,vp,0);
307} 307}
308 308
309///////////////////////////////////////////////////////////////////////////// 309/////////////////////////////////////////////////////////////////////////////
310 310
311KOQuickTodo::KOQuickTodo(QWidget *parent) : 311KOQuickTodo::KOQuickTodo(QWidget *parent) :
312 QLineEdit(parent) 312 QLineEdit(parent)
313{ 313{
314 setText(i18n("Click to add a new Todo")); 314 setText(i18n("Click to add a new Todo"));
315} 315}
316 316
317void KOQuickTodo::focusInEvent(QFocusEvent *ev) 317void KOQuickTodo::focusInEvent(QFocusEvent *ev)
318{ 318{
319 if ( text()==i18n("Click to add a new Todo") ) 319 if ( text()==i18n("Click to add a new Todo") )
320 setText(""); 320 setText("");
321 QLineEdit::focusInEvent(ev); 321 QLineEdit::focusInEvent(ev);
322} 322}
323 323
324void KOQuickTodo::focusOutEvent(QFocusEvent *ev) 324void KOQuickTodo::focusOutEvent(QFocusEvent *ev)
325{ 325{
326 setText(i18n("Click to add a new Todo")); 326 setText(i18n("Click to add a new Todo"));
327 QLineEdit::focusOutEvent(ev); 327 QLineEdit::focusOutEvent(ev);
328} 328}
329 329
330///////////////////////////////////////////////////////////////////////////// 330/////////////////////////////////////////////////////////////////////////////
331 331
332KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) : 332KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) :
333 KOrg::BaseView(calendar,parent,name) 333 KOrg::BaseView(calendar,parent,name)
334{ 334{
335 mNavigator = 0; 335 mNavigator = 0;
336 QBoxLayout *topLayout = new QVBoxLayout(this); 336 QBoxLayout *topLayout = new QVBoxLayout(this);
337 mName = QString ( name ); 337 mName = QString ( name );
338 mBlockUpdate = false; 338 mBlockUpdate = false;
339 mQuickAdd = new KOQuickTodo(this); 339 mQuickAdd = new KOQuickTodo(this);
340 topLayout->addWidget(mQuickAdd); 340 topLayout->addWidget(mQuickAdd);
341 341
342 if ( !KOPrefs::instance()->mEnableQuickTodo ) mQuickAdd->hide(); 342 if ( !KOPrefs::instance()->mEnableQuickTodo ) mQuickAdd->hide();
343 343
344 mTodoListView = new KOTodoListView(calendar,this, name ); 344 mTodoListView = new KOTodoListView(calendar,this, name );
345 topLayout->addWidget(mTodoListView); 345 topLayout->addWidget(mTodoListView);
346 //mTodoListView->header()->setMaximumHeight(30); 346 //mTodoListView->header()->setMaximumHeight(30);
347 mTodoListView->setRootIsDecorated(true); 347 mTodoListView->setRootIsDecorated(true);
348 mTodoListView->setAllColumnsShowFocus(true); 348 mTodoListView->setAllColumnsShowFocus(true);
349 349
350 mTodoListView->setShowSortIndicator(true); 350 mTodoListView->setShowSortIndicator(true);
351 351
352 mTodoListView->addColumn(i18n("Todo")); 352 mTodoListView->addColumn(i18n("Todo"));
353 mTodoListView->addColumn(i18n("Prio")); 353 mTodoListView->addColumn(i18n("Prio"));
354 mTodoListView->setColumnAlignment(1,AlignHCenter); 354 mTodoListView->setColumnAlignment(1,AlignHCenter);
355 mTodoListView->addColumn(i18n("Complete")); 355 mTodoListView->addColumn(i18n("Complete"));
356 mTodoListView->setColumnAlignment(2,AlignCenter); 356 mTodoListView->setColumnAlignment(2,AlignCenter);
357 357
358 mTodoListView->addColumn(i18n("Due Date")); 358 mTodoListView->addColumn(i18n("Due Date"));
359 mTodoListView->setColumnAlignment(3,AlignLeft); 359 mTodoListView->setColumnAlignment(3,AlignLeft);
360 mTodoListView->addColumn(i18n("Due Time")); 360 mTodoListView->addColumn(i18n("Due Time"));
361 mTodoListView->setColumnAlignment(4,AlignHCenter); 361 mTodoListView->setColumnAlignment(4,AlignHCenter);
362 362
363 mTodoListView->addColumn(i18n("Start Date")); 363 mTodoListView->addColumn(i18n("Start Date"));
364 mTodoListView->setColumnAlignment(5,AlignLeft); 364 mTodoListView->setColumnAlignment(5,AlignLeft);
365 mTodoListView->addColumn(i18n("Start Time")); 365 mTodoListView->addColumn(i18n("Start Time"));
366 mTodoListView->setColumnAlignment(6,AlignHCenter); 366 mTodoListView->setColumnAlignment(6,AlignHCenter);
367 367
368 mTodoListView->addColumn(i18n("Cancelled")); 368 mTodoListView->addColumn(i18n("Cancelled"));
369 mTodoListView->addColumn(i18n("Categories")); 369 mTodoListView->addColumn(i18n("Categories"));
370#if 0 370#if 0
371 mTodoListView->addColumn(i18n("Sort Id")); 371 mTodoListView->addColumn(i18n("Sort Id"));
372 mTodoListView->setColumnAlignment(4,AlignHCenter); 372 mTodoListView->setColumnAlignment(4,AlignHCenter);
373#endif 373#endif
374 374
375 mTodoListView->setMinimumHeight( 60 ); 375 mTodoListView->setMinimumHeight( 60 );
376 mTodoListView->setItemsRenameable( true ); 376 mTodoListView->setItemsRenameable( true );
377 mTodoListView->setRenameable( 0 ); 377 mTodoListView->setRenameable( 0 );
378 mTodoListView->setColumnWidth( 0, 120 ); 378 mTodoListView->setColumnWidth( 0, 120 );
379 mTodoListView->setColumnWidthMode(0, QListView::Manual); 379 mTodoListView->setColumnWidthMode(0, QListView::Manual);
380 mTodoListView->setColumnWidthMode(1, QListView::Manual); 380 mTodoListView->setColumnWidthMode(1, QListView::Manual);
381 mTodoListView->setColumnWidthMode(2, QListView::Manual); 381 mTodoListView->setColumnWidthMode(2, QListView::Manual);
382 mTodoListView->setColumnWidthMode(3, QListView::Manual); 382 mTodoListView->setColumnWidthMode(3, QListView::Manual);
383 mTodoListView->setColumnWidthMode(4, QListView::Manual); 383 mTodoListView->setColumnWidthMode(4, QListView::Manual);
384 mTodoListView->setColumnWidthMode(5, QListView::Manual); 384 mTodoListView->setColumnWidthMode(5, QListView::Manual);
385 mTodoListView->setColumnWidthMode(6, QListView::Manual); 385 mTodoListView->setColumnWidthMode(6, QListView::Manual);
386 mTodoListView->setColumnWidthMode(7, QListView::Manual); 386 mTodoListView->setColumnWidthMode(7, QListView::Manual);
387 mTodoListView->setColumnWidthMode(8, QListView::Manual); 387 mTodoListView->setColumnWidthMode(8, QListView::Manual);
388 388
389 389
390 mPriorityPopupMenu = new QPopupMenu(this); 390 mPriorityPopupMenu = new QPopupMenu(this);
391 for (int i = 1; i <= 5; i++) { 391 for (int i = 1; i <= 5; i++) {
392 QString label = QString ("%1").arg (i); 392 QString label = QString ("%1").arg (i);
393 mPriority[mPriorityPopupMenu->insertItem (label)] = i; 393 mPriority[mPriorityPopupMenu->insertItem (label)] = i;
394 } 394 }
395 connect (mPriorityPopupMenu, SIGNAL(activated (int)), SLOT (setNewPriority(int))); 395 connect (mPriorityPopupMenu, SIGNAL(activated (int)), SLOT (setNewPriority(int)));
396 396
397 mPercentageCompletedPopupMenu = new QPopupMenu(this); 397 mPercentageCompletedPopupMenu = new QPopupMenu(this);
398 for (int i = 0; i <= 100; i+=20) { 398 for (int i = 0; i <= 100; i+=20) {
399 QString label = QString ("%1 %").arg (i); 399 QString label = QString ("%1 %").arg (i);
400 mPercentage[mPercentageCompletedPopupMenu->insertItem (label)] = i; 400 mPercentage[mPercentageCompletedPopupMenu->insertItem (label)] = i;
401 } 401 }
402 connect (mPercentageCompletedPopupMenu, SIGNAL (activated (int)), SLOT (setNewPercentage (int))); 402 connect (mPercentageCompletedPopupMenu, SIGNAL (activated (int)), SLOT (setNewPercentage (int)));
403 403
404 404
405 405
406 mItemPopupMenu = new QPopupMenu(this); 406 mItemPopupMenu = new QPopupMenu(this);
407 mItemPopupMenu->insertItem(i18n("Show..."), this, 407 mItemPopupMenu->insertItem(i18n("Show..."), this,
408 SLOT (showTodo())); 408 SLOT (showTodo()));
409 mItemPopupMenu->insertItem(i18n("Edit..."), this, 409 mItemPopupMenu->insertItem(i18n("Edit..."), this,
410 SLOT (editTodo())); 410 SLOT (editTodo()));
411 mItemPopupMenu->insertItem( i18n("Delete"), this, 411 mItemPopupMenu->insertItem( i18n("Delete"), this,
412 SLOT (deleteTodo())); 412 SLOT (deleteTodo()));
413 mItemPopupMenu->insertItem( i18n("Clone..."), this, 413 mItemPopupMenu->insertItem( i18n("Clone..."), this,
414 SLOT (cloneTodo())); 414 SLOT (cloneTodo()));
415 mItemPopupMenu->insertItem( i18n("Move..."), this, 415 mItemPopupMenu->insertItem( i18n("Move..."), this,
416 SLOT (moveTodo())); 416 SLOT (moveTodo()));
417 mItemPopupMenu->insertItem( i18n("Beam..."), this, 417 mItemPopupMenu->insertItem( i18n("Beam..."), this,
418 SLOT (beamTodo())); 418 SLOT (beamTodo()));
419 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this, 419 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this,
420 SLOT (cancelTodo())); 420 SLOT (cancelTodo()));
421 mItemPopupMenu->insertSeparator(); 421 mItemPopupMenu->insertSeparator();
422 422
423 mItemPopupMenu->insertItem( i18n("New Todo..."), this, 423 mItemPopupMenu->insertItem( i18n("New Todo..."), this,
424 SLOT (newTodo())); 424 SLOT (newTodo()));
425 mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this, 425 mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this,
426 SLOT (newSubTodo())); 426 SLOT (newSubTodo()));
427 mItemPopupMenu->insertItem(i18n("Unparent Todo"), this, 427 mItemPopupMenu->insertItem(i18n("Unparent Todo"), this,
428 SLOT (unparentTodo()),0,21); 428 SLOT (unparentTodo()),0,21);
429 mItemPopupMenu->insertItem(i18n("Reparent Todo"), this, 429 mItemPopupMenu->insertItem(i18n("Reparent Todo"), this,
430 SLOT (reparentTodo()),0,22); 430 SLOT (reparentTodo()),0,22);
431 mItemPopupMenu->insertSeparator(); 431 mItemPopupMenu->insertSeparator();
432 mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed"), 432 mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed"),
433 this, SLOT( purgeCompleted() ) ); 433 this, SLOT( purgeCompleted() ) );
434 mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"), 434 mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"),
435 this, SLOT( toggleCompleted() ),0, 33 ); 435 this, SLOT( toggleCompleted() ),0, 33 );
436 mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), 436 mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"),
437 this, SLOT( toggleQuickTodo() ),0, 34 ); 437 this, SLOT( toggleQuickTodo() ),0, 34 );
438 mItemPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"), 438 mItemPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"),
439 this, SLOT( toggleRunning() ),0, 35 ); 439 this, SLOT( toggleRunning() ),0, 35 );
440 440
441 mPopupMenu = new QPopupMenu(this); 441 mPopupMenu = new QPopupMenu(this);
442 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this, 442 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this,
443 SLOT (newTodo()),0,1); 443 SLOT (newTodo()),0,1);
444 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed"), 444 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed"),
445 this, SLOT(purgeCompleted()),0,2); 445 this, SLOT(purgeCompleted()),0,2);
446 mPopupMenu->insertItem(i18n("Show Completed"), 446 mPopupMenu->insertItem(i18n("Show Completed"),
447 this, SLOT( toggleCompleted() ),0,3 ); 447 this, SLOT( toggleCompleted() ),0,3 );
448 mPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), 448 mPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"),
449 this, SLOT( toggleQuickTodo() ),0,4 ); 449 this, SLOT( toggleQuickTodo() ),0,4 );
450 mPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"), 450 mPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"),
451 this, SLOT( toggleRunning() ),0,5 ); 451 this, SLOT( toggleRunning() ),0,5 );
452 mDocPrefs = new DocPrefs( name ); 452 mDocPrefs = new DocPrefs( name );
453 453
454 mPopupMenu->setCheckable( true ); 454 mPopupMenu->setCheckable( true );
455 mItemPopupMenu->setCheckable( true ); 455 mItemPopupMenu->setCheckable( true );
456 456
457 457
458 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo ); 458 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo );
459 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo ); 459 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo );
460 460
461 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo); 461 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo);
462 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo ); 462 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo );
463 463
464 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos); 464 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos);
465 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos ); 465 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos );
466 466
467 467
468 // Double clicking conflicts with opening/closing the subtree 468 // Double clicking conflicts with opening/closing the subtree
469 connect( mTodoListView, SIGNAL( doubleClicked( QListViewItem *) ), 469 connect( mTodoListView, SIGNAL( doubleClicked( QListViewItem *) ),
470 SLOT( editItem( QListViewItem *) ) ); 470 SLOT( editItem( QListViewItem *) ) );
471 /* 471 /*
472 connect( mTodoListView, SIGNAL( rightButtonClicked ( QListViewItem *, 472 connect( mTodoListView, SIGNAL( rightButtonClicked ( QListViewItem *,
473 const QPoint &,int ) ), 473 const QPoint &,int ) ),
474 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) ); 474 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) );
475 */ 475 */
476 connect( mTodoListView, SIGNAL( contextRequest ( QListViewItem *, 476 connect( mTodoListView, SIGNAL( contextRequest ( QListViewItem *,
477 const QPoint &,int ) ), 477 const QPoint &,int ) ),
478 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) ); 478 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) );
479 connect( mTodoListView, SIGNAL( clicked( QListViewItem * ) ), 479 connect( mTodoListView, SIGNAL( clicked( QListViewItem * ) ),
480 SLOT( itemClicked( QListViewItem * ) ) ); 480 SLOT( itemClicked( QListViewItem * ) ) );
481 connect( mTodoListView, SIGNAL( double_Clicked( QListViewItem * ) ), 481 connect( mTodoListView, SIGNAL( double_Clicked( QListViewItem * ) ),
482 SLOT( itemDoubleClicked( QListViewItem * ) ) ); 482 SLOT( itemDoubleClicked( QListViewItem * ) ) );
483 connect( mTodoListView, SIGNAL( todoDropped( Todo * ) ), 483 connect( mTodoListView, SIGNAL( todoDropped( Todo * ) ),
484 SLOT( updateView() ) ); 484 SLOT( updateView() ) );
485 connect( mTodoListView, SIGNAL( expanded( QListViewItem * ) ), 485 connect( mTodoListView, SIGNAL( expanded( QListViewItem * ) ),
486 SLOT( itemStateChanged( QListViewItem * ) ) ); 486 SLOT( itemStateChanged( QListViewItem * ) ) );
487 connect( mTodoListView, SIGNAL( collapsed( QListViewItem * ) ), 487 connect( mTodoListView, SIGNAL( collapsed( QListViewItem * ) ),
488 SLOT( itemStateChanged( QListViewItem * ) ) ); 488 SLOT( itemStateChanged( QListViewItem * ) ) );
489 489
490#if 0 490#if 0
491 connect(mTodoListView,SIGNAL(selectionChanged(QListViewItem *)), 491 connect(mTodoListView,SIGNAL(selectionChanged(QListViewItem *)),
492 SLOT(selectionChanged(QListViewItem *))); 492 SLOT(selectionChanged(QListViewItem *)));
493 connect(mTodoListView,SIGNAL(clicked(QListViewItem *)), 493 connect(mTodoListView,SIGNAL(clicked(QListViewItem *)),
494 SLOT(selectionChanged(QListViewItem *))); 494 SLOT(selectionChanged(QListViewItem *)));
495 connect(mTodoListView,SIGNAL(pressed(QListViewItem *)), 495 connect(mTodoListView,SIGNAL(pressed(QListViewItem *)),
496 SLOT(selectionChanged(QListViewItem *))); 496 SLOT(selectionChanged(QListViewItem *)));
497#endif 497#endif
498 connect( mTodoListView, SIGNAL(selectionChanged() ), 498 connect( mTodoListView, SIGNAL(selectionChanged() ),
499 SLOT( processSelectionChange() ) ); 499 SLOT( processSelectionChange() ) );
500 connect( mQuickAdd, SIGNAL( returnPressed () ), 500 connect( mQuickAdd, SIGNAL( returnPressed () ),
501 SLOT( addQuickTodo() ) ); 501 SLOT( addQuickTodo() ) );
502 502
503} 503}
504 504
505KOTodoView::~KOTodoView() 505KOTodoView::~KOTodoView()
506{ 506{
507 delete mDocPrefs; 507 delete mDocPrefs;
508} 508}
509 509
510void KOTodoView::jumpToDate () 510void KOTodoView::jumpToDate ()
511{ 511{
512 // if (mActiveItem) { 512 // if (mActiveItem) {
513// mActiveItem->todo()); 513// mActiveItem->todo());
514// if ( mActiveItem->todo()->hasDueDate() ) 514// if ( mActiveItem->todo()->hasDueDate() )
515// emit mActiveItem->todo()jumpToTime( mTodo->dtDue().date() ); 515// emit mActiveItem->todo()jumpToTime( mTodo->dtDue().date() );
516} 516}
517 517
518void KOTodoView::updateView() 518void KOTodoView::updateView()
519{ 519{
520 pendingSubtodo = 0; 520 pendingSubtodo = 0;
521 if ( mBlockUpdate ) { 521 if ( mBlockUpdate ) {
522 //qDebug("blocked "); 522 //qDebug("blocked ");
523 return; 523 return;
524 } 524 }
525 //qDebug("update "); 525 //qDebug("update ");
526// kdDebug() << "KOTodoView::updateView()" << endl; 526// kdDebug() << "KOTodoView::updateView()" << endl;
527 QFont fo = KOPrefs::instance()->mTodoViewFont; 527 QFont fo = KOPrefs::instance()->mTodoViewFont;
528 mTodoListView->clear(); 528 mTodoListView->clear();
529 if ( mName == "todolistsmall" ) { 529 if ( mName == "todolistsmall" ) {
530 if ( KOPrefs::instance()->mTodoViewUsesSmallFont ) { 530 if ( KOPrefs::instance()->mTodoViewUsesSmallFont ) {
531 int ps = fo.pointSize() -2; 531 int ps = fo.pointSize() -2;
532 if ( ps > 12 ) 532 if ( ps > 12 )
533 ps -= 2; 533 ps -= 2;
534 fo.setPointSize( ps ); 534 fo.setPointSize( ps );
535 } 535 }
536 } 536 }
537 537
538 mTodoListView->setFont( fo ); 538 mTodoListView->setFont( fo );
539 // QFontMetrics fm ( KOPrefs::instance()->mTodoViewFont ); 539 // QFontMetrics fm ( KOPrefs::instance()->mTodoViewFont );
540 //mTodoListView->header()->setMaximumHeight(fm.height()); 540 //mTodoListView->header()->setMaximumHeight(fm.height());
541 QPtrList<Todo> todoList = calendar()->todos(); 541 QPtrList<Todo> todoList = calendar()->todos();
542 542
543/* 543/*
544 kdDebug() << "KOTodoView::updateView(): Todo List:" << endl; 544 kdDebug() << "KOTodoView::updateView(): Todo List:" << endl;
545 Event *t; 545 Event *t;
546 for(t = todoList.first(); t; t = todoList.next()) { 546 for(t = todoList.first(); t; t = todoList.next()) {
547 kdDebug() << " " << t->getSummary() << endl; 547 kdDebug() << " " << t->getSummary() << endl;
548 548
549 if (t->getRelatedTo()) { 549 if (t->getRelatedTo()) {
550 kdDebug() << " (related to " << t->getRelatedTo()->getSummary() << ")" << endl; 550 kdDebug() << " (related to " << t->getRelatedTo()->getSummary() << ")" << endl;
551 } 551 }
552 552
553 QPtrList<Event> l = t->getRelations(); 553 QPtrList<Event> l = t->getRelations();
554 Event *c; 554 Event *c;
555 for(c=l.first();c;c=l.next()) { 555 for(c=l.first();c;c=l.next()) {
556 kdDebug() << " - relation: " << c->getSummary() << endl; 556 kdDebug() << " - relation: " << c->getSummary() << endl;
557 } 557 }
558 } 558 }
559*/ 559*/
560 560
561 // Put for each Event a KOTodoViewItem in the list view. Don't rely on a 561 // Put for each Event a KOTodoViewItem in the list view. Don't rely on a
562 // specific order of events. That means that we have to generate parent items 562 // specific order of events. That means that we have to generate parent items
563 // recursively for proper hierarchical display of Todos. 563 // recursively for proper hierarchical display of Todos.
564 mTodoMap.clear(); 564 mTodoMap.clear();
565 Todo *todo; 565 Todo *todo;
566 todo = todoList.first();// todo; todo = todoList.next()) { 566 todo = todoList.first();// todo; todo = todoList.next()) {
567 while ( todo ) { 567 while ( todo ) {
568 bool next = true; 568 bool next = true;
569 // qDebug("todo %s ", todo->summary().latin1()); 569 // qDebug("todo %s ", todo->summary().latin1());
570 Incidence *incidence = todo->relatedTo(); 570 Incidence *incidence = todo->relatedTo();
571 while ( incidence ) { 571 while ( incidence ) {
572 if ( incidence->type() == "Todo") { 572 if ( incidence->type() == "Todo") {
573 //qDebug("related %s ",incidence->summary().latin1() ); 573 //qDebug("related %s ",incidence->summary().latin1() );
574 if ( !(todoList.contains ( ((Todo* )incidence ) ) )) { 574 if ( !(todoList.contains ( ((Todo* )incidence ) ) )) {
575 //qDebug("related not found "); 575 //qDebug("related not found ");
576 todoList.remove( ); 576 todoList.remove( );
577 todo = todoList.current(); 577 todo = todoList.current();
578 next = false; 578 next = false;
579 incidence = 0; 579 incidence = 0;
580 580
581 } else { 581 } else {
582 //qDebug("related found "); 582 //qDebug("related found ");
583 incidence = incidence->relatedTo(); 583 incidence = incidence->relatedTo();
584 } 584 }
585 } else 585 } else
586 incidence = 0; 586 incidence = 0;
587 } 587 }
588 if ( next ) 588 if ( next )
589 todo = todoList.next(); 589 todo = todoList.next();
590 } 590 }
591// qDebug("again .... "); 591// qDebug("again .... ");
592// for(todo = todoList.first(); todo; todo = todoList.next()) { 592// for(todo = todoList.first(); todo; todo = todoList.next()) {
593 593
594// qDebug("yytodo %s ", todo->summary().latin1()); 594// qDebug("yytodo %s ", todo->summary().latin1());
595// } 595// }
596 //qDebug("for "); 596 //qDebug("for ");
597 for(todo = todoList.first(); todo; todo = todoList.next()) { 597 for(todo = todoList.first(); todo; todo = todoList.next()) {
598 if (!mTodoMap.contains(todo) && checkTodo( todo ) ) 598 if (!mTodoMap.contains(todo) && checkTodo( todo ) )
599 { 599 {
600 insertTodoItem(todo); 600 insertTodoItem(todo);
601 } 601 }
602 } 602 }
603 //qDebug("for end "); 603 //qDebug("for end ");
604 // Restore opened/closed state 604 // Restore opened/closed state
605 mTodoListView->blockSignals( true ); 605 mTodoListView->blockSignals( true );
606 if( mDocPrefs ) restoreItemState( mTodoListView->firstChild() ); 606 if( mDocPrefs ) restoreItemState( mTodoListView->firstChild() );
607 mTodoListView->blockSignals( false ); 607 mTodoListView->blockSignals( false );
608 mTodoListView->setFocus(); 608 mTodoListView->setFocus();
609 processSelectionChange(); 609 processSelectionChange();
610} 610}
611 611
612bool KOTodoView::checkTodo( Todo * todo ) 612bool KOTodoView::checkTodo( Todo * todo )
613{ 613{
614 614
615 if ( !KOPrefs::instance()->mShowCompletedTodo && todo->isCompleted() ) 615 if ( !KOPrefs::instance()->mShowCompletedTodo && todo->isCompleted() )
616 return false; 616 return false;
617 if ( KOPrefs::instance()->mHideNonStartedTodos && mNavigator ) { 617 if ( KOPrefs::instance()->mHideNonStartedTodos && mNavigator ) {
618 if ( todo->hasStartDate() ) 618 if ( todo->hasStartDate() )
619 if ( mNavigator->selectedDates().last() < todo->dtStart().date() ) 619 if ( mNavigator->selectedDates().last() < todo->dtStart().date() )
620 return false; 620 return false;
621 if ( todo->hasDueDate() ) 621 if ( todo->hasDueDate() )
622 if ( mNavigator->selectedDates().first() > todo->dtDue().date() ) 622 if ( mNavigator->selectedDates().first() > todo->dtDue().date() )
623 return false; 623 return false;
624 } 624 }
625 return true; 625 return true;
626} 626}
627 627
628void KOTodoView::restoreItemState( QListViewItem *item ) 628void KOTodoView::restoreItemState( QListViewItem *item )
629{ 629{
630 pendingSubtodo = 0; 630 pendingSubtodo = 0;
631 while( item ) { 631 while( item ) {
632 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 632 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
633 todoItem->setOpen( mDocPrefs->readBoolEntry( todoItem->todo()->uid() ) ); 633 todoItem->setOpen( mDocPrefs->readBoolEntry( todoItem->todo()->uid() ) );
634 if( item->childCount() > 0 ) restoreItemState( item->firstChild() ); 634 if( item->childCount() > 0 ) restoreItemState( item->firstChild() );
635 item = item->nextSibling(); 635 item = item->nextSibling();
636 } 636 }
637} 637}
638 638
639 639
640QMap<Todo *,KOTodoViewItem *>::ConstIterator 640QMap<Todo *,KOTodoViewItem *>::ConstIterator
641 KOTodoView::insertTodoItem(Todo *todo) 641 KOTodoView::insertTodoItem(Todo *todo)
642{ 642{
643 643
644// kdDebug() << "KOTodoView::insertTodoItem(): " << todo->getSummary() << endl; 644// kdDebug() << "KOTodoView::insertTodoItem(): " << todo->getSummary() << endl;
645 // TODO: Check, if dynmaic cast is necessary 645 // TODO: Check, if dynmaic cast is necessary
646 646
647 pendingSubtodo = 0; 647 pendingSubtodo = 0;
648 Incidence *incidence = todo->relatedTo(); 648 Incidence *incidence = todo->relatedTo();
649 if (incidence && incidence->type() == "Todo") { 649 if (incidence && incidence->type() == "Todo") {
650 Todo *relatedTodo = static_cast<Todo *>(incidence); 650 Todo *relatedTodo = static_cast<Todo *>(incidence);
651 651
652// kdDebug() << " has Related" << endl; 652// kdDebug() << " has Related" << endl;
653 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator; 653 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator;
654 itemIterator = mTodoMap.find(relatedTodo); 654 itemIterator = mTodoMap.find(relatedTodo);
655 if (itemIterator == mTodoMap.end()) { 655 if (itemIterator == mTodoMap.end()) {
656// kdDebug() << " related not yet in list" << endl; 656// kdDebug() << " related not yet in list" << endl;
657 itemIterator = insertTodoItem (relatedTodo); 657 itemIterator = insertTodoItem (relatedTodo);
658 } 658 }
659 // isn't this pretty stupid? We give one Todo to the KOTodoViewItem 659 // isn't this pretty stupid? We give one Todo to the KOTodoViewItem
660 // and one into the map. Sure finding is more easy but why? -zecke 660 // and one into the map. Sure finding is more easy but why? -zecke
661 KOTodoViewItem *todoItem = new KOTodoViewItem(*itemIterator,todo,this); 661 KOTodoViewItem *todoItem = new KOTodoViewItem(*itemIterator,todo,this);
662 return mTodoMap.insert(todo,todoItem); 662 return mTodoMap.insert(todo,todoItem);
663 } else { 663 } else {
664// kdDebug() << " no Related" << endl; 664// kdDebug() << " no Related" << endl;
665 // see above -zecke 665 // see above -zecke
666 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this); 666 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this);
667 return mTodoMap.insert(todo,todoItem); 667 return mTodoMap.insert(todo,todoItem);
668 } 668 }
669} 669}
670 670
671 671
672void KOTodoView::updateConfig() 672void KOTodoView::updateConfig()
673{ 673{
674 updateView(); 674 updateView();
675 mTodoListView->repaintContents(); 675 mTodoListView->repaintContents();
676} 676}
677 677
678QPtrList<Incidence> KOTodoView::selectedIncidences() 678QPtrList<Incidence> KOTodoView::selectedIncidences()
679{ 679{
680 QPtrList<Incidence> selected; 680 QPtrList<Incidence> selected;
681 681
682 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem()); 682 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem());
683// if (!item) item = mActiveItem; 683// if (!item) item = mActiveItem;
684 if (item) selected.append(item->todo()); 684 if (item) selected.append(item->todo());
685 685
686 return selected; 686 return selected;
687} 687}
688 688
689QPtrList<Todo> KOTodoView::selectedTodos() 689QPtrList<Todo> KOTodoView::selectedTodos()
690{ 690{
691 QPtrList<Todo> selected; 691 QPtrList<Todo> selected;
692 692
693 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem()); 693 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem());
694// if (!item) item = mActiveItem; 694// if (!item) item = mActiveItem;
695 if (item) selected.append(item->todo()); 695 if (item) selected.append(item->todo());
696 696
697 return selected; 697 return selected;
698} 698}
699 699
700void KOTodoView::changeEventDisplay(Event *, int) 700void KOTodoView::changeEventDisplay(Event *, int)
701{ 701{
702 updateView(); 702 updateView();
703} 703}
704 704
705void KOTodoView::showDates(const QDate &, const QDate &) 705void KOTodoView::showDates(const QDate &, const QDate &)
706{ 706{
707} 707}
708 708
709void KOTodoView::showEvents(QPtrList<Event>) 709void KOTodoView::showEvents(QPtrList<Event>)
710{ 710{
711 kdDebug() << "KOTodoView::selectEvents(): not yet implemented" << endl; 711 kdDebug() << "KOTodoView::selectEvents(): not yet implemented" << endl;
712} 712}
713 713
714void KOTodoView::printPreview(CalPrinter *calPrinter, const QDate &fd, 714void KOTodoView::printPreview(CalPrinter *calPrinter, const QDate &fd,
715 const QDate &td) 715 const QDate &td)
716{ 716{
717#ifndef KORG_NOPRINTER 717#ifndef KORG_NOPRINTER
718 calPrinter->preview(CalPrinter::Todolist, fd, td); 718 calPrinter->preview(CalPrinter::Todolist, fd, td);
719#endif 719#endif
720} 720}
721 721
722void KOTodoView::editItem(QListViewItem *item ) 722void KOTodoView::editItem(QListViewItem *item )
723{ 723{
724 // qDebug("editItem(QListViewItem *item ) "); 724 // qDebug("editItem(QListViewItem *item ) ");
725 emit editTodoSignal(((KOTodoViewItem *)item)->todo()); 725 emit editTodoSignal(((KOTodoViewItem *)item)->todo());
726} 726}
727 727
728void KOTodoView::showItem(QListViewItem *item,const QPoint &,int) 728void KOTodoView::showItem(QListViewItem *item,const QPoint &,int)
729{ 729{
730 emit showTodoSignal(((KOTodoViewItem *)item)->todo()); 730 emit showTodoSignal(((KOTodoViewItem *)item)->todo());
731} 731}
732 732
733void KOTodoView::popupMenu(QListViewItem *item,const QPoint &,int column) 733void KOTodoView::popupMenu(QListViewItem *item,const QPoint &,int column)
734{ 734{
735 pendingSubtodo = 0; 735 pendingSubtodo = 0;
736 mActiveItem = (KOTodoViewItem *)item; 736 mActiveItem = (KOTodoViewItem *)item;
737 if (item) { 737 if (item) {
738 switch (column){ 738 switch (column){
739 case 1: 739 case 1:
740 mPriorityPopupMenu->popup(QCursor::pos ()); break; 740 mPriorityPopupMenu->popup(QCursor::pos ()); break;
741 case 2: 741 case 2:
742 mPercentageCompletedPopupMenu->popup(QCursor::pos ()); break; 742 mPercentageCompletedPopupMenu->popup(QCursor::pos ()); break;
743 case 3: 743 case 3:
744 moveTodo(); 744 moveTodo();
745 break; 745 break;
746 case 8: 746 case 8:
747 getCategoryPopupMenu((KOTodoViewItem *)item)->popup(QCursor::pos ()); break; 747 getCategoryPopupMenu((KOTodoViewItem *)item)->popup(QCursor::pos ()); break;
748 default: 748 default:
749 mItemPopupMenu->popup(QCursor::pos()); 749 mItemPopupMenu->popup(QCursor::pos());
750 } 750 }
751 } else mPopupMenu->popup(QCursor::pos()); 751 } else mPopupMenu->popup(QCursor::pos());
752} 752}
753void KOTodoView::newTodo() 753void KOTodoView::newTodo()
754{ 754{
755 emit newTodoSignal(); 755 emit newTodoSignal();
756} 756}
757 757
758void KOTodoView::newSubTodo() 758void KOTodoView::newSubTodo()
759{ 759{
760 if (mActiveItem) { 760 if (mActiveItem) {
761 emit newSubTodoSignal(mActiveItem->todo()); 761 emit newSubTodoSignal(mActiveItem->todo());
762 } 762 }
763} 763}
764void KOTodoView::unparentTodo() 764void KOTodoView::unparentTodo()
765{ 765{
766 if (mActiveItem) { 766 if (mActiveItem) {
767 emit unparentTodoSignal(mActiveItem->todo()); 767 emit unparentTodoSignal(mActiveItem->todo());
768 } 768 }
769} 769}
770 770
771void KOTodoView::reparentTodo() 771void KOTodoView::reparentTodo()
772{ 772{
773 if (mActiveItem) { 773 if (mActiveItem) {
774 qDebug("KOTodoView::reparentTodo() "); 774 qDebug("KOTodoView::reparentTodo() ");
775 topLevelWidget()->setCaption(i18n("Click on new parent item")); 775 topLevelWidget()->setCaption(i18n("Click on new parent item"));
776 pendingSubtodo = mActiveItem; 776 pendingSubtodo = mActiveItem;
777 } 777 }
778} 778}
779void KOTodoView::editTodo() 779void KOTodoView::editTodo()
780{ 780{
781 if (mActiveItem) { 781 if (mActiveItem) {
782 emit editTodoSignal(mActiveItem->todo()); 782 emit editTodoSignal(mActiveItem->todo());
783 } 783 }
784} 784}
785void KOTodoView::cloneTodo() 785void KOTodoView::cloneTodo()
786{ 786{
787 if (mActiveItem) { 787 if (mActiveItem) {
788 emit cloneTodoSignal((Incidence*)mActiveItem->todo()); 788 emit cloneTodoSignal((Incidence*)mActiveItem->todo());
789 } 789 }
790} 790}
791void KOTodoView::cancelTodo() 791void KOTodoView::cancelTodo()
792{ 792{
793 if (mActiveItem) { 793 if (mActiveItem) {
794 emit cancelTodoSignal((Incidence*)mActiveItem->todo()); 794 emit cancelTodoSignal((Incidence*)mActiveItem->todo());
795 } 795 }
796} 796}
797void KOTodoView::moveTodo() 797void KOTodoView::moveTodo()
798{ 798{
799 if (mActiveItem) { 799 if (mActiveItem) {
800 emit moveTodoSignal((Incidence*)mActiveItem->todo()); 800 emit moveTodoSignal((Incidence*)mActiveItem->todo());
801 } 801 }
802} 802}
803void KOTodoView::beamTodo() 803void KOTodoView::beamTodo()
804{ 804{
805 if (mActiveItem) { 805 if (mActiveItem) {
806 emit beamTodoSignal((Incidence*)mActiveItem->todo()); 806 emit beamTodoSignal((Incidence*)mActiveItem->todo());
807 } 807 }
808} 808}
809 809
810 810
811void KOTodoView::showTodo() 811void KOTodoView::showTodo()
812{ 812{
813 if (mActiveItem) { 813 if (mActiveItem) {
814 emit showTodoSignal(mActiveItem->todo()); 814 emit showTodoSignal(mActiveItem->todo());
815 } 815 }
816} 816}
817 817
818void KOTodoView::deleteTodo() 818void KOTodoView::deleteTodo()
819{ 819{
820 if (mActiveItem) { 820 if (mActiveItem) {
821 if (mActiveItem->childCount()) {
822 KMessageBox::sorry(this,i18n("Cannot delete To-Do which has children."),
823 i18n("Delete To-Do"));
824 } else {
825 emit deleteTodoSignal(mActiveItem->todo()); 821 emit deleteTodoSignal(mActiveItem->todo());
826 }
827 } 822 }
828} 823}
829 824
830void KOTodoView::setNewPriority(int index) 825void KOTodoView::setNewPriority(int index)
831{ 826{
832 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 827 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
833 mActiveItem->todo()->setPriority(mPriority[index]); 828 mActiveItem->todo()->setPriority(mPriority[index]);
834 mActiveItem->construct(); 829 mActiveItem->construct();
835 todoModified (mActiveItem->todo(), KOGlobals::PRIORITY_MODIFIED); 830 todoModified (mActiveItem->todo(), KOGlobals::PRIORITY_MODIFIED);
836 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 831 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
837 } 832 }
838} 833}
839 834
840void KOTodoView::setNewPercentage(int index) 835void KOTodoView::setNewPercentage(int index)
841{ 836{
842 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 837 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
843 if (mPercentage[index] == 100) { 838 if (mPercentage[index] == 100) {
844 mActiveItem->todo()->setCompleted(QDateTime::currentDateTime()); 839 mActiveItem->todo()->setCompleted(QDateTime::currentDateTime());
845 } else { 840 } else {
846 mActiveItem->todo()->setCompleted(false); 841 mActiveItem->todo()->setCompleted(false);
847 } 842 }
848 mActiveItem->todo()->setPercentComplete(mPercentage[index]); 843 mActiveItem->todo()->setPercentComplete(mPercentage[index]);
849 mActiveItem->construct(); 844 mActiveItem->construct();
850 todoModified (mActiveItem->todo (), KOGlobals::COMPLETION_MODIFIED); 845 todoModified (mActiveItem->todo (), KOGlobals::COMPLETION_MODIFIED);
851 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 846 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
852 } 847 }
853} 848}
854 849
855 850
856QPopupMenu * KOTodoView::getCategoryPopupMenu (KOTodoViewItem *todoItem) 851QPopupMenu * KOTodoView::getCategoryPopupMenu (KOTodoViewItem *todoItem)
857{ 852{
858 QPopupMenu* tempMenu = new QPopupMenu (this); 853 QPopupMenu* tempMenu = new QPopupMenu (this);
859 QStringList checkedCategories = todoItem->todo()->categories (); 854 QStringList checkedCategories = todoItem->todo()->categories ();
860 855
861 tempMenu->setCheckable (true); 856 tempMenu->setCheckable (true);
862 for (QStringList::Iterator it = KOPrefs::instance()->mCustomCategories.begin (); 857 for (QStringList::Iterator it = KOPrefs::instance()->mCustomCategories.begin ();
863 it != KOPrefs::instance()->mCustomCategories.end (); 858 it != KOPrefs::instance()->mCustomCategories.end ();
864 ++it) { 859 ++it) {
865 int index = tempMenu->insertItem (*it); 860 int index = tempMenu->insertItem (*it);
866 mCategory[index] = *it; 861 mCategory[index] = *it;
867 if (checkedCategories.find (*it) != checkedCategories.end ()) tempMenu->setItemChecked (index, true); 862 if (checkedCategories.find (*it) != checkedCategories.end ()) tempMenu->setItemChecked (index, true);
868 } 863 }
869 864
870 connect (tempMenu, SIGNAL (activated (int)), SLOT (changedCategories (int))); 865 connect (tempMenu, SIGNAL (activated (int)), SLOT (changedCategories (int)));
871 return tempMenu; 866 return tempMenu;
872 867
873 868
874} 869}
875void KOTodoView::changedCategories(int index) 870void KOTodoView::changedCategories(int index)
876{ 871{
877 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 872 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
878 QStringList categories = mActiveItem->todo()->categories (); 873 QStringList categories = mActiveItem->todo()->categories ();
879 if (categories.find (mCategory[index]) != categories.end ()) 874 if (categories.find (mCategory[index]) != categories.end ())
880 categories.remove (mCategory[index]); 875 categories.remove (mCategory[index]);
881 else 876 else
882 categories.insert (categories.end(), mCategory[index]); 877 categories.insert (categories.end(), mCategory[index]);
883 categories.sort (); 878 categories.sort ();
884 mActiveItem->todo()->setCategories (categories); 879 mActiveItem->todo()->setCategories (categories);
885 mActiveItem->construct(); 880 mActiveItem->construct();
886 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 881 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
887 todoModified (mActiveItem->todo (), KOGlobals::CATEGORY_MODIFIED); 882 todoModified (mActiveItem->todo (), KOGlobals::CATEGORY_MODIFIED);
888 } 883 }
889} 884}
890void KOTodoView::itemDoubleClicked(QListViewItem *item) 885void KOTodoView::itemDoubleClicked(QListViewItem *item)
891{ 886{
892 if ( pendingSubtodo != 0 ) { 887 if ( pendingSubtodo != 0 ) {
893 topLevelWidget()->setCaption(i18n("Reparenting aborted!")); 888 topLevelWidget()->setCaption(i18n("Reparenting aborted!"));
894 } 889 }
895 pendingSubtodo = 0; 890 pendingSubtodo = 0;
896 if (!item) { 891 if (!item) {
897 newTodo(); 892 newTodo();
898 return; 893 return;
899 } 894 }
900 if ( KOPrefs::instance()->mEditOnDoubleClick ) 895 if ( KOPrefs::instance()->mEditOnDoubleClick )
901 editItem( item ); 896 editItem( item );
902 else 897 else
903 showItem( item , QPoint(), 0 ); 898 showItem( item , QPoint(), 0 );
904} 899}
905void KOTodoView::itemClicked(QListViewItem *item) 900void KOTodoView::itemClicked(QListViewItem *item)
906{ 901{
907 902
908 if (!item) { 903 if (!item) {
909 if ( pendingSubtodo != 0 ) { 904 if ( pendingSubtodo != 0 ) {
910 topLevelWidget()->setCaption(i18n("Reparenting aborted!")); 905 topLevelWidget()->setCaption(i18n("Reparenting aborted!"));
911 } 906 }
912 pendingSubtodo = 0; 907 pendingSubtodo = 0;
913 return; 908 return;
914 } 909 }
915 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 910 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
916 if ( pendingSubtodo != 0 ) { 911 if ( pendingSubtodo != 0 ) {
917 bool allowReparent = true; 912 bool allowReparent = true;
918 QListViewItem *par = item; 913 QListViewItem *par = item;
919 while ( par ) { 914 while ( par ) {
920 if ( par == pendingSubtodo ) { 915 if ( par == pendingSubtodo ) {
921 allowReparent = false; 916 allowReparent = false;
922 break; 917 break;
923 } 918 }
924 par = par->parent(); 919 par = par->parent();
925 } 920 }
926 if ( !allowReparent ) { 921 if ( !allowReparent ) {
927 topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!")); 922 topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!"));
928 qDebug("Recursive reparenting not possible "); 923 qDebug("Recursive reparenting not possible ");
929 pendingSubtodo = 0; 924 pendingSubtodo = 0;
930 } else { 925 } else {
931 Todo* newParent = todoItem->todo(); 926 Todo* newParent = todoItem->todo();
932 Todo* newSub = pendingSubtodo->todo(); 927 Todo* newSub = pendingSubtodo->todo();
933 pendingSubtodo = 0; 928 pendingSubtodo = 0;
934 emit reparentTodoSignal( newParent,newSub ); 929 emit reparentTodoSignal( newParent,newSub );
935 return; 930 return;
936 } 931 }
937 } 932 }
938 int completed = todoItem->todo()->isCompleted(); // Completed or not? 933 int completed = todoItem->todo()->isCompleted(); // Completed or not?
939 934
940 if (todoItem->isOn()) { 935 if (todoItem->isOn()) {
941 if (!completed) { 936 if (!completed) {
942 todoItem->todo()->setCompleted(QDateTime::currentDateTime()); 937 todoItem->todo()->setCompleted(QDateTime::currentDateTime());
943 } 938 }
944 } else { 939 } else {
945 if (completed) { 940 if (completed) {
946 todoItem->todo()->setCompleted(false); 941 todoItem->todo()->setCompleted(false);
947 } 942 }
948 } 943 }
949} 944}
950 945
951void KOTodoView::setDocumentId( const QString &id ) 946void KOTodoView::setDocumentId( const QString &id )
952{ 947{
953 kdDebug() << "KOTodoView::setDocumentId()" << endl; 948 kdDebug() << "KOTodoView::setDocumentId()" << endl;
954 949
955 mDocPrefs->setDoc( id ); 950 mDocPrefs->setDoc( id );
956} 951}
957 952
958void KOTodoView::itemStateChanged( QListViewItem *item ) 953void KOTodoView::itemStateChanged( QListViewItem *item )
959{ 954{
960 if (!item) return; 955 if (!item) return;
961 956
962 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 957 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
963 958
964// kdDebug() << "KOTodoView::itemStateChanged(): " << todoItem->todo()->summary() << endl; 959// kdDebug() << "KOTodoView::itemStateChanged(): " << todoItem->todo()->summary() << endl;
965 960
966 if( mDocPrefs ) mDocPrefs->writeEntry( todoItem->todo()->uid(), todoItem->isOpen() ); 961 if( mDocPrefs ) mDocPrefs->writeEntry( todoItem->todo()->uid(), todoItem->isOpen() );
967} 962}
968 963
969void KOTodoView::saveLayout(KConfig *config, const QString &group) const 964void KOTodoView::saveLayout(KConfig *config, const QString &group) const
970{ 965{
971 mTodoListView->saveLayout(config,group); 966 mTodoListView->saveLayout(config,group);
972} 967}
973 968
974void KOTodoView::restoreLayout(KConfig *config, const QString &group) 969void KOTodoView::restoreLayout(KConfig *config, const QString &group)
975{ 970{
976 mTodoListView->restoreLayout(config,group); 971 mTodoListView->restoreLayout(config,group);
977} 972}
978 973
979void KOTodoView::processSelectionChange() 974void KOTodoView::processSelectionChange()
980{ 975{
981// kdDebug() << "KOTodoView::processSelectionChange()" << endl; 976// kdDebug() << "KOTodoView::processSelectionChange()" << endl;
982 977
983 KOTodoViewItem *item = 978 KOTodoViewItem *item =
984 static_cast<KOTodoViewItem *>( mTodoListView->selectedItem() ); 979 static_cast<KOTodoViewItem *>( mTodoListView->selectedItem() );
985 980
986 if ( !item ) { 981 if ( !item ) {
987 emit incidenceSelected( 0 ); 982 emit incidenceSelected( 0 );
988 } else { 983 } else {
989 emit incidenceSelected( item->todo() ); 984 emit incidenceSelected( item->todo() );
990 } 985 }
991} 986}
992 987
993void KOTodoView::modified(bool b) 988void KOTodoView::modified(bool b)
994{ 989{
995 emit isModified(b); 990 emit isModified(b);
996} 991}
997void KOTodoView::setTodoModified( Todo* todo ) 992void KOTodoView::setTodoModified( Todo* todo )
998{ 993{
999 todoModified( todo, KOGlobals::UNKNOWN_MODIFIED ); 994 todoModified( todo, KOGlobals::UNKNOWN_MODIFIED );
1000} 995}
1001void KOTodoView::clearSelection() 996void KOTodoView::clearSelection()
1002{ 997{
1003 mTodoListView->selectAll( false ); 998 mTodoListView->selectAll( false );
1004} 999}
1005 1000
1006void KOTodoView::purgeCompleted() 1001void KOTodoView::purgeCompleted()
1007{ 1002{
1008 emit purgeCompletedSignal(); 1003 emit purgeCompletedSignal();
1009} 1004}
1010void KOTodoView::toggleQuickTodo() 1005void KOTodoView::toggleQuickTodo()
1011{ 1006{
1012 if ( mQuickAdd->isVisible() ) { 1007 if ( mQuickAdd->isVisible() ) {
1013 mQuickAdd->hide(); 1008 mQuickAdd->hide();
1014 KOPrefs::instance()->mEnableQuickTodo = false; 1009 KOPrefs::instance()->mEnableQuickTodo = false;
1015 } 1010 }
1016 else { 1011 else {
1017 mQuickAdd->show(); 1012 mQuickAdd->show();
1018 KOPrefs::instance()->mEnableQuickTodo = true; 1013 KOPrefs::instance()->mEnableQuickTodo = true;
1019 } 1014 }
1020 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo); 1015 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo);
1021 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo ); 1016 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo );
1022} 1017}
1023 1018
1024void KOTodoView::toggleRunning() 1019void KOTodoView::toggleRunning()
1025{ 1020{
1026 KOPrefs::instance()->mHideNonStartedTodos = !KOPrefs::instance()->mHideNonStartedTodos; 1021 KOPrefs::instance()->mHideNonStartedTodos = !KOPrefs::instance()->mHideNonStartedTodos;
1027 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos); 1022 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos);
1028 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos ); 1023 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos );
1029 updateView(); 1024 updateView();
1030} 1025}
1031 1026
1032void KOTodoView::toggleCompleted() 1027void KOTodoView::toggleCompleted()
1033{ 1028{
1034 KOPrefs::instance()->mShowCompletedTodo = !KOPrefs::instance()->mShowCompletedTodo; 1029 KOPrefs::instance()->mShowCompletedTodo = !KOPrefs::instance()->mShowCompletedTodo;
1035 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo ); 1030 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo );
1036 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo ); 1031 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo );
1037 updateView(); 1032 updateView();
1038} 1033}
1039 1034
1040void KOTodoView::addQuickTodo() 1035void KOTodoView::addQuickTodo()
1041{ 1036{
1042 Todo *todo = new Todo(); 1037 Todo *todo = new Todo();
1043 todo->setSummary(mQuickAdd->text()); 1038 todo->setSummary(mQuickAdd->text());
1044 todo->setOrganizer(KOPrefs::instance()->email()); 1039 todo->setOrganizer(KOPrefs::instance()->email());
1045 CalFilter * cf = mCalendar->filter(); 1040 CalFilter * cf = mCalendar->filter();
1046 if ( cf ) { 1041 if ( cf ) {
1047 if ( cf->isEnabled()&& cf->showCategories()) { 1042 if ( cf->isEnabled()&& cf->showCategories()) {
1048 todo->setCategories(cf->categoryList()); 1043 todo->setCategories(cf->categoryList());
1049 } 1044 }
1050 if ( cf->isEnabled() ) 1045 if ( cf->isEnabled() )
1051 todo->setSecrecy( cf->getSecrecy()); 1046 todo->setSecrecy( cf->getSecrecy());
1052 } 1047 }
1053 mCalendar->addTodo(todo); 1048 mCalendar->addTodo(todo);
1054 mQuickAdd->setText(""); 1049 mQuickAdd->setText("");
1055 todoModified (todo, KOGlobals::EVENTADDED ); 1050 todoModified (todo, KOGlobals::EVENTADDED );
1056 updateView(); 1051 updateView();
1057} 1052}
1058void KOTodoView::keyPressEvent ( QKeyEvent * e ) 1053void KOTodoView::keyPressEvent ( QKeyEvent * e )
1059{ 1054{
1060 // e->ignore(); 1055 // e->ignore();
1061 //return; 1056 //return;
1062 //qDebug("KOTodoView::keyPressEvent "); 1057 //qDebug("KOTodoView::keyPressEvent ");
1063 switch ( e->key() ) { 1058 switch ( e->key() ) {
1064 case Qt::Key_Down: 1059 case Qt::Key_Down:
1065 case Qt::Key_Up: 1060 case Qt::Key_Up:
1066 QWidget::keyPressEvent ( e ); 1061 QWidget::keyPressEvent ( e );
1067 break; 1062 break;
1068 1063
1069 case Qt::Key_Q: 1064 case Qt::Key_Q:
1070 toggleQuickTodo(); 1065 toggleQuickTodo();
1071 break; 1066 break;
1072 case Qt::Key_U: 1067 case Qt::Key_U:
1073 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { 1068 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) {
1074 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 1069 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1075 unparentTodo(); 1070 unparentTodo();
1076 e->accept(); 1071 e->accept();
1077 } else 1072 } else
1078 e->ignore(); 1073 e->ignore();
1079 break; 1074 break;
1080 case Qt::Key_S: 1075 case Qt::Key_S:
1081 if ( e->state() == Qt::ControlButton ) { 1076 if ( e->state() == Qt::ControlButton ) {
1082 e->ignore(); 1077 e->ignore();
1083 break; 1078 break;
1084 } 1079 }
1085 if ( e->state() == Qt::ShiftButton ) { 1080 if ( e->state() == Qt::ShiftButton ) {
1086 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 1081 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1087 reparentTodo(); 1082 reparentTodo();
1088 e->accept(); 1083 e->accept();
1089 } else 1084 } else
1090 e->ignore(); 1085 e->ignore();
1091 break; 1086 break;
1092 case Qt::Key_P: 1087 case Qt::Key_P:
1093 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { 1088 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) {
1094 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 1089 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1095 if ( pendingSubtodo ) 1090 if ( pendingSubtodo )
1096 itemClicked(mActiveItem); 1091 itemClicked(mActiveItem);
1097 e->accept(); 1092 e->accept();
1098 } else 1093 } else
1099 e->ignore(); 1094 e->ignore();
1100 break; 1095 break;
1101 case Qt::Key_Escape: 1096 case Qt::Key_Escape:
1102 if ( pendingSubtodo ) { 1097 if ( pendingSubtodo ) {
1103 itemClicked(0); 1098 itemClicked(0);
1104 e->accept(); 1099 e->accept();
1105 } else 1100 } else
1106 e->ignore(); 1101 e->ignore();
1107 break; 1102 break;
1108 default: 1103 default:
1109 e->ignore(); 1104 e->ignore();
1110 } 1105 }
1111 1106
1112 if ( true ) { 1107 if ( true ) {
1113 if ( e->key() == Qt::Key_I ) { 1108 if ( e->key() == Qt::Key_I ) {
1114 KOTodoViewItem*cn = (KOTodoViewItem*)mTodoListView->currentItem(); 1109 KOTodoViewItem*cn = (KOTodoViewItem*)mTodoListView->currentItem();
1115 if ( cn ) { 1110 if ( cn ) {
1116 mActiveItem = cn; 1111 mActiveItem = cn;
1117 KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); 1112 KOTodoViewItem* ci = (KOTodoViewItem*)( cn );
1118 if ( ci ){ 1113 if ( ci ){
1119 showTodo(); 1114 showTodo();
1120 cn = (KOTodoViewItem*)cn->itemBelow(); 1115 cn = (KOTodoViewItem*)cn->itemBelow();
1121 if ( cn ) { 1116 if ( cn ) {
1122 mTodoListView->setCurrentItem ( cn ); 1117 mTodoListView->setCurrentItem ( cn );
1123 mTodoListView->ensureItemVisible ( cn ); 1118 mTodoListView->ensureItemVisible ( cn );
1124 } 1119 }
1125 1120
1126 } 1121 }
1127 } 1122 }
1128 e->accept(); 1123 e->accept();
1129 1124
1130 } 1125 }
1131 1126
1132 } 1127 }
1133 1128
1134} 1129}
1135void KOTodoView::updateTodo( Todo * t, int type ) 1130void KOTodoView::updateTodo( Todo * t, int type )
1136{ 1131{
1137 if ( mBlockUpdate) 1132 if ( mBlockUpdate)
1138 return; 1133 return;
1139 1134
1140 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator; 1135 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator;
1141 itemIterator = mTodoMap.find(t); 1136 itemIterator = mTodoMap.find(t);
1142 if (itemIterator != mTodoMap.end()) { 1137 if (itemIterator != mTodoMap.end()) {
1143 (*itemIterator)->construct(); 1138 (*itemIterator)->construct();
1144 } else { 1139 } else {
1145 if ( type == KOGlobals::EVENTADDED ) { 1140 if ( type == KOGlobals::EVENTADDED ) {
1146 insertTodoItem( t ); 1141 insertTodoItem( t );
1147 } 1142 }
1148 } 1143 }
1149 1144
1150} 1145}
1151 1146
1152void KOTodoView::todoModified(Todo * t , int p ) 1147void KOTodoView::todoModified(Todo * t , int p )
1153{ 1148{
1154 mBlockUpdate = true; 1149 mBlockUpdate = true;
1155 emit todoModifiedSignal ( t, p ); 1150 emit todoModifiedSignal ( t, p );
1156 mBlockUpdate = false; 1151 mBlockUpdate = false;
1157} 1152}
diff --git a/korganizer/mainwindow.cpp b/korganizer/mainwindow.cpp
index 151b55b..7b07a2e 100644
--- a/korganizer/mainwindow.cpp
+++ b/korganizer/mainwindow.cpp
@@ -1,1902 +1,1911 @@
1#include <stdlib.h> 1#include <stdlib.h>
2 2
3#include <qaction.h> 3#include <qaction.h>
4#include <qpopupmenu.h> 4#include <qpopupmenu.h>
5#include <qpainter.h> 5#include <qpainter.h>
6#include <qwhatsthis.h> 6#include <qwhatsthis.h>
7#include <qpushbutton.h> 7#include <qpushbutton.h>
8#include <qmessagebox.h> 8#include <qmessagebox.h>
9#include <qlineedit.h> 9#include <qlineedit.h>
10#include <qtextcodec.h> 10#include <qtextcodec.h>
11#include <qfile.h> 11#include <qfile.h>
12#include <qdir.h> 12#include <qdir.h>
13#include <qapp.h> 13#include <qapp.h>
14#include <qfileinfo.h> 14#include <qfileinfo.h>
15#include <qlabel.h> 15#include <qlabel.h>
16#include <qspinbox.h> 16#include <qspinbox.h>
17#include <qcheckbox.h> 17#include <qcheckbox.h>
18#include <qmap.h> 18#include <qmap.h>
19#include <qwmatrix.h> 19#include <qwmatrix.h>
20#include <qtextbrowser.h> 20#include <qtextbrowser.h>
21#include <qtextstream.h> 21#include <qtextstream.h>
22#ifndef DESKTOP_VERSION 22#ifndef DESKTOP_VERSION
23#include <qpe/global.h> 23#include <qpe/global.h>
24#include <qpe/qpemenubar.h> 24#include <qpe/qpemenubar.h>
25#include <qpe/qpetoolbar.h> 25#include <qpe/qpetoolbar.h>
26#include <qpe/resource.h> 26#include <qpe/resource.h>
27#include <qpe/qpeapplication.h> 27#include <qpe/qpeapplication.h>
28#include <qtopia/alarmserver.h> 28#include <qtopia/alarmserver.h>
29#include <qtopia/qcopenvelope_qws.h> 29#include <qtopia/qcopenvelope_qws.h>
30#include <unistd.h> // for sleep 30#include <unistd.h> // for sleep
31#else 31#else
32#include <qmenubar.h> 32#include <qmenubar.h>
33#include <qtoolbar.h> 33#include <qtoolbar.h>
34#include <qapplication.h> 34#include <qapplication.h>
35//#include <resource.h> 35//#include <resource.h>
36 36
37#endif 37#endif
38#include <libkcal/calendarlocal.h> 38#include <libkcal/calendarlocal.h>
39#include <libkcal/todo.h> 39#include <libkcal/todo.h>
40#include <libkcal/phoneformat.h> 40#include <libkcal/phoneformat.h>
41#include <libkdepim/ksyncprofile.h> 41#include <libkdepim/ksyncprofile.h>
42#include <libkdepim/phoneaccess.h> 42#include <libkdepim/phoneaccess.h>
43#include <libkcal/kincidenceformatter.h> 43#include <libkcal/kincidenceformatter.h>
44#include <libkdepim/kpimglobalprefs.h> 44#include <libkdepim/kpimglobalprefs.h>
45 45
46#include "calendarview.h" 46#include "calendarview.h"
47#include "koviewmanager.h" 47#include "koviewmanager.h"
48#include "datenavigator.h" 48#include "datenavigator.h"
49#include "koagendaview.h" 49#include "koagendaview.h"
50#include "koagenda.h" 50#include "koagenda.h"
51#include "kodialogmanager.h" 51#include "kodialogmanager.h"
52#include "kdialogbase.h" 52#include "kdialogbase.h"
53#include "kapplication.h" 53#include "kapplication.h"
54#include "kofilterview.h" 54#include "kofilterview.h"
55#include "kstandarddirs.h" 55#include "kstandarddirs.h"
56#include "koprefs.h" 56#include "koprefs.h"
57#include "kfiledialog.h" 57#include "kfiledialog.h"
58#include "koglobals.h" 58#include "koglobals.h"
59#include "kglobal.h" 59#include "kglobal.h"
60#include "klocale.h" 60#include "klocale.h"
61#include "kconfig.h" 61#include "kconfig.h"
62#include "simplealarmclient.h" 62#include "simplealarmclient.h"
63#include "externalapphandler.h" 63#include "externalapphandler.h"
64 64
65using namespace KCal; 65using namespace KCal;
66#ifndef _WIN32_ 66#ifndef _WIN32_
67#include <unistd.h> 67#include <unistd.h>
68#else 68#else
69#include "koimportoldialog.h" 69#include "koimportoldialog.h"
70#endif 70#endif
71#include "mainwindow.h" 71#include "mainwindow.h"
72 72
73class KOex2phonePrefs : public QDialog 73class KOex2phonePrefs : public QDialog
74{ 74{
75 public: 75 public:
76 KOex2phonePrefs( QWidget *parent=0, const char *name=0 ) : 76 KOex2phonePrefs( QWidget *parent=0, const char *name=0 ) :
77 QDialog( parent, name, true ) 77 QDialog( parent, name, true )
78 { 78 {
79 setCaption( i18n("Export to phone options") ); 79 setCaption( i18n("Export to phone options") );
80 QVBoxLayout* lay = new QVBoxLayout( this ); 80 QVBoxLayout* lay = new QVBoxLayout( this );
81 lay->setSpacing( 3 ); 81 lay->setSpacing( 3 );
82 lay->setMargin( 3 ); 82 lay->setMargin( 3 );
83 QLabel *lab; 83 QLabel *lab;
84 lay->addWidget(lab = new QLabel( i18n("Please read Help-Sync Howto\nto know what settings to use."), this ) ); 84 lay->addWidget(lab = new QLabel( i18n("Please read Help-Sync Howto\nto know what settings to use."), this ) );
85 lab->setAlignment (AlignHCenter ); 85 lab->setAlignment (AlignHCenter );
86 QHBox* temphb; 86 QHBox* temphb;
87 temphb = new QHBox( this ); 87 temphb = new QHBox( this );
88 new QLabel( i18n("I/O device: "), temphb ); 88 new QLabel( i18n("I/O device: "), temphb );
89 mPhoneDevice = new QLineEdit( temphb); 89 mPhoneDevice = new QLineEdit( temphb);
90 lay->addWidget( temphb ); 90 lay->addWidget( temphb );
91 temphb = new QHBox( this ); 91 temphb = new QHBox( this );
92 new QLabel( i18n("Connection: "), temphb ); 92 new QLabel( i18n("Connection: "), temphb );
93 mPhoneConnection = new QLineEdit( temphb); 93 mPhoneConnection = new QLineEdit( temphb);
94 lay->addWidget( temphb ); 94 lay->addWidget( temphb );
95 temphb = new QHBox( this ); 95 temphb = new QHBox( this );
96 new QLabel( i18n("Model(opt.): "), temphb ); 96 new QLabel( i18n("Model(opt.): "), temphb );
97 mPhoneModel = new QLineEdit( temphb); 97 mPhoneModel = new QLineEdit( temphb);
98 lay->addWidget( temphb ); 98 lay->addWidget( temphb );
99 mWriteBackFuture= new QCheckBox( i18n("Write back events in future only"), this ); 99 mWriteBackFuture= new QCheckBox( i18n("Write back events in future only"), this );
100 mWriteBackFuture->setChecked( true ); 100 mWriteBackFuture->setChecked( true );
101 lay->addWidget( mWriteBackFuture ); 101 lay->addWidget( mWriteBackFuture );
102 temphb = new QHBox( this ); 102 temphb = new QHBox( this );
103 new QLabel( i18n("Max. weeks in future: ") , temphb ); 103 new QLabel( i18n("Max. weeks in future: ") , temphb );
104 mWriteBackFutureWeeks= new QSpinBox(1,104, 1, temphb); 104 mWriteBackFutureWeeks= new QSpinBox(1,104, 1, temphb);
105 mWriteBackFutureWeeks->setValue( 8 ); 105 mWriteBackFutureWeeks->setValue( 8 );
106 lay->addWidget( temphb ); 106 lay->addWidget( temphb );
107 lay->addWidget(lab = new QLabel( i18n("NOTE: This will remove all old\ntodo/calendar data on phone!"), this ) ); 107 lay->addWidget(lab = new QLabel( i18n("NOTE: This will remove all old\ntodo/calendar data on phone!"), this ) );
108 lab->setAlignment (AlignHCenter ); 108 lab->setAlignment (AlignHCenter );
109 QPushButton * ok = new QPushButton( i18n("Export to mobile phone!"), this ); 109 QPushButton * ok = new QPushButton( i18n("Export to mobile phone!"), this );
110 lay->addWidget( ok ); 110 lay->addWidget( ok );
111 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 111 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
112 lay->addWidget( cancel ); 112 lay->addWidget( cancel );
113 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 113 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
114 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 114 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
115 resize( 220, 240 ); 115 resize( 220, 240 );
116 qApp->processEvents(); 116 qApp->processEvents();
117 int dw = QApplication::desktop()->width(); 117 int dw = QApplication::desktop()->width();
118 int dh = QApplication::desktop()->height(); 118 int dh = QApplication::desktop()->height();
119 move( (dw-width())/2, (dh - height() )/2 ); 119 move( (dw-width())/2, (dh - height() )/2 );
120 } 120 }
121 121
122public: 122public:
123 QLineEdit* mPhoneConnection, *mPhoneDevice, *mPhoneModel; 123 QLineEdit* mPhoneConnection, *mPhoneDevice, *mPhoneModel;
124 QCheckBox* mWriteBackFuture; 124 QCheckBox* mWriteBackFuture;
125 QSpinBox* mWriteBackFutureWeeks; 125 QSpinBox* mWriteBackFutureWeeks;
126}; 126};
127 127
128int globalFlagBlockStartup; 128int globalFlagBlockStartup;
129MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) : 129MainWindow::MainWindow( QWidget *parent, const char *name, QString msg) :
130 QMainWindow( parent, name ) 130 QMainWindow( parent, name )
131{ 131{
132 132
133#ifdef DESKTOP_VERSION 133#ifdef DESKTOP_VERSION
134 setFont( QFont("Arial"), 14 ); 134 setFont( QFont("Arial"), 14 );
135#endif 135#endif
136 mClosed = false; 136 mClosed = false;
137 //QString confFile = KStandardDirs::appDir() + "config/korganizerrc"; 137 //QString confFile = KStandardDirs::appDir() + "config/korganizerrc";
138 QString confFile = locateLocal("config","korganizerrc"); 138 QString confFile = locateLocal("config","korganizerrc");
139 QFileInfo finf ( confFile ); 139 QFileInfo finf ( confFile );
140 bool showWarning = !finf.exists(); 140 bool showWarning = !finf.exists();
141 setIcon(SmallIcon( "ko24" ) ); 141 setIcon(SmallIcon( "ko24" ) );
142 mBlockAtStartup = true; 142 mBlockAtStartup = true;
143 mFlagKeyPressed = false; 143 mFlagKeyPressed = false;
144 setCaption("KOrganizer/Pi"); 144 setCaption("KOrganizer/Pi");
145 KOPrefs *p = KOPrefs::instance(); 145 KOPrefs *p = KOPrefs::instance();
146 KPimGlobalPrefs::instance()->setGlobalConfig(); 146 KPimGlobalPrefs::instance()->setGlobalConfig();
147 if ( p->mHourSize > 18 ) 147 if ( p->mHourSize > 18 )
148 p->mHourSize = 18; 148 p->mHourSize = 18;
149 QMainWindow::ToolBarDock tbd; 149 QMainWindow::ToolBarDock tbd;
150 if ( p->mToolBarHor ) { 150 if ( p->mToolBarHor ) {
151 if ( p->mToolBarUp ) 151 if ( p->mToolBarUp )
152 tbd = Bottom; 152 tbd = Bottom;
153 else 153 else
154 tbd = Top; 154 tbd = Top;
155 } 155 }
156 else { 156 else {
157 if ( p->mToolBarUp ) 157 if ( p->mToolBarUp )
158 tbd = Right; 158 tbd = Right;
159 else 159 else
160 tbd = Left; 160 tbd = Left;
161 } 161 }
162 if ( KOPrefs::instance()->mUseAppColors ) 162 if ( KOPrefs::instance()->mUseAppColors )
163 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true ); 163 QApplication::setPalette( QPalette (KOPrefs::instance()->mAppColor1, KOPrefs::instance()->mAppColor2), true );
164 globalFlagBlockStartup = 1; 164 globalFlagBlockStartup = 1;
165 iconToolBar = new QPEToolBar( this ); 165 iconToolBar = new QPEToolBar( this );
166 addToolBar (iconToolBar , tbd ); 166 addToolBar (iconToolBar , tbd );
167 mCalendarModifiedFlag = false; 167 mCalendarModifiedFlag = false;
168 168
169 QLabel* splash = new QLabel(i18n("KO/Pi is starting ... "), this ); 169 QLabel* splash = new QLabel(i18n("KO/Pi is starting ... "), this );
170 splash->setAlignment ( AlignCenter ); 170 splash->setAlignment ( AlignCenter );
171 setCentralWidget( splash ); 171 setCentralWidget( splash );
172#ifndef DESKTOP_VERSION 172#ifndef DESKTOP_VERSION
173 showMaximized(); 173 showMaximized();
174#endif 174#endif
175 //qDebug("Mainwidget x %d y %d w %d h %d", x(), y(), width(), height ()); 175 //qDebug("Mainwidget x %d y %d w %d h %d", x(), y(), width(), height ());
176 setDefaultPreferences(); 176 setDefaultPreferences();
177 mCalendar = new CalendarLocal(); 177 mCalendar = new CalendarLocal();
178 mView = new CalendarView( mCalendar, this,"mCalendar " ); 178 mView = new CalendarView( mCalendar, this,"mCalendar " );
179 mView->hide(); 179 mView->hide();
180 //mView->resize(splash->size() ); 180 //mView->resize(splash->size() );
181 initActions(); 181 initActions();
182 mSyncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)mView, KSyncManager::KOPI, KOPrefs::instance(), syncMenu); 182 mSyncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)mView, KSyncManager::KOPI, KOPrefs::instance(), syncMenu);
183 mSyncManager->setBlockSave(false); 183 mSyncManager->setBlockSave(false);
184 mView->setSyncManager(mSyncManager); 184 mView->setSyncManager(mSyncManager);
185#ifndef DESKTOP_VERSION 185#ifndef DESKTOP_VERSION
186 iconToolBar->show(); 186 iconToolBar->show();
187 qApp->processEvents(); 187 qApp->processEvents();
188#endif 188#endif
189 //qDebug("Splashwidget x %d y %d w %d h %d", splash-> x(), splash->y(), splash->width(),splash-> height ()); 189 //qDebug("Splashwidget x %d y %d w %d h %d", splash-> x(), splash->y(), splash->width(),splash-> height ());
190 int vh = height() ; 190 int vh = height() ;
191 int vw = width(); 191 int vw = width();
192 //qDebug("Toolbar hei %d ",iconToolBar->height() ); 192 //qDebug("Toolbar hei %d ",iconToolBar->height() );
193 if ( iconToolBar->orientation () == Qt:: Horizontal ) { 193 if ( iconToolBar->orientation () == Qt:: Horizontal ) {
194 vh -= iconToolBar->height(); 194 vh -= iconToolBar->height();
195 } else { 195 } else {
196 vw -= iconToolBar->height(); 196 vw -= iconToolBar->height();
197 } 197 }
198 //mView->setMaximumSize( splash->size() ); 198 //mView->setMaximumSize( splash->size() );
199 //mView->resize( splash->size() ); 199 //mView->resize( splash->size() );
200 //qDebug("MainView x %d y %d w %d h %d", mView->x(),mView-> y(), mView->width(), mView->height ()); 200 //qDebug("MainView x %d y %d w %d h %d", mView->x(),mView-> y(), mView->width(), mView->height ());
201 mView->readSettings(); 201 mView->readSettings();
202 bool newFile = false; 202 bool newFile = false;
203 if( !QFile::exists( defaultFileName() ) ) { 203 if( !QFile::exists( defaultFileName() ) ) {
204 QFileInfo finfo ( defaultFileName() ); 204 QFileInfo finfo ( defaultFileName() );
205 QString oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/Applications/korganizer/mycalendar.ics"); 205 QString oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/Applications/korganizer/mycalendar.ics");
206 qDebug("oldfile %s ", oldFile.latin1()); 206 qDebug("oldfile %s ", oldFile.latin1());
207 QString message = "You are starting KO/Pi for the\nfirst time after updating to a\nversion >= 1.9.1. The location of the\ndefault calendar file has changed.\nA mycalendar.ics file was detected\nat the old location.\nThis file will be loaded now\nand stored at the new location!\n(Config file location has changed, too!)\nPlease read menu Help-What's New!\n"; 207 QString message = "You are starting KO/Pi for the\nfirst time after updating to a\nversion >= 1.9.1. The location of the\ndefault calendar file has changed.\nA mycalendar.ics file was detected\nat the old location.\nThis file will be loaded now\nand stored at the new location!\n(Config file location has changed, too!)\nPlease read menu Help-What's New!\n";
208 finfo.setFile( oldFile ); 208 finfo.setFile( oldFile );
209 if (finfo.exists() ) { 209 if (finfo.exists() ) {
210 KMessageBox::information( this, message); 210 KMessageBox::information( this, message);
211 mView->openCalendar( oldFile ); 211 mView->openCalendar( oldFile );
212 qApp->processEvents(); 212 qApp->processEvents();
213 } else { 213 } else {
214 oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/korganizer/mycalendar.ics"); 214 oldFile = QDir::convertSeparators( QDir::homeDirPath()+"/korganizer/mycalendar.ics");
215 finfo.setFile( oldFile ); 215 finfo.setFile( oldFile );
216 if (finfo.exists() ) { 216 if (finfo.exists() ) {
217 KMessageBox::information( this, message); 217 KMessageBox::information( this, message);
218 mView->openCalendar( oldFile ); 218 mView->openCalendar( oldFile );
219 qApp->processEvents(); 219 qApp->processEvents();
220 } 220 }
221 } 221 }
222 mView->saveCalendar( defaultFileName() ); 222 mView->saveCalendar( defaultFileName() );
223 newFile = true; 223 newFile = true;
224 } 224 }
225 225
226 QTime neededSaveTime = QDateTime::currentDateTime().time(); 226 QTime neededSaveTime = QDateTime::currentDateTime().time();
227 mView->openCalendar( defaultFileName() ); 227 mView->openCalendar( defaultFileName() );
228 int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() ); 228 int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() );
229 qDebug("KO: Calendar loading time: %d ms",msNeeded ); 229 qDebug("KO: Calendar loading time: %d ms",msNeeded );
230 230
231 if ( KPimGlobalPrefs::instance()->mPreferredLanguage != KOPrefs::instance()->mOldLoadedLanguage ) { 231 if ( KPimGlobalPrefs::instance()->mPreferredLanguage != KOPrefs::instance()->mOldLoadedLanguage ) {
232 KOPrefs::instance()->setCategoryDefaults(); 232 KOPrefs::instance()->setCategoryDefaults();
233 int count = mView->addCategories(); 233 int count = mView->addCategories();
234 } 234 }
235 processIncidenceSelection( 0 ); 235 processIncidenceSelection( 0 );
236 connect( mView, SIGNAL( incidenceSelected( Incidence * ) ), 236 connect( mView, SIGNAL( incidenceSelected( Incidence * ) ),
237 SLOT( processIncidenceSelection( Incidence * ) ) ); 237 SLOT( processIncidenceSelection( Incidence * ) ) );
238 connect( mView, SIGNAL( modifiedChanged( bool ) ), 238 connect( mView, SIGNAL( modifiedChanged( bool ) ),
239 SLOT( slotModifiedChanged( bool ) ) ); 239 SLOT( slotModifiedChanged( bool ) ) );
240 240
241 241
242 connect( mView, SIGNAL( tempDisableBR(bool) ), 242 connect( mView, SIGNAL( tempDisableBR(bool) ),
243 SLOT( disableBR(bool) ) ); 243 SLOT( disableBR(bool) ) );
244 connect( &mSaveTimer, SIGNAL( timeout() ), SLOT( save() ) ); 244 connect( &mSaveTimer, SIGNAL( timeout() ), SLOT( save() ) );
245 mView->setModified( false ); 245 mView->setModified( false );
246 mBlockAtStartup = false; 246 mBlockAtStartup = false;
247 mView->setModified( false ); 247 mView->setModified( false );
248 setCentralWidget( mView ); 248 setCentralWidget( mView );
249 globalFlagBlockStartup = 0; 249 globalFlagBlockStartup = 0;
250 mView->show(); 250 mView->show();
251 delete splash; 251 delete splash;
252 if ( newFile ) 252 if ( newFile )
253 mView->updateConfig(); 253 mView->updateConfig();
254 // qApp->processEvents(); 254 // qApp->processEvents();
255 //qDebug("MainView x %d y %d w %d h %d", mView->x(),mView-> y(), mView->width(), mView->height ()); 255 //qDebug("MainView x %d y %d w %d h %d", mView->x(),mView-> y(), mView->width(), mView->height ());
256 //fillSyncMenu(); 256 //fillSyncMenu();
257 257
258 258
259 connect(mSyncManager , SIGNAL( save() ), this, SLOT( save() ) ); 259 connect(mSyncManager , SIGNAL( save() ), this, SLOT( save() ) );
260 connect(mSyncManager , SIGNAL( request_file() ), this, SLOT( syncFileRequest() ) ); 260 connect(mSyncManager , SIGNAL( request_file() ), this, SLOT( syncFileRequest() ) );
261 connect(mSyncManager , SIGNAL( getFile( bool )), this, SLOT(getFile( bool ) ) ); 261 connect(mSyncManager , SIGNAL( getFile( bool )), this, SLOT(getFile( bool ) ) );
262 mSyncManager->setDefaultFileName( defaultFileName()); 262 mSyncManager->setDefaultFileName( defaultFileName());
263 connect ( syncMenu, SIGNAL( activated ( int ) ), mSyncManager, SLOT (slotSyncMenu( int ) ) ); 263 connect ( syncMenu, SIGNAL( activated ( int ) ), mSyncManager, SLOT (slotSyncMenu( int ) ) );
264 mSyncManager->fillSyncMenu(); 264 mSyncManager->fillSyncMenu();
265 265
266 266
267 267
268 mView->viewManager()->agendaView()->setStartHour( KOPrefs::instance()->mDayBegins ); 268 mView->viewManager()->agendaView()->setStartHour( KOPrefs::instance()->mDayBegins );
269 if ( showWarning ) { 269 if ( showWarning ) {
270 KMessageBox::information( this, 270 KMessageBox::information( this,
271 "You are starting KO/Pi for the first time.\nPlease read menu: Help-What's New,\nif you did an update!\nPlease choose your timezone in the \nConfigure Dialog TAB Time Zone!\nPlease choose your language\nin the TAB Locale!\nYou get the Configure Dialog\nvia Menu: Actions - Configure....\nClick OK to show the Configure Dialog!\n", "KO/Pi information"); 271 "You are starting KO/Pi for the first time.\nPlease read menu: Help-What's New,\nif you did an update!\nPlease choose your timezone in the \nConfigure Dialog TAB Time Zone!\nPlease choose your language\nin the TAB Locale!\nYou get the Configure Dialog\nvia Menu: Actions - Configure....\nClick OK to show the Configure Dialog!\n", "KO/Pi information");
272 qApp->processEvents(); 272 qApp->processEvents();
273 mView->dialogManager()->showSyncOptions(); 273 mView->dialogManager()->showSyncOptions();
274 } 274 }
275 275
276 //US listen for result adressed from Ka/Pi 276 //US listen for result adressed from Ka/Pi
277#ifndef DESKTOP_VERSION 277#ifndef DESKTOP_VERSION
278 connect(qApp, SIGNAL (appMessage ( const QCString &, const QByteArray & )), ExternalAppHandler::instance(), SLOT (appMessage ( const QCString &, const QByteArray & ))); 278 connect(qApp, SIGNAL (appMessage ( const QCString &, const QByteArray & )), ExternalAppHandler::instance(), SLOT (appMessage ( const QCString &, const QByteArray & )));
279#endif 279#endif
280#ifndef DESKTOP_VERSION 280#ifndef DESKTOP_VERSION
281 infrared = 0; 281 infrared = 0;
282#endif 282#endif
283 283
284 mBRdisabled = false; 284 mBRdisabled = false;
285 //toggleBeamReceive(); 285 //toggleBeamReceive();
286} 286}
287MainWindow::~MainWindow() 287MainWindow::~MainWindow()
288{ 288{
289 //qDebug("MainWindow::~MainWindow() "); 289 //qDebug("MainWindow::~MainWindow() ");
290 //save toolbar location 290 //save toolbar location
291 delete mCalendar; 291 delete mCalendar;
292 delete mSyncManager; 292 delete mSyncManager;
293#ifndef DESKTOP_VERSION 293#ifndef DESKTOP_VERSION
294 if ( infrared ) 294 if ( infrared )
295 delete infrared; 295 delete infrared;
296#endif 296#endif
297 297
298 298
299} 299}
300 300
301void MainWindow::disableBR(bool b) 301void MainWindow::disableBR(bool b)
302{ 302{
303#ifndef DESKTOP_VERSION 303#ifndef DESKTOP_VERSION
304 if ( b ) { 304 if ( b ) {
305 if ( infrared ) { 305 if ( infrared ) {
306 toggleBeamReceive(); 306 toggleBeamReceive();
307 mBRdisabled = true; 307 mBRdisabled = true;
308 } 308 }
309 mBRdisabled = true; 309 mBRdisabled = true;
310 } else { 310 } else {
311 if ( mBRdisabled ) { 311 if ( mBRdisabled ) {
312 mBRdisabled = false; 312 mBRdisabled = false;
313 //makes no sense,because other cal ap is probably running 313 //makes no sense,because other cal ap is probably running
314 // toggleBeamReceive(); 314 // toggleBeamReceive();
315 } 315 }
316 } 316 }
317#endif 317#endif
318 318
319} 319}
320bool MainWindow::beamReceiveEnabled() 320bool MainWindow::beamReceiveEnabled()
321{ 321{
322#ifndef DESKTOP_VERSION 322#ifndef DESKTOP_VERSION
323 return ( infrared != 0 ); 323 return ( infrared != 0 );
324#endif 324#endif
325 return false; 325 return false;
326} 326}
327 327
328void MainWindow::toggleBeamReceive() 328void MainWindow::toggleBeamReceive()
329{ 329{
330 if ( mBRdisabled ) 330 if ( mBRdisabled )
331 return; 331 return;
332#ifndef DESKTOP_VERSION 332#ifndef DESKTOP_VERSION
333 if ( infrared ) { 333 if ( infrared ) {
334 qDebug("disable BeamReceive "); 334 qDebug("disable BeamReceive ");
335 delete infrared; 335 delete infrared;
336 infrared = 0; 336 infrared = 0;
337 brAction->setOn(false); 337 brAction->setOn(false);
338 return; 338 return;
339 } 339 }
340 qDebug("enable BeamReceive "); 340 qDebug("enable BeamReceive ");
341 brAction->setOn(true); 341 brAction->setOn(true);
342 infrared = new QCopChannel("QPE/Application/datebook",this, "channel" ) ; 342 infrared = new QCopChannel("QPE/Application/datebook",this, "channel" ) ;
343 QObject::connect( infrared, SIGNAL (received ( const QCString &, const QByteArray & )),this, SLOT(recieve( const QCString&, const QByteArray& ))); 343 QObject::connect( infrared, SIGNAL (received ( const QCString &, const QByteArray & )),this, SLOT(recieve( const QCString&, const QByteArray& )));
344#endif 344#endif
345} 345}
346void MainWindow::showMaximized () 346void MainWindow::showMaximized ()
347{ 347{
348#ifndef DESKTOP_VERSION 348#ifndef DESKTOP_VERSION
349 if ( ! globalFlagBlockStartup ) 349 if ( ! globalFlagBlockStartup )
350 if ( mClosed ) 350 if ( mClosed )
351 mView->goToday(); 351 mView->goToday();
352#endif 352#endif
353 QWidget::showMaximized () ; 353 QWidget::showMaximized () ;
354 mClosed = false; 354 mClosed = false;
355} 355}
356void MainWindow::closeEvent( QCloseEvent* ce ) 356void MainWindow::closeEvent( QCloseEvent* ce )
357{ 357{
358 358
359 359
360 360
361 if ( ! KOPrefs::instance()->mAskForQuit ) { 361 if ( ! KOPrefs::instance()->mAskForQuit ) {
362 saveOnClose(); 362 saveOnClose();
363 mClosed = true; 363 mClosed = true;
364 ce->accept(); 364 ce->accept();
365 return; 365 return;
366 366
367 } 367 }
368 368
369 switch( QMessageBox::information( this, "KO/Pi", 369 switch( QMessageBox::information( this, "KO/Pi",
370 i18n("Do you really want\nto close KO/Pi?"), 370 i18n("Do you really want\nto close KO/Pi?"),
371 i18n("Close"), i18n("No"), 371 i18n("Close"), i18n("No"),
372 0, 0 ) ) { 372 0, 0 ) ) {
373 case 0: 373 case 0:
374 saveOnClose(); 374 saveOnClose();
375 mClosed = true; 375 mClosed = true;
376 ce->accept(); 376 ce->accept();
377 break; 377 break;
378 case 1: 378 case 1:
379 ce->ignore(); 379 ce->ignore();
380 break; 380 break;
381 case 2: 381 case 2:
382 382
383 default: 383 default:
384 break; 384 break;
385 } 385 }
386 386
387 387
388} 388}
389 389
390void MainWindow::recieve( const QCString& cmsg, const QByteArray& data ) 390void MainWindow::recieve( const QCString& cmsg, const QByteArray& data )
391{ 391{
392 QDataStream stream( data, IO_ReadOnly ); 392 QDataStream stream( data, IO_ReadOnly );
393 // QMessageBox::about( this, "About KOrganizer/Pi", "*" +msg +"*" ); 393 // QMessageBox::about( this, "About KOrganizer/Pi", "*" +msg +"*" );
394 //QString datamess; 394 //QString datamess;
395 //qDebug("message "); 395 //qDebug("message ");
396 qDebug("KO: QCOP message received: %s ", cmsg.data() ); 396 qDebug("KO: QCOP message received: %s ", cmsg.data() );
397 397
398 if ( cmsg == "setDocument(QString)" ) { 398 if ( cmsg == "setDocument(QString)" ) {
399 QDataStream stream( data, IO_ReadOnly ); 399 QDataStream stream( data, IO_ReadOnly );
400 QString fileName; 400 QString fileName;
401 stream >> fileName; 401 stream >> fileName;
402 //qDebug("filename %s ", fileName.latin1()); 402 //qDebug("filename %s ", fileName.latin1());
403 showMaximized(); 403 showMaximized();
404 raise(); 404 raise();
405 KOPrefs::instance()->mLastSyncedLocalFile = fileName ; 405 KOPrefs::instance()->mLastSyncedLocalFile = fileName ;
406 mSyncManager->slotSyncMenu( 1002 ); 406 mSyncManager->slotSyncMenu( 1002 );
407 return; 407 return;
408 } 408 }
409 409
410 if ( cmsg == "-writeFile" ) { 410 if ( cmsg == "-writeFile" ) {
411 // I made from the "-writeFile" an "-writeAlarm" 411 // I made from the "-writeFile" an "-writeAlarm"
412 mView->viewManager()->showWhatsNextView(); 412 mView->viewManager()->showWhatsNextView();
413 mCalendar->checkAlarmForIncidence( 0, true); 413 mCalendar->checkAlarmForIncidence( 0, true);
414 showMaximized(); 414 showMaximized();
415 raise(); 415 raise();
416 return; 416 return;
417 417
418 } 418 }
419 if ( cmsg == "-writeFileSilent" ) { 419 if ( cmsg == "-writeFileSilent" ) {
420 // I made from the "-writeFile" an "-writeAlarm" 420 // I made from the "-writeFile" an "-writeAlarm"
421 // mView->viewManager()->showWhatsNextView(); 421 // mView->viewManager()->showWhatsNextView();
422 mCalendar->checkAlarmForIncidence( 0, true); 422 mCalendar->checkAlarmForIncidence( 0, true);
423 //showMaximized(); 423 //showMaximized();
424 //raise(); 424 //raise();
425 hide(); 425 hide();
426 return; 426 return;
427 } 427 }
428 if ( cmsg == "-newCountdown" ) { 428 if ( cmsg == "-newCountdown" ) {
429 qDebug("newCountdown "); 429 qDebug("newCountdown ");
430 430
431 } 431 }
432 QString msg ; 432 QString msg ;
433 QString allmsg = cmsg; 433 QString allmsg = cmsg;
434 while ( allmsg.length() > 0 ) { 434 while ( allmsg.length() > 0 ) {
435 int nextC = allmsg.find( "-", 1 ); 435 int nextC = allmsg.find( "-", 1 );
436 if ( nextC == -1 ) { 436 if ( nextC == -1 ) {
437 msg = allmsg; 437 msg = allmsg;
438 allmsg = ""; 438 allmsg = "";
439 } else{ 439 } else{
440 msg = allmsg.left( nextC ); 440 msg = allmsg.left( nextC );
441 allmsg = allmsg.mid( nextC, allmsg.length()-nextC ); 441 allmsg = allmsg.mid( nextC, allmsg.length()-nextC );
442 } 442 }
443 //qDebug("msg: %s all: %s ", msg.latin1(), allmsg.latin1() ); 443 //qDebug("msg: %s all: %s ", msg.latin1(), allmsg.latin1() );
444 if ( msg == "-newEvent" ) { 444 if ( msg == "-newEvent" ) {
445 mView->newEvent(); 445 mView->newEvent();
446 } 446 }
447 if ( msg == "-newTodo" ) { 447 if ( msg == "-newTodo" ) {
448 mView->newTodo(); 448 mView->newTodo();
449 449
450 } 450 }
451 if ( msg == "-showWN" ) { 451 if ( msg == "-showWN" ) {
452 mView->viewManager()->showWhatsNextView(); 452 mView->viewManager()->showWhatsNextView();
453 } 453 }
454 if ( msg == "-showTodo" ) { 454 if ( msg == "-showTodo" ) {
455 mView->viewManager()->showTodoView(); 455 mView->viewManager()->showTodoView();
456 } 456 }
457 if ( msg == "-showList" ) { 457 if ( msg == "-showList" ) {
458 mView->viewManager()->showListView(); 458 mView->viewManager()->showListView();
459 } 459 }
460 else if ( msg == "-showDay" ) { 460 else if ( msg == "-showDay" ) {
461 mView->viewManager()->showDayView(); 461 mView->viewManager()->showDayView();
462 } 462 }
463 else if ( msg == "-showWWeek" ) { 463 else if ( msg == "-showWWeek" ) {
464 mView->viewManager()->showWorkWeekView(); 464 mView->viewManager()->showWorkWeekView();
465 } 465 }
466 else if ( msg == "-ringSync" ) { 466 else if ( msg == "-ringSync" ) {
467 mSyncManager->multiSync( false ); 467 mSyncManager->multiSync( false );
468 } 468 }
469 else if ( msg == "-showWeek" ) { 469 else if ( msg == "-showWeek" ) {
470 mView->viewManager()->showWeekView(); 470 mView->viewManager()->showWeekView();
471 } 471 }
472 else if ( msg == "-showTodo" ) { 472 else if ( msg == "-showTodo" ) {
473 mView->viewManager()->showTodoView(); 473 mView->viewManager()->showTodoView();
474 } 474 }
475 else if ( msg == "-showJournal" ) { 475 else if ( msg == "-showJournal" ) {
476 mView->dateNavigator()->selectDates( 1 ); 476 mView->dateNavigator()->selectDates( 1 );
477 mView->dateNavigator()->selectToday(); 477 mView->dateNavigator()->selectToday();
478 mView->viewManager()->showJournalView(); 478 mView->viewManager()->showJournalView();
479 } 479 }
480 else if ( msg == "-showKO" ) { 480 else if ( msg == "-showKO" ) {
481 mView->viewManager()->showNextXView(); 481 mView->viewManager()->showNextXView();
482 } 482 }
483 else if ( msg == "-showWNext" || msg == "nextView()" ) { 483 else if ( msg == "-showWNext" || msg == "nextView()" ) {
484 mView->viewManager()->showWhatsNextView(); 484 mView->viewManager()->showWhatsNextView();
485 } 485 }
486 else if ( msg == "-showNextXView" ) { 486 else if ( msg == "-showNextXView" ) {
487 mView->viewManager()->showNextXView(); 487 mView->viewManager()->showNextXView();
488 } 488 }
489 489
490 490
491 } 491 }
492 492
493 showMaximized(); 493 showMaximized();
494 raise(); 494 raise();
495} 495}
496 496
497QPixmap MainWindow::loadPixmap( QString name ) 497QPixmap MainWindow::loadPixmap( QString name )
498{ 498{
499 return SmallIcon( name ); 499 return SmallIcon( name );
500 500
501} 501}
502void MainWindow::initActions() 502void MainWindow::initActions()
503{ 503{
504 //KOPrefs::instance()->mShowFullMenu 504 //KOPrefs::instance()->mShowFullMenu
505 iconToolBar->clear(); 505 iconToolBar->clear();
506 KOPrefs *p = KOPrefs::instance(); 506 KOPrefs *p = KOPrefs::instance();
507 //QPEMenuBar *menuBar1;// = new QPEMenuBar( iconToolBar ); 507 //QPEMenuBar *menuBar1;// = new QPEMenuBar( iconToolBar );
508 508
509 QPopupMenu *viewMenu = new QPopupMenu( this ); 509 QPopupMenu *viewMenu = new QPopupMenu( this );
510 QPopupMenu *actionMenu = new QPopupMenu( this ); 510 QPopupMenu *actionMenu = new QPopupMenu( this );
511 QPopupMenu *importMenu = new QPopupMenu( this ); 511 QPopupMenu *importMenu = new QPopupMenu( this );
512 selectFilterMenu = new QPopupMenu( this ); 512 selectFilterMenu = new QPopupMenu( this );
513 selectFilterMenu->setCheckable( true ); 513 selectFilterMenu->setCheckable( true );
514 syncMenu = new QPopupMenu( this ); 514 syncMenu = new QPopupMenu( this );
515 configureAgendaMenu = new QPopupMenu( this ); 515 configureAgendaMenu = new QPopupMenu( this );
516 configureToolBarMenu = new QPopupMenu( this ); 516 configureToolBarMenu = new QPopupMenu( this );
517 QPopupMenu *helpMenu = new QPopupMenu( this ); 517 QPopupMenu *helpMenu = new QPopupMenu( this );
518 if ( KOPrefs::instance()->mShowFullMenu ) { 518 if ( KOPrefs::instance()->mShowFullMenu ) {
519 QMenuBar *menuBar1; 519 QMenuBar *menuBar1;
520 menuBar1 = menuBar(); 520 menuBar1 = menuBar();
521 menuBar1->insertItem( i18n("File"), importMenu ); 521 menuBar1->insertItem( i18n("File"), importMenu );
522 menuBar1->insertItem( i18n("View"), viewMenu ); 522 menuBar1->insertItem( i18n("View"), viewMenu );
523 menuBar1->insertItem( i18n("Actions"), actionMenu ); 523 menuBar1->insertItem( i18n("Actions"), actionMenu );
524 menuBar1->insertItem( i18n("Synchronize"), syncMenu ); 524 menuBar1->insertItem( i18n("Synchronize"), syncMenu );
525 menuBar1->insertItem( i18n("AgendaSize"),configureAgendaMenu ); 525 menuBar1->insertItem( i18n("AgendaSize"),configureAgendaMenu );
526 //menuBar1->insertItem( i18n("Toolbar"),configureToolBarMenu ); 526 //menuBar1->insertItem( i18n("Toolbar"),configureToolBarMenu );
527 menuBar1->insertItem( i18n("Filter"),selectFilterMenu ); 527 menuBar1->insertItem( i18n("Filter"),selectFilterMenu );
528 menuBar1->insertItem( i18n("Help"), helpMenu ); 528 menuBar1->insertItem( i18n("Help"), helpMenu );
529 } else { 529 } else {
530 QPEMenuBar *menuBar1; 530 QPEMenuBar *menuBar1;
531 menuBar1 = new QPEMenuBar( iconToolBar ); 531 menuBar1 = new QPEMenuBar( iconToolBar );
532 QPopupMenu *menuBar = new QPopupMenu( this ); 532 QPopupMenu *menuBar = new QPopupMenu( this );
533 menuBar1->insertItem( i18n("ME"), menuBar); 533 menuBar1->insertItem( i18n("ME"), menuBar);
534 menuBar->insertItem( i18n("File"), importMenu ); 534 menuBar->insertItem( i18n("File"), importMenu );
535 menuBar->insertItem( i18n("View"), viewMenu ); 535 menuBar->insertItem( i18n("View"), viewMenu );
536 menuBar->insertItem( i18n("Actions"), actionMenu ); 536 menuBar->insertItem( i18n("Actions"), actionMenu );
537 menuBar->insertItem( i18n("Synchronize"), syncMenu ); 537 menuBar->insertItem( i18n("Synchronize"), syncMenu );
538 menuBar->insertItem( i18n("AgendaSize"),configureAgendaMenu ); 538 menuBar->insertItem( i18n("AgendaSize"),configureAgendaMenu );
539 menuBar->insertItem( i18n("Toolbar"),configureToolBarMenu ); 539 menuBar->insertItem( i18n("Toolbar"),configureToolBarMenu );
540 menuBar->insertItem( i18n("Filter"),selectFilterMenu ); 540 menuBar->insertItem( i18n("Filter"),selectFilterMenu );
541 menuBar->insertItem( i18n("Help"), helpMenu ); 541 menuBar->insertItem( i18n("Help"), helpMenu );
542 //menuBar1->setMaximumWidth( menuBar1->sizeHint().width() ); 542 //menuBar1->setMaximumWidth( menuBar1->sizeHint().width() );
543 menuBar1->setMaximumSize( menuBar1->sizeHint( )); 543 menuBar1->setMaximumSize( menuBar1->sizeHint( ));
544 } 544 }
545 connect ( selectFilterMenu, SIGNAL( activated ( int ) ), this, SLOT (selectFilter( int ) ) ); 545 connect ( selectFilterMenu, SIGNAL( activated ( int ) ), this, SLOT (selectFilter( int ) ) );
546 connect ( selectFilterMenu, SIGNAL( aboutToShow () ), this, SLOT (fillFilterMenu() ) ); 546 connect ( selectFilterMenu, SIGNAL( aboutToShow () ), this, SLOT (fillFilterMenu() ) );
547 547
548 // ****************** 548 // ******************
549 QAction *action; 549 QAction *action;
550 QIconSet icon; 550 QIconSet icon;
551 // QPopupMenu *configureMenu= new QPopupMenu( menuBar ); 551 // QPopupMenu *configureMenu= new QPopupMenu( menuBar );
552 configureToolBarMenu->setCheckable( true ); 552 configureToolBarMenu->setCheckable( true );
553 553
554 QString pathString = ""; 554 QString pathString = "";
555 if ( !p->mToolBarMiniIcons ) { 555 if ( !p->mToolBarMiniIcons ) {
556 if ( QApplication::desktop()->width() < 480 ) 556 if ( QApplication::desktop()->width() < 480 )
557 pathString += "icons16/"; 557 pathString += "icons16/";
558 } else 558 } else
559 pathString += "iconsmini/"; 559 pathString += "iconsmini/";
560 configureAgendaMenu->setCheckable( true ); 560 configureAgendaMenu->setCheckable( true );
561 configureAgendaMenu->insertItem(i18n("Tiny"), 4 ); 561 configureAgendaMenu->insertItem(i18n("Tiny"), 4 );
562 configureAgendaMenu->insertItem(i18n("Small"), 6 ); 562 configureAgendaMenu->insertItem(i18n("Small"), 6 );
563 configureAgendaMenu->insertItem(i18n("Medium"), 8 ); 563 configureAgendaMenu->insertItem(i18n("Medium"), 8 );
564 configureAgendaMenu->insertItem(i18n("Normal"), 10 ); 564 configureAgendaMenu->insertItem(i18n("Normal"), 10 );
565 configureAgendaMenu->insertItem(i18n("Large"), 12 ); 565 configureAgendaMenu->insertItem(i18n("Large"), 12 );
566 configureAgendaMenu->insertItem(i18n("Big"), 14 ); 566 configureAgendaMenu->insertItem(i18n("Big"), 14 );
567 configureAgendaMenu->insertItem(i18n("Bigger"), 16 ); 567 configureAgendaMenu->insertItem(i18n("Bigger"), 16 );
568 configureAgendaMenu->insertItem(i18n("Biggest"), 18 ); 568 configureAgendaMenu->insertItem(i18n("Biggest"), 18 );
569 //configureMenu->insertItem( "AgendaSize",configureAgendaMenu ); 569 //configureMenu->insertItem( "AgendaSize",configureAgendaMenu );
570 570
571 icon = loadPixmap( pathString + "configure" ); 571 icon = loadPixmap( pathString + "configure" );
572 action = new QAction( i18n("Configure"),icon, i18n("Configure..."), 0, this ); 572 action = new QAction( i18n("Configure"),icon, i18n("Configure..."), 0, this );
573 action->addTo( actionMenu ); 573 action->addTo( actionMenu );
574 connect( action, SIGNAL( activated() ), 574 connect( action, SIGNAL( activated() ),
575 mView, SLOT( edit_options() ) ); 575 mView, SLOT( edit_options() ) );
576 actionMenu->insertSeparator(); 576 actionMenu->insertSeparator();
577 577
578 action = new QAction( i18n("Undo Delete"), i18n("Undo Delete..."), 0, this ); 578 action = new QAction( i18n("Undo Delete"), i18n("Undo Delete..."), 0, this );
579 action->addTo( actionMenu ); 579 action->addTo( actionMenu );
580 connect( action, SIGNAL( activated() ), 580 connect( action, SIGNAL( activated() ),
581 mView, SLOT( undo_delete() ) ); 581 mView, SLOT( undo_delete() ) );
582 actionMenu->insertSeparator(); 582 actionMenu->insertSeparator();
583 583
584 icon = loadPixmap( pathString + "newevent" ); 584 icon = loadPixmap( pathString + "newevent" );
585 configureToolBarMenu->insertItem(i18n("Stretched TB"), 5 ); 585 configureToolBarMenu->insertItem(i18n("Stretched TB"), 5 );
586 configureToolBarMenu->insertSeparator(); 586 configureToolBarMenu->insertSeparator();
587 configureToolBarMenu->insertItem(icon, i18n("New Event..."), 10 ); 587 configureToolBarMenu->insertItem(icon, i18n("New Event..."), 10 );
588 QAction* ne_action = new QAction( i18n("New Event..."), icon, i18n("New Event..."), 0, this ); 588 QAction* ne_action = new QAction( i18n("New Event..."), icon, i18n("New Event..."), 0, this );
589 ne_action->addTo( actionMenu ); 589 ne_action->addTo( actionMenu );
590 connect( ne_action, SIGNAL( activated() ), 590 connect( ne_action, SIGNAL( activated() ),
591 mView, SLOT( newEvent() ) ); 591 mView, SLOT( newEvent() ) );
592 icon = loadPixmap( pathString + "newtodo" ); 592 icon = loadPixmap( pathString + "newtodo" );
593 configureToolBarMenu->insertItem(icon, i18n("New Todo..."), 20 ); 593 configureToolBarMenu->insertItem(icon, i18n("New Todo..."), 20 );
594 QAction* nt_action = new QAction( i18n("New Todo..."), icon, i18n("New Todo..."), 0, this ); 594 QAction* nt_action = new QAction( i18n("New Todo..."), icon, i18n("New Todo..."), 0, this );
595 nt_action->addTo( actionMenu ); 595 nt_action->addTo( actionMenu );
596 connect( nt_action, SIGNAL( activated() ), 596 connect( nt_action, SIGNAL( activated() ),
597 mView, SLOT( newTodo() ) ); 597 mView, SLOT( newTodo() ) );
598 icon = loadPixmap( pathString + "navi" ); 598 icon = loadPixmap( pathString + "navi" );
599 action = new QAction( i18n("Toggle DateNavigator"), icon, i18n("Toggle DateNavigator"), 0, this ); 599 action = new QAction( i18n("Toggle DateNavigator"), icon, i18n("Toggle DateNavigator"), 0, this );
600 action->addTo( viewMenu ); 600 action->addTo( viewMenu );
601 connect( action, SIGNAL( activated() ), 601 connect( action, SIGNAL( activated() ),
602 mView, SLOT( toggleDateNavigatorWidget() ) ); 602 mView, SLOT( toggleDateNavigatorWidget() ) );
603 icon = loadPixmap( pathString + "filter" ); 603 icon = loadPixmap( pathString + "filter" );
604 action = new QAction( i18n("Toggle FilterView"), icon, i18n("Toggle FilterView"), 0, this ); 604 action = new QAction( i18n("Toggle FilterView"), icon, i18n("Toggle FilterView"), 0, this );
605 action->addTo( viewMenu ); 605 action->addTo( viewMenu );
606 connect( action, SIGNAL( activated() ), 606 connect( action, SIGNAL( activated() ),
607 mView, SLOT( toggleFilter() ) ); 607 mView, SLOT( toggleFilter() ) );
608 action = new QAction( i18n("Toggle Allday"), i18n("Toggle Allday"), 0, this ); 608 action = new QAction( i18n("Toggle Allday"), i18n("Toggle Allday"), 0, this );
609 action->addTo( viewMenu ); 609 action->addTo( viewMenu );
610 connect( action, SIGNAL( activated() ), 610 connect( action, SIGNAL( activated() ),
611 mView, SLOT( toggleAllDaySize() ) ); 611 mView, SLOT( toggleAllDaySize() ) );
612 612
613 viewMenu->insertSeparator(); 613 viewMenu->insertSeparator();
614 icon = loadPixmap( pathString + "picker" ); 614 icon = loadPixmap( pathString + "picker" );
615 action = new QAction( i18n("Date Picker"), icon, i18n("Date Picker"), 0, this ); 615 action = new QAction( i18n("Date Picker"), icon, i18n("Date Picker"), 0, this );
616 action->addTo( viewMenu ); 616 action->addTo( viewMenu );
617 connect( action, SIGNAL( activated() ), 617 connect( action, SIGNAL( activated() ),
618 mView, SLOT( showDatePicker() ) ); 618 mView, SLOT( showDatePicker() ) );
619 action->addTo( iconToolBar ); 619 action->addTo( iconToolBar );
620 viewMenu->insertSeparator(); 620 viewMenu->insertSeparator();
621 icon = loadPixmap( pathString + "list" ); 621 icon = loadPixmap( pathString + "list" );
622 configureToolBarMenu->insertItem(icon, i18n("List View"), 30 ); 622 configureToolBarMenu->insertItem(icon, i18n("List View"), 30 );
623 QAction* showlist_action = new QAction( i18n("List View"), icon, i18n("List View"), 0, this ); 623 QAction* showlist_action = new QAction( i18n("List View"), icon, i18n("List View"), 0, this );
624 showlist_action->addTo( viewMenu ); 624 showlist_action->addTo( viewMenu );
625 connect( showlist_action, SIGNAL( activated() ), 625 connect( showlist_action, SIGNAL( activated() ),
626 mView->viewManager(), SLOT( showListView() ) ); 626 mView->viewManager(), SLOT( showListView() ) );
627 627
628 628
629 icon = loadPixmap( pathString + "day" ); 629 icon = loadPixmap( pathString + "day" );
630 configureToolBarMenu->insertItem(icon, i18n("Day View"), 40 ); 630 configureToolBarMenu->insertItem(icon, i18n("Day View"), 40 );
631 QAction* day1_action = new QAction( i18n("Day View"), icon, i18n("Day View"), 0, this ); 631 QAction* day1_action = new QAction( i18n("Day View"), icon, i18n("Day View"), 0, this );
632 day1_action->addTo( viewMenu ); 632 day1_action->addTo( viewMenu );
633 // action->addTo( toolBar ); 633 // action->addTo( toolBar );
634 connect( day1_action, SIGNAL( activated() ), 634 connect( day1_action, SIGNAL( activated() ),
635 mView->viewManager(), SLOT( showDayView() ) ); 635 mView->viewManager(), SLOT( showDayView() ) );
636 636
637 icon = loadPixmap( pathString + "workweek" ); 637 icon = loadPixmap( pathString + "workweek" );
638 configureToolBarMenu->insertItem(icon, i18n("Work Week"), 50 ); 638 configureToolBarMenu->insertItem(icon, i18n("Work Week"), 50 );
639 QAction* day5_action = new QAction( i18n("Work Week"), icon, i18n("Work Week"), 0, this ); 639 QAction* day5_action = new QAction( i18n("Work Week"), icon, i18n("Work Week"), 0, this );
640 day5_action->addTo( viewMenu ); 640 day5_action->addTo( viewMenu );
641 connect( day5_action, SIGNAL( activated() ), 641 connect( day5_action, SIGNAL( activated() ),
642 mView->viewManager(), SLOT( showWorkWeekView() ) ); 642 mView->viewManager(), SLOT( showWorkWeekView() ) );
643 643
644 icon = loadPixmap( pathString + "week" ); 644 icon = loadPixmap( pathString + "week" );
645 configureToolBarMenu->insertItem(icon, i18n("Week"), 60 ); 645 configureToolBarMenu->insertItem(icon, i18n("Week"), 60 );
646 QAction* day7_action = new QAction( i18n("Week"), icon, i18n("Week"), 0, this ); 646 QAction* day7_action = new QAction( i18n("Week"), icon, i18n("Week"), 0, this );
647 day7_action->addTo( viewMenu ); 647 day7_action->addTo( viewMenu );
648 connect( day7_action, SIGNAL( activated() ), 648 connect( day7_action, SIGNAL( activated() ),
649 mView->viewManager(), SLOT( showWeekView() ) ); 649 mView->viewManager(), SLOT( showWeekView() ) );
650 650
651 icon = loadPixmap( pathString + "month" ); 651 icon = loadPixmap( pathString + "month" );
652 configureToolBarMenu->insertItem(icon, i18n("Month"), 70 ); 652 configureToolBarMenu->insertItem(icon, i18n("Month"), 70 );
653 QAction* month_action = new QAction( i18n("Month"), icon, i18n("Month"), 0, this ); 653 QAction* month_action = new QAction( i18n("Month"), icon, i18n("Month"), 0, this );
654 month_action->addTo( viewMenu ); 654 month_action->addTo( viewMenu );
655 connect( month_action, SIGNAL( activated() ), 655 connect( month_action, SIGNAL( activated() ),
656 mView->viewManager(), SLOT( showMonthView() ) ); 656 mView->viewManager(), SLOT( showMonthView() ) );
657 657
658 icon = loadPixmap( pathString + "todo" ); 658 icon = loadPixmap( pathString + "todo" );
659 configureToolBarMenu->insertItem(icon, i18n("Todo View"), 80 ); 659 configureToolBarMenu->insertItem(icon, i18n("Todo View"), 80 );
660 QAction* todoview_action = new QAction( i18n("Todo View"), icon, i18n("Todo View"), 0, this ); 660 QAction* todoview_action = new QAction( i18n("Todo View"), icon, i18n("Todo View"), 0, this );
661 todoview_action->addTo( viewMenu ); 661 todoview_action->addTo( viewMenu );
662 connect( todoview_action, SIGNAL( activated() ), 662 connect( todoview_action, SIGNAL( activated() ),
663 mView->viewManager(), SLOT( showTodoView() ) ); 663 mView->viewManager(), SLOT( showTodoView() ) );
664 664
665 icon = loadPixmap( pathString + "journal" ); 665 icon = loadPixmap( pathString + "journal" );
666 configureToolBarMenu->insertItem(icon, i18n("Journal"), 90 ); 666 configureToolBarMenu->insertItem(icon, i18n("Journal"), 90 );
667 QAction* viewjournal_action = new QAction( i18n("Journal"), icon, i18n("Journal"), 0, this ); 667 QAction* viewjournal_action = new QAction( i18n("Journal"), icon, i18n("Journal"), 0, this );
668 viewjournal_action->addTo( viewMenu ); 668 viewjournal_action->addTo( viewMenu );
669 connect( viewjournal_action, SIGNAL( activated() ), 669 connect( viewjournal_action, SIGNAL( activated() ),
670 mView->viewManager(), SLOT( showJournalView() ) ); 670 mView->viewManager(), SLOT( showJournalView() ) );
671 671
672 icon = loadPixmap( pathString + "xdays" ); 672 icon = loadPixmap( pathString + "xdays" );
673 configureToolBarMenu->insertItem(icon, i18n("Next days"), 100,4 ); 673 configureToolBarMenu->insertItem(icon, i18n("Next days"), 100,4 );
674 QAction* xdays_action = new QAction( i18n("Next days"), icon, i18n("Next days"), 0, this ); 674 QAction* xdays_action = new QAction( i18n("Next days"), icon, i18n("Next days"), 0, this );
675 xdays_action->addTo( viewMenu ); 675 xdays_action->addTo( viewMenu );
676 connect( xdays_action, SIGNAL( activated() ), 676 connect( xdays_action, SIGNAL( activated() ),
677 mView->viewManager(), SLOT( showNextXView() ) ); 677 mView->viewManager(), SLOT( showNextXView() ) );
678 678
679 icon = loadPixmap( pathString + "whatsnext" ); 679 icon = loadPixmap( pathString + "whatsnext" );
680 configureToolBarMenu->insertItem(icon, i18n("What's Next"), 110, 4 ); 680 configureToolBarMenu->insertItem(icon, i18n("What's Next"), 110, 4 );
681 QAction* whatsnext_action = new QAction( i18n("What's Next"), icon, i18n("What's Next"), 0, this ); 681 QAction* whatsnext_action = new QAction( i18n("What's Next"), icon, i18n("What's Next"), 0, this );
682 whatsnext_action->addTo( viewMenu ); 682 whatsnext_action->addTo( viewMenu );
683 connect( whatsnext_action, SIGNAL( activated() ), 683 connect( whatsnext_action, SIGNAL( activated() ),
684 mView->viewManager(), SLOT( showWhatsNextView() ) ); 684 mView->viewManager(), SLOT( showWhatsNextView() ) );
685 685
686#if 0 686#if 0
687 action = new QAction( "view_timespan", "Time Span", 0, this ); 687 action = new QAction( "view_timespan", "Time Span", 0, this );
688 action->addTo( viewMenu ); 688 action->addTo( viewMenu );
689 connect( action, SIGNAL( activated() ), 689 connect( action, SIGNAL( activated() ),
690 mView->viewManager(), SLOT( showTimeSpanView() ) ); 690 mView->viewManager(), SLOT( showTimeSpanView() ) );
691#endif 691#endif
692 692
693 mNewSubTodoAction = new QAction( "new_subtodo", i18n("New Sub-Todo..."), 0, 693 mNewSubTodoAction = new QAction( "new_subtodo", i18n("New Sub-Todo..."), 0,
694 this ); 694 this );
695 mNewSubTodoAction->addTo( actionMenu ); 695 mNewSubTodoAction->addTo( actionMenu );
696 connect( mNewSubTodoAction, SIGNAL( activated() ), 696 connect( mNewSubTodoAction, SIGNAL( activated() ),
697 mView, SLOT( newSubTodo() ) ); 697 mView, SLOT( newSubTodo() ) );
698 698
699 actionMenu->insertSeparator(); 699 actionMenu->insertSeparator();
700 700
701 mShowAction = new QAction( "show_incidence", i18n("Show..."), 0, this ); 701 mShowAction = new QAction( "show_incidence", i18n("Show..."), 0, this );
702 mShowAction->addTo( actionMenu ); 702 mShowAction->addTo( actionMenu );
703 connect( mShowAction, SIGNAL( activated() ), 703 connect( mShowAction, SIGNAL( activated() ),
704 mView, SLOT( showIncidence() ) ); 704 mView, SLOT( showIncidence() ) );
705 705
706 mEditAction = new QAction( "edit_incidence", i18n("Edit..."), 0, this ); 706 mEditAction = new QAction( "edit_incidence", i18n("Edit..."), 0, this );
707 mEditAction->addTo( actionMenu ); 707 mEditAction->addTo( actionMenu );
708 connect( mEditAction, SIGNAL( activated() ), 708 connect( mEditAction, SIGNAL( activated() ),
709 mView, SLOT( editIncidence() ) ); 709 mView, SLOT( editIncidence() ) );
710 710
711 mDeleteAction = new QAction( "delete_incidence", i18n("Delete..."), 0, this ); 711 mDeleteAction = new QAction( "delete_incidence", i18n("Delete..."), 0, this );
712 mDeleteAction->addTo( actionMenu ); 712 mDeleteAction->addTo( actionMenu );
713 connect( mDeleteAction, SIGNAL( activated() ), 713 connect( mDeleteAction, SIGNAL( activated() ),
714 mView, SLOT( deleteIncidence() ) ); 714 mView, SLOT( deleteIncidence() ) );
715 715
716 716
717 mCloneAction = new QAction( "clone_incidence", i18n("Clone..."), 0, this ); 717 mCloneAction = new QAction( "clone_incidence", i18n("Clone..."), 0, this );
718 mCloneAction->addTo( actionMenu ); 718 mCloneAction->addTo( actionMenu );
719 connect( mCloneAction, SIGNAL( activated() ), 719 connect( mCloneAction, SIGNAL( activated() ),
720 mView, SLOT( cloneIncidence() ) ); 720 mView, SLOT( cloneIncidence() ) );
721 mMoveAction = new QAction( "Move_incidence", i18n("Move..."), 0, this ); 721 mMoveAction = new QAction( "Move_incidence", i18n("Move..."), 0, this );
722 mMoveAction->addTo( actionMenu ); 722 mMoveAction->addTo( actionMenu );
723 connect( mMoveAction, SIGNAL( activated() ), 723 connect( mMoveAction, SIGNAL( activated() ),
724 mView, SLOT( moveIncidence() ) ); 724 mView, SLOT( moveIncidence() ) );
725 mBeamAction = new QAction( "Beam_incidence", i18n("Beam..."), 0, this ); 725 mBeamAction = new QAction( "Beam_incidence", i18n("Beam..."), 0, this );
726 mBeamAction->addTo( actionMenu ); 726 mBeamAction->addTo( actionMenu );
727 connect( mBeamAction, SIGNAL( activated() ), 727 connect( mBeamAction, SIGNAL( activated() ),
728 mView, SLOT( beamIncidence() ) ); 728 mView, SLOT( beamIncidence() ) );
729 mCancelAction = new QAction( "Cancel_incidence", i18n("Toggle Cancel"), 0, this ); 729 mCancelAction = new QAction( "Cancel_incidence", i18n("Toggle Cancel"), 0, this );
730 mCancelAction->addTo( actionMenu ); 730 mCancelAction->addTo( actionMenu );
731 connect( mCancelAction, SIGNAL( activated() ), 731 connect( mCancelAction, SIGNAL( activated() ),
732 mView, SLOT( toggleCancelIncidence() ) ); 732 mView, SLOT( toggleCancelIncidence() ) );
733 733
734 actionMenu->insertSeparator(); 734 actionMenu->insertSeparator();
735 735
736 action = new QAction( "purge_completed", i18n("Purge Completed"), 0, 736 action = new QAction( "purge_completed", i18n("Purge Completed"), 0,
737 this ); 737 this );
738 action->addTo( actionMenu ); 738 action->addTo( actionMenu );
739 connect( action, SIGNAL( activated() ), mView, SLOT( purgeCompleted() ) ); 739 connect( action, SIGNAL( activated() ), mView, SLOT( purgeCompleted() ) );
740 740
741 icon = loadPixmap( pathString + "search" ); 741 icon = loadPixmap( pathString + "search" );
742 QAction* search_action = new QAction( i18n("Search"), icon, i18n("Search..."), 0, this ); 742 QAction* search_action = new QAction( i18n("Search"), icon, i18n("Search..."), 0, this );
743 configureToolBarMenu->insertItem(icon, i18n("Search"), 120 , 4); 743 configureToolBarMenu->insertItem(icon, i18n("Search"), 120 , 4);
744 search_action->addTo( actionMenu ); 744 search_action->addTo( actionMenu );
745 connect( search_action, SIGNAL( activated() ), 745 connect( search_action, SIGNAL( activated() ),
746 mView->dialogManager(), SLOT( showSearchDialog() ) ); 746 mView->dialogManager(), SLOT( showSearchDialog() ) );
747 747
748 icon = loadPixmap( pathString + "today" ); 748 icon = loadPixmap( pathString + "today" );
749 configureToolBarMenu->insertItem(icon, i18n("Go to Today"), 130); 749 configureToolBarMenu->insertItem(icon, i18n("Go to Today"), 130);
750 QAction* today_action = new QAction( i18n("Go to Today"), icon, i18n("Go to Today"), 0, this ); 750 QAction* today_action = new QAction( i18n("Go to Today"), icon, i18n("Go to Today"), 0, this );
751 today_action->addTo( actionMenu ); 751 today_action->addTo( actionMenu );
752 connect( today_action, SIGNAL( activated() ), 752 connect( today_action, SIGNAL( activated() ),
753 mView, SLOT( goToday() ) ); 753 mView, SLOT( goToday() ) );
754 754
755 if ( KOPrefs::instance()->mShowFullMenu ) { 755 if ( KOPrefs::instance()->mShowFullMenu ) {
756 actionMenu->insertSeparator(); 756 actionMenu->insertSeparator();
757 actionMenu->insertItem( i18n("Configure Toolbar"),configureToolBarMenu ); 757 actionMenu->insertItem( i18n("Configure Toolbar"),configureToolBarMenu );
758 758
759 } 759 }
760 // actionMenu->insertSeparator(); 760 // actionMenu->insertSeparator();
761 action = new QAction( "import_qtopia", i18n("Import (*.ics/*.vcs) file"), 0, 761 action = new QAction( "import_qtopia", i18n("Import (*.ics/*.vcs) file"), 0,
762 this ); 762 this );
763 action->addTo( importMenu ); 763 action->addTo( importMenu );
764 connect( action, SIGNAL( activated() ), SLOT( importIcal() ) ); 764 connect( action, SIGNAL( activated() ), SLOT( importIcal() ) );
765 action = new QAction( "import_quick", i18n("Import last file"), 0, 765 action = new QAction( "import_quick", i18n("Import last file"), 0,
766 this ); 766 this );
767 action->addTo( importMenu ); 767 action->addTo( importMenu );
768 connect( action, SIGNAL( activated() ), SLOT( quickImportIcal() ) ); 768 connect( action, SIGNAL( activated() ), SLOT( quickImportIcal() ) );
769 importMenu->insertSeparator(); 769 importMenu->insertSeparator();
770 action = new QAction( "import_bday", i18n("Import Birthdays (KA/Pi)"), 0, 770 action = new QAction( "import_bday", i18n("Import Birthdays (KA/Pi)"), 0,
771 this ); 771 this );
772 action->addTo( importMenu ); 772 action->addTo( importMenu );
773 connect( action, SIGNAL( activated() ), SLOT( importBday() ) ); 773 connect( action, SIGNAL( activated() ), SLOT( importBday() ) );
774#ifndef DESKTOP_VERSION 774#ifndef DESKTOP_VERSION
775 importMenu->insertSeparator(); 775 importMenu->insertSeparator();
776 action = new QAction( "import_qtopia", i18n("Import Opie/Qtopia Cal."), 0, 776 action = new QAction( "import_qtopia", i18n("Import Opie/Qtopia Cal."), 0,
777 this ); 777 this );
778 action->addTo( importMenu ); 778 action->addTo( importMenu );
779 connect( action, SIGNAL( activated() ), SLOT( importQtopia() ) ); 779 connect( action, SIGNAL( activated() ), SLOT( importQtopia() ) );
780#else 780#else
781#ifdef _WIN32_ 781#ifdef _WIN32_
782 importMenu->insertSeparator(); 782 importMenu->insertSeparator();
783 action = new QAction( "import_ol", i18n("Import from OL"), 0, 783 action = new QAction( "import_ol", i18n("Import from OL"), 0,
784 this ); 784 this );
785 action->addTo( importMenu ); 785 action->addTo( importMenu );
786 connect( action, SIGNAL( activated() ), SLOT( importOL() ) ); 786 connect( action, SIGNAL( activated() ), SLOT( importOL() ) );
787#endif 787#endif
788#endif 788#endif
789 789
790 importMenu->insertSeparator(); 790 importMenu->insertSeparator();
791 action = new QAction( "load_cal", i18n("Load Calendar Backup"), 0, 791 action = new QAction( "load_cal", i18n("Load Calendar Backup"), 0,
792 this ); 792 this );
793 action->addTo( importMenu ); 793 action->addTo( importMenu );
794 connect( action, SIGNAL( activated() ), SLOT( loadCalendar() ) ); 794 connect( action, SIGNAL( activated() ), SLOT( loadCalendar() ) );
795 795
796 action = new QAction( "save_cal", i18n("Save Calendar Backup"), 0, 796 action = new QAction( "save_cal", i18n("Save Calendar Backup"), 0,
797 this ); 797 this );
798 action->addTo( importMenu ); 798 action->addTo( importMenu );
799 connect( action, SIGNAL( activated() ), SLOT( saveCalendar() ) ); 799 connect( action, SIGNAL( activated() ), SLOT( saveCalendar() ) );
800 800
801 importMenu->insertSeparator(); 801 importMenu->insertSeparator();
802 action = new QAction( "import_qtopia", i18n("Export VCalendar"), 0, 802 action = new QAction( "import_qtopia", i18n("Export VCalendar"), 0,
803 this ); 803 this );
804 action->addTo( importMenu ); connect( action, SIGNAL( activated() ), SLOT( exportVCalendar() ) ); 804 action->addTo( importMenu ); connect( action, SIGNAL( activated() ), SLOT( exportVCalendar() ) );
805 805
806 806
807 //LR 807 //LR
808 QPopupMenu *ex2phone = new QPopupMenu( this ); 808 QPopupMenu *ex2phone = new QPopupMenu( this );
809 ex2phone->insertItem(i18n("Complete calendar..."), 1 ); 809 ex2phone->insertItem(i18n("Complete calendar..."), 1 );
810 ex2phone->insertItem(i18n("Filtered calendar..."), 2 ); 810 ex2phone->insertItem(i18n("Filtered calendar..."), 2 );
811 connect( ex2phone, SIGNAL( activated(int) ), this, SLOT( exportToPhone( int)) ); 811 connect( ex2phone, SIGNAL( activated(int) ), this, SLOT( exportToPhone( int)) );
812 importMenu->insertItem( i18n("Export to phone"), ex2phone ); 812 importMenu->insertItem( i18n("Export to phone"), ex2phone );
813 813
814 importMenu->insertSeparator(); 814 importMenu->insertSeparator();
815 action = new QAction( "manage cat", i18n("Manage new categories..."), 0, 815 action = new QAction( "manage cat", i18n("Manage new categories..."), 0,
816 this ); 816 this );
817 action->addTo( importMenu ); 817 action->addTo( importMenu );
818 connect( action, SIGNAL( activated() ), mView, SLOT( manageCategories() ) ); 818 connect( action, SIGNAL( activated() ), mView, SLOT( manageCategories() ) );
819#ifndef DESKTOP_VERSION 819#ifndef DESKTOP_VERSION
820 importMenu->insertSeparator(); 820 importMenu->insertSeparator();
821 brAction = new QAction( "beam toggle", i18n("Beam receive enabled"), 0, 821 brAction = new QAction( "beam toggle", i18n("Beam receive enabled"), 0,
822 this ); 822 this );
823 brAction->addTo( importMenu ); 823 brAction->addTo( importMenu );
824 brAction->setToggleAction (true ) ; 824 brAction->setToggleAction (true ) ;
825 connect( brAction, SIGNAL( activated() ), this, SLOT( toggleBeamReceive() ) ); 825 connect( brAction, SIGNAL( activated() ), this, SLOT( toggleBeamReceive() ) );
826 826
827 action = new QAction( "beam all", i18n("Beam complete calendar..."), 0, 827 action = new QAction( "beam all", i18n("Beam complete calendar..."), 0,
828 this ); 828 this );
829 action->addTo( importMenu ); 829 action->addTo( importMenu );
830 connect( action, SIGNAL( activated() ), mView, SLOT( beamCalendar() ) ); 830 connect( action, SIGNAL( activated() ), mView, SLOT( beamCalendar() ) );
831 831
832 action = new QAction( "beam all", i18n("Beam filtered calendar..."), 0, 832 action = new QAction( "beam all", i18n("Beam filtered calendar..."), 0,
833 this ); 833 this );
834 action->addTo( importMenu ); 834 action->addTo( importMenu );
835 connect( action, SIGNAL( activated() ), mView, SLOT( beamFilteredCalendar()) ); 835 connect( action, SIGNAL( activated() ), mView, SLOT( beamFilteredCalendar()) );
836#else 836#else
837 importMenu->insertSeparator(); 837 importMenu->insertSeparator();
838 icon = loadPixmap( pathString + "print" ); 838 icon = loadPixmap( pathString + "print" );
839 action = new QAction( i18n("Print calendar..."),icon,i18n("Print calendar..."), 0, this ); 839 action = new QAction( i18n("Print calendar..."),icon,i18n("Print calendar..."), 0, this );
840 action->addTo( importMenu ); 840 action->addTo( importMenu );
841 connect( action, SIGNAL( activated() ), 841 connect( action, SIGNAL( activated() ),
842 this, SLOT( printCal() ) ); 842 this, SLOT( printCal() ) );
843 843
844 icon = loadPixmap( pathString + "print" ); 844 icon = loadPixmap( pathString + "print" );
845 action = new QAction( i18n("Print agenda selection..."),icon,i18n("Print agenda selection..."), 0, this ); 845 action = new QAction( i18n("Print agenda selection..."),icon,i18n("Print agenda selection..."), 0, this );
846 action->addTo( importMenu ); 846 action->addTo( importMenu );
847 connect( action, SIGNAL( activated() ), 847 connect( action, SIGNAL( activated() ),
848 this, SLOT( printSel() ) ); 848 this, SLOT( printSel() ) );
849 action = new QAction( i18n("Print What's Next View..."),icon,i18n("Print What's Next View..."), 0, this ); 849 action = new QAction( i18n("Print What's Next View..."),icon,i18n("Print What's Next View..."), 0, this );
850 action->addTo( importMenu ); 850 action->addTo( importMenu );
851 connect( action, SIGNAL( activated() ), 851 connect( action, SIGNAL( activated() ),
852 mView->viewManager(), SIGNAL( printWNV() ) ); 852 mView->viewManager(), SIGNAL( printWNV() ) );
853#endif 853#endif
854 importMenu->insertSeparator(); 854 importMenu->insertSeparator();
855 action = new QAction( "beam all", i18n("Save"), 0, 855 action = new QAction( "beam all", i18n("Save"), 0,
856 this ); 856 this );
857 action->addTo( importMenu ); 857 action->addTo( importMenu );
858 connect( action, SIGNAL( activated() ), this, SLOT( save() ) ); 858 connect( action, SIGNAL( activated() ), this, SLOT( save() ) );
859 action = new QAction( "beam all", i18n("Exit (+save)"), 0, 859 action = new QAction( "beam all", i18n("Exit (+save)"), 0,
860 this ); 860 this );
861 action->addTo( importMenu ); 861 action->addTo( importMenu );
862 connect( action, SIGNAL( activated() ), this, SLOT( close() ) ); 862 connect( action, SIGNAL( activated() ), this, SLOT( close() ) );
863 863
864 //menuBar->insertItem( "Configure",configureMenu ); 864 //menuBar->insertItem( "Configure",configureMenu );
865 //configureMenu->insertItem( "Toolbar",configureToolBarMenu ); 865 //configureMenu->insertItem( "Toolbar",configureToolBarMenu );
866 icon = loadPixmap( "korganizer/korganizer" ); 866 icon = loadPixmap( "korganizer/korganizer" );
867 867
868 action = new QAction( "Whats New", i18n("What's new?"), 0,this ); 868 action = new QAction( "Whats New", i18n("What's new?"), 0,this );
869 action->addTo( helpMenu ); 869 action->addTo( helpMenu );
870 connect( action, SIGNAL( activated() ), 870 connect( action, SIGNAL( activated() ),
871 SLOT( whatsNew() ) ); 871 SLOT( whatsNew() ) );
872 action = new QAction( "featureHowto", i18n("Features + hints..."), 0,this ); 872 action = new QAction( "featureHowto", i18n("Features + hints..."), 0,this );
873 action->addTo( helpMenu ); 873 action->addTo( helpMenu );
874 connect( action, SIGNAL( activated() ), 874 connect( action, SIGNAL( activated() ),
875 SLOT( features() ) ); 875 SLOT( features() ) );
876 action = new QAction( "Keys + Colors", i18n("Keys + Colors..."), 0, this ); 876 action = new QAction( "Keys + Colors", i18n("Keys + Colors..."), 0, this );
877 action->addTo( helpMenu ); 877 action->addTo( helpMenu );
878 connect( action, SIGNAL( activated() ), 878 connect( action, SIGNAL( activated() ),
879 SLOT( keyBindings() ) ); 879 SLOT( keyBindings() ) );
880 action = new QAction( "Sync Howto", i18n("Sync HowTo..."), 0,this ); 880 action = new QAction( "Sync Howto", i18n("Sync HowTo..."), 0,this );
881 action->addTo( helpMenu ); 881 action->addTo( helpMenu );
882 connect( action, SIGNAL( activated() ), 882 connect( action, SIGNAL( activated() ),
883 SLOT( synchowto() ) ); 883 SLOT( synchowto() ) );
884 action = new QAction( "KDE Sync Howto", i18n("KDE Sync HowTo..."), 0,this ); 884 action = new QAction( "KDE Sync Howto", i18n("KDE Sync HowTo..."), 0,this );
885 action->addTo( helpMenu ); 885 action->addTo( helpMenu );
886 connect( action, SIGNAL( activated() ), 886 connect( action, SIGNAL( activated() ),
887 SLOT( kdesynchowto() ) ); 887 SLOT( kdesynchowto() ) );
888 action = new QAction( "Multi Sync Howto", i18n("Multi Sync HowTo..."), 0,this ); 888 action = new QAction( "Multi Sync Howto", i18n("Multi Sync HowTo..."), 0,this );
889 action->addTo( helpMenu ); 889 action->addTo( helpMenu );
890 connect( action, SIGNAL( activated() ), 890 connect( action, SIGNAL( activated() ),
891 SLOT( multisynchowto() ) ); 891 SLOT( multisynchowto() ) );
892 action = new QAction( "Auto saving", i18n("Auto saving..."), 0, this ); 892 action = new QAction( "Auto saving", i18n("Auto saving..."), 0, this );
893 action->addTo( helpMenu ); 893 action->addTo( helpMenu );
894 connect( action, SIGNAL( activated() ), 894 connect( action, SIGNAL( activated() ),
895 SLOT( aboutAutoSaving() ) ); 895 SLOT( aboutAutoSaving() ) );
896 action = new QAction( "Problemd", i18n("Known Problems..."), 0,this ); 896 action = new QAction( "Problemd", i18n("Known Problems..."), 0,this );
897 action->addTo( helpMenu ); 897 action->addTo( helpMenu );
898 connect( action, SIGNAL( activated() ), 898 connect( action, SIGNAL( activated() ),
899 SLOT( aboutKnownBugs() ) ); 899 SLOT( aboutKnownBugs() ) );
900 action = new QAction( "Translate Howto", i18n("User translation..."), 0,this ); 900 action = new QAction( "Translate Howto", i18n("User translation..."), 0,this );
901 action->addTo( helpMenu ); 901 action->addTo( helpMenu );
902 connect( action, SIGNAL( activated() ), 902 connect( action, SIGNAL( activated() ),
903 SLOT( usertrans() ) ); 903 SLOT( usertrans() ) );
904 action = new QAction( "Frequently asked questions", i18n("FAQ..."), 0,this ); 904 action = new QAction( "Frequently asked questions", i18n("FAQ..."), 0,this );
905 action->addTo( helpMenu ); 905 action->addTo( helpMenu );
906 connect( action, SIGNAL( activated() ), 906 connect( action, SIGNAL( activated() ),
907 SLOT( faq() ) ); 907 SLOT( faq() ) );
908 action = new QAction( "licence", i18n("Licence..."), 0, this ); 908 action = new QAction( "licence", i18n("Licence..."), 0, this );
909 action->addTo( helpMenu ); 909 action->addTo( helpMenu );
910 connect( action, SIGNAL( activated() ), 910 connect( action, SIGNAL( activated() ),
911 SLOT( licence() ) ); 911 SLOT( licence() ) );
912 action = new QAction( "about", i18n("About..."), 0, this ); 912 action = new QAction( "about", i18n("About..."), 0, this );
913 action->addTo( helpMenu ); 913 action->addTo( helpMenu );
914 connect( action, SIGNAL( activated() ), 914 connect( action, SIGNAL( activated() ),
915 SLOT( about() ) ); 915 SLOT( about() ) );
916 //menuBar->insertSeparator(); 916 //menuBar->insertSeparator();
917 917
918 // ****************************************************** 918 // ******************************************************
919 // menubar icons 919 // menubar icons
920 920
921 921
922 iconToolBar->setHorizontalStretchable (true ); 922 iconToolBar->setHorizontalStretchable (true );
923 //menuBar->insertItem( iconToolBar ); 923 //menuBar->insertItem( iconToolBar );
924 //xdays_action 924 //xdays_action
925 if (p-> mShowIconNewEvent) 925 if (p-> mShowIconNewEvent)
926 ne_action->addTo( iconToolBar ); 926 ne_action->addTo( iconToolBar );
927 if (p->mShowIconNewTodo ) 927 if (p->mShowIconNewTodo )
928 nt_action->addTo( iconToolBar ); 928 nt_action->addTo( iconToolBar );
929 if (p-> mShowIconSearch) 929 if (p-> mShowIconSearch)
930 search_action->addTo( iconToolBar ); 930 search_action->addTo( iconToolBar );
931 if (p-> mShowIconNext) 931 if (p-> mShowIconNext)
932 whatsnext_action->addTo( iconToolBar ); 932 whatsnext_action->addTo( iconToolBar );
933 if (p-> mShowIconNextDays) 933 if (p-> mShowIconNextDays)
934 xdays_action->addTo( iconToolBar ); 934 xdays_action->addTo( iconToolBar );
935 if (p-> mShowIconList) 935 if (p-> mShowIconList)
936 showlist_action->addTo( iconToolBar ); 936 showlist_action->addTo( iconToolBar );
937 if (p-> mShowIconDay1) 937 if (p-> mShowIconDay1)
938 day1_action->addTo( iconToolBar ); 938 day1_action->addTo( iconToolBar );
939 if (p-> mShowIconDay5) 939 if (p-> mShowIconDay5)
940 day5_action->addTo( iconToolBar ); 940 day5_action->addTo( iconToolBar );
941 if (p-> mShowIconDay7) 941 if (p-> mShowIconDay7)
942 day7_action->addTo( iconToolBar ); 942 day7_action->addTo( iconToolBar );
943 if (p-> mShowIconMonth) 943 if (p-> mShowIconMonth)
944 month_action->addTo( iconToolBar ); 944 month_action->addTo( iconToolBar );
945 if (p-> mShowIconTodoview) 945 if (p-> mShowIconTodoview)
946 todoview_action->addTo( iconToolBar ); 946 todoview_action->addTo( iconToolBar );
947 if (p-> mShowIconJournal) 947 if (p-> mShowIconJournal)
948 viewjournal_action->addTo( iconToolBar ); 948 viewjournal_action->addTo( iconToolBar );
949 icon = loadPixmap( pathString + "2leftarrowB" ); 949 icon = loadPixmap( pathString + "2leftarrowB" );
950 configureToolBarMenu->insertItem(icon, i18n("Prev. month"), 200, 14); 950 configureToolBarMenu->insertItem(icon, i18n("Prev. month"), 200, 14);
951 if (p-> mShowIconBackFast) { 951 if (p-> mShowIconBackFast) {
952 action = new QAction( i18n("Prev. month"), icon, i18n("Prev. month"),0 , this ); 952 action = new QAction( i18n("Prev. month"), icon, i18n("Prev. month"),0 , this );
953 connect( action, SIGNAL( activated() ), 953 connect( action, SIGNAL( activated() ),
954 mView, SLOT( goPreviousMonth() ) ); 954 mView, SLOT( goPreviousMonth() ) );
955 action->addTo( iconToolBar ); 955 action->addTo( iconToolBar );
956 } 956 }
957 icon = loadPixmap( pathString + "1leftarrowB" ); 957 icon = loadPixmap( pathString + "1leftarrowB" );
958 configureToolBarMenu->insertItem(icon, i18n("Go backward"), 210,15); 958 configureToolBarMenu->insertItem(icon, i18n("Go backward"), 210,15);
959 if (p-> mShowIconBack) { 959 if (p-> mShowIconBack) {
960 action = new QAction( i18n("Go backward"), icon, i18n("Go backward"),0 , this ); 960 action = new QAction( i18n("Go backward"), icon, i18n("Go backward"),0 , this );
961 connect( action, SIGNAL( activated() ), 961 connect( action, SIGNAL( activated() ),
962 mView, SLOT( goPrevious() ) ); 962 mView, SLOT( goPrevious() ) );
963 action->addTo( iconToolBar ); 963 action->addTo( iconToolBar );
964 } 964 }
965 if (p-> mShowIconToday) 965 if (p-> mShowIconToday)
966 today_action->addTo( iconToolBar ); 966 today_action->addTo( iconToolBar );
967 icon = loadPixmap( pathString + "1rightarrowB" ); 967 icon = loadPixmap( pathString + "1rightarrowB" );
968 configureToolBarMenu->insertItem(icon, i18n("Go forward"), 220); 968 configureToolBarMenu->insertItem(icon, i18n("Go forward"), 220);
969 if (p-> mShowIconForward) { 969 if (p-> mShowIconForward) {
970 action = new QAction( i18n("Go forward"), icon, i18n("Go forward"),0 , this ); 970 action = new QAction( i18n("Go forward"), icon, i18n("Go forward"),0 , this );
971 connect( action, SIGNAL( activated() ), 971 connect( action, SIGNAL( activated() ),
972 mView, SLOT( goNext() ) ); 972 mView, SLOT( goNext() ) );
973 action->addTo( iconToolBar ); 973 action->addTo( iconToolBar );
974 } 974 }
975 icon = loadPixmap( pathString + "2rightarrowB" ); 975 icon = loadPixmap( pathString + "2rightarrowB" );
976 configureToolBarMenu->insertItem(icon, i18n("Next month"), 230); 976 configureToolBarMenu->insertItem(icon, i18n("Next month"), 230);
977 if (p-> mShowIconForwardFast) { 977 if (p-> mShowIconForwardFast) {
978 action = new QAction( i18n("Next month"), icon, i18n("Next month"),0 , this ); 978 action = new QAction( i18n("Next month"), icon, i18n("Next month"),0 , this );
979 connect( action, SIGNAL( activated() ), 979 connect( action, SIGNAL( activated() ),
980 mView, SLOT( goNextMonth() ) ); 980 mView, SLOT( goNextMonth() ) );
981 action->addTo( iconToolBar ); 981 action->addTo( iconToolBar );
982 } 982 }
983 983
984 984
985 configureToolBarMenu->insertItem(i18n("What's This?"), 300); 985 configureToolBarMenu->insertItem(i18n("What's This?"), 300);
986 986
987 if (p-> mShowIconNewEvent) 987 if (p-> mShowIconNewEvent)
988 configureToolBarMenu->setItemChecked( 10, true ); 988 configureToolBarMenu->setItemChecked( 10, true );
989 if (p->mShowIconNewTodo ) 989 if (p->mShowIconNewTodo )
990 configureToolBarMenu->setItemChecked( 20, true ); 990 configureToolBarMenu->setItemChecked( 20, true );
991 if (p-> mShowIconSearch) 991 if (p-> mShowIconSearch)
992 configureToolBarMenu->setItemChecked( 120, true ); 992 configureToolBarMenu->setItemChecked( 120, true );
993 if (p-> mShowIconList) 993 if (p-> mShowIconList)
994 configureToolBarMenu->setItemChecked( 30, true ); 994 configureToolBarMenu->setItemChecked( 30, true );
995 if (p-> mShowIconDay1) 995 if (p-> mShowIconDay1)
996 configureToolBarMenu->setItemChecked( 40, true ); 996 configureToolBarMenu->setItemChecked( 40, true );
997 if (p-> mShowIconDay5) 997 if (p-> mShowIconDay5)
998 configureToolBarMenu->setItemChecked( 50, true ); 998 configureToolBarMenu->setItemChecked( 50, true );
999 if (p-> mShowIconDay7) 999 if (p-> mShowIconDay7)
1000 configureToolBarMenu->setItemChecked( 60, true ); 1000 configureToolBarMenu->setItemChecked( 60, true );
1001 if (p-> mShowIconMonth) 1001 if (p-> mShowIconMonth)
1002 configureToolBarMenu->setItemChecked( 70, true ); 1002 configureToolBarMenu->setItemChecked( 70, true );
1003 if (p-> mShowIconTodoview) 1003 if (p-> mShowIconTodoview)
1004 configureToolBarMenu->setItemChecked( 80, true ); 1004 configureToolBarMenu->setItemChecked( 80, true );
1005 if (p-> mShowIconBackFast) 1005 if (p-> mShowIconBackFast)
1006 configureToolBarMenu->setItemChecked( 200, true ); 1006 configureToolBarMenu->setItemChecked( 200, true );
1007 if (p-> mShowIconBack) 1007 if (p-> mShowIconBack)
1008 configureToolBarMenu->setItemChecked( 210, true ); 1008 configureToolBarMenu->setItemChecked( 210, true );
1009 if (p-> mShowIconToday) 1009 if (p-> mShowIconToday)
1010 configureToolBarMenu->setItemChecked( 130, true ); 1010 configureToolBarMenu->setItemChecked( 130, true );
1011 if (p-> mShowIconForward) 1011 if (p-> mShowIconForward)
1012 configureToolBarMenu->setItemChecked( 220, true ); 1012 configureToolBarMenu->setItemChecked( 220, true );
1013 if (p-> mShowIconForwardFast) 1013 if (p-> mShowIconForwardFast)
1014 configureToolBarMenu->setItemChecked( 230, true ); 1014 configureToolBarMenu->setItemChecked( 230, true );
1015 if (p-> mShowIconNextDays) 1015 if (p-> mShowIconNextDays)
1016 configureToolBarMenu->setItemChecked( 100, true ); 1016 configureToolBarMenu->setItemChecked( 100, true );
1017 if (p-> mShowIconNext) 1017 if (p-> mShowIconNext)
1018 configureToolBarMenu->setItemChecked( 110, true ); 1018 configureToolBarMenu->setItemChecked( 110, true );
1019 if (p-> mShowIconJournal) 1019 if (p-> mShowIconJournal)
1020 configureToolBarMenu->setItemChecked( 90, true ); 1020 configureToolBarMenu->setItemChecked( 90, true );
1021 if (p-> mShowIconWhatsThis) 1021 if (p-> mShowIconWhatsThis)
1022 configureToolBarMenu->setItemChecked( 300, true ); 1022 configureToolBarMenu->setItemChecked( 300, true );
1023 1023
1024 QLabel* dummy = new QLabel( iconToolBar ); 1024 QLabel* dummy = new QLabel( iconToolBar );
1025 dummy->setBackgroundColor( iconToolBar->backgroundColor() ); 1025 dummy->setBackgroundColor( iconToolBar->backgroundColor() );
1026 if (!p-> mShowIconStretch) 1026 if (!p-> mShowIconStretch)
1027 iconToolBar->setStretchableWidget ( dummy ) ; 1027 iconToolBar->setStretchableWidget ( dummy ) ;
1028 else 1028 else
1029 configureToolBarMenu->setItemChecked( 5, true ); 1029 configureToolBarMenu->setItemChecked( 5, true );
1030 if (p-> mShowIconWhatsThis) 1030 if (p-> mShowIconWhatsThis)
1031 QWhatsThis::whatsThisButton ( iconToolBar ); 1031 QWhatsThis::whatsThisButton ( iconToolBar );
1032 connect( configureToolBarMenu, SIGNAL( activated( int ) ),this, SLOT(configureToolBar( int ) ) ); 1032 connect( configureToolBarMenu, SIGNAL( activated( int ) ),this, SLOT(configureToolBar( int ) ) );
1033 configureAgenda( p->mHourSize ); 1033 configureAgenda( p->mHourSize );
1034 connect( configureAgendaMenu, SIGNAL( activated( int ) ),this, SLOT(configureAgenda( int ) ) ); 1034 connect( configureAgendaMenu, SIGNAL( activated( int ) ),this, SLOT(configureAgenda( int ) ) );
1035} 1035}
1036 1036
1037void MainWindow::exportToPhone( int mode ) 1037void MainWindow::exportToPhone( int mode )
1038{ 1038{
1039 1039
1040 //ex2phone->insertItem(i18n("Complete calendar..."), 1 ); 1040 //ex2phone->insertItem(i18n("Complete calendar..."), 1 );
1041 //ex2phone->insertItem(i18n("Filtered calendar..."), 2 ); 1041 //ex2phone->insertItem(i18n("Filtered calendar..."), 2 );
1042 KOex2phonePrefs ex2phone; 1042 KOex2phonePrefs ex2phone;
1043 1043
1044 ex2phone.mPhoneConnection->setText( KPimGlobalPrefs::instance()->mEx2PhoneConnection ); 1044 ex2phone.mPhoneConnection->setText( KPimGlobalPrefs::instance()->mEx2PhoneConnection );
1045 ex2phone.mPhoneDevice->setText( KPimGlobalPrefs::instance()->mEx2PhoneDevice ); 1045 ex2phone.mPhoneDevice->setText( KPimGlobalPrefs::instance()->mEx2PhoneDevice );
1046 ex2phone.mPhoneModel->setText( KPimGlobalPrefs::instance()->mEx2PhoneModel ); 1046 ex2phone.mPhoneModel->setText( KPimGlobalPrefs::instance()->mEx2PhoneModel );
1047 if ( mode == 1 ) 1047 if ( mode == 1 )
1048 ex2phone.setCaption(i18n("Export complete calendar")); 1048 ex2phone.setCaption(i18n("Export complete calendar"));
1049 if ( mode == 2 ) 1049 if ( mode == 2 )
1050 ex2phone.setCaption(i18n("Export filtered calendar")); 1050 ex2phone.setCaption(i18n("Export filtered calendar"));
1051 1051
1052 if ( !ex2phone.exec() ) { 1052 if ( !ex2phone.exec() ) {
1053 return; 1053 return;
1054 } 1054 }
1055 KPimGlobalPrefs::instance()->mEx2PhoneConnection = ex2phone.mPhoneConnection->text(); 1055 KPimGlobalPrefs::instance()->mEx2PhoneConnection = ex2phone.mPhoneConnection->text();
1056 KPimGlobalPrefs::instance()->mEx2PhoneDevice = ex2phone.mPhoneDevice->text(); 1056 KPimGlobalPrefs::instance()->mEx2PhoneDevice = ex2phone.mPhoneDevice->text();
1057 KPimGlobalPrefs::instance()->mEx2PhoneModel = ex2phone.mPhoneModel->text(); 1057 KPimGlobalPrefs::instance()->mEx2PhoneModel = ex2phone.mPhoneModel->text();
1058 1058
1059 int inFuture = 0; 1059 int inFuture = 0;
1060 if ( ex2phone.mWriteBackFuture->isChecked() ) 1060 if ( ex2phone.mWriteBackFuture->isChecked() )
1061 inFuture = ex2phone.mWriteBackFutureWeeks->value(); 1061 inFuture = ex2phone.mWriteBackFutureWeeks->value();
1062 QPtrList<Incidence> delSel; 1062 QPtrList<Incidence> delSel;
1063 if ( mode == 1 ) 1063 if ( mode == 1 )
1064 delSel = mCalendar->rawIncidences(); 1064 delSel = mCalendar->rawIncidences();
1065 if ( mode == 2 ) 1065 if ( mode == 2 )
1066 delSel = mCalendar->incidences(); 1066 delSel = mCalendar->incidences();
1067 CalendarLocal* cal = new CalendarLocal(); 1067 CalendarLocal* cal = new CalendarLocal();
1068 cal->setLocalTime(); 1068 cal->setLocalTime();
1069 Incidence *incidence = delSel.first(); 1069 Incidence *incidence = delSel.first();
1070 QDateTime cur = QDateTime::currentDateTime().addDays( -7 ); 1070 QDateTime cur = QDateTime::currentDateTime().addDays( -7 );
1071 QDateTime end = cur.addDays( ( inFuture +1 ) *7 ); 1071 QDateTime end = cur.addDays( ( inFuture +1 ) *7 );
1072 while ( incidence ) { 1072 while ( incidence ) {
1073 if ( incidence->type() != "Journal" ) { 1073 if ( incidence->type() != "Journal" ) {
1074 bool add = true; 1074 bool add = true;
1075 if ( inFuture ) { 1075 if ( inFuture ) {
1076 QDateTime dt; 1076 QDateTime dt;
1077 if ( incidence->type() == "Todo" ) { 1077 if ( incidence->type() == "Todo" ) {
1078 Todo * t = (Todo*)incidence; 1078 Todo * t = (Todo*)incidence;
1079 if ( t->hasDueDate() ) 1079 if ( t->hasDueDate() )
1080 dt = t->dtDue(); 1080 dt = t->dtDue();
1081 else 1081 else
1082 dt = cur.addSecs( 62 ); 1082 dt = cur.addSecs( 62 );
1083 } 1083 }
1084 else { 1084 else {
1085 bool ok; 1085 bool ok;
1086 dt = incidence->getNextOccurence( cur, &ok ); 1086 dt = incidence->getNextOccurence( cur, &ok );
1087 if ( !ok ) 1087 if ( !ok )
1088 dt = cur.addSecs( -62 ); 1088 dt = cur.addSecs( -62 );
1089 } 1089 }
1090 if ( dt < cur || dt > end ) { 1090 if ( dt < cur || dt > end ) {
1091 add = false; 1091 add = false;
1092 } 1092 }
1093 } 1093 }
1094 if ( add ) { 1094 if ( add ) {
1095 Incidence *in = incidence->clone(); 1095 Incidence *in = incidence->clone();
1096 cal->addIncidence( in ); 1096 cal->addIncidence( in );
1097 } 1097 }
1098 } 1098 }
1099 incidence = delSel.next(); 1099 incidence = delSel.next();
1100 } 1100 }
1101 PhoneAccess::writeConfig( KPimGlobalPrefs::instance()->mEx2PhoneDevice, 1101 PhoneAccess::writeConfig( KPimGlobalPrefs::instance()->mEx2PhoneDevice,
1102 KPimGlobalPrefs::instance()->mEx2PhoneConnection, 1102 KPimGlobalPrefs::instance()->mEx2PhoneConnection,
1103 KPimGlobalPrefs::instance()->mEx2PhoneModel ); 1103 KPimGlobalPrefs::instance()->mEx2PhoneModel );
1104 1104
1105 setCaption( i18n("Writing to phone...")); 1105 setCaption( i18n("Writing to phone..."));
1106 if ( PhoneFormat::writeToPhone( cal ) ) 1106 if ( PhoneFormat::writeToPhone( cal ) )
1107 setCaption( i18n("Export to phone successful!")); 1107 setCaption( i18n("Export to phone successful!"));
1108 else 1108 else
1109 setCaption( i18n("Error exporting to phone!")); 1109 setCaption( i18n("Error exporting to phone!"));
1110 delete cal; 1110 delete cal;
1111} 1111}
1112 1112
1113 1113
1114void MainWindow::setDefaultPreferences() 1114void MainWindow::setDefaultPreferences()
1115{ 1115{
1116 KOPrefs *p = KOPrefs::instance(); 1116 KOPrefs *p = KOPrefs::instance();
1117 1117
1118 p->mCompactDialogs = true; 1118 p->mCompactDialogs = true;
1119 p->mConfirm = true; 1119 p->mConfirm = true;
1120 // p->mEnableQuickTodo = false; 1120 // p->mEnableQuickTodo = false;
1121 1121
1122} 1122}
1123 1123
1124QString MainWindow::resourcePath() 1124QString MainWindow::resourcePath()
1125{ 1125{
1126 return KGlobal::iconLoader()->iconPath(); 1126 return KGlobal::iconLoader()->iconPath();
1127} 1127}
1128 1128
1129void MainWindow::displayText( QString text ,QString cap ) 1129void MainWindow::displayText( QString text ,QString cap )
1130{ 1130{
1131 QDialog dia( this, "name", true ); ; 1131 QDialog dia( this, "name", true ); ;
1132 dia.setCaption( cap ); 1132 dia.setCaption( cap );
1133 QVBoxLayout* lay = new QVBoxLayout( &dia ); 1133 QVBoxLayout* lay = new QVBoxLayout( &dia );
1134 lay->setSpacing( 3 ); 1134 lay->setSpacing( 3 );
1135 lay->setMargin( 3 ); 1135 lay->setMargin( 3 );
1136 QTextBrowser tb ( &dia ); 1136 QTextBrowser tb ( &dia );
1137 lay->addWidget( &tb ); 1137 lay->addWidget( &tb );
1138 tb.setText( text ); 1138 tb.setText( text );
1139#ifdef DESKTOP_VERSION 1139#ifdef DESKTOP_VERSION
1140 dia.resize( 640, 480); 1140 dia.resize( 640, 480);
1141#else 1141#else
1142 dia.showMaximized(); 1142 dia.showMaximized();
1143#endif 1143#endif
1144 dia.exec(); 1144 dia.exec();
1145} 1145}
1146 1146
1147void MainWindow::features() 1147void MainWindow::features()
1148{ 1148{
1149 1149
1150 KApplication::showFile( i18n("KO/Pi Features and hints"), "kdepim/korganizer/featuresKOPI.txt" ); 1150 KApplication::showFile( i18n("KO/Pi Features and hints"), "kdepim/korganizer/featuresKOPI.txt" );
1151} 1151}
1152 1152
1153void MainWindow::usertrans() 1153void MainWindow::usertrans()
1154{ 1154{
1155 1155
1156 KApplication::showFile( i18n("KO/Pi User translation HowTo"), "kdepim/korganizer/usertranslationHOWTO.txt" ); 1156 KApplication::showFile( i18n("KO/Pi User translation HowTo"), "kdepim/korganizer/usertranslationHOWTO.txt" );
1157} 1157}
1158 1158
1159void MainWindow::kdesynchowto() 1159void MainWindow::kdesynchowto()
1160{ 1160{
1161 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/Zaurus-KDE_syncHowTo.txt" ); 1161 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/Zaurus-KDE_syncHowTo.txt" );
1162} 1162}
1163void MainWindow::multisynchowto() 1163void MainWindow::multisynchowto()
1164{ 1164{
1165 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/MultiSyncHowTo.txt" ); 1165 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/MultiSyncHowTo.txt" );
1166} 1166}
1167void MainWindow::synchowto() 1167void MainWindow::synchowto()
1168{ 1168{
1169 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/SyncHowto.txt" ); 1169 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/SyncHowto.txt" );
1170} 1170}
1171void MainWindow::faq() 1171void MainWindow::faq()
1172{ 1172{
1173 KApplication::showFile( i18n("KO/Pi FAQ"), "kdepim/korganizer/kopiFAQ.txt" ); 1173 KApplication::showFile( i18n("KO/Pi FAQ"), "kdepim/korganizer/kopiFAQ.txt" );
1174 1174
1175} 1175}
1176void MainWindow::whatsNew() 1176void MainWindow::whatsNew()
1177{ 1177{
1178 KApplication::showFile( "KDE-Pim/Pi Version Info", "kdepim/WhatsNew.txt" ); 1178 KApplication::showFile( "KDE-Pim/Pi Version Info", "kdepim/WhatsNew.txt" );
1179 1179
1180} 1180}
1181void MainWindow::licence() 1181void MainWindow::licence()
1182{ 1182{
1183 KApplication::showLicence(); 1183 KApplication::showLicence();
1184 1184
1185} 1185}
1186void MainWindow::about() 1186void MainWindow::about()
1187{ 1187{
1188 QString version; 1188 QString version;
1189#include <../version> 1189#include <../version>
1190 QMessageBox::about( this, i18n("About KOrganizer/Pi"), 1190 QMessageBox::about( this, i18n("About KOrganizer/Pi"),
1191 i18n("KOrganizer/Platform-independent\n") + 1191 i18n("KOrganizer/Platform-independent\n") +
1192 "(KO/Pi) " + version + " - " + 1192 "(KO/Pi) " + version + " - " +
1193 1193
1194#ifdef DESKTOP_VERSION 1194#ifdef DESKTOP_VERSION
1195 i18n("Desktop Edition\n") + 1195 i18n("Desktop Edition\n") +
1196#else 1196#else
1197 i18n("PDA-Edition\nfor: Zaurus 5x00 / 7x0 / 8x0\n") + 1197 i18n("PDA-Edition\nfor: Zaurus 5x00 / 7x0 / 8x0\n") +
1198#endif 1198#endif
1199 i18n("(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") ); 1199 i18n("(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") );
1200} 1200}
1201void MainWindow::keyBindings() 1201void MainWindow::keyBindings()
1202{ 1202{
1203 QString cap = i18n("KO/Pi Keys + Colors"); 1203 QString cap = i18n("KO/Pi Keys + Colors");
1204 QString text = i18n("<p><h2>KO/Pi key shortcuts:</h2></p>\n") + 1204 QString text = i18n("<p><h2>KO/Pi key shortcuts:</h2></p>\n") +
1205 i18n("<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n")+ 1205 i18n("<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n")+
1206 i18n("<p><b>I</b>: Show info for selected event/todo</p>\n") + 1206 i18n("<p><b>I</b>: Show info for selected event/todo</p>\n") +
1207 i18n("<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n")+ 1207 i18n("<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n")+
1208 i18n("<p><b>F</b>: Toggle filterview |<b>F+ctrl</b>: Edit filter </p>\n")+ 1208 i18n("<p><b>F</b>: Toggle filterview |<b>F+ctrl</b>: Edit filter </p>\n")+
1209 i18n("<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n")+ 1209 i18n("<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n")+
1210 i18n("<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n")+ 1210 i18n("<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n")+
1211 i18n("<p><b>N</b>: Next days view| <b>W</b>: What's next view\n ")+ 1211 i18n("<p><b>N</b>: Next days view| <b>W</b>: What's next view\n ")+
1212 i18n("<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n")+ 1212 i18n("<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n")+
1213 i18n("<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n")+ 1213 i18n("<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n")+
1214 i18n("<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n")+ 1214 i18n("<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n")+
1215 i18n("<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n")+ 1215 i18n("<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n")+
1216 i18n("<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n")+ 1216 i18n("<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n")+
1217 i18n("<p><b>S+ctrl</b>: Add sub-todo | <b>X</b>: Toggle datenavigator</p>\n")+ 1217 i18n("<p><b>S+ctrl</b>: Add sub-todo | <b>X</b>: Toggle datenavigator</p>\n")+
1218 i18n("<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n")+ 1218 i18n("<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n")+
1219 i18n("<p><b>C</b>: Show current time in agenda view</p>\n")+ 1219 i18n("<p><b>C</b>: Show current time in agenda view</p>\n")+
1220 i18n("<p><b>B</b>: Edit description (details) of selected item</p>\n")+ 1220 i18n("<p><b>B</b>: Edit description (details) of selected item</p>\n")+
1221 i18n("<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n")+ 1221 i18n("<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n")+
1222 i18n("<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n")+ 1222 i18n("<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n")+
1223 i18n("<p><b>del,backspace</b>: Delete selected item</p>\n")+ 1223 i18n("<p><b>del,backspace</b>: Delete selected item</p>\n")+
1224 i18n("<p><h3>In agenda view:</h3></p>\n") + 1224 i18n("<p><h3>In agenda view:</h3></p>\n") +
1225 i18n("<p><b>up/down</b>: Scroll agenda view</p>\n")+ 1225 i18n("<p><b>up/down</b>: Scroll agenda view</p>\n")+
1226 i18n("<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n")+ 1226 i18n("<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n")+
1227 i18n("<p><h3>In todo view:</h3></p>\n") + 1227 i18n("<p><h3>In todo view:</h3></p>\n") +
1228 i18n("<p><b>shift+U</b>: <b>U</b>nparent todo (make root todo)</p>\n")+ 1228 i18n("<p><b>shift+U</b>: <b>U</b>nparent todo (make root todo)</p>\n")+
1229 i18n("<p><b>shift+S</b>: Make <b>S</b>ubtodo (reparent todo)</p>\n")+ 1229 i18n("<p><b>shift+S</b>: Make <b>S</b>ubtodo (reparent todo)</p>\n")+
1230 i18n("<p><b>shift+P</b>: Make new <b>P</b>arent for todo selected with shift+S</p>\n")+ 1230 i18n("<p><b>shift+P</b>: Make new <b>P</b>arent for todo selected with shift+S</p>\n")+
1231 i18n("<p><b>Q</b>: Toggle quick todo line edit.</p>\n")+ 1231 i18n("<p><b>Q</b>: Toggle quick todo line edit.</p>\n")+
1232 i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+ 1232 i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+
1233 i18n("<p><b>return</b>: Mark item as completed+one step down.</p>\n")+ 1233 i18n("<p><b>return</b>: Mark item as completed+one step down.</p>\n")+
1234 i18n("<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n")+ 1234 i18n("<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n")+
1235 i18n("<p><h3>In list view:</h3></p>\n") + 1235 i18n("<p><h3>In list view:</h3></p>\n") +
1236 i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+ 1236 i18n("<p><b>I</b>: Show info of current item+one step down.</p>\n")+
1237 i18n("<p><b>return</b>: Select item+one step down</p>\n")+ 1237 i18n("<p><b>return</b>: Select item+one step down</p>\n")+
1238 i18n("<p><b>return+shift</b>: Deselect item+one step down</p>\n")+ 1238 i18n("<p><b>return+shift</b>: Deselect item+one step down</p>\n")+
1239 i18n("<p><b>up/down</b>: Next/prev item</p>\n")+ 1239 i18n("<p><b>up/down</b>: Next/prev item</p>\n")+
1240 i18n("<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n")+ 1240 i18n("<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n")+
1241 i18n("<p><b>shift+up/down</b>: Goto first/last item</p>\n")+ 1241 i18n("<p><b>shift+up/down</b>: Goto first/last item</p>\n")+
1242 i18n("<p><h3>In event/todo viewer:</h3></p>\n") + 1242 i18n("<p><h3>In event/todo viewer:</h3></p>\n") +
1243 i18n("<p><b>I,C</b>: Close dialog.</p>\n")+ 1243 i18n("<p><b>I,C</b>: Close dialog.</p>\n")+
1244 i18n("<p><b>A</b>: Show agenda view.</p>\n")+ 1244 i18n("<p><b>A</b>: Show agenda view.</p>\n")+
1245 i18n("<p><b>E</b>: Edit item</p>\n") + 1245 i18n("<p><b>E</b>: Edit item</p>\n") +
1246 i18n("<p><h2>KO/Pi icon colors:</h2></p>\n") + 1246 i18n("<p><h2>KO/Pi icon colors:</h2></p>\n") +
1247 i18n("<p><b>(for square icons in agenda and month view)</b></p>\n") + 1247 i18n("<p><b>(for square icons in agenda and month view)</b></p>\n") +
1248 i18n("<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n")+ 1248 i18n("<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n")+
1249 i18n("<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n")+ 1249 i18n("<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n")+
1250 i18n("<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n")+ 1250 i18n("<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n")+
1251 i18n("<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n")+ 1251 i18n("<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n")+
1252 i18n("<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n")+ 1252 i18n("<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n")+
1253 i18n("<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n") + 1253 i18n("<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n") +
1254 i18n("<p><b>White</b>: Item readonly</p>\n"); 1254 i18n("<p><b>White</b>: Item readonly</p>\n");
1255 displayText( text, cap); 1255 displayText( text, cap);
1256} 1256}
1257void MainWindow::aboutAutoSaving() 1257void MainWindow::aboutAutoSaving()
1258{ 1258{
1259 QString text = i18n("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"); 1259 QString text = i18n("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");
1260 1260
1261 KApplication::showText( i18n("Auto Saving in KOrganizer/Pi"), text); 1261 KApplication::showText( i18n("Auto Saving in KOrganizer/Pi"), text);
1262 1262
1263} 1263}
1264void MainWindow::aboutKnownBugs() 1264void MainWindow::aboutKnownBugs()
1265{ 1265{
1266 QMessageBox* msg; 1266 QMessageBox* msg;
1267 msg = new QMessageBox( i18n("Known Problems in KOrganizer/Pi"), 1267 msg = new QMessageBox( i18n("Known Problems in KOrganizer/Pi"),
1268 i18n("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")+ 1268 i18n("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")+
1269 i18n("2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n")+ 1269 i18n("2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n")+
1270 i18n("\nPlease report unexpected behaviour to\nlutz@pi-sync.net\n") + 1270 i18n("\nPlease report unexpected behaviour to\nlutz@pi-sync.net\n") +
1271 i18n("\nor report them in the bugtracker on\n") + 1271 i18n("\nor report them in the bugtracker on\n") +
1272 i18n("\nhttp://sourceforge.net/projects/kdepimpi\n"), 1272 i18n("\nhttp://sourceforge.net/projects/kdepimpi\n"),
1273 QMessageBox::NoIcon, 1273 QMessageBox::NoIcon,
1274 QMessageBox::Ok, 1274 QMessageBox::Ok,
1275 QMessageBox::NoButton, 1275 QMessageBox::NoButton,
1276 QMessageBox::NoButton); 1276 QMessageBox::NoButton);
1277 msg->exec(); 1277 msg->exec();
1278 delete msg; 1278 delete msg;
1279 1279
1280} 1280}
1281 1281
1282QString MainWindow::defaultFileName() 1282QString MainWindow::defaultFileName()
1283{ 1283{
1284 return locateLocal( "data", "korganizer/mycalendar.ics" ); 1284 return locateLocal( "data", "korganizer/mycalendar.ics" );
1285} 1285}
1286QString MainWindow::syncFileName() 1286QString MainWindow::syncFileName()
1287{ 1287{
1288#ifdef DESKTOP_VERSION 1288#ifdef DESKTOP_VERSION
1289 return locateLocal( "tmp", "synccalendar.ics" ); 1289 return locateLocal( "tmp", "synccalendar.ics" );
1290#else 1290#else
1291 return QString( "/tmp/synccalendar.ics" ); 1291 return QString( "/tmp/synccalendar.ics" );
1292#endif 1292#endif
1293} 1293}
1294 1294
1295void MainWindow::processIncidenceSelection( Incidence *incidence ) 1295void MainWindow::processIncidenceSelection( Incidence *incidence )
1296{ 1296{
1297 if ( !incidence ) { 1297 if ( !incidence ) {
1298 enableIncidenceActions( false ); 1298 enableIncidenceActions( false );
1299 1299
1300 mNewSubTodoAction->setEnabled( false ); 1300 mNewSubTodoAction->setEnabled( false );
1301 setCaptionToDates(); 1301 setCaptionToDates();
1302 return; 1302 return;
1303 1303
1304 } 1304 }
1305 1305
1306 //KGlobal::locale()->formatDateTime(nextA, true); 1306 //KGlobal::locale()->formatDateTime(nextA, true);
1307 QString startString = ""; 1307 QString startString = "";
1308 if ( incidence->type() != "Todo" ) { 1308 if ( incidence->type() != "Todo" ) {
1309 if ( incidence->dtStart().date() < incidence->dtEnd().date() ) { 1309 if ( incidence->dtStart().date() < incidence->dtEnd().date() ) {
1310 if ( incidence->doesFloat() ) { 1310 if ( incidence->doesFloat() ) {
1311 startString += ": "+incidence->dtStartDateStr( true ); 1311 startString += ": "+incidence->dtStartDateStr( true );
1312 startString += " --- "+((Event*)incidence)->dtEndDateStr( true ); 1312 startString += " --- "+((Event*)incidence)->dtEndDateStr( true );
1313 1313
1314 } else { 1314 } else {
1315 startString = ": "+incidence->dtStartStr(true); 1315 startString = ": "+incidence->dtStartStr(true);
1316 startString += " --- "+((Event*)incidence)->dtEndStr(true); 1316 startString += " --- "+((Event*)incidence)->dtEndStr(true);
1317 1317
1318 } 1318 }
1319 1319
1320 } else { 1320 } else {
1321 if ( incidence->dtStart().time() != incidence->dtEnd().time() ) 1321 if ( incidence->dtStart().time() != incidence->dtEnd().time() )
1322 startString = ": "+KGlobal::locale()->formatTime(incidence->dtStart().time())+ 1322 startString = ": "+KGlobal::locale()->formatTime(incidence->dtStart().time())+
1323 "-"+KGlobal::locale()->formatTime(incidence->dtEnd().time()); 1323 "-"+KGlobal::locale()->formatTime(incidence->dtEnd().time());
1324 startString +=" "+KGlobal::locale()->formatDate( incidence->dtStart().date(), true); 1324 startString +=" "+KGlobal::locale()->formatDate( incidence->dtStart().date(), true);
1325 } 1325 }
1326 1326
1327 } 1327 }
1328 else 1328 else
1329 startString = i18n(": (Prio ") +QString::number( (( KCal::Todo*)incidence)->priority() ) +") "+QString::number( (( KCal::Todo*)incidence)->percentComplete() ) +i18n("\% completed"); 1329 startString = i18n(": (Prio ") +QString::number( (( KCal::Todo*)incidence)->priority() ) +") "+QString::number( (( KCal::Todo*)incidence)->percentComplete() ) +i18n("\% completed");
1330 if ( !incidence->location().isEmpty() ) 1330 if ( !incidence->location().isEmpty() )
1331 startString += " (" +incidence->location()+")"; 1331 startString += " (" +incidence->location()+")";
1332 setCaption( incidence->summary()+startString); 1332 setCaption( incidence->summary()+startString);
1333 1333
1334 enableIncidenceActions( true ); 1334 enableIncidenceActions( true );
1335 1335
1336 if ( incidence->type() == "Event" ) { 1336 if ( incidence->type() == "Event" ) {
1337 mShowAction->setText( i18n("Show Event...") ); 1337 mShowAction->setText( i18n("Show Event...") );
1338 mEditAction->setText( i18n("Edit Event...") ); 1338 mEditAction->setText( i18n("Edit Event...") );
1339 mDeleteAction->setText( i18n("Delete Event...") ); 1339 mDeleteAction->setText( i18n("Delete Event...") );
1340 1340
1341 mNewSubTodoAction->setEnabled( false ); 1341 mNewSubTodoAction->setEnabled( false );
1342 } else if ( incidence->type() == "Todo" ) { 1342 } else if ( incidence->type() == "Todo" ) {
1343 mShowAction->setText( i18n("Show Todo...") ); 1343 mShowAction->setText( i18n("Show Todo...") );
1344 mEditAction->setText( i18n("Edit Todo...") ); 1344 mEditAction->setText( i18n("Edit Todo...") );
1345 mDeleteAction->setText( i18n("Delete Todo...") ); 1345 mDeleteAction->setText( i18n("Delete Todo...") );
1346 1346
1347 mNewSubTodoAction->setEnabled( true ); 1347 mNewSubTodoAction->setEnabled( true );
1348 } else { 1348 } else {
1349 mShowAction->setText( i18n("Show...") ); 1349 mShowAction->setText( i18n("Show...") );
1350 mShowAction->setText( i18n("Edit...") ); 1350 mShowAction->setText( i18n("Edit...") );
1351 mShowAction->setText( i18n("Delete...") ); 1351 mShowAction->setText( i18n("Delete...") );
1352 1352
1353 mNewSubTodoAction->setEnabled( false ); 1353 mNewSubTodoAction->setEnabled( false );
1354 } 1354 }
1355} 1355}
1356 1356
1357void MainWindow::enableIncidenceActions( bool enabled ) 1357void MainWindow::enableIncidenceActions( bool enabled )
1358{ 1358{
1359 mShowAction->setEnabled( enabled ); 1359 mShowAction->setEnabled( enabled );
1360 mEditAction->setEnabled( enabled ); 1360 mEditAction->setEnabled( enabled );
1361 mDeleteAction->setEnabled( enabled ); 1361 mDeleteAction->setEnabled( enabled );
1362 1362
1363 mCloneAction->setEnabled( enabled ); 1363 mCloneAction->setEnabled( enabled );
1364 mMoveAction->setEnabled( enabled ); 1364 mMoveAction->setEnabled( enabled );
1365 mBeamAction->setEnabled( enabled ); 1365 mBeamAction->setEnabled( enabled );
1366 mCancelAction->setEnabled( enabled ); 1366 mCancelAction->setEnabled( enabled );
1367} 1367}
1368 1368
1369void MainWindow::importOL() 1369void MainWindow::importOL()
1370{ 1370{
1371#ifdef _WIN32_ 1371#ifdef _WIN32_
1372 KOImportOLdialog *id = new KOImportOLdialog("Import from OL - select folder!" , mView->calendar(),this ); 1372 KOImportOLdialog *id = new KOImportOLdialog("Import from OL - select folder!" , mView->calendar(),this );
1373 id->exec(); 1373 id->exec();
1374 delete id; 1374 delete id;
1375 mView->updateView(); 1375 mView->updateView();
1376#endif 1376#endif
1377} 1377}
1378void MainWindow::importBday() 1378void MainWindow::importBday()
1379{ 1379{
1380 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 1380 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
1381 i18n("When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n"), 1381 i18n("When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n"),
1382 i18n("Import!"), i18n("Cancel"), 0, 1382 i18n("Import!"), i18n("Cancel"), 0,
1383 0, 1 ); 1383 0, 1 );
1384 if ( result == 0 ) { 1384 if ( result == 0 ) {
1385 mView->importBday(); 1385 mView->importBday();
1386 1386
1387 } 1387 }
1388 1388
1389 1389
1390} 1390}
1391void MainWindow::importQtopia() 1391void MainWindow::importQtopia()
1392{ 1392{
1393#ifndef DESKTOP_VERSION 1393#ifndef DESKTOP_VERSION
1394 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 1394 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
1395 i18n("When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing"), 1395 i18n("When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing"),
1396 i18n("Import!"), i18n("Cancel"), 0, 1396 i18n("Import!"), i18n("Cancel"), 0,
1397 0, 1 ); 1397 0, 1 );
1398 if ( result == 0 ) { 1398 if ( result == 0 ) {
1399 QString datebook = Global::applicationFileName( "datebook", "datebook.xml"); 1399 QString datebook = Global::applicationFileName( "datebook", "datebook.xml");
1400 QString todolist = Global::applicationFileName( "todolist", "todolist.xml"); 1400 QString todolist = Global::applicationFileName( "todolist", "todolist.xml");
1401 QString categories = QString( getenv( "HOME" ) ) + "/Settings/Categories.xml"; 1401 QString categories = QString( getenv( "HOME" ) ) + "/Settings/Categories.xml";
1402 mView->importQtopia( categories, datebook, todolist ); 1402 mView->importQtopia( categories, datebook, todolist );
1403 } 1403 }
1404#else 1404#else
1405 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 1405 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
1406 i18n("Not supported \non desktop!\n"), 1406 i18n("Not supported \non desktop!\n"),
1407 i18n("Ok"), i18n("Cancel"), 0, 1407 i18n("Ok"), i18n("Cancel"), 0,
1408 0, 1 ); 1408 0, 1 );
1409 1409
1410#endif 1410#endif
1411} 1411}
1412 1412
1413void MainWindow::saveOnClose() 1413void MainWindow::saveOnClose()
1414{ 1414{
1415 KOPrefs *p = KOPrefs::instance(); 1415 KOPrefs *p = KOPrefs::instance();
1416 p->mToolBarHor = ( iconToolBar->orientation () == Qt:: Horizontal ); 1416 p->mToolBarHor = ( iconToolBar->orientation () == Qt:: Horizontal );
1417 p->mToolBarUp = iconToolBar->x() > width()/2 || 1417 p->mToolBarUp = iconToolBar->x() > width()/2 ||
1418 iconToolBar->y() > height()/2; 1418 iconToolBar->y() > height()/2;
1419 mView->writeSettings(); 1419 mView->writeSettings();
1420 if ( mCalendarModifiedFlag || mView->checkFileChanged( defaultFileName())) 1420 if ( mCalendarModifiedFlag || mView->checkFileChanged( defaultFileName()))
1421 save(); 1421 save();
1422} 1422}
1423void MainWindow::slotModifiedChanged( bool changed ) 1423void MainWindow::slotModifiedChanged( bool changed )
1424{ 1424{
1425 if ( mBlockAtStartup ) 1425 if ( mBlockAtStartup )
1426 return; 1426 return;
1427 int msec; 1427 int msec;
1428 // we store the changes after 1 minute, 1428 // we store the changes after 1 minute,
1429 // and for safety reasons after 10 minutes again 1429 // and for safety reasons after 10 minutes again
1430 if ( !mSyncManager->blockSave() ) 1430 if ( !mSyncManager->blockSave() )
1431 msec = (1000 * 60*KOPrefs::instance()->mAutoSaveInterval) +1000; 1431 msec = (1000 * 60*KOPrefs::instance()->mAutoSaveInterval) +1000;
1432 else 1432 else
1433 msec = 1000 * 600; 1433 msec = 1000 * 600;
1434 mSaveTimer.start( msec, true ); // 1 minute 1434 mSaveTimer.start( msec, true ); // 1 minute
1435 qDebug("KO: Saving File in %d secs!", msec/1000); 1435 qDebug("KO: Saving File in %d secs!", msec/1000);
1436 mCalendarModifiedFlag = true; 1436 mCalendarModifiedFlag = true;
1437} 1437}
1438void MainWindow::save() 1438void MainWindow::save()
1439{ 1439{
1440 if ( mSyncManager->blockSave() ) 1440 if ( mSyncManager->blockSave() )
1441 return; 1441 return;
1442 mSyncManager->setBlockSave(true); 1442 mSyncManager->setBlockSave(true);
1443 if ( mView->checkFileVersion( defaultFileName()) ) { 1443 if ( mView->checkFileVersion( defaultFileName()) ) {
1444 1444
1445 QTime neededSaveTime = QDateTime::currentDateTime().time(); 1445 QTime neededSaveTime = QDateTime::currentDateTime().time();
1446 setCaption(i18n("KO/Pi:Saving Data to File ..." )); 1446 setCaption(i18n("KO/Pi:Saving Data to File ..." ));
1447 qDebug("KO: Start saving data to file!"); 1447 qDebug("KO: Start saving data to file!");
1448 mView->saveCalendar( defaultFileName() ); 1448 mView->saveCalendar( defaultFileName() );
1449 1449
1450 int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() ); 1450 int msNeeded = neededSaveTime.msecsTo( QDateTime::currentDateTime().time() );
1451 qDebug("KO: Needed %d ms for saving.",msNeeded ); 1451 qDebug("KO: Needed %d ms for saving.",msNeeded );
1452 QString savemes; 1452 QString savemes;
1453 savemes.sprintf(i18n("KO/Pi:File Saved. Needed %d sec, %d ms"),(msNeeded/1000)%100,msNeeded%1000 ); 1453 savemes.sprintf(i18n("KO/Pi:File Saved. Needed %d sec, %d ms"),(msNeeded/1000)%100,msNeeded%1000 );
1454 setCaption(savemes); 1454 setCaption(savemes);
1455 } else 1455 } else
1456 setCaption(i18n("Saving cancelled!")); 1456 setCaption(i18n("Saving cancelled!"));
1457 mCalendarModifiedFlag = false; 1457 mCalendarModifiedFlag = false;
1458 mSyncManager->setBlockSave( false ); 1458 mSyncManager->setBlockSave( false );
1459} 1459}
1460 1460
1461void MainWindow::keyReleaseEvent ( QKeyEvent * e) 1461void MainWindow::keyReleaseEvent ( QKeyEvent * e)
1462{ 1462{
1463 if ( !e->isAutoRepeat() ) { 1463 if ( !e->isAutoRepeat() ) {
1464 mFlagKeyPressed = false; 1464 mFlagKeyPressed = false;
1465 } 1465 }
1466} 1466}
1467void MainWindow::keyPressEvent ( QKeyEvent * e ) 1467void MainWindow::keyPressEvent ( QKeyEvent * e )
1468{ 1468{
1469 qApp->processEvents(); 1469 qApp->processEvents();
1470 if ( e->isAutoRepeat() && !mFlagKeyPressed ) { 1470 if ( e->isAutoRepeat() && !mFlagKeyPressed ) {
1471 e->ignore(); 1471 e->ignore();
1472 // qDebug(" ignore %d",e->isAutoRepeat() ); 1472 // qDebug(" ignore %d",e->isAutoRepeat() );
1473 return; 1473 return;
1474 } 1474 }
1475 if (! e->isAutoRepeat() ) 1475 if (! e->isAutoRepeat() )
1476 mFlagKeyPressed = true; 1476 mFlagKeyPressed = true;
1477 KOPrefs *p = KOPrefs::instance(); 1477 KOPrefs *p = KOPrefs::instance();
1478 bool showSelectedDates = false; 1478 bool showSelectedDates = false;
1479 int size; 1479 int size;
1480 int pro = 0; 1480 int pro = 0;
1481 //qDebug("MainWindow::keyPressEvent "); 1481 //qDebug("MainWindow::keyPressEvent ");
1482 switch ( e->key() ) { 1482 switch ( e->key() ) {
1483 case Qt::Key_Right: 1483 case Qt::Key_Right:
1484 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton) 1484 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton)
1485 mView->goNextMonth(); 1485 mView->goNextMonth();
1486 else 1486 else
1487 mView->goNext(); 1487 mView->goNext();
1488 showSelectedDates = true; 1488 showSelectedDates = true;
1489 break; 1489 break;
1490 case Qt::Key_Left: 1490 case Qt::Key_Left:
1491 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) 1491 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton )
1492 mView->goPreviousMonth(); 1492 mView->goPreviousMonth();
1493 else 1493 else
1494 mView->goPrevious(); 1494 mView->goPrevious();
1495 showSelectedDates = true; 1495 showSelectedDates = true;
1496 break; 1496 break;
1497 case Qt::Key_Down: 1497 case Qt::Key_Down:
1498 mView->viewManager()->agendaView()->scrollOneHourDown(); 1498 mView->viewManager()->agendaView()->scrollOneHourDown();
1499 break; 1499 break;
1500 case Qt::Key_Up: 1500 case Qt::Key_Up:
1501 mView->viewManager()->agendaView()->scrollOneHourUp(); 1501 mView->viewManager()->agendaView()->scrollOneHourUp();
1502 break; 1502 break;
1503 case Qt::Key_I: 1503 case Qt::Key_I:
1504 mView->showIncidence(); 1504 mView->showIncidence();
1505 break; 1505 break;
1506 case Qt::Key_Delete: 1506 case Qt::Key_Delete:
1507 case Qt::Key_Backspace: 1507 case Qt::Key_Backspace:
1508 mView->deleteIncidence(); 1508 mView->deleteIncidence();
1509 break; 1509 break;
1510 case Qt::Key_D: 1510 case Qt::Key_D:
1511 mView->viewManager()->showDayView(); 1511 mView->viewManager()->showDayView();
1512 showSelectedDates = true; 1512 showSelectedDates = true;
1513 break; 1513 break;
1514 case Qt::Key_O: 1514 case Qt::Key_O:
1515 mView->toggleFilerEnabled( ); 1515 mView->toggleFilerEnabled( );
1516 break; 1516 break;
1517 case Qt::Key_0: 1517 case Qt::Key_0:
1518 case Qt::Key_1: 1518 case Qt::Key_1:
1519 case Qt::Key_2: 1519 case Qt::Key_2:
1520 case Qt::Key_3: 1520 case Qt::Key_3:
1521 case Qt::Key_4: 1521 case Qt::Key_4:
1522 case Qt::Key_5: 1522 case Qt::Key_5:
1523 case Qt::Key_6: 1523 case Qt::Key_6:
1524 case Qt::Key_7: 1524 case Qt::Key_7:
1525 case Qt::Key_8: 1525 case Qt::Key_8:
1526 case Qt::Key_9: 1526 case Qt::Key_9:
1527 pro = e->key()-48; 1527 pro = e->key()-48;
1528 if ( pro == 0 ) 1528 if ( pro == 0 )
1529 pro = 10; 1529 pro = 10;
1530 if ( e->state() == Qt::ControlButton) 1530 if ( e->state() == Qt::ControlButton)
1531 pro += 10; 1531 pro += 10;
1532 break; 1532 break;
1533 case Qt::Key_M: 1533 case Qt::Key_M:
1534 mView->viewManager()->showMonthView(); 1534 mView->viewManager()->showMonthView();
1535 showSelectedDates = true; 1535 showSelectedDates = true;
1536 break; 1536 break;
1537 case Qt::Key_Insert: 1537 case Qt::Key_Insert:
1538 mView->newEvent(); 1538 mView->newEvent();
1539 break; 1539 break;
1540 case Qt::Key_S : 1540 case Qt::Key_S :
1541 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton) 1541 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton)
1542 mView->newSubTodo(); 1542 mView->newSubTodo();
1543 else 1543 else
1544 mView->dialogManager()->showSearchDialog(); 1544 mView->dialogManager()->showSearchDialog();
1545 break; 1545 break;
1546 case Qt::Key_Y : 1546 case Qt::Key_Y :
1547 case Qt::Key_Z : 1547 case Qt::Key_Z :
1548 mView->viewManager()->showWorkWeekView(); 1548 mView->viewManager()->showWorkWeekView();
1549 showSelectedDates = true; 1549 showSelectedDates = true;
1550 break; 1550 break;
1551 case Qt::Key_U : 1551 case Qt::Key_U :
1552 mView->viewManager()->showWeekView(); 1552 mView->viewManager()->showWeekView();
1553 showSelectedDates = true; 1553 showSelectedDates = true;
1554 break; 1554 break;
1555 case Qt::Key_H : 1555 case Qt::Key_H :
1556 keyBindings(); 1556 keyBindings();
1557 break; 1557 break;
1558 case Qt::Key_W: 1558 case Qt::Key_W:
1559 mView->viewManager()->showWhatsNextView(); 1559 mView->viewManager()->showWhatsNextView();
1560 break; 1560 break;
1561 case Qt::Key_L: 1561 case Qt::Key_L:
1562 mView->viewManager()->showListView(); 1562 mView->viewManager()->showListView();
1563 break; 1563 break;
1564 case Qt::Key_N: 1564 case Qt::Key_N:
1565 mView->viewManager()->showNextXView(); 1565 mView->viewManager()->showNextXView();
1566 showSelectedDates = true; 1566 showSelectedDates = true;
1567 break; 1567 break;
1568 case Qt::Key_V: 1568 case Qt::Key_V:
1569 mView->viewManager()->showTodoView(); 1569 mView->viewManager()->showTodoView();
1570 break; 1570 break;
1571 case Qt::Key_C: 1571 case Qt::Key_C:
1572 mView->viewManager()->agendaView()->setStartHour( QTime::currentTime ().hour() ); 1572 mView->viewManager()->agendaView()->setStartHour( QTime::currentTime ().hour() );
1573 break; 1573 break;
1574 case Qt::Key_P: 1574 case Qt::Key_P:
1575 mView->showDatePicker( ); 1575 mView->showDatePicker( );
1576 break; 1576 break;
1577 case Qt::Key_F: 1577 case Qt::Key_F:
1578 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) 1578 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton )
1579 mView->editFilters(); 1579 mView->editFilters();
1580 else 1580 else
1581 mView->toggleFilter(); 1581 mView->toggleFilter();
1582 break; 1582 break;
1583 case Qt::Key_X: 1583 case Qt::Key_X:
1584 mView->toggleDateNavigatorWidget(); 1584 mView->toggleDateNavigatorWidget();
1585 break; 1585 break;
1586 case Qt::Key_Space: 1586 case Qt::Key_Space:
1587 mView->toggleExpand(); 1587 mView->toggleExpand();
1588 break; 1588 break;
1589 case Qt::Key_A: 1589 case Qt::Key_A:
1590 mView->toggleAllDaySize(); 1590 mView->toggleAllDaySize();
1591 break; 1591 break;
1592 case Qt::Key_T: 1592 case Qt::Key_T:
1593 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) 1593 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton )
1594 mView->newTodo(); 1594 mView->newTodo();
1595 else { 1595 else {
1596 mView->goToday(); 1596 mView->goToday();
1597 showSelectedDates = true; 1597 showSelectedDates = true;
1598 } 1598 }
1599 break; 1599 break;
1600 case Qt::Key_J: 1600 case Qt::Key_J:
1601 mView->viewManager()->showJournalView(); 1601 mView->viewManager()->showJournalView();
1602 break; 1602 break;
1603 case Qt::Key_B: 1603 case Qt::Key_B:
1604 mView->editIncidenceDescription();; 1604 mView->editIncidenceDescription();;
1605 break; 1605 break;
1606 // case Qt::Key_Return: 1606 // case Qt::Key_Return:
1607 case Qt::Key_E: 1607 case Qt::Key_E:
1608 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) 1608 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton )
1609 mView->newEvent(); 1609 mView->newEvent();
1610 else 1610 else
1611 mView->editIncidence(); 1611 mView->editIncidence();
1612 break; 1612 break;
1613 case Qt::Key_Plus: 1613 case Qt::Key_Plus:
1614 size = p->mHourSize +2; 1614 size = p->mHourSize +2;
1615 if ( size <= 18 ) 1615 if ( size <= 18 )
1616 configureAgenda( size ); 1616 configureAgenda( size );
1617 break; 1617 break;
1618 case Qt::Key_Minus: 1618 case Qt::Key_Minus:
1619 size = p->mHourSize - 2; 1619 size = p->mHourSize - 2;
1620 if ( size >= 4 ) 1620 if ( size >= 4 )
1621 configureAgenda( size ); 1621 configureAgenda( size );
1622 break; 1622 break;
1623 1623
1624 1624
1625 default: 1625 default:
1626 e->ignore(); 1626 e->ignore();
1627 } 1627 }
1628 if ( pro > 0 ) { 1628 if ( pro > 0 ) {
1629 mView->selectFilter( pro-1 ); 1629 mView->selectFilter( pro-1 );
1630 } 1630 }
1631 if ( showSelectedDates ) { 1631 if ( showSelectedDates ) {
1632 ;// setCaptionToDates(); 1632 ;// setCaptionToDates();
1633 } 1633 }
1634 1634
1635} 1635}
1636 1636
1637void MainWindow::fillFilterMenu() 1637void MainWindow::fillFilterMenu()
1638{ 1638{
1639 selectFilterMenu->clear(); 1639 selectFilterMenu->clear();
1640 bool disable = false; 1640 bool disable = false;
1641 selectFilterMenu->insertItem(i18n ( "Edit Filters" ), 0 ); 1641 selectFilterMenu->insertItem(i18n ( "Edit Filters" ), 0 );
1642 selectFilterMenu->insertSeparator(); 1642 selectFilterMenu->insertSeparator();
1643 if ( mView->filterView()->filtersEnabled() ) { 1643 if ( mView->filterView()->filtersEnabled() ) {
1644 selectFilterMenu->insertItem(i18n ( "Turn filter off" ), 1 ); 1644 selectFilterMenu->insertItem(i18n ( "Turn filter off" ), 1 );
1645 } 1645 }
1646 else { 1646 else {
1647 selectFilterMenu->insertItem(i18n ( "Turn filter on" ), 1 ); 1647 selectFilterMenu->insertItem(i18n ( "Turn filter on" ), 1 );
1648 disable = true; 1648 disable = true;
1649 } 1649 }
1650 selectFilterMenu->insertSeparator(); 1650 selectFilterMenu->insertSeparator();
1651 QPtrList<CalFilter> fili = mView->filters(); 1651 QPtrList<CalFilter> fili = mView->filters();
1652 CalFilter *curfilter = mView->filterView()->selectedFilter(); 1652 CalFilter *curfilter = mView->filterView()->selectedFilter();
1653 CalFilter *filter = fili.first(); 1653 CalFilter *filter = fili.first();
1654 int iii = 2; 1654 int iii = 2;
1655 while(filter) { 1655 while(filter) {
1656 selectFilterMenu->insertItem( filter->name(), iii ); 1656 selectFilterMenu->insertItem( filter->name(), iii );
1657 if ( filter == curfilter) 1657 if ( filter == curfilter)
1658 selectFilterMenu->setItemChecked( iii, true ); 1658 selectFilterMenu->setItemChecked( iii, true );
1659 if ( disable ) 1659 if ( disable )
1660 selectFilterMenu->setItemEnabled( iii, false ); 1660 selectFilterMenu->setItemEnabled( iii, false );
1661 filter = fili.next(); 1661 filter = fili.next();
1662 ++iii; 1662 ++iii;
1663 } 1663 }
1664} 1664}
1665void MainWindow::selectFilter( int fil ) 1665void MainWindow::selectFilter( int fil )
1666{ 1666{
1667 if ( fil == 0 ) { 1667 if ( fil == 0 ) {
1668 mView->editFilters( ); 1668 mView->editFilters( );
1669 } else if ( fil == 1 ){ 1669 } else if ( fil == 1 ){
1670 mView->toggleFilerEnabled( ); 1670 mView->toggleFilerEnabled( );
1671 } else { 1671 } else {
1672 mView->selectFilter( fil-2 ); 1672 mView->selectFilter( fil-2 );
1673 } 1673 }
1674} 1674}
1675void MainWindow::configureToolBar( int item ) 1675void MainWindow::configureToolBar( int item )
1676{ 1676{
1677 1677
1678 configureToolBarMenu->setItemChecked( item, !configureToolBarMenu-> isItemChecked ( item ) ); 1678 configureToolBarMenu->setItemChecked( item, !configureToolBarMenu-> isItemChecked ( item ) );
1679 KOPrefs *p = KOPrefs::instance(); 1679 KOPrefs *p = KOPrefs::instance();
1680 p-> mShowIconStretch= configureToolBarMenu->isItemChecked( 5 ); 1680 p-> mShowIconStretch= configureToolBarMenu->isItemChecked( 5 );
1681 p-> mShowIconNewEvent= configureToolBarMenu->isItemChecked( 10 ); 1681 p-> mShowIconNewEvent= configureToolBarMenu->isItemChecked( 10 );
1682 p->mShowIconNewTodo = configureToolBarMenu->isItemChecked( 20 ); 1682 p->mShowIconNewTodo = configureToolBarMenu->isItemChecked( 20 );
1683 p-> mShowIconSearch= configureToolBarMenu->isItemChecked( 120 ); 1683 p-> mShowIconSearch= configureToolBarMenu->isItemChecked( 120 );
1684 p-> mShowIconList= configureToolBarMenu->isItemChecked( 30 ); 1684 p-> mShowIconList= configureToolBarMenu->isItemChecked( 30 );
1685 p-> mShowIconDay1= configureToolBarMenu->isItemChecked( 40 ); 1685 p-> mShowIconDay1= configureToolBarMenu->isItemChecked( 40 );
1686 p-> mShowIconDay5= configureToolBarMenu->isItemChecked( 50 ); 1686 p-> mShowIconDay5= configureToolBarMenu->isItemChecked( 50 );
1687 p-> mShowIconDay7= configureToolBarMenu->isItemChecked( 60 ); 1687 p-> mShowIconDay7= configureToolBarMenu->isItemChecked( 60 );
1688 p-> mShowIconMonth= configureToolBarMenu->isItemChecked( 70 ); 1688 p-> mShowIconMonth= configureToolBarMenu->isItemChecked( 70 );
1689 p-> mShowIconTodoview= configureToolBarMenu->isItemChecked( 80 ); 1689 p-> mShowIconTodoview= configureToolBarMenu->isItemChecked( 80 );
1690 p-> mShowIconBackFast= configureToolBarMenu->isItemChecked( 200 ); 1690 p-> mShowIconBackFast= configureToolBarMenu->isItemChecked( 200 );
1691 p-> mShowIconBack = configureToolBarMenu->isItemChecked( 210 ); 1691 p-> mShowIconBack = configureToolBarMenu->isItemChecked( 210 );
1692 p-> mShowIconToday= configureToolBarMenu->isItemChecked( 130 ); 1692 p-> mShowIconToday= configureToolBarMenu->isItemChecked( 130 );
1693 p-> mShowIconForward= configureToolBarMenu->isItemChecked( 220 ); 1693 p-> mShowIconForward= configureToolBarMenu->isItemChecked( 220 );
1694 p-> mShowIconForwardFast= configureToolBarMenu->isItemChecked( 230 ); 1694 p-> mShowIconForwardFast= configureToolBarMenu->isItemChecked( 230 );
1695 p-> mShowIconNextDays= configureToolBarMenu->isItemChecked( 100 ); 1695 p-> mShowIconNextDays= configureToolBarMenu->isItemChecked( 100 );
1696 p-> mShowIconNext= configureToolBarMenu->isItemChecked( 110 ); 1696 p-> mShowIconNext= configureToolBarMenu->isItemChecked( 110 );
1697 p-> mShowIconJournal= configureToolBarMenu->isItemChecked( 90 ); 1697 p-> mShowIconJournal= configureToolBarMenu->isItemChecked( 90 );
1698 p-> mShowIconWhatsThis= configureToolBarMenu->isItemChecked( 300 ); 1698 p-> mShowIconWhatsThis= configureToolBarMenu->isItemChecked( 300 );
1699 // initActions(); 1699 // initActions();
1700} 1700}
1701 1701
1702void MainWindow::setCaptionToDates() 1702void MainWindow::setCaptionToDates()
1703{ 1703{
1704 QString selDates; 1704 QString selDates;
1705 selDates = KGlobal::locale()->formatDate(mView->startDate(), true); 1705 selDates = KGlobal::locale()->formatDate(mView->startDate(), true);
1706 if (mView->startDate() < mView->endDate() ) 1706 if (mView->startDate() < mView->endDate() )
1707 selDates += " - " + KGlobal::locale()->formatDate(mView->endDate(), true); 1707 selDates += " - " + KGlobal::locale()->formatDate(mView->endDate(), true);
1708 else {
1709 QString addString;
1710 if ( mView->startDate() == QDateTime::currentDateTime().date() )
1711 addString = i18n("Today");
1712 else if ( mView->startDate() == QDateTime::currentDateTime().date().addDays(1) )
1713 addString = i18n("Tomorrow");
1714 if ( !addString.isEmpty() )
1715 selDates = addString+", "+selDates ;
1716 }
1708 setCaption( i18n("Dates: ") + selDates ); 1717 setCaption( i18n("Dates: ") + selDates );
1709 1718
1710} 1719}
1711// parameter item == 0: reinit 1720// parameter item == 0: reinit
1712void MainWindow::configureAgenda( int item ) 1721void MainWindow::configureAgenda( int item )
1713{ 1722{
1714 1723
1715 KOPrefs *p = KOPrefs::instance(); 1724 KOPrefs *p = KOPrefs::instance();
1716 1725
1717 int i; 1726 int i;
1718 // do not allow 4 for widgets higher than 480 1727 // do not allow 4 for widgets higher than 480
1719 // if ( QApplication::desktop()->height() > 480 ) { 1728 // if ( QApplication::desktop()->height() > 480 ) {
1720// if ( item == 4 ) 1729// if ( item == 4 )
1721// item = 6; 1730// item = 6;
1722// } 1731// }
1723 for ( i = 4; i <= 18; i= i+2 ) 1732 for ( i = 4; i <= 18; i= i+2 )
1724 configureAgendaMenu->setItemChecked( i, false ); 1733 configureAgendaMenu->setItemChecked( i, false );
1725 configureAgendaMenu->setItemChecked( item, true ); 1734 configureAgendaMenu->setItemChecked( item, true );
1726 if ( p->mHourSize == item ) 1735 if ( p->mHourSize == item )
1727 return; 1736 return;
1728 p->mHourSize=item; 1737 p->mHourSize=item;
1729 mView->viewManager()->agendaView()->updateConfig(); 1738 mView->viewManager()->agendaView()->updateConfig();
1730} 1739}
1731 1740
1732void MainWindow::saveCalendar() 1741void MainWindow::saveCalendar()
1733{ 1742{
1734 QString fn = KOPrefs::instance()->mLastSaveFile; 1743 QString fn = KOPrefs::instance()->mLastSaveFile;
1735 fn = KFileDialog::getSaveFileName( fn, i18n("Save backup filename"), this ); 1744 fn = KFileDialog::getSaveFileName( fn, i18n("Save backup filename"), this );
1736 1745
1737 if ( fn == "" ) 1746 if ( fn == "" )
1738 return; 1747 return;
1739 QFileInfo info; 1748 QFileInfo info;
1740 info.setFile( fn ); 1749 info.setFile( fn );
1741 QString mes; 1750 QString mes;
1742 bool createbup = true; 1751 bool createbup = true;
1743 if ( info. exists() ) { 1752 if ( info. exists() ) {
1744 mes = i18n("Backup file\nalready exists!\nOld backup file from:\n%1\nOverwrite?\n").arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )) ; 1753 mes = i18n("Backup file\nalready exists!\nOld backup file from:\n%1\nOverwrite?\n").arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )) ;
1745 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, 1754 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes,
1746 i18n("Overwrite!"), i18n("Cancel"), 0, 1755 i18n("Overwrite!"), i18n("Cancel"), 0,
1747 0, 1 ); 1756 0, 1 );
1748 if ( result != 0 ) { 1757 if ( result != 0 ) {
1749 createbup = false; 1758 createbup = false;
1750 } 1759 }
1751 } 1760 }
1752 if ( createbup ) { 1761 if ( createbup ) {
1753 mView->saveCalendar( fn ); 1762 mView->saveCalendar( fn );
1754 mes = i18n("KO/Pi:Saved %1").arg(fn); 1763 mes = i18n("KO/Pi:Saved %1").arg(fn);
1755 KOPrefs::instance()->mLastSaveFile = fn; 1764 KOPrefs::instance()->mLastSaveFile = fn;
1756 setCaption(mes); 1765 setCaption(mes);
1757 } 1766 }
1758} 1767}
1759void MainWindow::loadCalendar() 1768void MainWindow::loadCalendar()
1760{ 1769{
1761 1770
1762 QString fn = KOPrefs::instance()->mLastLoadFile; 1771 QString fn = KOPrefs::instance()->mLastLoadFile;
1763 fn = KFileDialog::getOpenFileName( fn, i18n("Load backup filename"), this ); 1772 fn = KFileDialog::getOpenFileName( fn, i18n("Load backup filename"), this );
1764 1773
1765 if ( fn == "" ) 1774 if ( fn == "" )
1766 return; 1775 return;
1767 QFileInfo info; 1776 QFileInfo info;
1768 info.setFile( fn ); 1777 info.setFile( fn );
1769 QString mess; 1778 QString mess;
1770 bool loadbup = true; 1779 bool loadbup = true;
1771 if ( info. exists() ) { 1780 if ( info. exists() ) {
1772 mess = i18n("Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n").arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); 1781 mess = i18n("Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n").arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false ));
1773 int result = QMessageBox::warning( this, "KO/Pi: Warning!", 1782 int result = QMessageBox::warning( this, "KO/Pi: Warning!",
1774 mess, 1783 mess,
1775 i18n("Load!"), i18n("Cancel"), 0, 1784 i18n("Load!"), i18n("Cancel"), 0,
1776 0, 1 ); 1785 0, 1 );
1777 if ( result != 0 ) { 1786 if ( result != 0 ) {
1778 loadbup = false; 1787 loadbup = false;
1779 } 1788 }
1780 } else { 1789 } else {
1781 QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 1790 QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
1782 i18n("Backup file\ndoes not exist!\nNothing loaded!"), 0, 0, 1791 i18n("Backup file\ndoes not exist!\nNothing loaded!"), 0, 0,
1783 0, 1 ); 1792 0, 1 );
1784 1793
1785 return; 1794 return;
1786 } 1795 }
1787 if ( loadbup ) { 1796 if ( loadbup ) {
1788 mView->openCalendar( fn ); 1797 mView->openCalendar( fn );
1789 KOPrefs::instance()->mLastLoadFile = fn; 1798 KOPrefs::instance()->mLastLoadFile = fn;
1790 mess = i18n("KO/Pi:Loaded %1").arg(fn) ; 1799 mess = i18n("KO/Pi:Loaded %1").arg(fn) ;
1791 setCaption(mess); 1800 setCaption(mess);
1792 } 1801 }
1793 1802
1794} 1803}
1795void MainWindow::quickImportIcal() 1804void MainWindow::quickImportIcal()
1796{ 1805{
1797 importFile( KOPrefs::instance()->mLastImportFile, false ); 1806 importFile( KOPrefs::instance()->mLastImportFile, false );
1798} 1807}
1799void MainWindow::importFile( QString fn, bool quick ) 1808void MainWindow::importFile( QString fn, bool quick )
1800{ 1809{
1801 QFileInfo info; 1810 QFileInfo info;
1802 info.setFile( fn ); 1811 info.setFile( fn );
1803 QString mess; 1812 QString mess;
1804 bool loadbup = true; 1813 bool loadbup = true;
1805 if ( !info. exists() ) { 1814 if ( !info. exists() ) {
1806 mess = i18n("Import file \n...%1\ndoes not exist!\nNothing imported!\n").arg(fn.right( 30)); 1815 mess = i18n("Import file \n...%1\ndoes not exist!\nNothing imported!\n").arg(fn.right( 30));
1807 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"), 1816 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),
1808 mess ); 1817 mess );
1809 return; 1818 return;
1810 } 1819 }
1811 int result = 0; 1820 int result = 0;
1812 if ( !quick ) { 1821 if ( !quick ) {
1813 mess = i18n( "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false )); 1822 mess = i18n( "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n").arg(fn.right( 25)).arg(KGlobal::locale()->formatDateTime(info.lastModified (), true, false ));
1814 result = QMessageBox::warning( this, "KO/Pi: Warning!", 1823 result = QMessageBox::warning( this, "KO/Pi: Warning!",
1815 mess, 1824 mess,
1816 "Import", "Cancel", 0, 1825 "Import", "Cancel", 0,
1817 0, 1 ); 1826 0, 1 );
1818 } 1827 }
1819 if ( result == 0 ) { 1828 if ( result == 0 ) {
1820 if ( mView->openCalendar( fn, true )) { 1829 if ( mView->openCalendar( fn, true )) {
1821 KOPrefs::instance()->mLastImportFile = fn; 1830 KOPrefs::instance()->mLastImportFile = fn;
1822 setCaption(i18n("Imported file successfully")); 1831 setCaption(i18n("Imported file successfully"));
1823 } else { 1832 } else {
1824 setCaption(i18n("Error importing file")); 1833 setCaption(i18n("Error importing file"));
1825 } 1834 }
1826 } 1835 }
1827} 1836}
1828 1837
1829void MainWindow::importIcal() 1838void MainWindow::importIcal()
1830{ 1839{
1831 1840
1832 QString fn =KOPrefs::instance()->mLastImportFile; 1841 QString fn =KOPrefs::instance()->mLastImportFile;
1833 1842
1834 fn =KFileDialog:: getOpenFileName( fn, i18n("Import filename(*.ics/*.vcs)"), this ); 1843 fn =KFileDialog:: getOpenFileName( fn, i18n("Import filename(*.ics/*.vcs)"), this );
1835 if ( fn == "" ) 1844 if ( fn == "" )
1836 return; 1845 return;
1837 importFile( fn, true ); 1846 importFile( fn, true );
1838 1847
1839} 1848}
1840 1849
1841void MainWindow::exportVCalendar() 1850void MainWindow::exportVCalendar()
1842{ 1851{
1843 QString fn = KOPrefs::instance()->mLastVcalFile; 1852 QString fn = KOPrefs::instance()->mLastVcalFile;
1844 fn = KFileDialog::getSaveFileName( fn, i18n("Export vcal filename(*.vcs)"), this ); 1853 fn = KFileDialog::getSaveFileName( fn, i18n("Export vcal filename(*.vcs)"), this );
1845 if ( fn == "" ) 1854 if ( fn == "" )
1846 return; 1855 return;
1847 QFileInfo info; 1856 QFileInfo info;
1848 info.setFile( fn ); 1857 info.setFile( fn );
1849 QString mes; 1858 QString mes;
1850 bool createbup = true; 1859 bool createbup = true;
1851 if ( info. exists() ) { 1860 if ( info. exists() ) {
1852 mes = i18n("Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); 1861 mes = i18n("Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) );
1853 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, 1862 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes,
1854 i18n("Overwrite!"), i18n("Cancel"), 0, 1863 i18n("Overwrite!"), i18n("Cancel"), 0,
1855 0, 1 ); 1864 0, 1 );
1856 if ( result != 0 ) { 1865 if ( result != 0 ) {
1857 createbup = false; 1866 createbup = false;
1858 } 1867 }
1859 } 1868 }
1860 if ( createbup ) { 1869 if ( createbup ) {
1861 if ( mView->exportVCalendar( fn ) ) { 1870 if ( mView->exportVCalendar( fn ) ) {
1862 KOPrefs::instance()->mLastVcalFile = fn; 1871 KOPrefs::instance()->mLastVcalFile = fn;
1863 if ( fn.length() > 20 ) 1872 if ( fn.length() > 20 )
1864 mes = i18n("KO/Pi:Exported to ...%1").arg(fn.right(20)) ; 1873 mes = i18n("KO/Pi:Exported to ...%1").arg(fn.right(20)) ;
1865 else 1874 else
1866 mes = i18n("KO/Pi:Exported to %1").arg(fn ); 1875 mes = i18n("KO/Pi:Exported to %1").arg(fn );
1867 setCaption(mes); 1876 setCaption(mes);
1868 } 1877 }
1869 } 1878 }
1870 1879
1871} 1880}
1872 1881
1873void MainWindow::syncFileRequest() 1882void MainWindow::syncFileRequest()
1874{ 1883{
1875 if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) { 1884 if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) {
1876 mSyncManager->slotSyncMenu( 999 ); 1885 mSyncManager->slotSyncMenu( 999 );
1877 } 1886 }
1878 save(); 1887 save();
1879} 1888}
1880void MainWindow::getFile( bool success ) 1889void MainWindow::getFile( bool success )
1881{ 1890{
1882 if ( ! success ) { 1891 if ( ! success ) {
1883 setCaption( i18n("Error receiving file. Nothing changed!") ); 1892 setCaption( i18n("Error receiving file. Nothing changed!") );
1884 return; 1893 return;
1885 } 1894 }
1886 mView->openCalendar( defaultFileName() ); 1895 mView->openCalendar( defaultFileName() );
1887 if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) { 1896 if ( KOPrefs::instance()->mPassiveSyncWithDesktop ) {
1888 mSyncManager->slotSyncMenu( 999 ); 1897 mSyncManager->slotSyncMenu( 999 );
1889 } 1898 }
1890 setCaption( i18n("Pi-Sync successful!") ); 1899 setCaption( i18n("Pi-Sync successful!") );
1891} 1900}
1892 1901
1893void MainWindow::printSel( ) 1902void MainWindow::printSel( )
1894{ 1903{
1895 mView->viewManager()->agendaView()->agenda()->printSelection(); 1904 mView->viewManager()->agendaView()->agenda()->printSelection();
1896} 1905}
1897 1906
1898void MainWindow::printCal() 1907void MainWindow::printCal()
1899{ 1908{
1900 mView->print();//mCp->showDialog(); 1909 mView->print();//mCp->showDialog();
1901} 1910}
1902 1911
diff --git a/libkcal/calendarlocal.cpp b/libkcal/calendarlocal.cpp
index 12294c0..0eba6a9 100644
--- a/libkcal/calendarlocal.cpp
+++ b/libkcal/calendarlocal.cpp
@@ -1,724 +1,724 @@
1/* 1/*
2 This file is part of libkcal. 2 This file is part of libkcal.
3 3
4 Copyright (c) 1998 Preston Brown 4 Copyright (c) 1998 Preston Brown
5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org> 5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org>
6 6
7 This library is free software; you can redistribute it and/or 7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public 8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either 9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version. 10 version 2 of the License, or (at your option) any later version.
11 11
12 This library is distributed in the hope that it will be useful, 12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details. 15 Library General Public License for more details.
16 16
17 You should have received a copy of the GNU Library General Public License 17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to 18 along with this library; see the file COPYING.LIB. If not, write to
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. 20 Boston, MA 02111-1307, USA.
21*/ 21*/
22 22
23#include <qdatetime.h> 23#include <qdatetime.h>
24#include <qstring.h> 24#include <qstring.h>
25#include <qptrlist.h> 25#include <qptrlist.h>
26 26
27#include <kdebug.h> 27#include <kdebug.h>
28#include <kconfig.h> 28#include <kconfig.h>
29#include <kglobal.h> 29#include <kglobal.h>
30#include <klocale.h> 30#include <klocale.h>
31 31
32#include "vcaldrag.h" 32#include "vcaldrag.h"
33#include "vcalformat.h" 33#include "vcalformat.h"
34#include "icalformat.h" 34#include "icalformat.h"
35#include "exceptions.h" 35#include "exceptions.h"
36#include "incidence.h" 36#include "incidence.h"
37#include "journal.h" 37#include "journal.h"
38#include "filestorage.h" 38#include "filestorage.h"
39#include "calfilter.h" 39#include "calfilter.h"
40 40
41#include "calendarlocal.h" 41#include "calendarlocal.h"
42 42
43// #ifndef DESKTOP_VERSION 43// #ifndef DESKTOP_VERSION
44// #include <qtopia/alarmserver.h> 44// #include <qtopia/alarmserver.h>
45// #endif 45// #endif
46using namespace KCal; 46using namespace KCal;
47 47
48CalendarLocal::CalendarLocal() 48CalendarLocal::CalendarLocal()
49 : Calendar() 49 : Calendar()
50{ 50{
51 init(); 51 init();
52} 52}
53 53
54CalendarLocal::CalendarLocal(const QString &timeZoneId) 54CalendarLocal::CalendarLocal(const QString &timeZoneId)
55 : Calendar(timeZoneId) 55 : Calendar(timeZoneId)
56{ 56{
57 init(); 57 init();
58} 58}
59 59
60void CalendarLocal::init() 60void CalendarLocal::init()
61{ 61{
62 mNextAlarmIncidence = 0; 62 mNextAlarmIncidence = 0;
63} 63}
64 64
65 65
66CalendarLocal::~CalendarLocal() 66CalendarLocal::~CalendarLocal()
67{ 67{
68 close(); 68 close();
69} 69}
70 70
71bool CalendarLocal::load( const QString &fileName ) 71bool CalendarLocal::load( const QString &fileName )
72{ 72{
73 FileStorage storage( this, fileName ); 73 FileStorage storage( this, fileName );
74 return storage.load(); 74 return storage.load();
75} 75}
76 76
77bool CalendarLocal::save( const QString &fileName, CalFormat *format ) 77bool CalendarLocal::save( const QString &fileName, CalFormat *format )
78{ 78{
79 FileStorage storage( this, fileName, format ); 79 FileStorage storage( this, fileName, format );
80 return storage.save(); 80 return storage.save();
81} 81}
82 82
83void CalendarLocal::close() 83void CalendarLocal::close()
84{ 84{
85 mEventList.setAutoDelete( true ); 85 mEventList.setAutoDelete( true );
86 mTodoList.setAutoDelete( true ); 86 mTodoList.setAutoDelete( true );
87 mJournalList.setAutoDelete( false ); 87 mJournalList.setAutoDelete( false );
88 88
89 mEventList.clear(); 89 mEventList.clear();
90 mTodoList.clear(); 90 mTodoList.clear();
91 mJournalList.clear(); 91 mJournalList.clear();
92 92
93 mEventList.setAutoDelete( false ); 93 mEventList.setAutoDelete( false );
94 mTodoList.setAutoDelete( false ); 94 mTodoList.setAutoDelete( false );
95 mJournalList.setAutoDelete( false ); 95 mJournalList.setAutoDelete( false );
96 96
97 setModified( false ); 97 setModified( false );
98} 98}
99 99
100bool CalendarLocal::addAnniversaryNoDup( Event *event ) 100bool CalendarLocal::addAnniversaryNoDup( Event *event )
101{ 101{
102 QString cat; 102 QString cat;
103 bool isBirthday = true; 103 bool isBirthday = true;
104 if( event->categoriesStr() == i18n( "Anniversary" ) ) { 104 if( event->categoriesStr() == i18n( "Anniversary" ) ) {
105 isBirthday = false; 105 isBirthday = false;
106 cat = i18n( "Anniversary" ); 106 cat = i18n( "Anniversary" );
107 } else if( event->categoriesStr() == i18n( "Birthday" ) ) { 107 } else if( event->categoriesStr() == i18n( "Birthday" ) ) {
108 isBirthday = true; 108 isBirthday = true;
109 cat = i18n( "Birthday" ); 109 cat = i18n( "Birthday" );
110 } else { 110 } else {
111 qDebug("addAnniversaryNoDup called without fitting category! "); 111 qDebug("addAnniversaryNoDup called without fitting category! ");
112 return false; 112 return false;
113 } 113 }
114 Event * eve; 114 Event * eve;
115 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 115 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
116 if ( !(eve->categories().contains( cat ) )) 116 if ( !(eve->categories().contains( cat ) ))
117 continue; 117 continue;
118 // now we have an event with fitting category 118 // now we have an event with fitting category
119 if ( eve->dtStart().date() != event->dtStart().date() ) 119 if ( eve->dtStart().date() != event->dtStart().date() )
120 continue; 120 continue;
121 // now we have an event with fitting category+date 121 // now we have an event with fitting category+date
122 if ( eve->summary() != event->summary() ) 122 if ( eve->summary() != event->summary() )
123 continue; 123 continue;
124 // now we have an event with fitting category+date+summary 124 // now we have an event with fitting category+date+summary
125 return false; 125 return false;
126 } 126 }
127 return addEvent( event ); 127 return addEvent( event );
128 128
129} 129}
130bool CalendarLocal::addEventNoDup( Event *event ) 130bool CalendarLocal::addEventNoDup( Event *event )
131{ 131{
132 Event * eve; 132 Event * eve;
133 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) { 133 for ( eve = mEventList.first(); eve ; eve = mEventList.next() ) {
134 if ( *eve == *event ) { 134 if ( *eve == *event ) {
135 //qDebug("CalendarLocal::Duplicate event found! Not inserted! "); 135 //qDebug("CalendarLocal::Duplicate event found! Not inserted! ");
136 return false; 136 return false;
137 } 137 }
138 } 138 }
139 return addEvent( event ); 139 return addEvent( event );
140} 140}
141 141
142bool CalendarLocal::addEvent( Event *event ) 142bool CalendarLocal::addEvent( Event *event )
143{ 143{
144 insertEvent( event ); 144 insertEvent( event );
145 145
146 event->registerObserver( this ); 146 event->registerObserver( this );
147 147
148 setModified( true ); 148 setModified( true );
149 149
150 return true; 150 return true;
151} 151}
152 152
153void CalendarLocal::deleteEvent( Event *event ) 153void CalendarLocal::deleteEvent( Event *event )
154{ 154{
155 if ( mUndoIncidence ) delete mUndoIncidence; 155 if ( mUndoIncidence ) delete mUndoIncidence;
156 mUndoIncidence = event->clone(); 156 mUndoIncidence = event->clone();
157 if ( mEventList.removeRef( event ) ) { 157 if ( mEventList.removeRef( event ) ) {
158 setModified( true ); 158 setModified( true );
159 } 159 }
160} 160}
161 161
162 162
163Event *CalendarLocal::event( const QString &uid ) 163Event *CalendarLocal::event( const QString &uid )
164{ 164{
165 165
166 Event *event; 166 Event *event;
167 167
168 for ( event = mEventList.first(); event; event = mEventList.next() ) { 168 for ( event = mEventList.first(); event; event = mEventList.next() ) {
169 if ( event->uid() == uid ) { 169 if ( event->uid() == uid ) {
170 return event; 170 return event;
171 } 171 }
172 } 172 }
173 173
174 return 0; 174 return 0;
175} 175}
176bool CalendarLocal::addTodoNoDup( Todo *todo ) 176bool CalendarLocal::addTodoNoDup( Todo *todo )
177{ 177{
178 Todo * eve; 178 Todo * eve;
179 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) { 179 for ( eve = mTodoList.first(); eve ; eve = mTodoList.next() ) {
180 if ( *eve == *todo ) { 180 if ( *eve == *todo ) {
181 //qDebug("duplicate todo found! not inserted! "); 181 //qDebug("duplicate todo found! not inserted! ");
182 return false; 182 return false;
183 } 183 }
184 } 184 }
185 return addTodo( todo ); 185 return addTodo( todo );
186} 186}
187bool CalendarLocal::addTodo( Todo *todo ) 187bool CalendarLocal::addTodo( Todo *todo )
188{ 188{
189 mTodoList.append( todo ); 189 mTodoList.append( todo );
190 190
191 todo->registerObserver( this ); 191 todo->registerObserver( this );
192 192
193 // Set up subtask relations 193 // Set up subtask relations
194 setupRelations( todo ); 194 setupRelations( todo );
195 195
196 setModified( true ); 196 setModified( true );
197 197
198 return true; 198 return true;
199} 199}
200 200
201void CalendarLocal::deleteTodo( Todo *todo ) 201void CalendarLocal::deleteTodo( Todo *todo )
202{ 202{
203 // Handle orphaned children 203 // Handle orphaned children
204 if ( mUndoIncidence ) delete mUndoIncidence; 204 if ( mUndoIncidence ) delete mUndoIncidence;
205 mUndoIncidence = todo->clone();
206 removeRelations( todo ); 205 removeRelations( todo );
206 mUndoIncidence = todo->clone();
207 207
208 if ( mTodoList.removeRef( todo ) ) { 208 if ( mTodoList.removeRef( todo ) ) {
209 setModified( true ); 209 setModified( true );
210 } 210 }
211} 211}
212 212
213QPtrList<Todo> CalendarLocal::rawTodos() 213QPtrList<Todo> CalendarLocal::rawTodos()
214{ 214{
215 return mTodoList; 215 return mTodoList;
216} 216}
217Todo *CalendarLocal::todo( QString syncProf, QString id ) 217Todo *CalendarLocal::todo( QString syncProf, QString id )
218{ 218{
219 Todo *todo; 219 Todo *todo;
220 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 220 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
221 if ( todo->getID( syncProf ) == id ) return todo; 221 if ( todo->getID( syncProf ) == id ) return todo;
222 } 222 }
223 223
224 return 0; 224 return 0;
225} 225}
226void CalendarLocal::removeSyncInfo( QString syncProfile) 226void CalendarLocal::removeSyncInfo( QString syncProfile)
227{ 227{
228 QPtrList<Incidence> all = rawIncidences() ; 228 QPtrList<Incidence> all = rawIncidences() ;
229 Incidence *inc; 229 Incidence *inc;
230 for ( inc = all.first(); inc; inc = all.next() ) { 230 for ( inc = all.first(); inc; inc = all.next() ) {
231 inc->removeID( syncProfile ); 231 inc->removeID( syncProfile );
232 } 232 }
233 if ( syncProfile.isEmpty() ) { 233 if ( syncProfile.isEmpty() ) {
234 QPtrList<Event> el; 234 QPtrList<Event> el;
235 Event *todo; 235 Event *todo;
236 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 236 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
237 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) 237 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") )
238 el.append( todo ); 238 el.append( todo );
239 } 239 }
240 for ( todo = el.first(); todo; todo = el.next() ) { 240 for ( todo = el.first(); todo; todo = el.next() ) {
241 deleteIncidence ( todo ); 241 deleteIncidence ( todo );
242 } 242 }
243 } else { 243 } else {
244 Event *lse = event( "last-syncEvent-"+ syncProfile); 244 Event *lse = event( "last-syncEvent-"+ syncProfile);
245 deleteIncidence ( lse ); 245 deleteIncidence ( lse );
246 } 246 }
247} 247}
248QPtrList<Event> CalendarLocal::getExternLastSyncEvents() 248QPtrList<Event> CalendarLocal::getExternLastSyncEvents()
249{ 249{
250 QPtrList<Event> el; 250 QPtrList<Event> el;
251 Event *todo; 251 Event *todo;
252 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 252 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
253 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") ) 253 if ( todo->uid().left( 15 ) == QString("last-syncEvent-") )
254 if ( todo->summary().left(3) == "E: " ) 254 if ( todo->summary().left(3) == "E: " )
255 el.append( todo ); 255 el.append( todo );
256 } 256 }
257 257
258 return el; 258 return el;
259 259
260} 260}
261Event *CalendarLocal::event( QString syncProf, QString id ) 261Event *CalendarLocal::event( QString syncProf, QString id )
262{ 262{
263 Event *todo; 263 Event *todo;
264 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) { 264 for ( todo = mEventList.first(); todo; todo = mEventList.next() ) {
265 if ( todo->getID( syncProf ) == id ) return todo; 265 if ( todo->getID( syncProf ) == id ) return todo;
266 } 266 }
267 267
268 return 0; 268 return 0;
269} 269}
270Todo *CalendarLocal::todo( const QString &uid ) 270Todo *CalendarLocal::todo( const QString &uid )
271{ 271{
272 Todo *todo; 272 Todo *todo;
273 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 273 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
274 if ( todo->uid() == uid ) return todo; 274 if ( todo->uid() == uid ) return todo;
275 } 275 }
276 276
277 return 0; 277 return 0;
278} 278}
279QString CalendarLocal::nextSummary() const 279QString CalendarLocal::nextSummary() const
280{ 280{
281 return mNextSummary; 281 return mNextSummary;
282} 282}
283QDateTime CalendarLocal::nextAlarmEventDateTime() const 283QDateTime CalendarLocal::nextAlarmEventDateTime() const
284{ 284{
285 return mNextAlarmEventDateTime; 285 return mNextAlarmEventDateTime;
286} 286}
287void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted) 287void CalendarLocal::checkAlarmForIncidence( Incidence * incidence, bool deleted)
288{ 288{
289 //mNextAlarmIncidence 289 //mNextAlarmIncidence
290 //mNextAlarmDateTime 290 //mNextAlarmDateTime
291 //return mNextSummary; 291 //return mNextSummary;
292 //return mNextAlarmEventDateTime; 292 //return mNextAlarmEventDateTime;
293 bool newNextAlarm = false; 293 bool newNextAlarm = false;
294 bool computeNextAlarm = false; 294 bool computeNextAlarm = false;
295 bool ok; 295 bool ok;
296 int offset; 296 int offset;
297 QDateTime nextA; 297 QDateTime nextA;
298 // QString nextSum; 298 // QString nextSum;
299 //QDateTime nextEvent; 299 //QDateTime nextEvent;
300 if ( mNextAlarmIncidence == 0 || incidence == 0 ) { 300 if ( mNextAlarmIncidence == 0 || incidence == 0 ) {
301 computeNextAlarm = true; 301 computeNextAlarm = true;
302 } else { 302 } else {
303 if ( ! deleted ) { 303 if ( ! deleted ) {
304 nextA = incidence->getNextAlarmDateTime(& ok, &offset ) ; 304 nextA = incidence->getNextAlarmDateTime(& ok, &offset ) ;
305 if ( ok ) { 305 if ( ok ) {
306 if ( nextA < mNextAlarmDateTime ) { 306 if ( nextA < mNextAlarmDateTime ) {
307 deRegisterAlarm(); 307 deRegisterAlarm();
308 mNextAlarmDateTime = nextA; 308 mNextAlarmDateTime = nextA;
309 mNextSummary = incidence->summary(); 309 mNextSummary = incidence->summary();
310 mNextAlarmEventDateTime = nextA.addSecs(offset ) ; 310 mNextAlarmEventDateTime = nextA.addSecs(offset ) ;
311 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime); 311 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime);
312 newNextAlarm = true; 312 newNextAlarm = true;
313 mNextAlarmIncidence = incidence; 313 mNextAlarmIncidence = incidence;
314 } else { 314 } else {
315 if ( incidence == mNextAlarmIncidence ) { 315 if ( incidence == mNextAlarmIncidence ) {
316 computeNextAlarm = true; 316 computeNextAlarm = true;
317 } 317 }
318 } 318 }
319 } else { 319 } else {
320 if ( mNextAlarmIncidence == incidence ) { 320 if ( mNextAlarmIncidence == incidence ) {
321 computeNextAlarm = true; 321 computeNextAlarm = true;
322 } 322 }
323 } 323 }
324 } else { // deleted 324 } else { // deleted
325 if ( incidence == mNextAlarmIncidence ) { 325 if ( incidence == mNextAlarmIncidence ) {
326 computeNextAlarm = true; 326 computeNextAlarm = true;
327 } 327 }
328 } 328 }
329 } 329 }
330 if ( computeNextAlarm ) { 330 if ( computeNextAlarm ) {
331 deRegisterAlarm(); 331 deRegisterAlarm();
332 nextA = nextAlarm( 1000 ); 332 nextA = nextAlarm( 1000 );
333 if (! mNextAlarmIncidence ) { 333 if (! mNextAlarmIncidence ) {
334 return; 334 return;
335 } 335 }
336 newNextAlarm = true; 336 newNextAlarm = true;
337 } 337 }
338 if ( newNextAlarm ) 338 if ( newNextAlarm )
339 registerAlarm(); 339 registerAlarm();
340} 340}
341QString CalendarLocal:: getAlarmNotification() 341QString CalendarLocal:: getAlarmNotification()
342{ 342{
343 QString ret; 343 QString ret;
344 // this should not happen 344 // this should not happen
345 if (! mNextAlarmIncidence ) 345 if (! mNextAlarmIncidence )
346 return "cal_alarm"+ mNextSummary.left( 25 )+"\n"+mNextAlarmEventDateTimeString; 346 return "cal_alarm"+ mNextSummary.left( 25 )+"\n"+mNextAlarmEventDateTimeString;
347 Alarm* alarm = mNextAlarmIncidence->alarms().first(); 347 Alarm* alarm = mNextAlarmIncidence->alarms().first();
348 if ( alarm->type() == Alarm::Procedure ) { 348 if ( alarm->type() == Alarm::Procedure ) {
349 ret = "proc_alarm" + alarm->programFile()+"+++"; 349 ret = "proc_alarm" + alarm->programFile()+"+++";
350 } else { 350 } else {
351 ret = "audio_alarm" +alarm->audioFile() +"+++"; 351 ret = "audio_alarm" +alarm->audioFile() +"+++";
352 } 352 }
353 ret += "cal_alarm"+ mNextSummary.left( 25 ); 353 ret += "cal_alarm"+ mNextSummary.left( 25 );
354 if ( mNextSummary.length() > 25 ) 354 if ( mNextSummary.length() > 25 )
355 ret += "\n" + mNextSummary.mid(25, 25 ); 355 ret += "\n" + mNextSummary.mid(25, 25 );
356 ret+= "\n"+mNextAlarmEventDateTimeString; 356 ret+= "\n"+mNextAlarmEventDateTimeString;
357 return ret; 357 return ret;
358} 358}
359void CalendarLocal::registerAlarm() 359void CalendarLocal::registerAlarm()
360{ 360{
361 mLastAlarmNotificationString = getAlarmNotification(); 361 mLastAlarmNotificationString = getAlarmNotification();
362 // qDebug("++ register Alarm %s %s",mNextAlarmDateTime.toString().latin1(), mLastAlarmNotificationString.latin1() ); 362 // qDebug("++ register Alarm %s %s",mNextAlarmDateTime.toString().latin1(), mLastAlarmNotificationString.latin1() );
363 emit addAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString ); 363 emit addAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString );
364// #ifndef DESKTOP_VERSION 364// #ifndef DESKTOP_VERSION
365// AlarmServer::addAlarm ( mNextAlarmDateTime,"koalarm", mLastAlarmNotificationString.latin1() ); 365// AlarmServer::addAlarm ( mNextAlarmDateTime,"koalarm", mLastAlarmNotificationString.latin1() );
366// #endif 366// #endif
367} 367}
368void CalendarLocal::deRegisterAlarm() 368void CalendarLocal::deRegisterAlarm()
369{ 369{
370 if ( mLastAlarmNotificationString.isNull() ) 370 if ( mLastAlarmNotificationString.isNull() )
371 return; 371 return;
372 //qDebug("-- deregister Alarm %s ", mLastAlarmNotificationString.latin1() ); 372 //qDebug("-- deregister Alarm %s ", mLastAlarmNotificationString.latin1() );
373 373
374 emit removeAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString ); 374 emit removeAlarm ( mNextAlarmDateTime, mLastAlarmNotificationString );
375// #ifndef DESKTOP_VERSION 375// #ifndef DESKTOP_VERSION
376// AlarmServer::deleteAlarm (mNextAlarmDateTime ,"koalarm" ,mLastAlarmNotificationString.latin1() ); 376// AlarmServer::deleteAlarm (mNextAlarmDateTime ,"koalarm" ,mLastAlarmNotificationString.latin1() );
377// #endif 377// #endif
378} 378}
379 379
380QPtrList<Todo> CalendarLocal::todos( const QDate &date ) 380QPtrList<Todo> CalendarLocal::todos( const QDate &date )
381{ 381{
382 QPtrList<Todo> todos; 382 QPtrList<Todo> todos;
383 383
384 Todo *todo; 384 Todo *todo;
385 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) { 385 for ( todo = mTodoList.first(); todo; todo = mTodoList.next() ) {
386 if ( todo->hasDueDate() && todo->dtDue().date() == date ) { 386 if ( todo->hasDueDate() && todo->dtDue().date() == date ) {
387 todos.append( todo ); 387 todos.append( todo );
388 } 388 }
389 } 389 }
390 390
391 filter()->apply( &todos ); 391 filter()->apply( &todos );
392 return todos; 392 return todos;
393} 393}
394void CalendarLocal::reInitAlarmSettings() 394void CalendarLocal::reInitAlarmSettings()
395{ 395{
396 if ( !mNextAlarmIncidence ) { 396 if ( !mNextAlarmIncidence ) {
397 nextAlarm( 1000 ); 397 nextAlarm( 1000 );
398 } 398 }
399 deRegisterAlarm(); 399 deRegisterAlarm();
400 mNextAlarmIncidence = 0; 400 mNextAlarmIncidence = 0;
401 checkAlarmForIncidence( 0, false ); 401 checkAlarmForIncidence( 0, false );
402 402
403} 403}
404 404
405 405
406 406
407QDateTime CalendarLocal::nextAlarm( int daysTo ) 407QDateTime CalendarLocal::nextAlarm( int daysTo )
408{ 408{
409 QDateTime nextA = QDateTime::currentDateTime().addDays( daysTo ); 409 QDateTime nextA = QDateTime::currentDateTime().addDays( daysTo );
410 QDateTime start = QDateTime::currentDateTime().addSecs( 30 ); 410 QDateTime start = QDateTime::currentDateTime().addSecs( 30 );
411 QDateTime next; 411 QDateTime next;
412 Event *e; 412 Event *e;
413 bool ok; 413 bool ok;
414 bool found = false; 414 bool found = false;
415 int offset; 415 int offset;
416 mNextAlarmIncidence = 0; 416 mNextAlarmIncidence = 0;
417 for( e = mEventList.first(); e; e = mEventList.next() ) { 417 for( e = mEventList.first(); e; e = mEventList.next() ) {
418 next = e->getNextAlarmDateTime(& ok, &offset ) ; 418 next = e->getNextAlarmDateTime(& ok, &offset ) ;
419 if ( ok ) { 419 if ( ok ) {
420 if ( next < nextA ) { 420 if ( next < nextA ) {
421 nextA = next; 421 nextA = next;
422 found = true; 422 found = true;
423 mNextSummary = e->summary(); 423 mNextSummary = e->summary();
424 mNextAlarmEventDateTime = next.addSecs(offset ) ; 424 mNextAlarmEventDateTime = next.addSecs(offset ) ;
425 mNextAlarmIncidence = (Incidence *) e; 425 mNextAlarmIncidence = (Incidence *) e;
426 } 426 }
427 } 427 }
428 } 428 }
429 Todo *t; 429 Todo *t;
430 for( t = mTodoList.first(); t; t = mTodoList.next() ) { 430 for( t = mTodoList.first(); t; t = mTodoList.next() ) {
431 next = t->getNextAlarmDateTime(& ok, &offset ) ; 431 next = t->getNextAlarmDateTime(& ok, &offset ) ;
432 if ( ok ) { 432 if ( ok ) {
433 if ( next < nextA ) { 433 if ( next < nextA ) {
434 nextA = next; 434 nextA = next;
435 found = true; 435 found = true;
436 mNextSummary = t->summary(); 436 mNextSummary = t->summary();
437 mNextAlarmEventDateTime = next.addSecs(offset ); 437 mNextAlarmEventDateTime = next.addSecs(offset );
438 mNextAlarmIncidence = (Incidence *) t; 438 mNextAlarmIncidence = (Incidence *) t;
439 } 439 }
440 } 440 }
441 } 441 }
442 if ( mNextAlarmIncidence ) { 442 if ( mNextAlarmIncidence ) {
443 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime); 443 mNextAlarmEventDateTimeString = KGlobal::locale()->formatDateTime(mNextAlarmEventDateTime);
444 mNextAlarmDateTime = nextA; 444 mNextAlarmDateTime = nextA;
445 } 445 }
446 return nextA; 446 return nextA;
447} 447}
448Alarm::List CalendarLocal::alarmsTo( const QDateTime &to ) 448Alarm::List CalendarLocal::alarmsTo( const QDateTime &to )
449{ 449{
450 return alarms( QDateTime( QDate( 1900, 1, 1 ) ), to ); 450 return alarms( QDateTime( QDate( 1900, 1, 1 ) ), to );
451} 451}
452 452
453Alarm::List CalendarLocal::alarms( const QDateTime &from, const QDateTime &to ) 453Alarm::List CalendarLocal::alarms( const QDateTime &from, const QDateTime &to )
454{ 454{
455 kdDebug(5800) << "CalendarLocal::alarms(" << from.toString() << " - " 455 kdDebug(5800) << "CalendarLocal::alarms(" << from.toString() << " - "
456 << to.toString() << ")\n"; 456 << to.toString() << ")\n";
457 457
458 Alarm::List alarms; 458 Alarm::List alarms;
459 459
460 Event *e; 460 Event *e;
461 461
462 for( e = mEventList.first(); e; e = mEventList.next() ) { 462 for( e = mEventList.first(); e; e = mEventList.next() ) {
463 if ( e->doesRecur() ) appendRecurringAlarms( alarms, e, from, to ); 463 if ( e->doesRecur() ) appendRecurringAlarms( alarms, e, from, to );
464 else appendAlarms( alarms, e, from, to ); 464 else appendAlarms( alarms, e, from, to );
465 } 465 }
466 466
467 Todo *t; 467 Todo *t;
468 for( t = mTodoList.first(); t; t = mTodoList.next() ) { 468 for( t = mTodoList.first(); t; t = mTodoList.next() ) {
469 appendAlarms( alarms, t, from, to ); 469 appendAlarms( alarms, t, from, to );
470 } 470 }
471 471
472 return alarms; 472 return alarms;
473} 473}
474 474
475void CalendarLocal::appendAlarms( Alarm::List &alarms, Incidence *incidence, 475void CalendarLocal::appendAlarms( Alarm::List &alarms, Incidence *incidence,
476 const QDateTime &from, const QDateTime &to ) 476 const QDateTime &from, const QDateTime &to )
477{ 477{
478 QPtrList<Alarm> alarmList = incidence->alarms(); 478 QPtrList<Alarm> alarmList = incidence->alarms();
479 Alarm *alarm; 479 Alarm *alarm;
480 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { 480 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) {
481// kdDebug(5800) << "CalendarLocal::appendAlarms() '" << alarm->text() 481// kdDebug(5800) << "CalendarLocal::appendAlarms() '" << alarm->text()
482// << "': " << alarm->time().toString() << " - " << alarm->enabled() << endl; 482// << "': " << alarm->time().toString() << " - " << alarm->enabled() << endl;
483 if ( alarm->enabled() ) { 483 if ( alarm->enabled() ) {
484 if ( alarm->time() >= from && alarm->time() <= to ) { 484 if ( alarm->time() >= from && alarm->time() <= to ) {
485 kdDebug(5800) << "CalendarLocal::appendAlarms() '" << incidence->summary() 485 kdDebug(5800) << "CalendarLocal::appendAlarms() '" << incidence->summary()
486 << "': " << alarm->time().toString() << endl; 486 << "': " << alarm->time().toString() << endl;
487 alarms.append( alarm ); 487 alarms.append( alarm );
488 } 488 }
489 } 489 }
490 } 490 }
491} 491}
492 492
493void CalendarLocal::appendRecurringAlarms( Alarm::List &alarms, 493void CalendarLocal::appendRecurringAlarms( Alarm::List &alarms,
494 Incidence *incidence, 494 Incidence *incidence,
495 const QDateTime &from, 495 const QDateTime &from,
496 const QDateTime &to ) 496 const QDateTime &to )
497{ 497{
498 498
499 QPtrList<Alarm> alarmList = incidence->alarms(); 499 QPtrList<Alarm> alarmList = incidence->alarms();
500 Alarm *alarm; 500 Alarm *alarm;
501 QDateTime qdt; 501 QDateTime qdt;
502 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) { 502 for( alarm = alarmList.first(); alarm; alarm = alarmList.next() ) {
503 if (incidence->recursOn(from.date())) { 503 if (incidence->recursOn(from.date())) {
504 qdt.setTime(alarm->time().time()); 504 qdt.setTime(alarm->time().time());
505 qdt.setDate(from.date()); 505 qdt.setDate(from.date());
506 } 506 }
507 else qdt = alarm->time(); 507 else qdt = alarm->time();
508 // qDebug("1 %s %s %s", qdt.toString().latin1(), from.toString().latin1(), to.toString().latin1()); 508 // qDebug("1 %s %s %s", qdt.toString().latin1(), from.toString().latin1(), to.toString().latin1());
509 if ( alarm->enabled() ) { 509 if ( alarm->enabled() ) {
510 if ( qdt >= from && qdt <= to ) { 510 if ( qdt >= from && qdt <= to ) {
511 alarms.append( alarm ); 511 alarms.append( alarm );
512 } 512 }
513 } 513 }
514 } 514 }
515} 515}
516 516
517 517
518/****************************** PROTECTED METHODS ****************************/ 518/****************************** PROTECTED METHODS ****************************/
519 519
520// after changes are made to an event, this should be called. 520// after changes are made to an event, this should be called.
521void CalendarLocal::update( IncidenceBase *incidence ) 521void CalendarLocal::update( IncidenceBase *incidence )
522{ 522{
523 incidence->setSyncStatus( Event::SYNCMOD ); 523 incidence->setSyncStatus( Event::SYNCMOD );
524 incidence->setLastModified( QDateTime::currentDateTime() ); 524 incidence->setLastModified( QDateTime::currentDateTime() );
525 // we should probably update the revision number here, 525 // we should probably update the revision number here,
526 // or internally in the Event itself when certain things change. 526 // or internally in the Event itself when certain things change.
527 // need to verify with ical documentation. 527 // need to verify with ical documentation.
528 528
529 setModified( true ); 529 setModified( true );
530} 530}
531 531
532void CalendarLocal::insertEvent( Event *event ) 532void CalendarLocal::insertEvent( Event *event )
533{ 533{
534 if ( mEventList.findRef( event ) < 0 ) mEventList.append( event ); 534 if ( mEventList.findRef( event ) < 0 ) mEventList.append( event );
535} 535}
536 536
537 537
538QPtrList<Event> CalendarLocal::rawEventsForDate( const QDate &qd, bool sorted ) 538QPtrList<Event> CalendarLocal::rawEventsForDate( const QDate &qd, bool sorted )
539{ 539{
540 QPtrList<Event> eventList; 540 QPtrList<Event> eventList;
541 541
542 Event *event; 542 Event *event;
543 for( event = mEventList.first(); event; event = mEventList.next() ) { 543 for( event = mEventList.first(); event; event = mEventList.next() ) {
544 if ( event->doesRecur() ) { 544 if ( event->doesRecur() ) {
545 if ( event->isMultiDay() ) { 545 if ( event->isMultiDay() ) {
546 int extraDays = event->dtStart().date().daysTo( event->dtEnd().date() ); 546 int extraDays = event->dtStart().date().daysTo( event->dtEnd().date() );
547 int i; 547 int i;
548 for ( i = 0; i <= extraDays; i++ ) { 548 for ( i = 0; i <= extraDays; i++ ) {
549 if ( event->recursOn( qd.addDays( -i ) ) ) { 549 if ( event->recursOn( qd.addDays( -i ) ) ) {
550 eventList.append( event ); 550 eventList.append( event );
551 break; 551 break;
552 } 552 }
553 } 553 }
554 } else { 554 } else {
555 if ( event->recursOn( qd ) ) 555 if ( event->recursOn( qd ) )
556 eventList.append( event ); 556 eventList.append( event );
557 } 557 }
558 } else { 558 } else {
559 if ( event->dtStart().date() <= qd && event->dtEnd().date() >= qd ) { 559 if ( event->dtStart().date() <= qd && event->dtEnd().date() >= qd ) {
560 eventList.append( event ); 560 eventList.append( event );
561 } 561 }
562 } 562 }
563 } 563 }
564 564
565 if ( !sorted ) { 565 if ( !sorted ) {
566 return eventList; 566 return eventList;
567 } 567 }
568 568
569 // kdDebug(5800) << "Sorting events for date\n" << endl; 569 // kdDebug(5800) << "Sorting events for date\n" << endl;
570 // now, we have to sort it based on dtStart.time() 570 // now, we have to sort it based on dtStart.time()
571 QPtrList<Event> eventListSorted; 571 QPtrList<Event> eventListSorted;
572 Event *sortEvent; 572 Event *sortEvent;
573 for ( event = eventList.first(); event; event = eventList.next() ) { 573 for ( event = eventList.first(); event; event = eventList.next() ) {
574 sortEvent = eventListSorted.first(); 574 sortEvent = eventListSorted.first();
575 int i = 0; 575 int i = 0;
576 while ( sortEvent && event->dtStart().time()>=sortEvent->dtStart().time() ) 576 while ( sortEvent && event->dtStart().time()>=sortEvent->dtStart().time() )
577 { 577 {
578 i++; 578 i++;
579 sortEvent = eventListSorted.next(); 579 sortEvent = eventListSorted.next();
580 } 580 }
581 eventListSorted.insert( i, event ); 581 eventListSorted.insert( i, event );
582 } 582 }
583 return eventListSorted; 583 return eventListSorted;
584} 584}
585 585
586 586
587QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end, 587QPtrList<Event> CalendarLocal::rawEvents( const QDate &start, const QDate &end,
588 bool inclusive ) 588 bool inclusive )
589{ 589{
590 Event *event = 0; 590 Event *event = 0;
591 591
592 QPtrList<Event> eventList; 592 QPtrList<Event> eventList;
593 593
594 // Get non-recurring events 594 // Get non-recurring events
595 for( event = mEventList.first(); event; event = mEventList.next() ) { 595 for( event = mEventList.first(); event; event = mEventList.next() ) {
596 if ( event->doesRecur() ) { 596 if ( event->doesRecur() ) {
597 QDate rStart = event->dtStart().date(); 597 QDate rStart = event->dtStart().date();
598 bool found = false; 598 bool found = false;
599 if ( inclusive ) { 599 if ( inclusive ) {
600 if ( rStart >= start && rStart <= end ) { 600 if ( rStart >= start && rStart <= end ) {
601 // Start date of event is in range. Now check for end date. 601 // Start date of event is in range. Now check for end date.
602 // if duration is negative, event recurs forever, so do not include it. 602 // if duration is negative, event recurs forever, so do not include it.
603 if ( event->recurrence()->duration() == 0 ) { // End date set 603 if ( event->recurrence()->duration() == 0 ) { // End date set
604 QDate rEnd = event->recurrence()->endDate(); 604 QDate rEnd = event->recurrence()->endDate();
605 if ( rEnd >= start && rEnd <= end ) { // End date within range 605 if ( rEnd >= start && rEnd <= end ) { // End date within range
606 found = true; 606 found = true;
607 } 607 }
608 } else if ( event->recurrence()->duration() > 0 ) { // Duration set 608 } else if ( event->recurrence()->duration() > 0 ) { // Duration set
609 // TODO: Calculate end date from duration. Should be done in Event 609 // TODO: Calculate end date from duration. Should be done in Event
610 // For now exclude all events with a duration. 610 // For now exclude all events with a duration.
611 } 611 }
612 } 612 }
613 } else { 613 } else {
614 bool founOne; 614 bool founOne;
615 QDate next = event->getNextOccurence( start, &founOne ).date(); 615 QDate next = event->getNextOccurence( start, &founOne ).date();
616 if ( founOne ) { 616 if ( founOne ) {
617 if ( next <= end ) { 617 if ( next <= end ) {
618 found = true; 618 found = true;
619 } 619 }
620 } 620 }
621 621
622 /* 622 /*
623 // crap !!! 623 // crap !!!
624 if ( rStart <= end ) { // Start date not after range 624 if ( rStart <= end ) { // Start date not after range
625 if ( rStart >= start ) { // Start date within range 625 if ( rStart >= start ) { // Start date within range
626 found = true; 626 found = true;
627 } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever 627 } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever
628 found = true; 628 found = true;
629 } else if ( event->recurrence()->duration() == 0 ) { // End date set 629 } else if ( event->recurrence()->duration() == 0 ) { // End date set
630 QDate rEnd = event->recurrence()->endDate(); 630 QDate rEnd = event->recurrence()->endDate();
631 if ( rEnd >= start && rEnd <= end ) { // End date within range 631 if ( rEnd >= start && rEnd <= end ) { // End date within range
632 found = true; 632 found = true;
633 } 633 }
634 } else { // Duration set 634 } else { // Duration set
635 // TODO: Calculate end date from duration. Should be done in Event 635 // TODO: Calculate end date from duration. Should be done in Event
636 // For now include all events with a duration. 636 // For now include all events with a duration.
637 found = true; 637 found = true;
638 } 638 }
639 } 639 }
640 */ 640 */
641 641
642 } 642 }
643 643
644 if ( found ) eventList.append( event ); 644 if ( found ) eventList.append( event );
645 } else { 645 } else {
646 QDate s = event->dtStart().date(); 646 QDate s = event->dtStart().date();
647 QDate e = event->dtEnd().date(); 647 QDate e = event->dtEnd().date();
648 648
649 if ( inclusive ) { 649 if ( inclusive ) {
650 if ( s >= start && e <= end ) { 650 if ( s >= start && e <= end ) {
651 eventList.append( event ); 651 eventList.append( event );
652 } 652 }
653 } else { 653 } else {
654 if ( ( s >= start && s <= end ) || ( e >= start && e <= end ) ) { 654 if ( ( s >= start && s <= end ) || ( e >= start && e <= end ) ) {
655 eventList.append( event ); 655 eventList.append( event );
656 } 656 }
657 } 657 }
658 } 658 }
659 } 659 }
660 660
661 return eventList; 661 return eventList;
662} 662}
663 663
664QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt ) 664QPtrList<Event> CalendarLocal::rawEventsForDate( const QDateTime &qdt )
665{ 665{
666 return rawEventsForDate( qdt.date() ); 666 return rawEventsForDate( qdt.date() );
667} 667}
668 668
669QPtrList<Event> CalendarLocal::rawEvents() 669QPtrList<Event> CalendarLocal::rawEvents()
670{ 670{
671 return mEventList; 671 return mEventList;
672} 672}
673 673
674bool CalendarLocal::addJournal(Journal *journal) 674bool CalendarLocal::addJournal(Journal *journal)
675{ 675{
676 if ( journal->dtStart().isValid()) 676 if ( journal->dtStart().isValid())
677 kdDebug(5800) << "Adding Journal on " << journal->dtStart().toString() << endl; 677 kdDebug(5800) << "Adding Journal on " << journal->dtStart().toString() << endl;
678 else 678 else
679 kdDebug(5800) << "Adding Journal without a DTSTART" << endl; 679 kdDebug(5800) << "Adding Journal without a DTSTART" << endl;
680 680
681 mJournalList.append(journal); 681 mJournalList.append(journal);
682 682
683 journal->registerObserver( this ); 683 journal->registerObserver( this );
684 684
685 setModified( true ); 685 setModified( true );
686 686
687 return true; 687 return true;
688} 688}
689 689
690void CalendarLocal::deleteJournal( Journal *journal ) 690void CalendarLocal::deleteJournal( Journal *journal )
691{ 691{
692 if ( mUndoIncidence ) delete mUndoIncidence; 692 if ( mUndoIncidence ) delete mUndoIncidence;
693 mUndoIncidence = journal->clone(); 693 mUndoIncidence = journal->clone();
694 mUndoIncidence->setSummary( mUndoIncidence->description().left(25)); 694 mUndoIncidence->setSummary( mUndoIncidence->description().left(25));
695 if ( mJournalList.removeRef(journal) ) { 695 if ( mJournalList.removeRef(journal) ) {
696 setModified( true ); 696 setModified( true );
697 } 697 }
698} 698}
699 699
700Journal *CalendarLocal::journal( const QDate &date ) 700Journal *CalendarLocal::journal( const QDate &date )
701{ 701{
702// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl; 702// kdDebug(5800) << "CalendarLocal::journal() " << date.toString() << endl;
703 703
704 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 704 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
705 if ( it->dtStart().date() == date ) 705 if ( it->dtStart().date() == date )
706 return it; 706 return it;
707 707
708 return 0; 708 return 0;
709} 709}
710 710
711Journal *CalendarLocal::journal( const QString &uid ) 711Journal *CalendarLocal::journal( const QString &uid )
712{ 712{
713 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() ) 713 for ( Journal *it = mJournalList.first(); it; it = mJournalList.next() )
714 if ( it->uid() == uid ) 714 if ( it->uid() == uid )
715 return it; 715 return it;
716 716
717 return 0; 717 return 0;
718} 718}
719 719
720QPtrList<Journal> CalendarLocal::journals() 720QPtrList<Journal> CalendarLocal::journals()
721{ 721{
722 return mJournalList; 722 return mJournalList;
723} 723}
724 724
diff --git a/microkde/kdatetbl.cpp b/microkde/kdatetbl.cpp
index 146291b..508ce31 100644
--- a/microkde/kdatetbl.cpp
+++ b/microkde/kdatetbl.cpp
@@ -1,747 +1,750 @@
1/* -*- C++ -*- 1/* -*- C++ -*-
2 This file is part of the KDE libraries 2 This file is part of the KDE libraries
3 Copyright (C) 1997 Tim D. Gilman (tdgilman@best.org) 3 Copyright (C) 1997 Tim D. Gilman (tdgilman@best.org)
4 (C) 1998-2001 Mirko Boehm (mirko@kde.org) 4 (C) 1998-2001 Mirko Boehm (mirko@kde.org)
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library 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 GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21/////////////////// KDateTable widget class ////////////////////// 21/////////////////// KDateTable widget class //////////////////////
22// 22//
23// Copyright (C) 1997 Tim D. Gilman 23// Copyright (C) 1997 Tim D. Gilman
24// (C) 1998-2001 Mirko Boehm 24// (C) 1998-2001 Mirko Boehm
25// Written using Qt (http://www.troll.no) for the 25// Written using Qt (http://www.troll.no) for the
26// KDE project (http://www.kde.org) 26// KDE project (http://www.kde.org)
27// 27//
28// This is a support class for the KDatePicker class. It just 28// This is a support class for the KDatePicker class. It just
29// draws the calender table without titles, but could theoretically 29// draws the calender table without titles, but could theoretically
30// be used as a standalone. 30// be used as a standalone.
31// 31//
32// When a date is selected by the user, it emits a signal: 32// When a date is selected by the user, it emits a signal:
33// dateSelected(QDate) 33// dateSelected(QDate)
34 34
35#include <kglobal.h> 35#include <kglobal.h>
36#include <kglobalsettings.h> 36#include <kglobalsettings.h>
37#include <kapplication.h> 37#include <kapplication.h>
38#include <klocale.h> 38#include <klocale.h>
39#include <kdebug.h> 39#include <kdebug.h>
40#include <knotifyclient.h> 40#include <knotifyclient.h>
41#include "kdatetbl.h" 41#include "kdatetbl.h"
42#include <qdatetime.h> 42#include <qdatetime.h>
43#include <qstring.h> 43#include <qstring.h>
44#include <qpen.h> 44#include <qpen.h>
45#include <qpainter.h> 45#include <qpainter.h>
46#include <qdialog.h> 46#include <qdialog.h>
47#include <assert.h> 47#include <assert.h>
48#include <qapplication.h> 48#include <qapplication.h>
49 49
50KDateValidator::KDateValidator(QWidget* parent, const char* name) 50KDateValidator::KDateValidator(QWidget* parent, const char* name)
51 : QValidator(parent, name) 51 : QValidator(parent, name)
52{ 52{
53} 53}
54 54
55QValidator::State 55QValidator::State
56KDateValidator::validate(QString& text, int&) const 56KDateValidator::validate(QString& text, int&) const
57{ 57{
58 QDate temp; 58 QDate temp;
59 // ----- everything is tested in date(): 59 // ----- everything is tested in date():
60 return date(text, temp); 60 return date(text, temp);
61} 61}
62 62
63QValidator::State 63QValidator::State
64KDateValidator::date(const QString& text, QDate& d) const 64KDateValidator::date(const QString& text, QDate& d) const
65{ 65{
66 QDate tmp = KGlobal::locale()->readDate(text); 66 QDate tmp = KGlobal::locale()->readDate(text);
67 if (!tmp.isNull()) 67 if (!tmp.isNull())
68 { 68 {
69 d = tmp; 69 d = tmp;
70 return Acceptable; 70 return Acceptable;
71 } else 71 } else
72 return Valid; 72 return Valid;
73} 73}
74 74
75void 75void
76KDateValidator::fixup( QString& ) const 76KDateValidator::fixup( QString& ) const
77{ 77{
78 78
79} 79}
80 80
81KDateTable::KDateTable(QWidget *parent, QDate date_, const char* name, WFlags f) 81KDateTable::KDateTable(QWidget *parent, QDate date_, const char* name, WFlags f)
82 : QGridView(parent, name, f) 82 : QGridView(parent, name, f)
83{ 83{
84 setFontSize(10); 84 setFontSize(10);
85 if(!date_.isValid()) 85 if(!date_.isValid())
86 { 86 {
87 date_=QDate::currentDate(); 87 date_=QDate::currentDate();
88 } 88 }
89 setFocusPolicy( QWidget::StrongFocus ); 89 setFocusPolicy( QWidget::StrongFocus );
90 setNumRows(7); // 6 weeks max + headline 90 setNumRows(7); // 6 weeks max + headline
91 setNumCols(7); // 7 days a week 91 setNumCols(7); // 7 days a week
92 setHScrollBarMode(AlwaysOff); 92 setHScrollBarMode(AlwaysOff);
93 setVScrollBarMode(AlwaysOff); 93 setVScrollBarMode(AlwaysOff);
94 viewport()->setBackgroundColor(QColor(220,245,255)); 94 viewport()->setBackgroundColor(QColor(220,245,255));
95#if 0 95#if 0
96 viewport()->setEraseColor(lightGray); 96 viewport()->setEraseColor(lightGray);
97#endif 97#endif
98 mMarkCurrent = false; 98 mMarkCurrent = false;
99 setDate(date_); // this initializes firstday, numdays, numDaysPrevMonth 99 setDate(date_); // this initializes firstday, numdays, numDaysPrevMonth
100} 100}
101 101
102void 102void
103KDateTable::paintCell(QPainter *painter, int row, int col) 103KDateTable::paintCell(QPainter *painter, int row, int col)
104{ 104{
105 QRect rect; 105 QRect rect;
106 QString text; 106 QString text;
107 QPen pen; 107 QPen pen;
108 int w=cellWidth(); 108 int w=cellWidth();
109 int h=cellHeight(); 109 int h=cellHeight();
110 int pos; 110 int pos;
111 QBrush brushBlue(blue); 111 QBrush brushBlue(blue);
112 QBrush brushLightblue(QColor(220,245,255)); 112 QBrush brushLightblue(QColor(220,245,255));
113 QFont font=KGlobalSettings::generalFont(); 113 QFont font=KGlobalSettings::generalFont();
114 // ----- 114 // -----
115 font.setPointSize(fontsize); 115 font.setPointSize(fontsize);
116 if(row==0) 116 if(row==0)
117 { // we are drawing the headline 117 { // we are drawing the headline
118 font.setBold(true); 118 font.setBold(true);
119 painter->setFont(font); 119 painter->setFont(font);
120 bool normalday = true; 120 bool normalday = true;
121 QString daystr; 121 QString daystr;
122 if (KGlobal::locale()->weekStartsMonday()) 122 if (KGlobal::locale()->weekStartsMonday())
123 { 123 {
124 daystr = KGlobal::locale()->weekDayName(col+1, true); 124 daystr = KGlobal::locale()->weekDayName(col+1, true);
125 if (col == 5 || col == 6) 125 if (col == 5 || col == 6)
126 normalday = false; 126 normalday = false;
127 } else { 127 } else {
128 daystr = KGlobal::locale()->weekDayName(col==0? 7 : col, true); 128 daystr = KGlobal::locale()->weekDayName(col==0? 7 : col, true);
129 if (col == 0 || col == 6) 129 if (col == 0 || col == 6)
130 normalday = false; 130 normalday = false;
131 } 131 }
132 if (!normalday) 132 if (!normalday)
133 { 133 {
134 painter->setPen(QColor(220,245,255)); 134 painter->setPen(QColor(220,245,255));
135 painter->setBrush(brushLightblue); 135 painter->setBrush(brushLightblue);
136 painter->drawRect(0, 0, w, h); 136 painter->drawRect(0, 0, w, h);
137 painter->setPen(blue); 137 painter->setPen(blue);
138 } else { 138 } else {
139 painter->setPen(blue); 139 painter->setPen(blue);
140 painter->setBrush(brushBlue); 140 painter->setBrush(brushBlue);
141 painter->drawRect(0, 0, w, h); 141 painter->drawRect(0, 0, w, h);
142 painter->setPen(white); 142 painter->setPen(white);
143 } 143 }
144 painter->drawText(0, 0, w, h-1, AlignCenter, 144 painter->drawText(0, 0, w, h-1, AlignCenter,
145 daystr, -1, &rect); 145 daystr, -1, &rect);
146 painter->setPen(black); 146 painter->setPen(black);
147 painter->moveTo(0, h-1); 147 painter->moveTo(0, h-1);
148 painter->lineTo(w-1, h-1); 148 painter->lineTo(w-1, h-1);
149 // ----- draw the weekday: 149 // ----- draw the weekday:
150 } else { 150 } else {
151 painter->setFont(font); 151 painter->setFont(font);
152 pos=7*(row-1)+col; 152 pos=7*(row-1)+col;
153 if (KGlobal::locale()->weekStartsMonday()) 153 if (KGlobal::locale()->weekStartsMonday())
154 pos++; 154 pos++;
155 if(pos<firstday || (firstday+numdays<=pos)) 155 if(pos<firstday || (firstday+numdays<=pos))
156 { // we are either 156 { // we are either
157 // ° painting a day of the previous month or 157 // ° painting a day of the previous month or
158 // ° painting a day of the following month 158 // ° painting a day of the following month
159 if(pos<firstday) 159 if(pos<firstday)
160 { // previous month 160 { // previous month
161 text.setNum(numDaysPrevMonth+pos-firstday+1); 161 text.setNum(numDaysPrevMonth+pos-firstday+1);
162 } else { // following month 162 } else { // following month
163 text.setNum(pos-firstday-numdays+1); 163 text.setNum(pos-firstday-numdays+1);
164 } 164 }
165 painter->setPen(gray); 165 painter->setPen(gray);
166 } else { // paint a day of the current month 166 } else { // paint a day of the current month
167 text.setNum(pos-firstday+1); 167 text.setNum(pos-firstday+1);
168 painter->setPen(black); 168 painter->setPen(black);
169 } 169 }
170 170
171 pen=painter->pen(); 171 pen=painter->pen();
172 if(firstday+date.day()-1==pos) 172 if(firstday+date.day()-1==pos)
173 { 173 {
174 if(mMarkCurrent && firstday+QDate::currentDate().day()-1==pos) 174 if(mMarkCurrent && firstday+QDate::currentDate().day()-1==pos)
175 painter->setPen(green); 175 painter->setPen(green);
176 else 176 else
177 painter->setPen(red); 177 painter->setPen(red);
178 if(hasFocus()) 178 if(hasFocus())
179 { 179 {
180 painter->setBrush(darkRed); 180 painter->setBrush(darkRed);
181 pen=white; 181 pen=white;
182 } else { 182 } else {
183 painter->setBrush(darkGray); 183 painter->setBrush(darkGray);
184 pen=white; 184 pen=white;
185 } 185 }
186 } else { 186 } else {
187 if(mMarkCurrent && firstday+QDate::currentDate().day()-1==pos) 187 if(mMarkCurrent && firstday+QDate::currentDate().day()-1==pos)
188 { 188 {
189 painter->setPen(green); 189 painter->setPen(green);
190 painter->setBrush(darkGreen); 190 painter->setBrush(darkGreen);
191 pen=white; 191 pen=white;
192 } else { 192 } else {
193 painter->setBrush(QColor(220,245,255)); 193 painter->setBrush(QColor(220,245,255));
194 painter->setPen(QColor(220,245,255)); 194 painter->setPen(QColor(220,245,255));
195 } 195 }
196 } 196 }
197 painter->drawRect(0, 0, w, h); 197 painter->drawRect(0, 0, w, h);
198 painter->setPen(pen); 198 painter->setPen(pen);
199 painter->drawText(0, 0, w, h, AlignCenter, text, -1, &rect); 199 painter->drawText(0, 0, w, h, AlignCenter, text, -1, &rect);
200 } 200 }
201 if(rect.width()>maxCell.width()) maxCell.setWidth(rect.width()); 201 if(rect.width()>maxCell.width()) maxCell.setWidth(rect.width());
202 if(rect.height()>maxCell.height()) maxCell.setHeight(rect.height()); 202 if(rect.height()>maxCell.height()) maxCell.setHeight(rect.height());
203} 203}
204 204
205void 205void
206KDateTable::keyPressEvent( QKeyEvent *e ) 206KDateTable::keyPressEvent( QKeyEvent *e )
207{ 207{
208 /* 208 /*
209 // not working properly 209 // not working properly
210 if ( e->key() == Qt::Key_Prior ) { 210 if ( e->key() == Qt::Key_Prior ) {
211 if ( date.month() == 1 ) { 211 if ( date.month() == 1 ) {
212 KNotifyClient::beep(); 212 KNotifyClient::beep();
213 return; 213 return;
214 } 214 }
215 int day = date.day(); 215 int day = date.day();
216 if ( day > 27 ) 216 if ( day > 27 )
217 while ( !QDate::isValid( date.year(), date.month()-1, day ) ) 217 while ( !QDate::isValid( date.year(), date.month()-1, day ) )
218 day--; 218 day--;
219 setDate(QDate(date.year(), date.month()-1, day)); 219 setDate(QDate(date.year(), date.month()-1, day));
220 return; 220 return;
221 } 221 }
222 if ( e->key() == Qt::Key_Next ) { 222 if ( e->key() == Qt::Key_Next ) {
223 if ( date.month() == 12 ) { 223 if ( date.month() == 12 ) {
224 KNotifyClient::beep(); 224 KNotifyClient::beep();
225 return; 225 return;
226 } 226 }
227 int day = date.day(); 227 int day = date.day();
228 if ( day > 27 ) 228 if ( day > 27 )
229 while ( !QDate::isValid( date.year(), date.month()+1, day ) ) 229 while ( !QDate::isValid( date.year(), date.month()+1, day ) )
230 day--; 230 day--;
231 setDate(QDate(date.year(), date.month()+1, day)); 231 setDate(QDate(date.year(), date.month()+1, day));
232 return; 232 return;
233 } 233 }
234 */ 234 */
235 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0; 235 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0;
236 236
237 int temp=firstday+date.day()-dayoff; 237 int temp=firstday+date.day()-dayoff;
238 int pos = temp; 238 int pos = temp;
239 bool irgnore = true; 239 bool irgnore = true;
240 if ( e->state() != Qt::ControlButton ) { 240 if ( e->state() != Qt::ControlButton ) {
241 if ( e->key() == Qt::Key_Up ) { 241 if ( e->key() == Qt::Key_Up ) {
242 pos -= 7; 242 pos -= 7;
243 irgnore = false; 243 irgnore = false;
244 } 244 }
245 if ( e->key() == Qt::Key_Down ) { 245 if ( e->key() == Qt::Key_Down ) {
246 pos += 7; 246 pos += 7;
247 irgnore = false; 247 irgnore = false;
248 } 248 }
249 if ( e->key() == Qt::Key_Left ) { 249 if ( e->key() == Qt::Key_Left ) {
250 pos--; 250 pos--;
251 irgnore = false; 251 irgnore = false;
252 } 252 }
253 if ( e->key() == Qt::Key_Right ) { 253 if ( e->key() == Qt::Key_Right ) {
254 pos++; 254 pos++;
255 irgnore = false; 255 irgnore = false;
256 } 256 }
257 } 257 }
258 if ( irgnore ) 258 if ( irgnore )
259 e->ignore(); 259 e->ignore();
260 260
261 if(pos+dayoff<=firstday) 261 if(pos+dayoff<=firstday)
262 { // this day is in the previous month 262 { // this day is in the previous month
263 KNotifyClient::beep(); 263 KNotifyClient::beep();
264 return; 264 return;
265 } 265 }
266 if(firstday+numdays<pos+dayoff) 266 if(firstday+numdays<pos+dayoff)
267 { // this date is in the next month 267 { // this date is in the next month
268 KNotifyClient::beep(i18n( "Month not long enough" )); 268 KNotifyClient::beep(i18n( "Month not long enough" ));
269 return; 269 return;
270 } 270 }
271 271
272 if ( pos == temp ) 272 if ( pos == temp )
273 return; 273 return;
274 274
275 setDate(QDate(date.year(), date.month(), pos-firstday+dayoff)); 275 setDate(QDate(date.year(), date.month(), pos-firstday+dayoff));
276 updateCell(temp/7+1, temp%7); // Update the previously selected cell 276 updateCell(temp/7+1, temp%7); // Update the previously selected cell
277 updateCell(pos/7+1, pos%7); // Update the selected cell 277 updateCell(pos/7+1, pos%7); // Update the selected cell
278 assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid()); 278 assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid());
279 279
280 280
281} 281}
282 282
283void 283void
284KDateTable::viewportResizeEvent(QResizeEvent * e) 284KDateTable::viewportResizeEvent(QResizeEvent * e)
285{ 285{
286 QGridView::viewportResizeEvent(e); 286 QGridView::viewportResizeEvent(e);
287 287
288 setCellWidth(viewport()->width()/7); 288 setCellWidth(viewport()->width()/7);
289 setCellHeight(viewport()->height()/7); 289 setCellHeight(viewport()->height()/7);
290} 290}
291 291
292void 292void
293KDateTable::setFontSize(int size) 293KDateTable::setFontSize(int size)
294{ 294{
295 int count; 295 int count;
296 QRect rect; 296 QRect rect;
297 // ----- store rectangles: 297 // ----- store rectangles:
298 fontsize=size; 298 fontsize=size;
299 QFont font = KGlobalSettings::generalFont(); 299 QFont font = KGlobalSettings::generalFont();
300 font.setPointSize(fontsize); 300 font.setPointSize(fontsize);
301 font.setBold( true ); 301 font.setBold( true );
302 QFontMetrics metrics(font); 302 QFontMetrics metrics(font);
303 303
304 // ----- find largest day name: 304 // ----- find largest day name:
305 maxCell.setWidth(0); 305 maxCell.setWidth(0);
306 maxCell.setHeight(0); 306 maxCell.setHeight(0);
307 for(count=0; count<7; ++count) 307 for(count=0; count<7; ++count)
308 { 308 {
309 rect=metrics.boundingRect(KGlobal::locale()->weekDayName(count+1, true)); 309 rect=metrics.boundingRect(KGlobal::locale()->weekDayName(count+1, true));
310 maxCell.setWidth(QMAX(maxCell.width(), rect.width())); 310 maxCell.setWidth(QMAX(maxCell.width(), rect.width()));
311 maxCell.setHeight(QMAX(maxCell.height(), rect.height())); 311 maxCell.setHeight(QMAX(maxCell.height(), rect.height()));
312 } 312 }
313 // ----- compare with a real wide number and add some space: 313 // ----- compare with a real wide number and add some space:
314 rect=metrics.boundingRect(QString::fromLatin1("88")); 314 rect=metrics.boundingRect(QString::fromLatin1("88"));
315 maxCell.setWidth(QMAX(maxCell.width()+2, rect.width())); 315 maxCell.setWidth(QMAX(maxCell.width()+2, rect.width()));
316 maxCell.setHeight(QMAX(maxCell.height()+4, rect.height())); 316 maxCell.setHeight(QMAX(maxCell.height()+4, rect.height()));
317 if ( maxCell.width() * 1000 / maxCell.height() > 1900 ) 317 if ( maxCell.width() * 1000 / maxCell.height() > 1900 )
318 maxCell.setHeight(maxCell.width() * 1000 / 1900 ); 318 maxCell.setHeight(maxCell.width() * 1000 / 1900 );
319} 319}
320 320
321void 321void
322KDateTable::contentsMousePressEvent(QMouseEvent *e) 322KDateTable::contentsMousePressEvent(QMouseEvent *e)
323{ 323{
324 if(e->type()!=QEvent::MouseButtonPress) 324 if(e->type()!=QEvent::MouseButtonPress)
325 { // the KDatePicker only reacts on mouse press events: 325 { // the KDatePicker only reacts on mouse press events:
326 return; 326 return;
327 } 327 }
328 if(!isEnabled()) 328 if(!isEnabled())
329 { 329 {
330 KNotifyClient::beep(); 330 KNotifyClient::beep();
331 return; 331 return;
332 } 332 }
333 333
334 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0; 334 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0;
335 // ----- 335 // -----
336 int row, col, pos, temp; 336 int row, col, pos, temp;
337 QPoint mouseCoord; 337 QPoint mouseCoord;
338 // ----- 338 // -----
339 mouseCoord = e->pos(); 339 mouseCoord = e->pos();
340 row=rowAt(mouseCoord.y()); 340 row=rowAt(mouseCoord.y());
341 col=columnAt(mouseCoord.x()); 341 col=columnAt(mouseCoord.x());
342 if(row<0 || col<0) 342 if(row<0 || col<0)
343 { // the user clicked on the frame of the table 343 { // the user clicked on the frame of the table
344 return; 344 return;
345 } 345 }
346 pos=7*(row-1)+col+1; 346 pos=7*(row-1)+col+1;
347#if 0
347 if(pos+dayoff<=firstday) 348 if(pos+dayoff<=firstday)
348 { // this day is in the previous month 349 { // this day is in the previous month
349 KNotifyClient::beep(); 350 KNotifyClient::beep();
350 return; 351 return;
351 } 352 }
352 if(firstday+numdays<pos+dayoff) 353 if(firstday+numdays<pos+dayoff)
353 { // this date is in the next month 354 { // this date is in the next month
354 KNotifyClient::beep(); 355 KNotifyClient::beep();
355 return; 356 return;
356 } 357 }
358#endif
357 temp=firstday+date.day()-dayoff-1; 359 temp=firstday+date.day()-dayoff-1;
358 setDate(QDate(date.year(), date.month(), pos-firstday+dayoff)); 360 QDate da = QDate(date.year(), date.month(),1);
361 setDate(da.addDays( pos-firstday+dayoff-1));
359 updateCell(temp/7+1, temp%7); // Update the previously selected cell 362 updateCell(temp/7+1, temp%7); // Update the previously selected cell
360 updateCell(row, col); // Update the selected cell 363 updateCell(row, col); // Update the selected cell
361 // assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid()); 364 // assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid());
362 emit(tableClicked()); 365 emit(tableClicked());
363} 366}
364 367
365bool 368bool
366KDateTable::setDate(const QDate& date_) 369KDateTable::setDate(const QDate& date_)
367{ 370{
368 bool changed=false; 371 bool changed=false;
369 QDate temp; 372 QDate temp;
370 mMarkCurrent = false; 373 mMarkCurrent = false;
371 // ----- 374 // -----
372 if(!date_.isValid()) 375 if(!date_.isValid())
373 { 376 {
374 kdDebug() << "KDateTable::setDate: refusing to set invalid date." << endl; 377 kdDebug() << "KDateTable::setDate: refusing to set invalid date." << endl;
375 return false; 378 return false;
376 } 379 }
377 if(date!=date_) 380 if(date!=date_)
378 { 381 {
379 date=date_; 382 date=date_;
380 changed=true; 383 changed=true;
381 } 384 }
382 mMarkCurrent = ( date.month() == QDate::currentDate().month() && date.year() == QDate::currentDate().year() ); 385 mMarkCurrent = ( date.month() == QDate::currentDate().month() && date.year() == QDate::currentDate().year() );
383 temp.setYMD(date.year(), date.month(), 1); 386 temp.setYMD(date.year(), date.month(), 1);
384 firstday=temp.dayOfWeek(); 387 firstday=temp.dayOfWeek();
385 if(firstday==1) firstday=8; 388 if(firstday==1) firstday=8;
386 numdays=date.daysInMonth(); 389 numdays=date.daysInMonth();
387 if(date.month()==1) 390 if(date.month()==1)
388 { // set to december of previous year 391 { // set to december of previous year
389 temp.setYMD(date.year()-1, 12, 1); 392 temp.setYMD(date.year()-1, 12, 1);
390 } else { // set to previous month 393 } else { // set to previous month
391 temp.setYMD(date.year(), date.month()-1, 1); 394 temp.setYMD(date.year(), date.month()-1, 1);
392 } 395 }
393 numDaysPrevMonth=temp.daysInMonth(); 396 numDaysPrevMonth=temp.daysInMonth();
394 if(changed) 397 if(changed)
395 { 398 {
396 repaintContents(false); 399 repaintContents(false);
397 } 400 }
398 emit(dateChanged(date)); 401 emit(dateChanged(date));
399 return true; 402 return true;
400} 403}
401 404
402const QDate& 405const QDate&
403KDateTable::getDate() const 406KDateTable::getDate() const
404{ 407{
405 return date; 408 return date;
406} 409}
407 410
408void KDateTable::focusInEvent( QFocusEvent *e ) 411void KDateTable::focusInEvent( QFocusEvent *e )
409{ 412{
410 repaintContents(false); 413 repaintContents(false);
411 QGridView::focusInEvent( e ); 414 QGridView::focusInEvent( e );
412} 415}
413 416
414void KDateTable::focusOutEvent( QFocusEvent *e ) 417void KDateTable::focusOutEvent( QFocusEvent *e )
415{ 418{
416 repaintContents(false); 419 repaintContents(false);
417 QGridView::focusOutEvent( e ); 420 QGridView::focusOutEvent( e );
418} 421}
419 422
420QSize 423QSize
421KDateTable::sizeHint() const 424KDateTable::sizeHint() const
422{ 425{
423 if(maxCell.height()>0 && maxCell.width()>0) 426 if(maxCell.height()>0 && maxCell.width()>0)
424 { 427 {
425 return QSize((maxCell.width()+2)*numCols()+2*frameWidth(), 428 return QSize((maxCell.width()+2)*numCols()+2*frameWidth(),
426 (maxCell.height()+4)*numRows()+2*frameWidth()); 429 (maxCell.height()+4)*numRows()+2*frameWidth());
427 } else { 430 } else {
428 return QSize(-1, -1); 431 return QSize(-1, -1);
429 } 432 }
430} 433}
431 434
432KDateInternalMonthPicker::KDateInternalMonthPicker 435KDateInternalMonthPicker::KDateInternalMonthPicker
433(int fontsize, QWidget* parent, const char* name) 436(int fontsize, QWidget* parent, const char* name)
434 : QGridView(parent, name), 437 : QGridView(parent, name),
435 result(0) // invalid 438 result(0) // invalid
436{ 439{
437 QRect rect; 440 QRect rect;
438 QFont font; 441 QFont font;
439 // ----- 442 // -----
440 activeCol = -1; 443 activeCol = -1;
441 activeRow = -1; 444 activeRow = -1;
442 font=KGlobalSettings::generalFont(); 445 font=KGlobalSettings::generalFont();
443 font.setPointSize(fontsize); 446 font.setPointSize(fontsize);
444 setFont(font); 447 setFont(font);
445 setHScrollBarMode(AlwaysOff); 448 setHScrollBarMode(AlwaysOff);
446 setVScrollBarMode(AlwaysOff); 449 setVScrollBarMode(AlwaysOff);
447 setFrameStyle(QFrame::NoFrame); 450 setFrameStyle(QFrame::NoFrame);
448 setNumRows(4); 451 setNumRows(4);
449 setNumCols(3); 452 setNumCols(3);
450 // enable to find drawing failures: 453 // enable to find drawing failures:
451 // setTableFlags(Tbl_clipCellPainting); 454 // setTableFlags(Tbl_clipCellPainting);
452#if 0 455#if 0
453 viewport()->setEraseColor(lightGray); // for consistency with the datepicker 456 viewport()->setEraseColor(lightGray); // for consistency with the datepicker
454#endif 457#endif
455 // ----- find the preferred size 458 // ----- find the preferred size
456 // (this is slow, possibly, but unfortunatly it is needed here): 459 // (this is slow, possibly, but unfortunatly it is needed here):
457 QFontMetrics metrics(font); 460 QFontMetrics metrics(font);
458 for(int i=1; i <= 12; ++i) 461 for(int i=1; i <= 12; ++i)
459 { 462 {
460 rect=metrics.boundingRect(KGlobal::locale()->monthName(i, false)); 463 rect=metrics.boundingRect(KGlobal::locale()->monthName(i, false));
461 if(max.width()<rect.width()) max.setWidth(rect.width()); 464 if(max.width()<rect.width()) max.setWidth(rect.width());
462 if(max.height()<rect.height()) max.setHeight(rect.height()); 465 if(max.height()<rect.height()) max.setHeight(rect.height());
463 } 466 }
464 467
465} 468}
466 469
467QSize 470QSize
468KDateInternalMonthPicker::sizeHint() const 471KDateInternalMonthPicker::sizeHint() const
469{ 472{
470 return QSize((max.width()+6)*numCols()+2*frameWidth(), 473 return QSize((max.width()+6)*numCols()+2*frameWidth(),
471 (max.height()+6)*numRows()+2*frameWidth()); 474 (max.height()+6)*numRows()+2*frameWidth());
472} 475}
473 476
474int 477int
475KDateInternalMonthPicker::getResult() const 478KDateInternalMonthPicker::getResult() const
476{ 479{
477 return result; 480 return result;
478} 481}
479 482
480void 483void
481KDateInternalMonthPicker::setupPainter(QPainter *p) 484KDateInternalMonthPicker::setupPainter(QPainter *p)
482{ 485{
483 p->setPen(black); 486 p->setPen(black);
484} 487}
485 488
486void 489void
487KDateInternalMonthPicker::viewportResizeEvent(QResizeEvent*) 490KDateInternalMonthPicker::viewportResizeEvent(QResizeEvent*)
488{ 491{
489 setCellWidth(width()/3); 492 setCellWidth(width()/3);
490 setCellHeight(height()/4); 493 setCellHeight(height()/4);
491} 494}
492 495
493void 496void
494KDateInternalMonthPicker::paintCell(QPainter* painter, int row, int col) 497KDateInternalMonthPicker::paintCell(QPainter* painter, int row, int col)
495{ 498{
496 int index; 499 int index;
497 QString text; 500 QString text;
498 // ----- find the number of the cell: 501 // ----- find the number of the cell:
499 index=3*row+col+1; 502 index=3*row+col+1;
500 text=KGlobal::locale()->monthName(index, false); 503 text=KGlobal::locale()->monthName(index, false);
501 painter->drawText(0, 0, cellWidth(), cellHeight(), AlignCenter, text); 504 painter->drawText(0, 0, cellWidth(), cellHeight(), AlignCenter, text);
502 if ( activeCol == col && activeRow == row ) 505 if ( activeCol == col && activeRow == row )
503 painter->drawRect( 0, 0, cellWidth(), cellHeight() ); 506 painter->drawRect( 0, 0, cellWidth(), cellHeight() );
504} 507}
505 508
506void 509void
507KDateInternalMonthPicker::contentsMousePressEvent(QMouseEvent *e) 510KDateInternalMonthPicker::contentsMousePressEvent(QMouseEvent *e)
508{ 511{
509 if(!isEnabled() || e->button() != LeftButton) 512 if(!isEnabled() || e->button() != LeftButton)
510 { 513 {
511 KNotifyClient::beep(); 514 KNotifyClient::beep();
512 return; 515 return;
513 } 516 }
514 // ----- 517 // -----
515 int row, col; 518 int row, col;
516 QPoint mouseCoord; 519 QPoint mouseCoord;
517 // ----- 520 // -----
518 mouseCoord = e->pos(); 521 mouseCoord = e->pos();
519 row=rowAt(mouseCoord.y()); 522 row=rowAt(mouseCoord.y());
520 col=columnAt(mouseCoord.x()); 523 col=columnAt(mouseCoord.x());
521 524
522 if(row<0 || col<0) 525 if(row<0 || col<0)
523 { // the user clicked on the frame of the table 526 { // the user clicked on the frame of the table
524 activeCol = -1; 527 activeCol = -1;
525 activeRow = -1; 528 activeRow = -1;
526 } else { 529 } else {
527 activeCol = col; 530 activeCol = col;
528 activeRow = row; 531 activeRow = row;
529 updateCell( row, col /*, false */ ); 532 updateCell( row, col /*, false */ );
530 } 533 }
531} 534}
532 535
533void 536void
534KDateInternalMonthPicker::contentsMouseMoveEvent(QMouseEvent *e) 537KDateInternalMonthPicker::contentsMouseMoveEvent(QMouseEvent *e)
535{ 538{
536 if (e->state() & LeftButton) 539 if (e->state() & LeftButton)
537 { 540 {
538 int row, col; 541 int row, col;
539 QPoint mouseCoord; 542 QPoint mouseCoord;
540 // ----- 543 // -----
541 mouseCoord = e->pos(); 544 mouseCoord = e->pos();
542 row=rowAt(mouseCoord.y()); 545 row=rowAt(mouseCoord.y());
543 col=columnAt(mouseCoord.x()); 546 col=columnAt(mouseCoord.x());
544 int tmpRow = -1, tmpCol = -1; 547 int tmpRow = -1, tmpCol = -1;
545 if(row<0 || col<0) 548 if(row<0 || col<0)
546 { // the user clicked on the frame of the table 549 { // the user clicked on the frame of the table
547 if ( activeCol > -1 ) 550 if ( activeCol > -1 )
548 { 551 {
549 tmpRow = activeRow; 552 tmpRow = activeRow;
550 tmpCol = activeCol; 553 tmpCol = activeCol;
551 } 554 }
552 activeCol = -1; 555 activeCol = -1;
553 activeRow = -1; 556 activeRow = -1;
554 } else { 557 } else {
555 bool differentCell = (activeRow != row || activeCol != col); 558 bool differentCell = (activeRow != row || activeCol != col);
556 if ( activeCol > -1 && differentCell) 559 if ( activeCol > -1 && differentCell)
557 { 560 {
558 tmpRow = activeRow; 561 tmpRow = activeRow;
559 tmpCol = activeCol; 562 tmpCol = activeCol;
560 } 563 }
561 if ( differentCell) 564 if ( differentCell)
562 { 565 {
563 activeRow = row; 566 activeRow = row;
564 activeCol = col; 567 activeCol = col;
565 updateCell( row, col /*, false */ ); // mark the new active cell 568 updateCell( row, col /*, false */ ); // mark the new active cell
566 } 569 }
567 } 570 }
568 if ( tmpRow > -1 ) // repaint the former active cell 571 if ( tmpRow > -1 ) // repaint the former active cell
569 updateCell( tmpRow, tmpCol /*, true */ ); 572 updateCell( tmpRow, tmpCol /*, true */ );
570 } 573 }
571} 574}
572 575
573void 576void
574KDateInternalMonthPicker::contentsMouseReleaseEvent(QMouseEvent *e) 577KDateInternalMonthPicker::contentsMouseReleaseEvent(QMouseEvent *e)
575{ 578{
576 if(!isEnabled()) 579 if(!isEnabled())
577 { 580 {
578 return; 581 return;
579 } 582 }
580 // ----- 583 // -----
581 int row, col, pos; 584 int row, col, pos;
582 QPoint mouseCoord; 585 QPoint mouseCoord;
583 // ----- 586 // -----
584 mouseCoord = e->pos(); 587 mouseCoord = e->pos();
585 row=rowAt(mouseCoord.y()); 588 row=rowAt(mouseCoord.y());
586 col=columnAt(mouseCoord.x()); 589 col=columnAt(mouseCoord.x());
587 if(row<0 || col<0) 590 if(row<0 || col<0)
588 { // the user clicked on the frame of the table 591 { // the user clicked on the frame of the table
589 emit(closeMe(0)); 592 emit(closeMe(0));
590 } 593 }
591 pos=3*row+col+1; 594 pos=3*row+col+1;
592 result=pos; 595 result=pos;
593 emit(closeMe(1)); 596 emit(closeMe(1));
594} 597}
595 598
596 599
597 600
598KDateInternalYearSelector::KDateInternalYearSelector 601KDateInternalYearSelector::KDateInternalYearSelector
599(int fontsize, QWidget* parent, const char* name) 602(int fontsize, QWidget* parent, const char* name)
600 : QLineEdit(parent, name), 603 : QLineEdit(parent, name),
601 val(new QIntValidator(this)), 604 val(new QIntValidator(this)),
602 result(0) 605 result(0)
603{ 606{
604 QFont font; 607 QFont font;
605 // ----- 608 // -----
606 font=KGlobalSettings::generalFont(); 609 font=KGlobalSettings::generalFont();
607 font.setPointSize(fontsize); 610 font.setPointSize(fontsize);
608 setFont(font); 611 setFont(font);
609#if 0 612#if 0
610 setFrameStyle(QFrame::NoFrame); 613 setFrameStyle(QFrame::NoFrame);
611#endif 614#endif
612 // we have to respect the limits of QDate here, I fear: 615 // we have to respect the limits of QDate here, I fear:
613 val->setRange(0, 8000); 616 val->setRange(0, 8000);
614 setValidator(val); 617 setValidator(val);
615 connect(this, SIGNAL(returnPressed()), SLOT(yearEnteredSlot())); 618 connect(this, SIGNAL(returnPressed()), SLOT(yearEnteredSlot()));
616} 619}
617 620
618void 621void
619KDateInternalYearSelector::yearEnteredSlot() 622KDateInternalYearSelector::yearEnteredSlot()
620{ 623{
621 bool ok; 624 bool ok;
622 int year; 625 int year;
623 QDate date; 626 QDate date;
624 // ----- check if this is a valid year: 627 // ----- check if this is a valid year:
625 year=text().toInt(&ok); 628 year=text().toInt(&ok);
626 if(!ok) 629 if(!ok)
627 { 630 {
628 KNotifyClient::beep(); 631 KNotifyClient::beep();
629 return; 632 return;
630 } 633 }
631 date.setYMD(year, 1, 1); 634 date.setYMD(year, 1, 1);
632 if(!date.isValid()) 635 if(!date.isValid())
633 { 636 {
634 KNotifyClient::beep(); 637 KNotifyClient::beep();
635 return; 638 return;
636 } 639 }
637 result=year; 640 result=year;
638 emit(closeMe(1)); 641 emit(closeMe(1));
639} 642}
640 643
641int 644int
642KDateInternalYearSelector::getYear() 645KDateInternalYearSelector::getYear()
643{ 646{
644 return result; 647 return result;
645} 648}
646 649
647void 650void
648KDateInternalYearSelector::setYear(int year) 651KDateInternalYearSelector::setYear(int year)
649{ 652{
650 QString temp; 653 QString temp;
651 // ----- 654 // -----
652 temp.setNum(year); 655 temp.setNum(year);
653 setText(temp); 656 setText(temp);
654} 657}
655 658
656KPopupFrame::KPopupFrame(QWidget* parent, const char* name) 659KPopupFrame::KPopupFrame(QWidget* parent, const char* name)
657 : QFrame(parent, name, WType_Popup), 660 : QFrame(parent, name, WType_Popup),
658 result(0), // rejected 661 result(0), // rejected
659 main(0) 662 main(0)
660{ 663{
661 setFrameStyle(QFrame::Box|QFrame::Raised); 664 setFrameStyle(QFrame::Box|QFrame::Raised);
662 setMidLineWidth(2); 665 setMidLineWidth(2);
663} 666}
664 667
665void 668void
666KPopupFrame::keyPressEvent(QKeyEvent* e) 669KPopupFrame::keyPressEvent(QKeyEvent* e)
667{ 670{
668 if(e->key()==Key_Escape) 671 if(e->key()==Key_Escape)
669 { 672 {
670 result=0; // rejected 673 result=0; // rejected
671 qApp->exit_loop(); 674 qApp->exit_loop();
672 } 675 }
673} 676}
674 677
675void 678void
676KPopupFrame::close(int r) 679KPopupFrame::close(int r)
677{ 680{
678 result=r; 681 result=r;
679 qApp->exit_loop(); 682 qApp->exit_loop();
680} 683}
681 684
682void 685void
683KPopupFrame::setMainWidget(QWidget* m) 686KPopupFrame::setMainWidget(QWidget* m)
684{ 687{
685 main=m; 688 main=m;
686 if(main!=0) 689 if(main!=0)
687 { 690 {
688 resize(main->width()+2*frameWidth(), main->height()+2*frameWidth()); 691 resize(main->width()+2*frameWidth(), main->height()+2*frameWidth());
689 } 692 }
690} 693}
691 694
692void 695void
693KPopupFrame::resizeEvent(QResizeEvent*) 696KPopupFrame::resizeEvent(QResizeEvent*)
694{ 697{
695 if(main!=0) 698 if(main!=0)
696 { 699 {
697 main->setGeometry(frameWidth(), frameWidth(), 700 main->setGeometry(frameWidth(), frameWidth(),
698 width()-2*frameWidth(), height()-2*frameWidth()); 701 width()-2*frameWidth(), height()-2*frameWidth());
699 } 702 }
700} 703}
701 704
702void 705void
703KPopupFrame::popup(const QPoint &pos) 706KPopupFrame::popup(const QPoint &pos)
704{ 707{
705 // Make sure the whole popup is visible. 708 // Make sure the whole popup is visible.
706 QRect d = QApplication::desktop()->frameGeometry(); 709 QRect d = QApplication::desktop()->frameGeometry();
707 int x = pos.x(); 710 int x = pos.x();
708 int y = pos.y(); 711 int y = pos.y();
709 int w = width(); 712 int w = width();
710 int h = height(); 713 int h = height();
711 if (x+w > d.x()+d.width()) 714 if (x+w > d.x()+d.width())
712 x = d.width() - w; 715 x = d.width() - w;
713 if (y+h > d.y()+d.height()) 716 if (y+h > d.y()+d.height())
714 y = d.height() - h; 717 y = d.height() - h;
715 if (x < d.x()) 718 if (x < d.x())
716 x = 0; 719 x = 0;
717 if (y < d.y()) 720 if (y < d.y())
718 y = 0; 721 y = 0;
719 722
720 // Pop the thingy up. 723 // Pop the thingy up.
721 move(x, y); 724 move(x, y);
722 show(); 725 show();
723} 726}
724 727
725int 728int
726KPopupFrame::exec(QPoint pos) 729KPopupFrame::exec(QPoint pos)
727{ 730{
728 popup(pos); 731 popup(pos);
729 repaint(); 732 repaint();
730 qApp->enter_loop(); 733 qApp->enter_loop();
731 hide(); 734 hide();
732 return result; 735 return result;
733} 736}
734 737
735int 738int
736KPopupFrame::exec(int x, int y) 739KPopupFrame::exec(int x, int y)
737{ 740{
738 return exec(QPoint(x, y)); 741 return exec(QPoint(x, y));
739} 742}
740 743
741void KPopupFrame::virtual_hook( int, void* ) 744void KPopupFrame::virtual_hook( int, void* )
742{ /*BASE::virtual_hook( id, data );*/ } 745{ /*BASE::virtual_hook( id, data );*/ }
743 746
744void KDateTable::virtual_hook( int, void* ) 747void KDateTable::virtual_hook( int, void* )
745{ /*BASE::virtual_hook( id, data );*/ } 748{ /*BASE::virtual_hook( id, data );*/ }
746 749
747//#include "kdatetbl.moc" 750//#include "kdatetbl.moc"