summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt3
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt5
-rw-r--r--kaddressbook/kabcore.cpp2
-rw-r--r--kmicromail/composemail.cpp14
-rw-r--r--kmicromail/opiemail.cpp33
-rw-r--r--kmicromail/opiemail.h5
-rw-r--r--korganizer/koeventviewer.cpp56
-rw-r--r--korganizer/koeventviewer.h3
-rw-r--r--libkdepim/externalapphandler.cpp1
9 files changed, 114 insertions, 8 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 8af7da2..e24ee43 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,895 +1,898 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 2.0.3 ************ 3********** VERSION 2.0.3 ************
4 4
5KO/Pi: 5KO/Pi:
6Added feature for changing alarm settings for many items at once: 6Added feature for changing alarm settings for many items at once:
7Open list view (or search dialog), select the desired items and choose in 7Open list view (or search dialog), select the desired items and choose in
8the popup menu: Set alarm for selected... 8the popup menu: Set alarm for selected...
9 9
10Added to the event/todo viewer the option to send an email to
11all attendees or all selected (with RSVP) attendees.
12
10********** VERSION 2.0.2 ************ 13********** VERSION 2.0.2 ************
11 14
12KO/Pi: 15KO/Pi:
13Fixed the layout problem of the day label buttons 16Fixed the layout problem of the day label buttons
14of the agenda view introduced in version 2.0.1. 17of the agenda view introduced in version 2.0.1.
15 18
16Added WhatsThis support for the todo view and the list view. 19Added WhatsThis support for the todo view and the list view.
17 20
18Added a quite useful feature to the montview. 21Added a quite useful feature to the montview.
19Just click on the week numbers on the left. 22Just click on the week numbers on the left.
20And in the top right corner of month view/agenda view 23And in the top right corner of month view/agenda view
21there is now a "week number quick selector". 24there is now a "week number quick selector".
22(Click on the black triangle). 25(Click on the black triangle).
23 26
24Made the quite difficult timezone change in KO/Pi easy. 27Made the quite difficult timezone change in KO/Pi easy.
25 28
26OM/Pi: 29OM/Pi:
27Fixed too small icons on desktop. 30Fixed too small icons on desktop.
28Fixed non visible icons in mainwindow on Z with fastload enabled. 31Fixed non visible icons in mainwindow on Z with fastload enabled.
29Added signature file setting to smtp account config. 32Added signature file setting to smtp account config.
30And the signature can be edited and saved in the edit mail dialog. 33And the signature can be edited and saved in the edit mail dialog.
31That does mean: 34That does mean:
32Simply edit the signature for the selected smtp account in the 35Simply edit the signature for the selected smtp account in the
33edit new mail dialog and press the "save signature" button there. 36edit new mail dialog and press the "save signature" button there.
34Then the signature is saved to the file specified in the smtp account settings. 37Then the signature is saved to the file specified in the smtp account settings.
35If there is no file specified, it is saved automatically to the file 38If there is no file specified, it is saved automatically to the file
36kdepim/apps/kopiemail/<accountname>.sig. 39kdepim/apps/kopiemail/<accountname>.sig.
37 40
38 41
39 42
40********** VERSION 2.0.1 ************ 43********** VERSION 2.0.1 ************
41 44
42Oooops ... I forgot to test on the Zaurus 5500 ... 45Oooops ... I forgot to test on the Zaurus 5500 ...
43 46
44Fixed many problems of new (english) strings (and german translations) 47Fixed many problems of new (english) strings (and german translations)
45introduced in the latest versions, where the text was not fitting on the 48introduced in the latest versions, where the text was not fitting on the
46240x320 display of the Zaurus 5500. 49240x320 display of the Zaurus 5500.
47 50
48KO/Pi: 51KO/Pi:
49Added a popup menu ( press pen and hold to get popup ) to the agenda view 52Added a popup menu ( press pen and hold to get popup ) to the agenda view
50with many useful items (add event/todo, show next week, two weeks, month, journal). 53with many useful items (add event/todo, show next week, two weeks, month, journal).
51 54
52Added items to the todolist popup menu for: 55Added items to the todolist popup menu for:
53Display all opened, all closed or all todos flat. 56Display all opened, all closed or all todos flat.
54The "flat" view makes is possible to sort all todos after ,e.g., prio or date. 57The "flat" view makes is possible to sort all todos after ,e.g., prio or date.
55Made the reparenting of todos on the desktop possible via Drag&Drop. 58Made the reparenting of todos on the desktop possible via Drag&Drop.
56Fixed several bugs in setting the completed datetime for todos. 59Fixed several bugs in setting the completed datetime for todos.
57Added info about completed datetime of todos to the todo viewer. 60Added info about completed datetime of todos to the todo viewer.
58Now displaying a completed todo (with completed datetime set) in the agenda view 61Now displaying a completed todo (with completed datetime set) in the agenda view
59at the time of the completion. Such that now it is possible to see in the agenda view 62at the time of the completion. Such that now it is possible to see in the agenda view
60when what todo was completed. 63when what todo was completed.
61Fixed behaviour of automatic setting completion of todos with sub-todos/parent todos. 64Fixed behaviour of automatic setting completion of todos with sub-todos/parent todos.
62Now the behaviour is: 65Now the behaviour is:
63Setting a parent to complete sets all (sub)childs to complete. 66Setting a parent to complete sets all (sub)childs to complete.
64Setting a parent to uncomplete does not change the childs. 67Setting a parent to uncomplete does not change the childs.
65Setting a child to uncomplete sets all parent to uncomplete. 68Setting a child to uncomplete sets all parent to uncomplete.
66Setting a child to complete does not change the parents. 69Setting a child to complete does not change the parents.
67 70
68Smart updating and double buffering of the daymatrix. 71Smart updating and double buffering of the daymatrix.
69Showing holidays in the day matrix. 72Showing holidays in the day matrix.
70Many other small performance updates. 73Many other small performance updates.
71 74
72Made day labels in agenda clickable. By clicking a label, the day is displayed in single day mode. 75Made day labels in agenda clickable. By clicking a label, the day is displayed in single day mode.
73 76
74Now the translation file usertranslation.txt is supposed to be in utf8 format. 77Now the translation file usertranslation.txt is supposed to be in utf8 format.
75If you want to translate a language from western europe, just change the germantranslation.txt file. Please read the updated Usertranslation HowTo in KO/Pi Help menu. 78If you want to translate a language from western europe, just change the germantranslation.txt file. Please read the updated Usertranslation HowTo in KO/Pi Help menu.
76 79
77 80
78********** VERSION 2.0.0 ************ 81********** VERSION 2.0.0 ************
79 82
80Stable release 2.0.0! 83Stable release 2.0.0!
81 84
82KO/Pi: 85KO/Pi:
83Fixed problem in edit dialog recreation at startup. 86Fixed problem in edit dialog recreation at startup.
84Made "toggle view*" menu items enabled context sensitive. 87Made "toggle view*" menu items enabled context sensitive.
85Changed agenda size menu to items 1-10. 88Changed agenda size menu to items 1-10.
86Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down. 89Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down.
87Usebility enhancements in the KO/Pi menus. 90Usebility enhancements in the KO/Pi menus.
88Birthday import now adds year to summary. 91Birthday import now adds year to summary.
89What's Next view shows age in years for birthday. 92What's Next view shows age in years for birthday.
90 93
91OM/Pi: 94OM/Pi:
92Added three info lines to display subject, from and to of selected mails. 95Added three info lines to display subject, from and to of selected mails.
93 96
94KA/Pi: 97KA/Pi:
95Fixed jump bar behaviour on Zaurus. 98Fixed jump bar behaviour on Zaurus.
96Now KA/Pi search field supports searching for a range of starting characters. 99Now KA/Pi search field supports searching for a range of starting characters.
97E.g. to search for all contact beginning with b to n, type 100E.g. to search for all contact beginning with b to n, type
98b-n 101b-n
99in the search field. 102in the search field.
100 103
101********** VERSION 1.9.20 ************ 104********** VERSION 1.9.20 ************
102 105
103KO/Pi: 106KO/Pi:
104Added for the "dislplay one day" agenda mode 107Added for the "dislplay one day" agenda mode
105info in the caption and in the day lables: 108info in the caption and in the day lables:
106Now it is displayed, if the selected day is from "day before yesterday" 109Now it is displayed, if the selected day is from "day before yesterday"
107to "day after tomorrow". 110to "day after tomorrow".
108Made it possible to delete a Todo, which has sub-todos. 111Made it possible to delete a Todo, which has sub-todos.
109Fixed two small problems in the todo view. 112Fixed two small problems in the todo view.
110Added missing German translation for filter edit and print dialog. 113Added missing German translation for filter edit and print dialog.
111Made search dialog closeable by cancel key. 114Made search dialog closeable by cancel key.
112 115
113Made it possible to select in the date picker the (ligt grey ) 116Made it possible to select in the date picker the (ligt grey )
114dates of the prev./next month with the mouse. 117dates of the prev./next month with the mouse.
115 118
116OM/Pi: 119OM/Pi:
117"Delete mail" icon in main window now deletes all selected mails. 120"Delete mail" icon in main window now deletes all selected mails.
118Fixed the problem, that the state flag of imap mails was ignored. 121Fixed the problem, that the state flag of imap mails was ignored.
119Now mails with "FLAG_SEEN" on the imap server get no icon in the list view 122Now mails with "FLAG_SEEN" on the imap server get no icon in the list view
120to indecate that they are already seen. 123to indecate that they are already seen.
121Fixed the problem that the body of some mails was not displayed in the 124Fixed the problem that the body of some mails was not displayed in the
122mail viewer when fetching them from the imap server directly to read them. 125mail viewer when fetching them from the imap server directly to read them.
123Made it (configurable) possible to show the "To:" field in the list view. 126Made it (configurable) possible to show the "To:" field in the list view.
124Added to the mail viewer the option "View Source" to make it possible to see the raw mail data. 127Added to the mail viewer the option "View Source" to make it possible to see the raw mail data.
125Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the 128Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the
126local storage folder (specified in account settings) of the account of the mail. 129local storage folder (specified in account settings) of the account of the mail.
127Removed some memory leaks in OM/Pi. 130Removed some memory leaks in OM/Pi.
128 131
129 132
130********** VERSION 1.9.19 ************ 133********** VERSION 1.9.19 ************
131 134
132Added a lot of missing translations to KA/Pi, 135Added a lot of missing translations to KA/Pi,
133Added some missing translations to KO/Pi and OM/Pi. 136Added some missing translations to KO/Pi and OM/Pi.
134 137
135Fixed some minor problems in KA/Pi + KO/Pi. 138Fixed some minor problems in KA/Pi + KO/Pi.
136 139
137Fixed a crash when closing PwM/Pi. 140Fixed a crash when closing PwM/Pi.
138Added German translation for PwM/Pi. 141Added German translation for PwM/Pi.
139 142
140Made view change and Month View update faster in KO/Pi. 143Made view change and Month View update faster in KO/Pi.
141 144
142 145
143********** VERSION 1.9.18 ************ 146********** VERSION 1.9.18 ************
144 147
145FYI: The VERSION 1.9.17 was a testing release only. 148FYI: The VERSION 1.9.17 was a testing release only.
146Please read the changelog of VERSION 1.9.17 as well. 149Please read the changelog of VERSION 1.9.17 as well.
147 150
148Cleaned up the syncing config dialog. 151Cleaned up the syncing config dialog.
149Added sync config options for date range for events. 152Added sync config options for date range for events.
150Added sync config options for filters on incoming data. 153Added sync config options for filters on incoming data.
151Added sync config options for filters on outgoing data. 154Added sync config options for filters on outgoing data.
152Please read the updated SyncHowTo about the new filter settings. 155Please read the updated SyncHowTo about the new filter settings.
153These filter settings make it now possible to sync with shared 156These filter settings make it now possible to sync with shared
154calendars without writing back private or confidential data 157calendars without writing back private or confidential data
155(via the outgoing filters). 158(via the outgoing filters).
156To sync only with particular parts of a shared calendar, 159To sync only with particular parts of a shared calendar,
157the incoming filter settings can be used. 160the incoming filter settings can be used.
158An example can be found in the SyncHowTo. 161An example can be found in the SyncHowTo.
159Same for shared addressbooks. 162Same for shared addressbooks.
160 163
161Added a setting for the global kdepim data storage. 164Added a setting for the global kdepim data storage.
162Usually the data is stored in (yourhomedir/kdepim). 165Usually the data is stored in (yourhomedir/kdepim).
163Now you can set in the Global config dialog TAB, subTAB "Data storage path" 166Now you can set in the Global config dialog TAB, subTAB "Data storage path"
164a directory where all the kdepim data is stored. 167a directory where all the kdepim data is stored.
165That makes it easy to save all kdepim data on a SD card on the Z, for example. 168That makes it easy to save all kdepim data on a SD card on the Z, for example.
166 169
167KO/Pi: 170KO/Pi:
168The timeedit input has a pulldown list for times. 171The timeedit input has a pulldown list for times.
169If opened, this pulldown list should now has the right time highlighted. 172If opened, this pulldown list should now has the right time highlighted.
170Added the possibility to exclude events/todos/journals in a filter. 173Added the possibility to exclude events/todos/journals in a filter.
171You should exclude journals, if you do not want them to sync with a public calendar. 174You should exclude journals, if you do not want them to sync with a public calendar.
172 175
173KA/Pi: 176KA/Pi:
174Added the possibility to in/exclude public/private/confidential contacts to a filter. 177Added the possibility to in/exclude public/private/confidential contacts to a filter.
175If 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 ... 178If 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 ...
176Added printing of card view and details view on desktop. 179Added printing of card view and details view on desktop.
177Printing of list view is not working... 180Printing of list view is not working...
178Added button for removing pictures in contact editor. 181Added button for removing pictures in contact editor.
179Parsing data fix of KA/Pi version 1.9.17. 182Parsing data fix of KA/Pi version 1.9.17.
180Fixed the "parse name automatically" problem of KA/Pi version 1.9.17. 183Fixed the "parse name automatically" problem of KA/Pi version 1.9.17.
181Fixed some syncing merging problems. 184Fixed some syncing merging problems.
182 185
183 186
184********** VERSION 1.9.17 ************ 187********** VERSION 1.9.17 ************
185 188
186KO/Pi: 189KO/Pi:
187Fixed that tooltips were not updated after moving an item in agenda view. 190Fixed that tooltips were not updated after moving an item in agenda view.
188Fixed a bug in sorting start date for recurring events in list view. 191Fixed a bug in sorting start date for recurring events in list view.
189Changed the left button in todo viewer from "Agenda" to "Set completed". 192Changed the left button in todo viewer from "Agenda" to "Set completed".
190This 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. 193This 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.
191Added more info in the todo viewer: Startdate, parent/sub todos. 194Added more info in the todo viewer: Startdate, parent/sub todos.
192 195
193 196
194KA/Pi: 197KA/Pi:
195All fields search does now actually search all the (possible) fields, 198All fields search does now actually search all the (possible) fields,
196not only those listed in the contact list. 199not only those listed in the contact list.
197Made is possible to inline a picture in a vcard on the Z. 200Made is possible to inline a picture in a vcard on the Z.
198This was only possible on the desktop, now is it possible on the Z as well. 201This was only possible on the desktop, now is it possible on the Z as well.
199Fixed of missing save settings after filter configuration. 202Fixed of missing save settings after filter configuration.
200Made saving of addressbook much faster. 203Made saving of addressbook much faster.
201Fixed extension widget layout problem. 204Fixed extension widget layout problem.
202Fixed saving of default formatted name settings. 205Fixed saving of default formatted name settings.
203Fixed formatted name handling in edit dialog. 206Fixed formatted name handling in edit dialog.
204Added an option for changing formatted names of many contacts 207Added an option for changing formatted names of many contacts
205(menu: File - Change - Set formatted name). 208(menu: File - Change - Set formatted name).
206 209
207QWhatsThis was not working on the Z ( only black rectangle was shown). 210QWhatsThis was not working on the Z ( only black rectangle was shown).
208This is Fixed. 211This is Fixed.
209 212
210KDE-Sync: 213KDE-Sync:
211Now readonly KDE resources are synced as well. 214Now readonly KDE resources are synced as well.
212(They are not changed in KDE itself, of course). 215(They are not changed in KDE itself, of course).
213 216
214 217
215 218
216********** VERSION 1.9.16 ************ 219********** VERSION 1.9.16 ************
217 220
218KO/Pi: 221KO/Pi:
219Fixed search dialog size on Z 6000 (480x640 display). 222Fixed search dialog size on Z 6000 (480x640 display).
220Added setting to hide/show time in agenda items. 223Added setting to hide/show time in agenda items.
221Added setting to hide not running todos in todo view. 224Added setting to hide not running todos in todo view.
222Added columns for start date/time in todo view. 225Added columns for start date/time in todo view.
223Replaced the solid half-hour lines in agenda view by dot lines. 226Replaced the solid half-hour lines in agenda view by dot lines.
224Added possibility of printing the What's Next View on the desktop 227Added possibility of printing the What's Next View on the desktop
225(i.e. Windows and Linux). 228(i.e. Windows and Linux).
226Fixed a crash in KO/Pi when starting KO/Pi with What's Next view. 229Fixed a crash in KO/Pi when starting KO/Pi with What's Next view.
227Added tooltips in month view.(Tooltips only available on desktop) 230Added tooltips in month view.(Tooltips only available on desktop)
228 231
229Fixed a strange problem in KO/Pi alarm applet. 232Fixed a strange problem in KO/Pi alarm applet.
230Did not find the actual problem, 233Did not find the actual problem,
231such that now Qtopia reboots again if deinstalling the alarm applet. 234such that now Qtopia reboots again if deinstalling the alarm applet.
232But the alarm applet should work again. 235But the alarm applet should work again.
233 236
234KA/Pi: 237KA/Pi:
235Fixed the problem, that internal pictures were not saved. 238Fixed the problem, that internal pictures were not saved.
236 239
237Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes. 240Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes.
238 241
239Fixed some minor problems. (Like word wrap in help text windows). 242Fixed some minor problems. (Like word wrap in help text windows).
240 243
241Fixed a compiling problem in microkde/kresources. 244Fixed a compiling problem in microkde/kresources.
242 245
243KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM. 246KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM.
244This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9) 247This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9)
245such that now syncing KO/Pi with Sharp DTM should work on the 248such that now syncing KO/Pi with Sharp DTM should work on the
246Zaurus C 3000 model. 249Zaurus C 3000 model.
247 250
248********** VERSION 1.9.15 ************ 251********** VERSION 1.9.15 ************
249 252
250Usebilty enhancements in KO/Pi: 253Usebilty enhancements in KO/Pi:
251When clicking on the date in a month view cell, the day view is shown. 254When clicking on the date in a month view cell, the day view is shown.
252Old behaviour was, that the "new event" dialog popped up. 255Old behaviour was, that the "new event" dialog popped up.
253 256
254Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu). 257Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu).
255That means, you can restore the latest 258That means, you can restore the latest
256event/todo/journal you have deleted. 259event/todo/journal you have deleted.
257A journal is deleted, if you clear all the text of the journal. 260A journal is deleted, if you clear all the text of the journal.
258 261
259Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14. 262Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14.
260 263
261KA/Pi starting in 480x640 resolution: 264KA/Pi starting in 480x640 resolution:
262Hide the filter action in toolbar 265Hide the filter action in toolbar
263and added icons for undo/delete/redo in toolbar. 266and added icons for undo/delete/redo in toolbar.
264 267
265Change in OM/Pi ViewMail dialog: 268Change in OM/Pi ViewMail dialog:
266When clicking on the "delete" icon the mail is deleted after confirmation as usual. 269When clicking on the "delete" icon the mail is deleted after confirmation as usual.
267But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any). 270But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any).
268 271
269Fixed a crash when deleting mail-accounts in OM/Pi. 272Fixed a crash when deleting mail-accounts in OM/Pi.
270 273
271 274
272********** VERSION 1.9.14 ************ 275********** VERSION 1.9.14 ************
273 276
274Fixed some problems with the dialog sizes when switching 277Fixed some problems with the dialog sizes when switching
275portrait/landscape mode on 640x480 PDA display. 278portrait/landscape mode on 640x480 PDA display.
276 279
277Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi. 280Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi.
278 281
279Fixed an ugly bug in KOpieMail: 282Fixed an ugly bug in KOpieMail:
280KOpieMail was not able to write files (mails) to MSDOS file system, 283KOpieMail was not able to write files (mails) to MSDOS file system,
281like on an usual preformatted SD card. That should work now. 284like on an usual preformatted SD card. That should work now.
282To save your mail data on the Sd card do the following: 285To save your mail data on the Sd card do the following:
283Create a dir on the SD card: 286Create a dir on the SD card:
284mkdir /mnt/card/localmail 287mkdir /mnt/card/localmail
285Go to your home dir: 288Go to your home dir:
286cd 289cd
287Go to kopiemail data storage dir: 290Go to kopiemail data storage dir:
288cd kdepim/apps/kopiemail 291cd kdepim/apps/kopiemail
289Create a symlink to the SD card: 292Create a symlink to the SD card:
290ls -s /mnt/card/localmail 293ls -s /mnt/card/localmail
291Now KOpieMail will store all mails on the SD card. 294Now KOpieMail will store all mails on the SD card.
292 295
293KO/Pi Monthview: 296KO/Pi Monthview:
294Now "Go to Today" selects the current month from day 1-end, 297Now "Go to Today" selects the current month from day 1-end,
295not the current date + some days. 298not the current date + some days.
296I.e. "Go to Today" shows now always 299I.e. "Go to Today" shows now always
297the current month with first day of month in the first row. 300the current month with first day of month in the first row.
298 301
299Added missing German translation. 302Added missing German translation.
300 303
301Fixed icons of executeable on Wintendo. 304Fixed icons of executeable on Wintendo.
302 305
303Added a "Show next Mail" button to the OM/Pi 306Added a "Show next Mail" button to the OM/Pi
304mail viewer such that the mail below the current mail 307mail viewer such that the mail below the current mail
305in the mail list view of the current folder 308in the mail list view of the current folder
306can be read with a single click. 309can be read with a single click.
307 310
308 311
309********** VERSION 1.9.13 ************ 312********** VERSION 1.9.13 ************
310 313
311Fixed nasty PwM/Pi file reading bug, when 314Fixed nasty PwM/Pi file reading bug, when
312the used hash algo of file is different then the global 315the used hash algo of file is different then the global
313hash algo. 316hash algo.
314 317
315Added KA/Pi support for opie mailit mailapplication. 318Added KA/Pi support for opie mailit mailapplication.
316 319
317Fixed some bugs in OM/Pi. 320Fixed some bugs in OM/Pi.
318Now character conversion tables are available for the Zaurus 321Now character conversion tables are available for the Zaurus
319to make OM/Pi working properly. 322to make OM/Pi working properly.
320To get the character conversion in OM/Pi working, please download 323To get the character conversion in OM/Pi working, please download
321at the sourceforge project site the package 324at the sourceforge project site the package
322sr-character-conversion_SharpROM_arm.ipk.zip 325sr-character-conversion_SharpROM_arm.ipk.zip
323(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms) 326(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms)
324from the section "general files for KDE/Pim" 327from the section "general files for KDE/Pim"
325Instructions how to install this package are in a ReadMe in this file. 328Instructions how to install this package are in a ReadMe in this file.
326 329
327 330
328Fixed the orientation change problem in KA/Pi when switching 331Fixed the orientation change problem in KA/Pi when switching
329portrait/landscape mode. 332portrait/landscape mode.
330 333
331French translation available for KA/Pi and OM/Pi. 334French translation available for KA/Pi and OM/Pi.
332 335
333Fixed some problems with categories in KO/Pi in DTM sync. 336Fixed some problems with categories in KO/Pi in DTM sync.
334 337
335Added selection dialog for export to phone in KA/Pi. 338Added selection dialog for export to phone in KA/Pi.
336 339
337If in KO/Pi is an attendee selected to add to a meeting and this 340If in KO/Pi is an attendee selected to add to a meeting and this
338attendee is already in the list of attendees, this person is not added 341attendee is already in the list of attendees, this person is not added
339again. 342again.
340 343
341Some menu cleanup in KA/Pi. 344Some menu cleanup in KA/Pi.
342 345
343********** VERSION 1.9.12 ************ 346********** VERSION 1.9.12 ************
344 347
345Fix for the bug in KO/Pi What's Next view of version 1.9.11. 348Fix for the bug in KO/Pi What's Next view of version 1.9.11.
346 349
347Bugfix: Licence file is now shown again. 350Bugfix: Licence file is now shown again.
348 351
349OM/Pi now supports Unicode (utf8 charset). 352OM/Pi now supports Unicode (utf8 charset).
350Fixed some bugs in OM/Pi. 353Fixed some bugs in OM/Pi.
351 354
352KA/Pi has more German translation. 355KA/Pi has more German translation.
353 356
354 357
355********** VERSION 1.9.11 ************ 358********** VERSION 1.9.11 ************
356 359
357Fixed several problems in PWM/Pi, like 360Fixed several problems in PWM/Pi, like
358asking the user, if unsaved changed are pending 361asking the user, if unsaved changed are pending
359when closing the app. 362when closing the app.
360And PwM/Pi handles now different texts for the 363And PwM/Pi handles now different texts for the
361fields Description, Username, Password, configurable per category. 364fields Description, Username, Password, configurable per category.
362 365
363Fixed a crash in KO/Pi , when importing/loading vcs files 366Fixed a crash in KO/Pi , when importing/loading vcs files
364which have an entry with an attendee with state: 367which have an entry with an attendee with state:
365NEEDS ACTION 368NEEDS ACTION
366 369
367Fixed some problems in the German translation of OM/Pi, 370Fixed some problems in the German translation of OM/Pi,
368which makes some dialogs not fitting on the screen 371which makes some dialogs not fitting on the screen
369of the Z 5500. 372of the Z 5500.
370 373
371Fixed Qtopia crash, when disabling/deinstalling 374Fixed Qtopia crash, when disabling/deinstalling
372KO/Pi alarm applet. 375KO/Pi alarm applet.
373 376
374Implemented direct KDE<->KA/Pi sync for KA/Pi running 377Implemented direct KDE<->KA/Pi sync for KA/Pi running
375on Linux desktop. 378on Linux desktop.
376 379
377Added feature "remove sync info" to sync menu. 380Added feature "remove sync info" to sync menu.
378 381
379Tweaked the KO/Pi What's next view a bit, added 382Tweaked the KO/Pi What's next view a bit, added
380setting to hide events that are done. 383setting to hide events that are done.
381 384
382Disabled "beam receive enabled" on startup to 385Disabled "beam receive enabled" on startup to
383avoid problems if Fastload is enabled. 386avoid problems if Fastload is enabled.
384Please set "beam receive enabled", 387Please set "beam receive enabled",
385if you want to receive data via IR. 388if you want to receive data via IR.
386 389
387Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running 390Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running
388on Linux desktop. 391on Linux desktop.
389 392
390Made in KA/Pi scrolling possible, if details view is selected. 393Made in KA/Pi scrolling possible, if details view is selected.
391(The keyboard focus is set automatically to the search line) 394(The keyboard focus is set automatically to the search line)
392 395
393Fixed a bug in DMT sync, that a new entry in DTM was added 396Fixed a bug in DMT sync, that a new entry in DTM was added
394on every sync to Kx/Pi. 397on every sync to Kx/Pi.
395 398
396Fixed missing writing of KA/Pi categories to DMT entries when syncing. 399Fixed missing writing of KA/Pi categories to DMT entries when syncing.
397 400
398Fixed a bug in DMT sync with todos created in KO/Pi containing 401Fixed a bug in DMT sync with todos created in KO/Pi containing
399non-latin1 characters. 402non-latin1 characters.
400 403
401Rearranged package contents of Sharp-ipks and made all 404Rearranged package contents of Sharp-ipks and made all
402packages installable on SD again. 405packages installable on SD again.
403 406
404Fixed the writing of addressbook data in DTM sync. 407Fixed the writing of addressbook data in DTM sync.
405Empty fields in KA/Pi were not removed. 408Empty fields in KA/Pi were not removed.
406 409
407Added better category handling in KA/Pi: 410Added better category handling in KA/Pi:
408Added item 411Added item
409Edit Categories and 412Edit Categories and
410Manage new categories 413Manage new categories
411to the settings menu. 414to the settings menu.
412Possible to configure a view to display categories. 415Possible to configure a view to display categories.
413 416
414Added detailed "KDE Sync Howto" and "Multi Sync Howto" to Help menu. 417Added detailed "KDE Sync Howto" and "Multi Sync Howto" to Help menu.
415 418
416Fixed displaying of "free" days and time in KO Monthview and Agendaview. 419Fixed displaying of "free" days and time in KO Monthview and Agendaview.
417 420
418... and many other bugfixes. 421... and many other bugfixes.
419 422
420********** VERSION 1.9.10 ************ 423********** VERSION 1.9.10 ************
421 424
422Many internal small bugfixes. 425Many internal small bugfixes.
423And fix of the "big" bug in KO/Pi, 426And fix of the "big" bug in KO/Pi,
424that after Syncing the appointments had an offset by several hours. 427that after Syncing the appointments had an offset by several hours.
425That was a problem with the internal timezone setting, 428That was a problem with the internal timezone setting,
426introduced by the changed timezone configuration settings. 429introduced by the changed timezone configuration settings.
427 430
428German translation for OM/Pi is now available. 431German translation for OM/Pi is now available.
429 432
430 433
431********** VERSION 1.9.9 ************ 434********** VERSION 1.9.9 ************
432 435
433KDE-Pim/Pi has a new Member! 436KDE-Pim/Pi has a new Member!
434It is called PWM/Pi (Passwordmanager/platform-independent) 437It is called PWM/Pi (Passwordmanager/platform-independent)
435and it is available for the Zaurus. 438and it is available for the Zaurus.
436It is planned, that it will be available later for Windows. 439It is planned, that it will be available later for Windows.
437(And for Linux, of course). 440(And for Linux, of course).
438It is a port of the Passwordmanager of KDE. 441It is a port of the Passwordmanager of KDE.
439It will need the MicroKDElibs to run. 442It will need the MicroKDElibs to run.
440 443
441Made loading of addressbooks in KA/Pi up to 7 times faster! 444Made loading of addressbooks in KA/Pi up to 7 times faster!
442The bigger your addressbook file, the more starting speed 445The bigger your addressbook file, the more starting speed
443will you gain. (relatively) 446will you gain. (relatively)
444 447
445The Qtopia addressbook connector is now platform independend 448The Qtopia addressbook connector is now platform independend
446as well and should work on any platform for importing/exporting 449as well and should work on any platform for importing/exporting
447Qtopia and Opie XML files. 450Qtopia and Opie XML files.
448 451
449Added a +30min feature to the timezone settings to make 452Added a +30min feature to the timezone settings to make
450KDE-Pim/Pi useable in Australia and other parts on the 453KDE-Pim/Pi useable in Australia and other parts on the
451world with strange timezones ;-) 454world with strange timezones ;-)
452 455
453German "Umlaute" should now be sorted correctly on the Z in KA/Pi. 456German "Umlaute" should now be sorted correctly on the Z in KA/Pi.
454 457
455It is now possible to disable the 458It is now possible to disable the
456"receive data via infrared" feature, such that syncing with 459"receive data via infrared" feature, such that syncing with
457Outlook is now possible again with Kx/Pi runing. 460Outlook is now possible again with Kx/Pi runing.
458Please disable it, before syncing Sharp DTM with Outlook. 461Please disable it, before syncing Sharp DTM with Outlook.
459For your convenience, the "receive data via infrared" feature 462For your convenience, the "receive data via infrared" feature
460is disabled automatically, if you sync Kx/Pi with DTM. 463is disabled automatically, if you sync Kx/Pi with DTM.
461You have to enable it again manually after syncing. 464You have to enable it again manually after syncing.
462Enabling this feature makes it impossible to start the 465Enabling this feature makes it impossible to start the
463Sharp DTM apps. If this feature is enabled, you will only get the 466Sharp DTM apps. If this feature is enabled, you will only get the
464alarm notification from KO/Pi and not from the Sharp calendar. 467alarm notification from KO/Pi and not from the Sharp calendar.
465This is very useful if you sync KO/Pi with Sharp DTM, 468This is very useful if you sync KO/Pi with Sharp DTM,
466because after syncing you usually would get notified about 469because after syncing you usually would get notified about
467an alarm by KO/Pi and the Sharp Calendar. 470an alarm by KO/Pi and the Sharp Calendar.
468 471
469Together with the Linux desktop version of KO/Pi 472Together with the Linux desktop version of KO/Pi
470it is now possible to sync KO/Pi on the Zaurus 473it is now possible to sync KO/Pi on the Zaurus
471with the complete KDE-desktop (3.3 or later) 474with the complete KDE-desktop (3.3 or later)
472calendar data easily. 475calendar data easily.
473That makes it possible to sync the Z with one 476That makes it possible to sync the Z with one
474click of a mouse with the KDE-Desktop. 477click of a mouse with the KDE-Desktop.
475This feature it available for all Zaurus platforms KO/Pi 478This feature it available for all Zaurus platforms KO/Pi
476is running on. 479is running on.
477The only thing needed is a running KO/Pi on Linux and 480The only thing needed is a running KO/Pi on Linux and
478a compiled version of the small 481a compiled version of the small
479KDE-Pim/Pi<->KDE-Desktop access command line program, 482KDE-Pim/Pi<->KDE-Desktop access command line program,
480which is in the KDE-Pim/Pi sources available. 483which is in the KDE-Pim/Pi sources available.
481 484
482The "KDE-desktop" syncing feature for KA/Pi will follow 485The "KDE-desktop" syncing feature for KA/Pi will follow
483in the next releases. 486in the next releases.
484 487
485Fixed the vcard export bug, which had the version 1.9.8. 488Fixed the vcard export bug, which had the version 1.9.8.
486 489
487Added missing GERMAN translation to KO/Pi. 490Added missing GERMAN translation to KO/Pi.
488Hi PsionX, could you add the missing french translation?Thx! 491Hi PsionX, could you add the missing french translation?Thx!
489 492
490Translation files for KA/Pi are available as well. 493Translation files for KA/Pi are available as well.
491GERMAN translation will be available in the next release. 494GERMAN translation will be available in the next release.
492PsionX ( yres, you again ;-) ), could you start translating 495PsionX ( yres, you again ;-) ), could you start translating
493KA/Pi? Thx! 496KA/Pi? Thx!
494 497
495You can download the version 1.9.9 at 498You can download the version 1.9.9 at
496 499
497http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604 500http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604
498 501
499Note: 502Note:
500To run the mail program OM/Pi you need libopenssl. 503To run the mail program OM/Pi you need libopenssl.
501A link to a download loaction is available at 504A link to a download loaction is available at
502ZSI at www.killefiz.de 505ZSI at www.killefiz.de
503 506
504 507
505********** VERSION 1.9.8 ************ 508********** VERSION 1.9.8 ************
506 509
507Fixed character decoding in OM/Pi. 510Fixed character decoding in OM/Pi.
508(e.g. German "Umlaute" were not displayed properly.) 511(e.g. German "Umlaute" were not displayed properly.)
509 512
510Made is possible to reparent todos in KO/Pi. 513Made is possible to reparent todos in KO/Pi.
511Use contextmenu or keys (look at Help-Keys + Colors) for that. 514Use contextmenu or keys (look at Help-Keys + Colors) for that.
512 515
513Added the missing Sync-Howto and WhatsNew to the packages. 516Added the missing Sync-Howto and WhatsNew to the packages.
514 517
515KO/Pi on Linux desktop can now sync with KDE desktop. 518KO/Pi on Linux desktop can now sync with KDE desktop.
516That means: When using KO/Pi on Linux desktop for syncing with 519That means: When using KO/Pi on Linux desktop for syncing with
517KDE desktop and the Zaurus, the Zaurus can be synced now 520KDE desktop and the Zaurus, the Zaurus can be synced now
518with all KDE-Calendar resources, not only with one local file. 521with all KDE-Calendar resources, not only with one local file.
519(That makes it possible to sync the Zaurus with the 522(That makes it possible to sync the Zaurus with the
520calendar data on a Kolab server) 523calendar data on a Kolab server)
521 524
522KA/Pi syncing with KDE desktop will be available in the next version. 525KA/Pi syncing with KDE desktop will be available in the next version.
523 526
524 527
525********** VERSION 1.9.7 ************ 528********** VERSION 1.9.7 ************
526 529
527KO/Pi - KA/Pi on Windows: 530KO/Pi - KA/Pi on Windows:
528Now a directory can be defined by the user, where the 531Now a directory can be defined by the user, where the
529application/config data should be saved. 532application/config data should be saved.
530 Define your desired path in the evironment variable 533 Define your desired path in the evironment variable
531 MICROKDEHOME 534 MICROKDEHOME
532 before starting KO/Pi or KA/Pi. 535 before starting KO/Pi or KA/Pi.
533 536
534An easy Kx/Pi to Kx/Pi syncing is now possible 537An easy Kx/Pi to Kx/Pi syncing is now possible
535(it is called Pi-Sync) via network. 538(it is called Pi-Sync) via network.
536Please look at the Sync Howto. 539Please look at the Sync Howto.
537 540
538Exporting of calendar data and contacts to mobile phones is now possible. 541Exporting of calendar data and contacts to mobile phones is now possible.
539The SyncHowto is updated with information howto 542The SyncHowto is updated with information howto
540access/sync mobile phones. 543access/sync mobile phones.
541Please look at the Sync Howto. 544Please look at the Sync Howto.
542 545
543Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly. 546Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly.
544Please disable Fastload for the original contact/calendar applications 547Please disable Fastload for the original contact/calendar applications
545and close them. 548and close them.
546KO/Pi and KA/Pi must be running in order to receive the data. 549KO/Pi and KA/Pi must be running in order to receive the data.
547(KO/Pi and KA/Pi are always running if Fastload for them is enabled!) 550(KO/Pi and KA/Pi are always running if Fastload for them is enabled!)
548 551
549In the KA/Pi details view are now the preferred tel. numbers displayed on top 552In the KA/Pi details view are now the preferred tel. numbers displayed on top
550of the other data ( emails/tel.numbers/addresses) 553of the other data ( emails/tel.numbers/addresses)
551 554
552Fixed some syncing problems in KA/Pi. 555Fixed some syncing problems in KA/Pi.
553 556
554Added font settings for the KA/Pi details view. 557Added font settings for the KA/Pi details view.
555Added fields "children's name" and "gender" to KA/Pi. 558Added fields "children's name" and "gender" to KA/Pi.
556 559
557Made searching in KA/Pi better: 560Made searching in KA/Pi better:
558Now the first item in a view is selected after a search automatically and 561Now the first item in a view is selected after a search automatically and
559the views can be scrolled up/down when the search input field has the keyboard focus. 562the views can be scrolled up/down when the search input field has the keyboard focus.
560 563
561And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi. 564And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi.
562 565
563 566
564********** VERSION 1.9.6 ************ 567********** VERSION 1.9.6 ************
565 568
566Changes in the external application communication on the Zaurus 569Changes in the external application communication on the Zaurus
567in order to use less RAM when the apps are running. 570in order to use less RAM when the apps are running.
568First syncing of addressbooks (KA/Pi) is possible. 571First syncing of addressbooks (KA/Pi) is possible.
569 572
570 573
571********** VERSION 1.9.5a ************ 574********** VERSION 1.9.5a ************
572 575
573Fixed a bug in KO/Pi in the SharpDTM sync of version 1.9.5. 576Fixed a bug in KO/Pi in the SharpDTM sync of version 1.9.5.
574Fixed some small bugs. 577Fixed some small bugs.
575KA/Pi shows now the birthday in summary view. 578KA/Pi shows now the birthday in summary view.
576Now OM/Pi and KA/Pi are using the date format defined in KO/Pi 579Now OM/Pi and KA/Pi are using the date format defined in KO/Pi
577for displaying dates. 580for displaying dates.
578 581
579 582
580********** VERSION 1.9.5 ************ 583********** VERSION 1.9.5 ************
581 584
582There is still no Addressbook syncing! 585There is still no Addressbook syncing!
583 586
584New in 1.9.5: 587New in 1.9.5:
585 588
586Many bugfixes. 589Many bugfixes.
587Better searching in KA/Pi. 590Better searching in KA/Pi.
588You can configure in KA/Pi if you want to search only after 591You can configure in KA/Pi if you want to search only after
589<return> key pressed. 592<return> key pressed.
590 593
591Better mail downloading in OM/Pi. 594Better mail downloading in OM/Pi.
592 595
593First experimental alpha version of sync of KO/Pi with mobile phones. 596First experimental alpha version of sync of KO/Pi with mobile phones.
594See gammu documentation for supported phones. 597See gammu documentation for supported phones.
595You 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. 598You 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.
596Quick hint how to use: 599Quick hint how to use:
597NOTE: MOBILE PHONE SYNC IS EXPERIMENTAL! 600NOTE: MOBILE PHONE SYNC IS EXPERIMENTAL!
598Install kammu_1.9.5_arm.ipk , libbluetooth and libsdp. 601Install kammu_1.9.5_arm.ipk , libbluetooth and libsdp.
599Create syncprofile - mobile device 602Create syncprofile - mobile device
600Remove entry for model. (Leave empty ). 603Remove entry for model. (Leave empty ).
601Enable infrared on Zaurus and your Phone. 604Enable infrared on Zaurus and your Phone.
602Sync. 605Sync.
603To get a more detailed log, start kopi from konsole. 606To get a more detailed log, start kopi from konsole.
604 607
605********** VERSION 1.9.4 ************ 608********** VERSION 1.9.4 ************
606 609
607This is the version 1.9.4 of KDE-Pim/Pi for the Zaurus. 610This is the version 1.9.4 of KDE-Pim/Pi for the Zaurus.
608 611
609WARNING: 612WARNING:
610PLEASE BACKUP ALL YOUR DATA! 613PLEASE BACKUP ALL YOUR DATA!
611We have changed a lot and maybe there are some unknown problems. 614We have changed a lot and maybe there are some unknown problems.
612 615
613SYNC HANDLING HAS CHANGED! 616SYNC HANDLING HAS CHANGED!
614Such that, if you sync now with an already synded device, you will duplicated entries after the first sync. 617Such that, if you sync now with an already synded device, you will duplicated entries after the first sync.
615(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks). 618(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks).
616 619
617You need the kmicrokdelibs_1.9.4_arm.ipk as a base for the other programs. 620You need the kmicrokdelibs_1.9.4_arm.ipk as a base for the other programs.
618If 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. 621If 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.
619 622
620As programs are available: 623As programs are available:
621KO/Pi (korganizer ipk) - a calendar program. 624KO/Pi (korganizer ipk) - a calendar program.
622KA/Pi (kaddressbook ipk ) - an addressbook 625KA/Pi (kaddressbook ipk ) - an addressbook
623OM/Pi (kopiemail ipk ) an email program with pop/smtp and IMAP support. 626OM/Pi (kopiemail ipk ) an email program with pop/smtp and IMAP support.
624 627
625An alarm notification program ( korganizer-alarm ipk ) for KO/Pi that notifies you about alarms, even if the Zaurus is in suspend mode. 628An alarm notification program ( korganizer-alarm ipk ) for KO/Pi that notifies you about alarms, even if the Zaurus is in suspend mode.
626(If you do not see an icon in the taskbar after installing korganizer-alarm, please restart Qtopia) 629(If you do not see an icon in the taskbar after installing korganizer-alarm, please restart Qtopia)
627 630
628All the applications are installed in a "Pim" TAB. 631All the applications are installed in a "Pim" TAB.
629If 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 632If 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
630 633
631All the application are integrated. 634All the application are integrated.
632Such 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. 635Such 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.
633 636
634HINT: 637HINT:
635If you install KPhone/Pi 0.9.7, it will be called, if you click in KA/Pi on a phone number. 638If you install KPhone/Pi 0.9.7, it will be called, if you click in KA/Pi on a phone number.
636 639
637What's new? 640What's new?
638 641
639SYNC HANDLING HAS CHANGED! 642SYNC HANDLING HAS CHANGED!
640Such that, if you sync now with an already synded device, you will duplicated entries after the first sync. 643Such that, if you sync now with an already synded device, you will duplicated entries after the first sync.
641(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks). 644(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks).
642 645
643New in OM/Pi: 646New in OM/Pi:
644When 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. 647When 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.
645 648
646New in KO/Pi: 649New in KO/Pi:
647French is now available for KO/Pi. 650French is now available for KO/Pi.
648Choose menu:Actions - Configure:TAB locale 651Choose menu:Actions - Configure:TAB locale
649Syncing has changed. 652Syncing has changed.
650Phone sync available soon. 653Phone sync available soon.
651Not much changes, I cannot remember them ... 654Not much changes, I cannot remember them ...
652 655
653New in KA/Pi: 656New in KA/Pi:
654Beaming possible. 657Beaming possible.
655Sharp DTM readonly access possible( create a new DTM resource ); 658Sharp DTM readonly access possible( create a new DTM resource );
656Better searching possible. 659Better searching possible.
657Search is performed only after pressing the return key. 660Search is performed only after pressing the return key.
658Use wildcard * to specify parts of a name. 661Use wildcard * to specify parts of a name.
659 662
660Better 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 * . 663Better 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 * .
661 664
662A big improvement is the new management of the contact access. 665A big improvement is the new management of the contact access.
663In version 1.9.3, every application was using their own addressbook access data. 666In version 1.9.3, every application was using their own addressbook access data.
664That means, the addressbook was loaded up to three times in the memory, when accessed by KA/Pi, KO/Pi and OM/Pi. 667That means, the addressbook was loaded up to three times in the memory, when accessed by KA/Pi, KO/Pi and OM/Pi.
665That was wasting of memory, if you had several hundreds of contacts. 668That was wasting of memory, if you had several hundreds of contacts.
666 669
667Now only KA/Pi accesses the addressbook. 670Now only KA/Pi accesses the addressbook.
668If 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. 671If 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.
669If you click on an attendee in a meeting, its contact data is displayed in KA/Pi directly. 672If you click on an attendee in a meeting, its contact data is displayed in KA/Pi directly.
670That means, if KO/Pi or OM/Pi want to access contact data, KA/Pi is started first. 673That means, if KO/Pi or OM/Pi want to access contact data, KA/Pi is started first.
671 674
672New in the KO/Pi alarm applet: 675New in the KO/Pi alarm applet:
673Configure your own timer popup menu! 676Configure your own timer popup menu!
674(Text and minutes for timer countdown) 677(Text and minutes for timer countdown)
675Just edit the file 678Just edit the file
676(yourhomedir)/.kopialarmtimerrc 679(yourhomedir)/.kopialarmtimerrc
677and start/stop a timer to get a new menu with the data of this file. 680and start/stop a timer to get a new menu with the data of this file.
678 681
679********** VERSION 1.9.3 ************ 682********** VERSION 1.9.3 ************
6801) 6831)
681Now KO/Pi on Windows imports directly the calendar data of 684Now KO/Pi on Windows imports directly the calendar data of
682an installed Outlook. Should work with OL version >= 2000. 685an installed Outlook. Should work with OL version >= 2000.
683 686
684********** VERSION 1.9.2 ************ 687********** VERSION 1.9.2 ************
6851) 6881)
686KDE-Pim/Pi has got a new member: 689KDE-Pim/Pi has got a new member:
687KmicroMail (KM/Pi) is a mail program, 690KmicroMail (KM/Pi) is a mail program,
688which can handle IMAP and POP mail access. 691which can handle IMAP and POP mail access.
689It is based on Opie-Mail v3. 692It is based on Opie-Mail v3.
690All dependencies to the Opie libraries ar removed, 693All dependencies to the Opie libraries ar removed,
691such that no additional Opie lib is needed. 694such that no additional Opie lib is needed.
692It is already integrated in KO/Pi and KA/Pi. 695It is already integrated in KO/Pi and KA/Pi.
693It it now available for the Zaurus,probably it 696It it now available for the Zaurus,probably it
694will be available for other platforms later. 697will be available for other platforms later.
695Hint: 698Hint:
696Create your own contact (name + email) 699Create your own contact (name + email)
697in KA/Pi, select this contact and choose menu: 700in KA/Pi, select this contact and choose menu:
698Settings - Set Who Am I. 701Settings - Set Who Am I.
699Now the settings of this contact are used as 702Now the settings of this contact are used as
700the sender data in KM/Pi. 703the sender data in KM/Pi.
7012) 7042)
702KDE-Pim/Pi is split up in five different 705KDE-Pim/Pi is split up in five different
703packages now precompiled for Sharp Zaurus: 706packages now precompiled for Sharp Zaurus:
704--kmicrokdelibs_1.9.2_arm.ipk 707--kmicrokdelibs_1.9.2_arm.ipk
705The libs are needed for any 708The libs are needed for any
706of the following programs: 709of the following programs:
707--kaddressbook_1.9.2_arm.ipk 710--kaddressbook_1.9.2_arm.ipk
708--kmicromail_1.9.2_arm.ipk 711--kmicromail_1.9.2_arm.ipk
709--korganizer_1.9.2_arm.ipk 712--korganizer_1.9.2_arm.ipk
710Independ from that, there is the alarm applet 713Independ from that, there is the alarm applet
711available for KO/Pi, which also offers 714available for KO/Pi, which also offers
712quick access for a new mail or 715quick access for a new mail or
713showing the addressbook.: 716showing the addressbook.:
714--korganizer-alarm_1.9.2_arm.ipk 717--korganizer-alarm_1.9.2_arm.ipk
715Independend means, that the alarm applet 718Independend means, that the alarm applet
716does not need any of the libs or programs above to run. 719does not need any of the libs or programs above to run.
717But it would be quite useless without these programs. 720But it would be quite useless without these programs.
718NOTE: 721NOTE:
719If you get a 722If you get a
720"This application depends on other programs" 723"This application depends on other programs"
721during installation of 724during installation of
722--kmicrokdelibs_1.9.2_arm.ipk 725--kmicrokdelibs_1.9.2_arm.ipk
723you probably do not have to care about that. 726you probably do not have to care about that.
724kmicrokdelibs_1.9.2 will come with some 727kmicrokdelibs_1.9.2 will come with some
725resource plugins, which needs additional libraries. 728resource plugins, which needs additional libraries.
726(E.g. libopie1, if you want to use the 729(E.g. libopie1, if you want to use the
727opie resource connector in KA/Pi). 730opie resource connector in KA/Pi).
728If you do not have this libraries installed, 731If you do not have this libraries installed,
729you simply cannot use the resource. 732you simply cannot use the resource.
730To make it clear: 733To make it clear:
731If the libraries are missing, the applications 734If the libraries are missing, the applications
732using kmicrokdelibs will start, 735using kmicrokdelibs will start,
733because the resources are plugins. 736because the resources are plugins.
7343) 7373)
735KO/Pi and friends are now installable on SD-Card! 738KO/Pi and friends are now installable on SD-Card!
736It is recommended to install all libs and apps 739It is recommended to install all libs and apps
737on the SD card or all in the internal storage. 740on the SD card or all in the internal storage.
738There may be problems, if this is mixed. 741There may be problems, if this is mixed.
7394) 7424)
740Fixed two bugs in the alarm notification on Windows. 743Fixed two bugs in the alarm notification on Windows.
7415) 7445)
742Great improvement! 745Great improvement!
743KO/Pi uses now the latest version of libical. 746KO/Pi uses now the latest version of libical.
744Libical is the library which actually reads 747Libical is the library which actually reads
745the calendar files and extract the data from it. 748the calendar files and extract the data from it.
746With the old version, there were problems 749With the old version, there were problems
747(crashes or program hangs) when licical did read 750(crashes or program hangs) when licical did read
748files, which were not stored from KO/Pi. 751files, which were not stored from KO/Pi.
749I do not know, if the new libical works perfect, 752I do not know, if the new libical works perfect,
750but actually it works much better than 753but actually it works much better than
751the old version. 754the old version.
752There are no problems with compatibility with 755There are no problems with compatibility with
753old calendar files of KO/Pi, of course! 756old calendar files of KO/Pi, of course!
7546) 7576)
755New in KA/Pi: 758New in KA/Pi:
756Opie addressbook resource connector available! 759Opie addressbook resource connector available!
757You will need libopie1 and the opie addressbook, 760You will need libopie1 and the opie addressbook,
758of course. 761of course.
759With the Opie addressbook resource connector, 762With the Opie addressbook resource connector,
760you can access the Opie addressbook readonly in KA/Pi. 763you can access the Opie addressbook readonly in KA/Pi.
761If you want to edit or import the data into KA/Pi, 764If you want to edit or import the data into KA/Pi,
762do this: 765do this:
763a) Create an Opie resource. 766a) Create an Opie resource.
764 (Menu: Settings-Configure Resources). 767 (Menu: Settings-Configure Resources).
765After configuration and restarting KA/Pi you should see 768After configuration and restarting KA/Pi you should see
766the Opie contacts in KA/Pi. 769the Opie contacts in KA/Pi.
767b) Select some or all Opie contacts. 770b) Select some or all Opie contacts.
768(NOTE: +++++ 771(NOTE: +++++
769To know exactly, what contacts are Opie contacts, 772To know exactly, what contacts are Opie contacts,
770do this: Choose menu: 773do this: Choose menu:
771View-Modify View - TAB Fields. 774View-Modify View - TAB Fields.
772Select in the above list "Resource" and click 775Select in the above list "Resource" and click
773down arrow to add it to the "Selected fields". 776down arrow to add it to the "Selected fields".
774Click OK. 777Click OK.
775Now you have a new column "Resource" in your list, 778Now you have a new column "Resource" in your list,
776where you can see, what an Opie resource is. 779where you can see, what an Opie resource is.
777++++ NOTE end.) 780++++ NOTE end.)
778Ok, we do have now some Opie contacts seleted. 781Ok, we do have now some Opie contacts seleted.
779(Use SHIFT or CTRL key in order to multiple select). 782(Use SHIFT or CTRL key in order to multiple select).
780c) Choose menu: Edit-Copy. 783c) Choose menu: Edit-Copy.
781d) Choose menu: Edit-Paste. 784d) Choose menu: Edit-Paste.
782e) Select the resource, you want to add the contacts to. 785e) Select the resource, you want to add the contacts to.
783Congrats! Now you have read/write access to the copied 786Congrats! Now you have read/write access to the copied
784opie contacts as "real" KA/Pi contacts. 787opie contacts as "real" KA/Pi contacts.
785 788
786 789
787********** VERSION 1.9.1 ************ 790********** VERSION 1.9.1 ************
7881) 7911)
789 +++ IMPORTANT 1 +++ 792 +++ IMPORTANT 1 +++
790 793
791The storing place of the default calendar 794The storing place of the default calendar
792file has changed! 795file has changed!
793The default calendar file was 796The default calendar file was
794Applications/korganizer/mycalendar.ics 797Applications/korganizer/mycalendar.ics
795on Zaurus and 798on Zaurus and
796(yourHomeDir)/korganizer/mycalendar.ics 799(yourHomeDir)/korganizer/mycalendar.ics
797on Windows/Linux desktop. Now it is 800on Windows/Linux desktop. Now it is
798(yourHomeDir)/kdepim/korganizer/mycalendar.ics 801(yourHomeDir)/kdepim/korganizer/mycalendar.ics
799on Zaurus, Windows and Linux. 802on Zaurus, Windows and Linux.
800To load the old file, choose menu 803To load the old file, choose menu
801File-Load calendar backup. 804File-Load calendar backup.
802(It should be loaded automatically 805(It should be loaded automatically
803at startup with a warning message displayed). 806at startup with a warning message displayed).
804The place of the configuration file has changed too. 807The place of the configuration file has changed too.
805If you want to use your old KO/Pi config, 808If you want to use your old KO/Pi config,
806copy it to 809copy it to
807(yourHomeDir)/kdepim/config/korganizerrc 810(yourHomeDir)/kdepim/config/korganizerrc
808Please read VERSION 1.9.0 - topic 3) as well! 811Please read VERSION 1.9.0 - topic 3) as well!
809 812
810 +++ IMPORTANT 2 +++ 813 +++ IMPORTANT 2 +++
811 814
812Because of the new paths, you will need 815Because of the new paths, you will need
813a new version of the KO/Pi alarm applet 816a new version of the KO/Pi alarm applet
814for Zaurus. 817for Zaurus.
815Use version >= 1.9.1 818Use version >= 1.9.1
816 819
8172) 8202)
818Now the QWhat'sThis Icon works for items 821Now the QWhat'sThis Icon works for items
819in the month view as well. 822in the month view as well.
820(See VERSION 1.7.8 Topic 1) ). 823(See VERSION 1.7.8 Topic 1) ).
8213) 8243)
822You can import birtsdays/anniversaries 825You can import birtsdays/anniversaries
823from KA/Pi into KO/Pi. 826from KA/Pi into KO/Pi.
824Choose menu File-Import birthdays. 827Choose menu File-Import birthdays.
825If you import twice, already imported items 828If you import twice, already imported items
826will not be imported again, if they 829will not be imported again, if they
827have not been changed in KO/Pi. 830have not been changed in KO/Pi.
8284) 8314)
829When syncing with sharp DTM, now a progress 832When syncing with sharp DTM, now a progress
830is shown, when the data is written back. 833is shown, when the data is written back.
831If there is much data in KO/Pi and no data 834If there is much data in KO/Pi and no data
832in DTM, that can take a long time. 835in DTM, that can take a long time.
833(But only for the first time ). 836(But only for the first time ).
8345) 8375)
835In the search dialog, you can search 838In the search dialog, you can search
836now for the name/email of an attendee 839now for the name/email of an attendee
837of an event/todo. 840of an event/todo.
838To get more space for displaying 841To get more space for displaying
839search results, the buttons 842search results, the buttons
840for "search" and "close" on the 843for "search" and "close" on the
841bottom are removed in the PDA version. 844bottom are removed in the PDA version.
842You have to click OK in the top right 845You have to click OK in the top right
843corner to do a search. 846corner to do a search.
8446) 8476)
845Now it is possible to disable the displaying 848Now it is possible to disable the displaying
846of todo items in the Allday part of the Agenda. 849of todo items in the Allday part of the Agenda.
847Choose Menu Action-Configure, 850Choose Menu Action-Configure,
848TAB Todo View, checkbox 851TAB Todo View, checkbox
849"Allday Agenda view shows todos" 852"Allday Agenda view shows todos"
8507) 8537)
851If FastLoad is enabled, now the settings and the 854If FastLoad is enabled, now the settings and the
852calendar data are saved, when KO/Pi is closed. 855calendar data are saved, when KO/Pi is closed.
853(If no Fastload is enabled, KO/Pi saves 856(If no Fastload is enabled, KO/Pi saves
854the data as well, of course) 857the data as well, of course)
8558) 8588)
856The Agenda View has a minimize-splitter now, 859The Agenda View has a minimize-splitter now,
857such that the height of the allday part can be 860such that the height of the allday part can be
858changed quickly. 861changed quickly.
859 862
860********** VERSION 1.9.0 ************ 863********** VERSION 1.9.0 ************
8611) 8641)
862KO/Pi is now merged with the new microKDE from KA/Pi. 865KO/Pi is now merged with the new microKDE from KA/Pi.
863KO/Pi accesses now KA/Pi as the addressbook. 866KO/Pi accesses now KA/Pi as the addressbook.
864The other ddressbook-plugins are not working any longer. 867The other ddressbook-plugins are not working any longer.
865(It is planned, that later KA/Pi itself uses these plugins) 868(It is planned, that later KA/Pi itself uses these plugins)
866New versions of KO/Pi are only available 869New versions of KO/Pi are only available
867together with KA/Pi as the KDE-Pim/Pi package. 870together with KA/Pi as the KDE-Pim/Pi package.
8682) 8712)
869If you click on an attendee of a meeting in the 872If you click on an attendee of a meeting in the
870event viewer, a detailed summary of the 873event viewer, a detailed summary of the
871attendee is shown. 874attendee is shown.
8723) 8753)
873The place of the configuration file has changed. 876The place of the configuration file has changed.
874If you want to use your old KO/Pi config, copy 877If you want to use your old KO/Pi config, copy
875Applications/korganizer/config_korganizerrc 878Applications/korganizer/config_korganizerrc
876to 879to
877Applications/korganizer/config/korganizerrc 880Applications/korganizer/config/korganizerrc
878 881
879********** VERSION 1.7.8 ************ 882********** VERSION 1.7.8 ************
8801) 8831)
881Now the QWhat'sThis ist working. 884Now the QWhat'sThis ist working.
882Enable the QWhat'sThis icon in the toolbar. 885Enable the QWhat'sThis icon in the toolbar.
883(You have to restart to reload the changed toolbar config). 886(You have to restart to reload the changed toolbar config).
884Now click on the QWhat'sThis Icon 887Now click on the QWhat'sThis Icon
885in the top right corner of KO/Pi. 888in the top right corner of KO/Pi.
886Then click on an item in the Agenda View: 889Then click on an item in the Agenda View:
887You will get a detailed display of the items content. 890You will get a detailed display of the items content.
8882) 8912)
889Some other very minor changes. 892Some other very minor changes.
890But I have forgotten the details ... 893But I have forgotten the details ...
891For that reason I start this log here: 894For that reason I start this log here:
892To document my changes, when I am doing it. 895To document my changes, when I am doing it.
893 896
894********** VERSION 1.7.7 ************ 897********** VERSION 1.7.7 ************
895Stable Version of KO/Pi 898Stable Version of KO/Pi
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt
index 12b70a0..8c3b1e4 100644
--- a/bin/kdepim/korganizer/germantranslation.txt
+++ b/bin/kdepim/korganizer/germantranslation.txt
@@ -1,1220 +1,1225 @@
1{ "10 minutes","10 Minuten" }, 1{ "10 minutes","10 Minuten" },
2{ "10th","10." }, 2{ "10th","10." },
3{ "11th","11." }, 3{ "11th","11." },
4{ "12 pm Format","12 AM/PM Format" }, 4{ "12 pm Format","12 AM/PM Format" },
5{ "12th","12." }, 5{ "12th","12." },
6{ "13th","13." }, 6{ "13th","13." },
7{ "14th","14." }, 7{ "14th","14." },
8{ "15th","15." }, 8{ "15th","15." },
9{ "16th","16." }, 9{ "16th","16." },
10{ "17th","17." }, 10{ "17th","17." },
11{ "18th","18." }, 11{ "18th","18." },
12{ "19th","19." }, 12{ "19th","19." },
13{ "1 Day","1 Tag" }, 13{ "1 Day","1 Tag" },
14{ "1 h","1 Std" }, 14{ "1 h","1 Std" },
15{ "1 (high)","1 (hoch)" }, 15{ "1 (high)","1 (hoch)" },
16{ "5 (low)","5" }, 16{ "5 (low)","5" },
17{ "1st","1." }, 17{ "1st","1." },
18{ "20th","20." }, 18{ "20th","20." },
19{ "21st","21." }, 19{ "21st","21." },
20{ "22nd","22." }, 20{ "22nd","22." },
21{ "23rd","23." }, 21{ "23rd","23." },
22{ "24:00 Hour Format","24:00 Stunden Format" }, 22{ "24:00 Hour Format","24:00 Stunden Format" },
23{ "24th","24." }, 23{ "24th","24." },
24{ "25th","25." }, 24{ "25th","25." },
25{ "26th","26." }, 25{ "26th","26." },
26{ "27th","27." }, 26{ "27th","27." },
27{ "28th","28." }, 27{ "28th","28." },
28{ "29th","29." }, 28{ "29th","29." },
29{ "2nd","2." }, 29{ "2nd","2." },
30{ "30 minutes","30 Minuten" }, 30{ "30 minutes","30 Minuten" },
31{ "30th","30." }, 31{ "30th","30." },
32{ "31st","31." }, 32{ "31st","31." },
33{ "3rd","3." }, 33{ "3rd","3." },
34{ "4th","4." }, 34{ "4th","4." },
35{ "5 (lowest)","5 (Niedrigster)" }, 35{ "5 (lowest)","5 (Niedrigster)" },
36{ "5th","5." }, 36{ "5th","5." },
37{ "6th","6." }, 37{ "6th","6." },
38{ "7th","7." }, 38{ "7th","7." },
39{ "8th","8." }, 39{ "8th","8." },
40{ "9th","9." }, 40{ "9th","9." },
41{ "About...","Über..." }, 41{ "About...","Über..." },
42{ "&Accept","&Akzeptieren" }, 42{ "&Accept","&Akzeptieren" },
43{ "Accept","Akzeptieren" }, 43{ "Accept","Akzeptieren" },
44{ "Accept A&ll","A&lles Akzepieren" }, 44{ "Accept A&ll","A&lles Akzepieren" },
45{ "Access:","Zugriff:" }, 45{ "Access:","Zugriff:" },
46{ "A corresponding event is missing in your calendar!","Ein zugehöriger Termin fehlt in ihrem Kalender!" }, 46{ "A corresponding event is missing in your calendar!","Ein zugehöriger Termin fehlt in ihrem Kalender!" },
47{ "Actions","Aktionen" }, 47{ "Actions","Aktionen" },
48{ "Add Filter","Filter Hinzufügen" }, 48{ "Add Filter","Filter Hinzufügen" },
49{ "&Add","Hinzufügen" }, 49{ "&Add","Hinzufügen" },
50{ "Add","Hinzufügen" }, 50{ "Add","Hinzufügen" },
51{ "Additional email addresses:","Zusätzliche E-Mail Adressen:" }, 51{ "Additional email addresses:","Zusätzliche E-Mail Adressen:" },
52{ "Additional email address:","Zusätzliche E-Mail Adresse:" }, 52{ "Additional email address:","Zusätzliche E-Mail Adresse:" },
53{ "&Addressbook","&Adressbuch" }, 53{ "&Addressbook","&Adressbuch" },
54{ "Address &Book...","Adress&buch..." }, 54{ "Address &Book...","Adress&buch..." },
55{ "Agenda Size","Agende Größe" }, 55{ "Agenda Size","Agende Größe" },
56{ "Agenda Size:","Größe der Agenda:" }, 56{ "Agenda Size:","Größe der Agenda:" },
57{ "Agenda view:","Agenda Ansicht:" }, 57{ "Agenda view:","Agenda Ansicht:" },
58{ "Agenda view background color:","Hintergrund der Agenda Ansicht:" }, 58{ "Agenda view background color:","Hintergrund der Agenda Ansicht:" },
59{ "All attendees","Alle Teilnehmer" }, 59{ "All attendees","Alle Teilnehmer" },
60{ "AllDayAgenda Height:","Höhe Ganztages Agenda:" }, 60{ "AllDayAgenda Height:","Höhe Ganztages Agenda:" },
61{ "All day event","Ganztägig" }, 61{ "All day event","Ganztägig" },
62{ "Anonymous","Anonym" }, 62{ "Anonymous","Anonym" },
63{ "Apply","Anwenden" }, 63{ "Apply","Anwenden" },
64{ "Apr","Apr" }, 64{ "Apr","Apr" },
65{ "April","April" }, 65{ "April","April" },
66{"Ask for every entry on conflict","Frage bei Konflikten nach"}, 66{"Ask for every entry on conflict","Frage bei Konflikten nach"},
67{ "Ask for preferences before syncing","Vor dem Syncronisieren nachfragen" }, 67{ "Ask for preferences before syncing","Vor dem Syncronisieren nachfragen" },
68{ "Ask for quit when closing KO/Pi","Vor dem Beenden von KO/Pi nachfragen" }, 68{ "Ask for quit when closing KO/Pi","Vor dem Beenden von KO/Pi nachfragen" },
69{ "Attendees","Teilnehmer" }, 69{ "Attendees","Teilnehmer" },
70{ "Aug","Aug" }, 70{ "Aug","Aug" },
71{ "August","August" }, 71{ "August","August" },
72{ "Auto-Save","Automatisches Abspeichern" }, 72{ "Auto-Save","Automatisches Abspeichern" },
73{ "Auto save delay in minutes:","Verzög.autom.Speichern in Min" }, 73{ "Auto save delay in minutes:","Verzög.autom.Speichern in Min" },
74{ "Auto saving...","Automatische Sicherung..." }, 74{ "Auto saving...","Automatische Sicherung..." },
75{ "Begin on:","Starte mit:" }, 75{ "Begin on:","Starte mit:" },
76{ "Begins on: %1","Starte mit: %1" }, 76{ "Begins on: %1","Starte mit: %1" },
77{ "<b>From:</b> %1 <b>To:</b> %2","<b>Vom:</b> %1 <b>Zum:</b> %2" }, 77{ "<b>From:</b> %1 <b>To:</b> %2","<b>Vom:</b> %1 <b>Zum:</b> %2" },
78{ "<b>On:</b> %1","<b>Am:</b> %1" }, 78{ "<b>On:</b> %1","<b>Am:</b> %1" },
79{ "<b>On:</b> %1 <b>From:S</b> %2 <b>To:</b> %3","<b>Am:</b> %1 <b>Vom:S</b> %2 <b>Zum:</b> %3" }, 79{ "<b>On:</b> %1 <b>From:S</b> %2 <b>To:</b> %3","<b>Am:</b> %1 <b>Vom:S</b> %2 <b>Zum:</b> %3" },
80{ "<b>Original event:</b><p>","<b>Original Termin:</b><p>" }, 80{ "<b>Original event:</b><p>","<b>Original Termin:</b><p>" },
81{ " - both are modified after last sync"," - beide wurden nach der letzten Syncronisation verändert" }, 81{ " - both are modified after last sync"," - beide wurden nach der letzten Syncronisation verändert" },
82{ "Busy","Belegt" }, 82{ "Busy","Belegt" },
83{ "&Cancel","Abbre&chen" }, 83{ "&Cancel","Abbre&chen" },
84{ "Cancel","Abbrechen" }, 84{ "Cancel","Abbrechen" },
85{ "Cannot delete To-Do\nwhich has children.","Kann Todo nicht löschen,\n da noch Einträge vorhanden sind" }, 85{ "Cannot delete To-Do\nwhich has children.","Kann Todo nicht löschen,\n da noch Einträge vorhanden sind" },
86{ "Can't generate mail:\nNo event selected.","Kann e-Mail nicht erstellen:\nKein Termin ausgewählt." }, 86{ "Can't generate mail:\nNo event selected.","Kann e-Mail nicht erstellen:\nKein Termin ausgewählt." },
87{ "Categories...","Kategorien..." }, 87{ "Categories...","Kategorien..." },
88{ "Categories","Kategorien" }, 88{ "Categories","Kategorien" },
89{ "Category","Kategorie" }, 89{ "Category","Kategorie" },
90{ "Center View","Zentriere Ansicht" }, 90{ "Center View","Zentriere Ansicht" },
91{ "Change","Ändere" }, 91{ "Change","Ändere" },
92{ "Cinema","Kino" }, 92{ "Cinema","Kino" },
93{ "Click to add a new Todo","Hier klicken, um ein neues Todo anzulegen" }, 93{ "Click to add a new Todo","Hier klicken, um ein neues Todo anzulegen" },
94{ "Clone Item","Klone Eintrag" }, 94{ "Clone Item","Klone Eintrag" },
95{ "&Close","S&chließen" }, 95{ "&Close","S&chließen" },
96{ "Close","Schließen" }, 96{ "Close","Schließen" },
97{ "Close this dialog to abort deletion!","Zum Abbrechen des Löschvorganges Dialog schließen!" }, 97{ "Close this dialog to abort deletion!","Zum Abbrechen des Löschvorganges Dialog schließen!" },
98{ "Colors","Farben" }, 98{ "Colors","Farben" },
99{ "completed","erledigt" }, 99{ "completed","erledigt" },
100{ "completed on %1","erledigt am %1" }, 100{ "completed on %1","erledigt am %1" },
101{ "Complete","Erledigt" }, 101{ "Complete","Erledigt" },
102{ "Confidential","Vertraulich" }, 102{ "Confidential","Vertraulich" },
103{ "Configure...","Einstellungen..." }, 103{ "Configure...","Einstellungen..." },
104{ "Confirm &deletes","Löschvogang bestätigen" }, 104{ "Confirm &deletes","Löschvogang bestätigen" },
105{ "Couldn't load calendar\n '%1'.","Kann Kalender\n '%1' nicht laden." }, 105{ "Couldn't load calendar\n '%1'.","Kann Kalender\n '%1' nicht laden." },
106{ "Counter-event Viewer","Terminzähler Ansicht" }, 106{ "Counter-event Viewer","Terminzähler Ansicht" },
107{ "Daily ending hour:","Feierabend:" }, 107{ "Daily ending hour:","Feierabend:" },
108{ "Daily starting hour:","Anfangszeit:" }, 108{ "Daily starting hour:","Anfangszeit:" },
109{ "Daily","Täglich" }, 109{ "Daily","Täglich" },
110{ "Date Format","Datums Format" }, 110{ "Date Format","Datums Format" },
111{ "Date Format:","Datums Format:" }, 111{ "Date Format:","Datums Format:" },
112{ "DateNavigator:(nr)","Datums Navigator" }, 112{ "DateNavigator:(nr)","Datums Navigator" },
113{ "Dates: ","Datum: " }, 113{ "Dates: ","Datum: " },
114{ "Date && Time","Datum && Zeit" }, 114{ "Date && Time","Datum && Zeit" },
115{ "Day begins at:","Der Tag beginnt um:" }, 115{ "Day begins at:","Der Tag beginnt um:" },
116{ "Days in Next-X-Days:","Tage in Nächste-X-Tage:" }, 116{ "Days in Next-X-Days:","Tage in Nächste-X-Tage:" },
117{ "Days in What's Next:","Tage in What's Next:" }, 117{ "Days in What's Next:","Tage in What's Next:" },
118{ "day(s)","Tag(e)" }, 118{ "day(s)","Tag(e)" },
119{ "Days to show in Next-X-Days view:","Welche Tage in Nächste-X-Tagen anzeigen:" }, 119{ "Days to show in Next-X-Days view:","Welche Tage in Nächste-X-Tagen anzeigen:" },
120{ "day","Tag" }, 120{ "day","Tag" },
121{ "Dec","Dez" }, 121{ "Dec","Dez" },
122{ "December","Dezember" }, 122{ "December","Dezember" },
123{ "Default alarm time:","Standard Alarmzeit:" }, 123{ "Default alarm time:","Standard Alarmzeit:" },
124{ "Default appointment time:","Standard Termin Startzeit:" }, 124{ "Default appointment time:","Standard Termin Startzeit:" },
125{ "Default event color:","Standard Terminfarbe:" }, 125{ "Default event color:","Standard Terminfarbe:" },
126{ "Default","Standard" }, 126{ "Default","Standard" },
127{ "Def. duration of new app.:","Standard Termin Länge:" }, 127{ "Def. duration of new app.:","Standard Termin Länge:" },
128{ "Delete all completed To-Dos?","Alle bereits erledigten Todos löschen?" }, 128{ "Delete all completed To-Dos?","Alle bereits erledigten Todos löschen?" },
129{ "Delete All","Lösche alles" }, 129{ "Delete All","Lösche alles" },
130{ "Delete all selected","Lösche alle Selektierten" }, 130{ "Delete all selected","Lösche alle Selektierten" },
131{ "Delete Current","Aktuellen löschen" }, 131{ "Delete Current","Aktuellen löschen" },
132{ "Delete Event...","Lösche Termin..." }, 132{ "Delete Event...","Lösche Termin..." },
133{ "Delete Event","Lösche Termin" }, 133{ "Delete Event","Lösche Termin" },
134{ "&Delete","Löschen" }, 134{ "&Delete","Löschen" },
135{ "Delete...","Löschen..." }, 135{ "Delete...","Löschen..." },
136{ "Delete","Löschen" }, 136{ "Delete","Löschen" },
137{ "Delete Todo...","Lösche Todo..." }, 137{ "Delete Todo...","Lösche Todo..." },
138{ "Delete To-Do","Lösche Todo" }, 138{ "Delete To-Do","Lösche Todo" },
139{ "Deleting item %d ...","Lösche Eintrag %d..." }, 139{ "Deleting item %d ...","Lösche Eintrag %d..." },
140{ "Descriptions","Beschreibungen" }, 140{ "Descriptions","Beschreibungen" },
141{ "Deselect all","Deselektiere Alle" }, 141{ "Deselect all","Deselektiere Alle" },
142{ "Details","Details" }, 142{ "Details","Details" },
143{ "Dinner","Abendessen" }, 143{ "Dinner","Abendessen" },
144{ "Do you really want\nto close KO/Pi?","Möchten Sie wirklich\nKO/PI verlassen?" }, 144{ "Do you really want\nto close KO/Pi?","Möchten Sie wirklich\nKO/PI verlassen?" },
145{ "Due Date","Fällig am" }, 145{ "Due Date","Fällig am" },
146{ "Due: ","Fällig: "}, 146{ "Due: ","Fällig: "},
147{ "Due Time","Fällig um" }, 147{ "Due Time","Fällig um" },
148{ "Due:","Fällig:"}, 148{ "Due:","Fällig:"},
149{ "Duration: ","Dauer: " }, 149{ "Duration: ","Dauer: " },
150{ "Edit...","Bearbeite..." }, 150{ "Edit...","Bearbeite..." },
151{ "Edit","Bearbeite" }, 151{ "Edit","Bearbeite" },
152{ "Edit Event...","Bearbeite Termin..." }, 152{ "Edit Event...","Bearbeite Termin..." },
153{ "Edit Event","Bearbeite Termin" }, 153{ "Edit Event","Bearbeite Termin" },
154{ "Edit exceptions","Bearbeite Ausnahmen" }, 154{ "Edit exceptions","Bearbeite Ausnahmen" },
155{ "EditorBox:","Editor Fenster:" }, 155{ "EditorBox:","Editor Fenster:" },
156{ "Edit Recurrence Range","Bearbeite Wiederholung" }, 156{ "Edit Recurrence Range","Bearbeite Wiederholung" },
157{ "Edit Todo...","Berabeite Todo..." }, 157{ "Edit Todo...","Berabeite Todo..." },
158{ "Edit To-Do","Todo bearbeiten" }, 158{ "Edit To-Do","Todo bearbeiten" },
159{ "E&mail address:","E&mail Adresse:" }, 159{ "E&mail address:","E&mail Adresse:" },
160{ "(EmptyEmail)","(KeineEmail)" }, 160{ "(EmptyEmail)","(KeineEmail)" },
161{ "(EmptyName)","(KeinName)" }, 161{ "(EmptyName)","(KeinName)" },
162{ "Enable Recurrence","Wiederholender Termin" }, 162{ "Enable Recurrence","Wiederholender Termin" },
163{ "End after","Endet nach"}, 163{ "End after","Endet nach"},
164{ "End by:","Endet am"}, 164{ "End by:","Endet am"},
165{ "End Date","End Datum" }, 165{ "End Date","End Datum" },
166{ "End:","Ende:" }, 166{ "End:","Ende:" },
167{ "End Time","End Zeit" }, 167{ "End Time","End Zeit" },
168{ "English","Englisch" }, 168{ "English","Englisch" },
169{ "Event","Termin" }, 169{ "Event","Termin" },
170{ "Event list","Termin Liste" }, 170{ "Event list","Termin Liste" },
171{ "Events","Termine" }, 171{ "Events","Termine" },
172{ "Event Viewer:","Termin Übersicht:" }, 172{ "Event Viewer:","Termin Übersicht:" },
173{ "every","jede" }, 173{ "every","jede" },
174{ "Exceptions...","Ausnahmen..." }, 174{ "Exceptions...","Ausnahmen..." },
175{ "Exceptions","Ausnahmen" }, 175{ "Exceptions","Ausnahmen" },
176{ "Exclude holidays","Ohne freie Tage" }, 176{ "Exclude holidays","Ohne freie Tage" },
177{ "Exclude Saturdays","Ohne Samstage" }, 177{ "Exclude Saturdays","Ohne Samstage" },
178{ "Feb","Feb" }, 178{ "Feb","Feb" },
179{ "February","Februar" }, 179{ "February","Februar" },
180{ "&Find","Suche!" }, 180{ "&Find","Suche!" },
181{ "Fonts","Schriftart" }, 181{ "Fonts","Schriftart" },
182{ "Force take local entry always","Erzwinge:Nimm immer lokalen Eintrag" }, 182{ "Force take local entry always","Erzwinge:Nimm immer lokalen Eintrag" },
183{ "Force take remote entry always","Erzwinge:Nimm immer fernen Eintrag"}, 183{ "Force take remote entry always","Erzwinge:Nimm immer fernen Eintrag"},
184{ "Free","Frei" }, 184{ "Free","Frei" },
185{ "Friday","Freitag" }, 185{ "Friday","Freitag" },
186{ "Fri","Fr" }, 186{ "Fri","Fr" },
187{ "From:","Vom:" }, 187{ "From:","Vom:" },
188{ "Full &name:","Vor- und &Nachname:" }, 188{ "Full &name:","Vor- und &Nachname:" },
189{ "General","Allgemein" }, 189{ "General","Allgemein" },
190{ "German","Deutsch" }, 190{ "German","Deutsch" },
191{ "Gifts","Geschenke" }, 191{ "Gifts","Geschenke" },
192{ "Go to Today","Heute anzeigen" }, 192{ "Go to Today","Heute anzeigen" },
193{ "Help","Hilfe" }, 193{ "Help","Hilfe" },
194{ "Hide Dates","Daten ausblenden" }, 194{ "Hide Dates","Daten ausblenden" },
195{ "Highlight color:","Markierungen:" }, 195{ "Highlight color:","Markierungen:" },
196{ "Holiday color:","Freie Tage:" }, 196{ "Holiday color:","Freie Tage:" },
197{ "hour(s)","Stunde(n)" }, 197{ "hour(s)","Stunde(n)" },
198{ "In %1 days: ","In %1 Tagen: " }, 198{ "In %1 days: ","In %1 Tagen: " },
199{ "Incomplete Todo:","Unerledigte Aufgaben:" }, 199{ "Incomplete Todo:","Unerledigte Aufgaben:" },
200{ "Information","Information" }, 200{ "Information","Information" },
201{ "Invalid search expression,\ncannot perform ","Kann Suche nicht ausführen" }, 201{ "Invalid search expression,\ncannot perform ","Kann Suche nicht ausführen" },
202{ "Jan","Jan" }, 202{ "Jan","Jan" },
203{ "January","Januar" }, 203{ "January","Januar" },
204{ "JournalView:","Journal Ansicht:" }, 204{ "JournalView:","Journal Ansicht:" },
205{ "Journals","Journale" }, 205{ "Journals","Journale" },
206{ "Jul","Jul" }, 206{ "Jul","Jul" },
207{ "July","Juli" }, 207{ "July","Juli" },
208{ "Jump to date","Springe zum Datum" }, 208{ "Jump to date","Springe zum Datum" },
209{ "June","Juni" }, 209{ "June","Juni" },
210{ "Jun","Jun" }, 210{ "Jun","Jun" },
211{ "Key Bindings...","Tastenzuordnung..." }, 211{ "Key Bindings...","Tastenzuordnung..." },
212{ "Kids","Kinder" }, 212{ "Kids","Kinder" },
213{ "Known Problems...","Bekannte Probleme..." }, 213{ "Known Problems...","Bekannte Probleme..." },
214{ "KO/Pi Find ","KO/Pi Suchdialog " }, 214{ "KO/Pi Find ","KO/Pi Suchdialog " },
215{ "KO/Pi Find: ","KO/Pi Suchen: " }, 215{ "KO/Pi Find: ","KO/Pi Suchen: " },
216{ "KO/Pi is starting ... "," KO/Pi startet ... \n... Zeit für eine Kaffeepause ..." }, 216{ "KO/Pi is starting ... "," KO/Pi startet ... \n... Zeit für eine Kaffeepause ..." },
217{ "Language:(needs restart)","Sprache (Neustart!)" }, 217{ "Language:(needs restart)","Sprache (Neustart!)" },
218{ "Language:","Sprache" }, 218{ "Language:","Sprache" },
219{ "Large","Etwas mehr" }, 219{ "Large","Etwas mehr" },
220{ "List View:","Listenansicht:" }, 220{ "List View:","Listenansicht:" },
221{ "List View","Listenansicht" }, 221{ "List View","Listenansicht" },
222{ "Load/Save","Laden/Speichern" }, 222{ "Load/Save","Laden/Speichern" },
223{ "Load Template","Lade Vorlage" }, 223{ "Load Template","Lade Vorlage" },
224{ "Locale","Localisation" }, 224{ "Locale","Localisation" },
225{ "Local temp file:","Lokale temp. Datei:" }, 225{ "Local temp file:","Lokale temp. Datei:" },
226{ "Location: ","Ort: " }, 226{ "Location: ","Ort: " },
227{ "Location:","Ort:" }, 227{ "Location:","Ort:" },
228{ "Mail client","Mail Programm" }, 228{ "Mail client","Mail Programm" },
229{ "Mail Client","Mail Programm" }, 229{ "Mail Client","Mail Programm" },
230{ "March","März" }, 230{ "March","März" },
231{ "Mar","Mär" }, 231{ "Mar","Mär" },
232{ "May","Mai" }, 232{ "May","Mai" },
233{ "M. Bains line:","M. Bains Linie:" }, 233{ "M. Bains line:","M. Bains Linie:" },
234{ "Medium","Medium" }, 234{ "Medium","Medium" },
235{ "Method","Methode" }, 235{ "Method","Methode" },
236{ "minute(s)","Minute(n)" }, 236{ "minute(s)","Minute(n)" },
237{ "Monday","Montag" }, 237{ "Monday","Montag" },
238{ "Mon","Mo" }, 238{ "Mon","Mo" },
239{ "Monthly","Monatlich" }, 239{ "Monthly","Monatlich" },
240{ "Month not long enough","Monat ist nicht lang genug" }, 240{ "Month not long enough","Monat ist nicht lang genug" },
241{ "month(s)","Monat(e)" }, 241{ "month(s)","Monat(e)" },
242{ "Month view:","Monatsansicht:" }, 242{ "Month view:","Monatsansicht:" },
243{ "Month view uses category colors","Monatsansicht zeigt Kategorie Farben" }, 243{ "Month view uses category colors","Monatsansicht zeigt Kategorie Farben" },
244{ "Todo view uses category colors","To-Do Ansicht zeigt Kategorie Farben" }, 244{ "Todo view uses category colors","To-Do Ansicht zeigt Kategorie Farben" },
245{ "Move &Down","Nach unten verschieben" }, 245{ "Move &Down","Nach unten verschieben" },
246{ "Move &Up","Nach oben verschieben" }, 246{ "Move &Up","Nach oben verschieben" },
247{ "Name:","Name:" }, 247{ "Name:","Name:" },
248{ "Name","Name" }, 248{ "Name","Name" },
249{ "\nAre you sure you want\nto delete this event?","\nSind Sie sicher, dass Sie\nden Termin löschen möchten?" }, 249{ "\nAre you sure you want\nto delete this event?","\nSind Sie sicher, dass Sie\nden Termin löschen möchten?" },
250{ "%n Days","%n Tage" }, 250{ "%n Days","%n Tage" },
251{ "Never","Nie" }, 251{ "Never","Nie" },
252{ "New event...","Neuer Termin..." }, 252{ "New event...","Neuer Termin..." },
253{ "New event","Neuer Termin" }, 253{ "New event","Neuer Termin" },
254{ "New Event...","Neuer Termin..." }, 254{ "New Event...","Neuer Termin..." },
255{ "New Events/Todos should","Neue Termine/Todos sollten" }, 255{ "New Events/Todos should","Neue Termine/Todos sollten" },
256{ "&New","&Neu" }, 256{ "&New","&Neu" },
257{ "New","Neu", }, 257{ "New","Neu", },
258{ "New Sub-Todo...","Neues Sub-Todo..." }, 258{ "New Sub-Todo...","Neues Sub-Todo..." },
259{ "New Todo...","Neues Todo..." }, 259{ "New Todo...","Neues Todo..." },
260{ "Next Alarm: ","Nächster Alarm: ", }, 260{ "Next Alarm: ","Nächster Alarm: ", },
261{ "&Next Day","&Nächster Tag", }, 261{ "&Next Day","&Nächster Tag", },
262{ "Next days view uses full window","Nächste-X-Tage nutzt Vollbild" }, 262{ "Next days view uses full window","Nächste-X-Tage nutzt Vollbild" },
263{ "Next month","Nächster Monat" }, 263{ "Next month","Nächster Monat" },
264{ "&Next Week","&Nächste Woche" }, 264{ "&Next Week","&Nächste Woche" },
265{ "Next year","Nächstes Jahr" }, 265{ "Next year","Nächstes Jahr" },
266{ "Next Year","Nächstes Jahr" }, 266{ "Next Year","Nächstes Jahr" },
267{ "%n h","%n Std" }, 267{ "%n h","%n Std" },
268{ "No ending date","Kein End-Datum", }, 268{ "No ending date","Kein End-Datum", },
269{ "No event, nothing to do.","Kein Termin, nichts zu tun.", }, 269{ "No event, nothing to do.","Kein Termin, nichts zu tun.", },
270{ "No event selected.","Kein Termin selektiert" }, 270{ "No event selected.","Kein Termin selektiert" },
271{ "No","Nein" }, 271{ "No","Nein" },
272{ "No program set","Kein Programm ausgewählt", }, 272{ "No program set","Kein Programm ausgewählt", },
273{ "Normal","Normal" }, 273{ "Normal","Normal" },
274{ "[No selection]","Keine Selektion", }, 274{ "[No selection]","Keine Selektion", },
275{ "No sound set","Kein Sound ausgewählt", }, 275{ "No sound set","Kein Sound ausgewählt", },
276{ "no time ","keine Zeit ", }, 276{ "no time ","keine Zeit ", },
277{ "no time","keine Zeit", }, 277{ "no time","keine Zeit", },
278{ "No Time","Keine Zeit" }, 278{ "No Time","Keine Zeit" },
279{ "November","November" }, 279{ "November","November" },
280{ "Nov","Nov", }, 280{ "Nov","Nov", },
281{ "\nThis event recurs\nover multiple dates.\n","\nDieser Termin wiederholt sich an mehreren Tagen.\n" }, 281{ "\nThis event recurs\nover multiple dates.\n","\nDieser Termin wiederholt sich an mehreren Tagen.\n" },
282{ "occurrence(s)","Vorkommen" }, 282{ "occurrence(s)","Vorkommen" },
283{ "October","Oktober" }, 283{ "October","Oktober" },
284{ "Oct","Okt", }, 284{ "Oct","Okt", },
285{ "O-due!","Ü-fällig! " }, 285{ "O-due!","Ü-fällig! " },
286{ "&OK","&OK" }, 286{ "&OK","&OK" },
287{ "Ok+Show!","Ok+Anzeigen" }, 287{ "Ok+Show!","Ok+Anzeigen" },
288{ "Organizer: %1","Organisator %1" }, 288{ "Organizer: %1","Organisator %1" },
289{ "Organizer","Organisator" }, 289{ "Organizer","Organisator" },
290{ "Owner: ","Besitzer: " }, 290{ "Owner: ","Besitzer: " },
291{ "Owner:","Besitzer:" }, 291{ "Owner:","Besitzer:" },
292{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" }, 292{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" },
293{ "Pick a date to display","Wähle einen Tag zum anzeigen aus" }, 293{ "Pick a date to display","Wähle einen Tag zum anzeigen aus" },
294{ "Please specify a valid due date.","Bitte gültiges Fälligkeitsdatum angeben."}, 294{ "Please specify a valid due date.","Bitte gültiges Fälligkeitsdatum angeben."},
295{ "Please specify a valid end date, for example '%1'.","Bitte gültiges Enddatum angeben, z.B.'%1'." }, 295{ "Please specify a valid end date, for example '%1'.","Bitte gültiges Enddatum angeben, z.B.'%1'." },
296{ "Please specify a valid start date.","Bitte gültiges Startdatum angeben." }, 296{ "Please specify a valid start date.","Bitte gültiges Startdatum angeben." },
297{ "Please specify a valid start date, for example '%1'.","Bitte gültiges Startdatum angeben, z.B. '%1'." }, 297{ "Please specify a valid start date, for example '%1'.","Bitte gültiges Startdatum angeben, z.B. '%1'." },
298{ "Please specify a valid start time.","Bitte gültige Startzeit angeben."}, 298{ "Please specify a valid start time.","Bitte gültige Startzeit angeben."},
299{ "Please specify a valid start time, for example '%1'.","Bitte gültige Startzeit angeben, z.B. '%1'." }, 299{ "Please specify a valid start time, for example '%1'.","Bitte gültige Startzeit angeben, z.B. '%1'." },
300{ "Preferences - some settings need a restart (nr)","Einstellungen - teilweise Neustart erforderlich (bn)" }, 300{ "Preferences - some settings need a restart (nr)","Einstellungen - teilweise Neustart erforderlich (bn)" },
301{ "&Previous Day","Vorheriger Tag" }, 301{ "&Previous Day","Vorheriger Tag" },
302{ "Previous month","Vorheriger Monat" }, 302{ "Previous month","Vorheriger Monat" },
303{ "Previous Month","Vorheriger Monat" }, 303{ "Previous Month","Vorheriger Monat" },
304{ "&Previous Week","Vorherige Woche" }, 304{ "&Previous Week","Vorherige Woche" },
305{ "Previous year","Vorheriges Jahr" }, 305{ "Previous year","Vorheriges Jahr" },
306{ "Previous Year","Vorheriges Jahr" }, 306{ "Previous Year","Vorheriges Jahr" },
307{ "Printing","Drucken" }, 307{ "Printing","Drucken" },
308{ "Priority:","Priorität:" }, 308{ "Priority:","Priorität:" },
309{ "Private","Privat" }, 309{ "Private","Privat" },
310{ "Proceed","Weiter" }, 310{ "Proceed","Weiter" },
311{ "Public","Öffentlich" }, 311{ "Public","Öffentlich" },
312{ "Purge","Entferne" }, 312{ "Purge","Entferne" },
313{ "Purge Completed","Entferne erledigte ToDos" }, 313{ "Purge Completed","Entferne erledigte ToDos" },
314{ "Purge To-Dos","Todos bereinigen" }, 314{ "Purge To-Dos","Todos bereinigen" },
315{ "read-only","schreibgeschützt" }, 315{ "read-only","schreibgeschützt" },
316{ "Recur every","Wiederh. alle" }, 316{ "Recur every","Wiederh. alle" },
317{ "Recur in the month of","Wiederh. im Monat" }, 317{ "Recur in the month of","Wiederh. im Monat" },
318{ "Recur on the","Wiederh. am" }, 318{ "Recur on the","Wiederh. am" },
319{ "Recur on this day","Wiederh. am diesen Tag" }, 319{ "Recur on this day","Wiederh. am diesen Tag" },
320{ "Recurrence Range...","Wiederholungs Zeitraum..." }, 320{ "Recurrence Range...","Wiederholungs Zeitraum..." },
321{ "Recurrence Range","Wiederholungs Zeitraum" }, 321{ "Recurrence Range","Wiederholungs Zeitraum" },
322{ "Recurrence Rule","Wiederholungs Regel" }, 322{ "Recurrence Rule","Wiederholungs Regel" },
323{ "Recurrence","Wiederholung" }, 323{ "Recurrence","Wiederholung" },
324{ "Recurs","Wiederholung" }, 324{ "Recurs","Wiederholung" },
325{"&Reject","Abweisen"}, 325{"&Reject","Abweisen"},
326{ "Reminder:","Alarm:" }, 326{ "Reminder:","Alarm:" },
327{ "Rem.:","Alarm:" }, 327{ "Rem.:","Alarm:" },
328{ "Rem.","Alarm:" }, 328{ "Rem.","Alarm:" },
329{ "Remote file:","Remote Datei:"}, 329{ "Remote file:","Remote Datei:"},
330{ "Remote IP:","Remote (ferne) IP:" }, 330{ "Remote IP:","Remote (ferne) IP:" },
331{ "Remote syncing (via ssh/scp) network settings ","Remote Sync (via ssh/scp) Netzwerk Einstellungen " }, 331{ "Remote syncing (via ssh/scp) network settings ","Remote Sync (via ssh/scp) Netzwerk Einstellungen " },
332{ "Remote user:","Remote Benutzer"}, 332{ "Remote user:","Remote Benutzer"},
333{ "&Remove","Entfe&rnen" }, 333{ "&Remove","Entfe&rnen" },
334{ "Remove","Entfernen" }, 334{ "Remove","Entfernen" },
335{ "Request response","Bemerkung anfordern" }, 335{ "Request response","Bemerkung anfordern" },
336{ "Role:","Rolle:" }, 336{ "Role:","Rolle:" },
337{ "Role","Rolle" }, 337{ "Role","Rolle" },
338{ "Sat","Sa" }, 338{ "Sat","Sa" },
339{ "Saturday","Samstag" }, 339{ "Saturday","Samstag" },
340{ "Search for:","Suche nach:" }, 340{ "Search for:","Suche nach:" },
341{ "Search In","Suche in" }, 341{ "Search In","Suche in" },
342{ "Search...","Suche..." }, 342{ "Search...","Suche..." },
343{ "Search","Suche" }, 343{ "Search","Suche" },
344{ "Select Addresses","Wähle Adressen" }, 344{ "Select Addresses","Wähle Adressen" },
345{ "Select all","Selektiere Alle" }, 345{ "Select all","Selektiere Alle" },
346{ "Select a month","Wähle Monat" }, 346{ "Select a month","Wähle Monat" },
347{ "Select a week","Wähle Woche" }, 347{ "Select a week","Wähle Woche" },
348{ "Select a year","Wähle Jahr" }, 348{ "Select a year","Wähle Jahr" },
349{ "Send directly","Sende direkt" }, 349{ "Send directly","Sende direkt" },
350{ "&Send Messages","&Sende Nachrichten", }, 350{ "&Send Messages","&Sende Nachrichten", },
351{ "Sep","Sep" }, 351{ "Sep","Sep" },
352{ "September","September" }, 352{ "September","September" },
353{ "Shopping","Einkaufen" }, 353{ "Shopping","Einkaufen" },
354{ "Use short date in (WN/E) view","Kurzdatum in (WN/Termin) Ansicht" }, 354{ "Use short date in (WN/E) view","Kurzdatum in (WN/Termin) Ansicht" },
355{ "Show Dates","Zeige Daten" }, 355{ "Show Dates","Zeige Daten" },
356{ "Show events that recur daily in date nav.","Zeige tägl.wiederh.Term.in Datums Nav." }, 356{ "Show events that recur daily in date nav.","Zeige tägl.wiederh.Term.in Datums Nav." },
357{ "Show Event...","Zeige Termin..." }, 357{ "Show Event...","Zeige Termin..." },
358{ "Show ev. that recur weekly in date nav.","Zeige wöch.wiederh.Term.in Datums Nav." }, 358{ "Show ev. that recur weekly in date nav.","Zeige wöch.wiederh.Term.in Datums Nav." },
359{ "Show Marcus Bains line","Zeige Marcus Bains Linie" }, 359{ "Show Marcus Bains line","Zeige Marcus Bains Linie" },
360{ "Show summary after syncing","Zeige Zusammenfassung nach Sync." }, 360{ "Show summary after syncing","Zeige Zusammenfassung nach Sync." },
361{ "Show time as:","Zeige Zeit als" }, 361{ "Show time as:","Zeige Zeit als" },
362{ "Show Todo...","Zeige To-Do" }, 362{ "Show Todo...","Zeige To-Do" },
363{ "Show topmost todo prios in What's N.:","Anz. höchster Prios in What's N.:"}, 363{ "Show topmost todo prios in What's N.:","Anz. höchster Prios in What's N.:"},
364{ "Show topmost todo prios in What's Next:","Anz. höchster Prios in What's Next:"}, 364{ "Show topmost todo prios in What's Next:","Anz. höchster Prios in What's Next:"},
365{ "Show vertical screen (Needs restart)","Vertikaler Bildschirm-Layout (Neustart!)" }, 365{ "Show vertical screen (Needs restart)","Vertikaler Bildschirm-Layout (Neustart!)" },
366{ "&Show","Zeige" }, 366{ "&Show","Zeige" },
367{ "Show...","Zeige..." }, 367{ "Show...","Zeige..." },
368{ "Show","Zeige" }, 368{ "Show","Zeige" },
369{ "Small","Klein" }, 369{ "Small","Klein" },
370{ "Sorry","Entschuldigung" }, 370{ "Sorry","Entschuldigung" },
371{"Sorry, the copy command failed!\nCommand was:\n","Der Kopierbefehl schlug fehl!\nBefehl war:\n"}, 371{"Sorry, the copy command failed!\nCommand was:\n","Der Kopierbefehl schlug fehl!\nBefehl war:\n"},
372{ "Start:","Start:" }, 372{ "Start:","Start:" },
373{ "Start Date","Start Datum" }, 373{ "Start Date","Start Datum" },
374{ "Start date: %1","Start Datum: %1" }, 374{ "Start date: %1","Start Datum: %1" },
375{ "Start Time","Start Zeit" }, 375{ "Start Time","Start Zeit" },
376{ "Status:","Status:" }, 376{ "Status:","Status:" },
377{ "Status","Status:" }, 377{ "Status","Status:" },
378{ "Summaries","Titel" }, 378{ "Summaries","Titel" },
379{ "Summary:","Titel:" }, 379{ "Summary:","Titel:" },
380{ "Summary","Titel" }, 380{ "Summary","Titel" },
381{ "Sunday","Sonntag" }, 381{ "Sunday","Sonntag" },
382{ "Sun","So" }, 382{ "Sun","So" },
383{ "Sync preferences:","Sync Einstellungen" }, 383{ "Sync preferences:","Sync Einstellungen" },
384{ "Sync Prefs","Sync Einstellungen" }, 384{ "Sync Prefs","Sync Einstellungen" },
385{ "Syncronize","Daten abgleich" }, 385{ "Syncronize","Daten abgleich" },
386{ "Take local entry on conflict","Nimm lokalen Eintrag beim Konflikt" }, 386{ "Take local entry on conflict","Nimm lokalen Eintrag beim Konflikt" },
387{ "Take newest entry on conflict","Nimm neuesten Eintrag beim Konflikt" }, 387{ "Take newest entry on conflict","Nimm neuesten Eintrag beim Konflikt" },
388{ "Take remote entry on conflict","Nimm fernen Eintrag beim Konflikt" }, 388{ "Take remote entry on conflict","Nimm fernen Eintrag beim Konflikt" },
389{ "Template '%1' does not contain a valid Todo.","Template '%1' enthält kein gültiges To-Do" }, 389{ "Template '%1' does not contain a valid Todo.","Template '%1' enthält kein gültiges To-Do" },
390{ "Template does not contain a valid Event.","Template '%1' enthält keinen gültigen Termin" }, 390{ "Template does not contain a valid Event.","Template '%1' enthält keinen gültigen Termin" },
391{ "Template...","Vorlage..." }, 391{ "Template...","Vorlage..." },
392{ "This day","Dieser Tag" }, 392{ "This day","Dieser Tag" },
393{ "This is an experimental feature. ","Dieses Feature ist experimentel" }, 393{ "This is an experimental feature. ","Dieses Feature ist experimentel" },
394{ "This item will be\npermanently deleted.","Dieser Eintrag wird\nkomplett gelöscht." }, 394{ "This item will be\npermanently deleted.","Dieser Eintrag wird\nkomplett gelöscht." },
395{ "This item will be permanently deleted.", "Dieser Eintrag wird komplett gelöscht." }, 395{ "This item will be permanently deleted.", "Dieser Eintrag wird komplett gelöscht." },
396{ "Thu","Do" }, 396{ "Thu","Do" },
397{ "Thursday","Donnerstag" }, 397{ "Thursday","Donnerstag" },
398{ "Time associated","Mit Zeit" }, 398{ "Time associated","Mit Zeit" },
399{ "Time bar:","Uhrzeit Zeile:" }, 399{ "Time bar:","Uhrzeit Zeile:" },
400{ "Time && Date","Zeit und Datum" }, 400{ "Time && Date","Zeit und Datum" },
401{ "Time Format","Zeit Format" }, 401{ "Time Format","Zeit Format" },
402{ "Time Format(nr):","Zeit Format(Neustart!)" }, 402{ "Time Format(nr):","Zeit Format(Neustart!)" },
403{ "Date Labels:","Datumsleiste:" }, 403{ "Date Labels:","Datumsleiste:" },
404{ "Time: ","Zeit: " }, 404{ "Time: ","Zeit: " },
405{ "Timezone:","Zeitzone:" }, 405{ "Timezone:","Zeitzone:" },
406{ "To: ","Bis: " }, 406{ "To: ","Bis: " },
407{ "To:","Bis:" }, 407{ "To:","Bis:" },
408{ "Today: ","Heute: " }, 408{ "Today: ","Heute: " },
409{ "Todo due today color:","Heute fällige To-Do's" }, 409{ "Todo due today color:","Heute fällige To-Do's" },
410{ "To-do items:","To-Do items:" }, 410{ "To-do items:","To-Do items:" },
411{ "Todo overdue color:","Überfällige To-Do's" }, 411{ "Todo overdue color:","Überfällige To-Do's" },
412{ "Todo","Todo" }, 412{ "Todo","Todo" },
413{ "To-do view shows completed Todos","To-do Ansicht zeigt erledigte To-dos" }, 413{ "To-do view shows completed Todos","To-do Ansicht zeigt erledigte To-dos" },
414{ "ToDoView:","Todo Ansicht:" }, 414{ "ToDoView:","Todo Ansicht:" },
415{ "Toggle Alarm","Wechsle Alarm" }, 415{ "Toggle Alarm","Wechsle Alarm" },
416{ "Toggle Allday","Umschalten Ganztag" }, 416{ "Toggle Allday","Umschalten Ganztag" },
417{ "Tomorrow: ","Morgen: " }, 417{ "Tomorrow: ","Morgen: " },
418{ "Tue","Di" }, 418{ "Tue","Di" },
419{ "Tuesday","Dienstag" }, 419{ "Tuesday","Dienstag" },
420{ "Two entries are in conflict, if: ","Zwei Einträge haben einen Konflikt, wenn:" }, 420{ "Two entries are in conflict, if: ","Zwei Einträge haben einen Konflikt, wenn:" },
421{ "Unable to find template '%1'.","Kann Vorlage '%1' nicht finden." }, 421{ "Unable to find template '%1'.","Kann Vorlage '%1' nicht finden." },
422{ "Unknown","Unbekannt" }, 422{ "Unknown","Unbekannt" },
423{ "Up","Hinauf" }, 423{ "Up","Hinauf" },
424{ "Use password (if not, ask when syncing)","Passwort: (sonst jedesmal anfragen)" }, 424{ "Use password (if not, ask when syncing)","Passwort: (sonst jedesmal anfragen)" },
425{ "User defined","Benutzerdefiniert" }, 425{ "User defined","Benutzerdefiniert" },
426{ "User long date:","Format langes Datum:" }, 426{ "User long date:","Format langes Datum:" },
427{ "User short date:","Forma kurzes Datum:" }, 427{ "User short date:","Forma kurzes Datum:" },
428{ "View","Ansicht" }, 428{ "View","Ansicht" },
429{ "View Fonts","Schriftarten Ansichten" }, 429{ "View Fonts","Schriftarten Ansichten" },
430{ "Views","Ansichten" }, 430{ "Views","Ansichten" },
431{ "Wed","Mi" }, 431{ "Wed","Mi" },
432{ "Wednesday","Mittwoch" }, 432{ "Wednesday","Mittwoch" },
433{ "Week %1","Woche %1" }, 433{ "Week %1","Woche %1" },
434{ "Weekly","Wöchentlich" }, 434{ "Weekly","Wöchentlich" },
435{ "Week starts on Sunday","Woche beginnt Sonntags" }, 435{ "Week starts on Sunday","Woche beginnt Sonntags" },
436{ "What's Next View:","What's Next Anz." }, 436{ "What's Next View:","What's Next Anz." },
437{ "What's next ?","Was kommt als nächstes?(What's Next)" }, 437{ "What's next ?","Was kommt als nächstes?(What's Next)" },
438{ "Working Hours","Tägliche Arbeitszeit" }, 438{ "Working Hours","Tägliche Arbeitszeit" },
439{ "Working hours color:","Arbeitszeit in der Agenda Ansicht:" }, 439{ "Working hours color:","Arbeitszeit in der Agenda Ansicht:" },
440{ "Write back existing entries only","Nur exisitierende Einträge zurückschreiben" }, 440{ "Write back existing entries only","Nur exisitierende Einträge zurückschreiben" },
441{ "Write back synced file","Syncronisierte Datei zurückschreiben" }, 441{ "Write back synced file","Syncronisierte Datei zurückschreiben" },
442{ "Yearly","Jährlich" }, 442{ "Yearly","Jährlich" },
443{ "year(s)","Jahr(e)" }, 443{ "year(s)","Jahr(e)" },
444{ "Yes","Ja" }, 444{ "Yes","Ja" },
445{ "You have %d item(s) selected.\n","Sie haben %d Einträge ausgewählt.\n" }, 445{ "You have %d item(s) selected.\n","Sie haben %d Einträge ausgewählt.\n" },
446{ "You have to restart KOrganizer for this setting to take effect.","Sie müssem Korganizer neu starten, damit diese Einstellung aktiviert wird." }, 446{ "You have to restart KOrganizer for this setting to take effect.","Sie müssem Korganizer neu starten, damit diese Einstellung aktiviert wird." },
447{ "week(s) on:","Woche(n) am: " }, 447{ "week(s) on:","Woche(n) am: " },
448{ "Full menu bar(nr)","Volle Menuleiste(bn)" }, 448{ "Full menu bar(nr)","Volle Menuleiste(bn)" },
449{ "Timezone has daylight saving","Zeitzone hat Sommerzeit" }, 449{ "Timezone has daylight saving","Zeitzone hat Sommerzeit" },
450{ "Actual start and end is the\nsunday before this date.","Tatsächlicher Beginn/Ende ist der\nSonntag vor diesem Datum!" }, 450{ "Actual start and end is the\nsunday before this date.","Tatsächlicher Beginn/Ende ist der\nSonntag vor diesem Datum!" },
451{ "The year in the date is ignored.","Das Jahr vom Datum wird ignoriert." }, 451{ "The year in the date is ignored.","Das Jahr vom Datum wird ignoriert." },
452{ "Daylight start:","Sommerzeit Beginn:" }, 452{ "Daylight start:","Sommerzeit Beginn:" },
453{ "Daylight end:","Sommerzeit Ende:" }, 453{ "Daylight end:","Sommerzeit Ende:" },
454{ "Time Zone","Zeitzone" }, 454{ "Time Zone","Zeitzone" },
455{ "Monday 19 April 2004: %A %d %B %Y","Montag 19 April 2004: %A %d %B %Y" }, 455{ "Monday 19 April 2004: %A %d %B %Y","Montag 19 April 2004: %A %d %B %Y" },
456{ "%A: Monday --- %a: Mon","%A: Montag --- %a: Mon" }, 456{ "%A: Monday --- %a: Mon","%A: Montag --- %a: Mon" },
457{ "minutely","minütlich" }, 457{ "minutely","minütlich" },
458{ "hourly","stündlich" }, 458{ "hourly","stündlich" },
459{ "daily","täglich" }, 459{ "daily","täglich" },
460{ "weekly","wöchentlich" }, 460{ "weekly","wöchentlich" },
461{ "monthly","monatlich" }, 461{ "monthly","monatlich" },
462{ "day-monthly","tag-monatlich" }, 462{ "day-monthly","tag-monatlich" },
463{ "month-yearly","monat-jährlich" }, 463{ "month-yearly","monat-jährlich" },
464{ "day-yearly","tag-jährlich" }, 464{ "day-yearly","tag-jährlich" },
465{ "position-yearly","pos-jährlich" }, 465{ "position-yearly","pos-jährlich" },
466{ "Edit item on doubleclick (if not, show)","Editiere mit Doppelklick(wenn nicht, zeige)" }, 466{ "Edit item on doubleclick (if not, show)","Editiere mit Doppelklick(wenn nicht, zeige)" },
467{ "Highlight current day in agenda","Hebe >>heute<< in Agenda hervor" }, 467{ "Highlight current day in agenda","Hebe >>heute<< in Agenda hervor" },
468{ "Use light color for highlight current day","Helle Farbe für >>heute<< Hervorhebung" }, 468{ "Use light color for highlight current day","Helle Farbe für >>heute<< Hervorhebung" },
469{ "Highlight selection in Time Edit","Hebe Auswahl in Zeit Edit hervor" }, 469{ "Highlight selection in Time Edit","Hebe Auswahl in Zeit Edit hervor" },
470{ "Hold fullscreen on view change","Behalte Vollbild bei Ansichswechsel" }, 470{ "Hold fullscreen on view change","Behalte Vollbild bei Ansichswechsel" },
471{ "Hold non-fullscreen on view change","Behalte Nicht-Vollbild bei Ansichtsw." }, 471{ "Hold non-fullscreen on view change","Behalte Nicht-Vollbild bei Ansichtsw." },
472{ "Event list view uses full window","Listenansicht nutzt Vollbild" }, 472{ "Event list view uses full window","Listenansicht nutzt Vollbild" },
473{ "Set agenda to DayBeginsAt on change","Setze Agenda auf TagBeginntUm bei Wechsel" }, 473{ "Set agenda to DayBeginsAt on change","Setze Agenda auf TagBeginntUm bei Wechsel" },
474{ "Set agenda to current time on change","Setze Agenda auf gegenw.Zeit bei Wechsel" }, 474{ "Set agenda to current time on change","Setze Agenda auf gegenw.Zeit bei Wechsel" },
475{ "Listview uses monthly timespan","Listenansicht zeigt monatliche Zeitspanne" }, 475{ "Listview uses monthly timespan","Listenansicht zeigt monatliche Zeitspanne" },
476{ "ViewChange","Ansichtswechsel" }, 476{ "ViewChange","Ansichtswechsel" },
477{ "Default alarm *.wav file:","Standard Alarm *.wav Datei:" }, 477{ "Default alarm *.wav file:","Standard Alarm *.wav Datei:" },
478{ "This setting is useless for 5500 user!","Diese Einst. ist nutzlos für 5500 Nutzer" }, 478{ "This setting is useless for 5500 user!","Diese Einst. ist nutzlos für 5500 Nutzer" },
479{ "File","Datei" }, 479{ "File","Datei" },
480{ "Clone...","Dupliziere.." }, 480{ "Clone...","Dupliziere.." },
481{ "Move...","Bewege..." }, 481{ "Move...","Bewege..." },
482{ "Beam...","Sende via IR..." }, 482{ "Beam...","Sende via IR..." },
483{ "&Clone...","Dupliziere.." }, 483{ "&Clone...","Dupliziere.." },
484{ "&Move...","Bewege..." }, 484{ "&Move...","Bewege..." },
485{ "&Beam...","Sende via IR..." }, 485{ "&Beam...","Sende via IR..." },
486{ "Show Completed","Zeige erledigte Todos" }, 486{ "Show Completed","Zeige erledigte Todos" },
487{ "Show Quick Todo","Zeige Quick Todo" }, 487{ "Show Quick Todo","Zeige Quick Todo" },
488{ "Unparent Todo","Un-sub Todo" }, 488{ "Unparent Todo","Un-sub Todo" },
489{ "Save selected to file...","Speichere Selektierte..." }, 489{ "Save selected to file...","Speichere Selektierte..." },
490{ "Add Categ. to selected...","Füge zu Selekt. Kateg. hinzu..." }, 490{ "Add Categ. to selected...","Füge zu Selekt. Kateg. hinzu..." },
491{ "Set Categ. for selected...","Setze Kateg. für Selekt." }, 491{ "Set Categ. for selected...","Setze Kateg. für Selekt." },
492{ "Beam selected via IR","Sende Selekt. via IR..." }, 492{ "Beam selected via IR","Sende Selekt. via IR..." },
493{ "Search","Suchen" }, 493{ "Search","Suchen" },
494{ "Date Picker","Datum auswählen" }, 494{ "Date Picker","Datum auswählen" },
495{ "Day View","Tagesansicht" }, 495{ "Day View","Tagesansicht" },
496{ "Work Week","Arbeitswoche" }, 496{ "Work Week","Arbeitswoche" },
497{ "Week","Wochenansicht" }, 497{ "Week","Wochenansicht" },
498{ "Month","Monatsansicht" }, 498{ "Month","Monatsansicht" },
499{ "Todo View","Todo Liste" }, 499{ "Todo View","Todo Liste" },
500{ "Journal","Journal Ansicht" }, 500{ "Journal","Journal Ansicht" },
501{ "Next days","Nächste Tage" }, 501{ "Next days","Nächste Tage" },
502{ "Print agenda selection...","Drucke Agendaselektion..." }, 502{ "Print agenda selection...","Drucke Agendaselektion..." },
503{ "Toggle DateNavigator","Navigator umschalten" }, 503{ "Toggle DateNavigator","Navigator umschalten" },
504{ "Toggle FilterView","Filteransicht umschalten" }, 504{ "Toggle FilterView","Filteransicht umschalten" },
505{ "Prev. month","Vorheriger Monat" }, 505{ "Prev. month","Vorheriger Monat" },
506{ "Go backward","Gehe zurück" }, 506{ "Go backward","Gehe zurück" },
507{ "Go forward","Gehe weiter" }, 507{ "Go forward","Gehe weiter" },
508{ "Synchronize","Synchronisieren" }, 508{ "Synchronize","Synchronisieren" },
509{ "AgendaSize","Agendagröße" }, 509{ "AgendaSize","Agendagröße" },
510{ "Import (*.ics/*.vcs) file","Importiere (*.ics/*.vcs) Datei" }, 510{ "Import (*.ics/*.vcs) file","Importiere (*.ics/*.vcs) Datei" },
511{ "Import last file","Importiere letzte Datei" }, 511{ "Import last file","Importiere letzte Datei" },
512{ "Import Opie/Qtopia Cal.","Importiere Opie/Qtopia Kal." }, 512{ "Import Opie/Qtopia Cal.","Importiere Opie/Qtopia Kal." },
513{ "Load Calendar Backup","Lade Kalender Backup" }, 513{ "Load Calendar Backup","Lade Kalender Backup" },
514{ "Save Calendar Backup","Speichere Kalender Backup" }, 514{ "Save Calendar Backup","Speichere Kalender Backup" },
515{ "Export VCalendar","Exportiere VCalendar" }, 515{ "Export VCalendar","Exportiere VCalendar" },
516{ "Manage new categories...","Verwalte neue Kategorien..." }, 516{ "Manage new categories...","Verwalte neue Kategorien..." },
517{ "Beam complete calendar...","Sende kompletten Kalender via IR" }, 517{ "Beam complete calendar...","Sende kompletten Kalender via IR" },
518{ "Beam filtered calendar...","Sende gefilterten Kalender via IR" }, 518{ "Beam filtered calendar...","Sende gefilterten Kalender via IR" },
519{ "Remote via ssh","Über Netzwerk via ssh" }, 519{ "Remote via ssh","Über Netzwerk via ssh" },
520{ "With local file","Mit lokaler Datei" }, 520{ "With local file","Mit lokaler Datei" },
521{ "With last file","Mit letzter Datei" }, 521{ "With last file","Mit letzter Datei" },
522{ "KO/Pi: Ready for beaming","KO/Pi: Bereit zum Senden" }, 522{ "KO/Pi: Ready for beaming","KO/Pi: Bereit zum Senden" },
523{ "KO/Pi:Beaming done","KO/Pi: Senden erfolgt" }, 523{ "KO/Pi:Beaming done","KO/Pi: Senden erfolgt" },
524{ "Save filename","Speichern: Dateinamen wählen" }, 524{ "Save filename","Speichern: Dateinamen wählen" },
525{ "File already exists!\nOld file from:\n%1\nOverwrite?\n","Dateiname existiert bereits!\nAlte Datei vom:\n%1\nÜberschreiben?\n" }, 525{ "File already exists!\nOld file from:\n%1\nOverwrite?\n","Dateiname existiert bereits!\nAlte Datei vom:\n%1\nÜberschreiben?\n" },
526{ "KO/Pi: Warning!","KO/Pi: Warnung!" }, 526{ "KO/Pi: Warning!","KO/Pi: Warnung!" },
527{ "Overwrite!","Überschreibe!" }, 527{ "Overwrite!","Überschreibe!" },
528{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" }, 528{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" },
529{ "All selected items will be\npermanently deleted.\n(Deleting items will take\nsome time on a PDA)\n","Alle selektierten Einträge werden\nunwiederbringlich gelöscht.\n(Löschen kann auf dem\nPDA einige Zeit dauern)\n" }, 529{ "All selected items will be\npermanently deleted.\n(Deleting items will take\nsome time on a PDA)\n","Alle selektierten Einträge werden\nunwiederbringlich gelöscht.\n(Löschen kann auf dem\nPDA einige Zeit dauern)\n" },
530{ "KO/Pi Confirmation","KO/Pi Bestätigung" }, 530{ "KO/Pi Confirmation","KO/Pi Bestätigung" },
531{ "Close dialog to abort deletion!","Schließe Dialog um das Löschen abzubrechen!" }, 531{ "Close dialog to abort deletion!","Schließe Dialog um das Löschen abzubrechen!" },
532{ "Deleting item %d ...","Lösche Eintrag %d ..." }, 532{ "Deleting item %d ...","Lösche Eintrag %d ..." },
533{ "%d items remaining in list.","%d Einträge sind in der Liste verblieben." }, 533{ "%d items remaining in list.","%d Einträge sind in der Liste verblieben." },
534{ "Size","Größe" }, 534{ "Size","Größe" },
535{ "Date","Datum" }, 535{ "Date","Datum" },
536{ "Mime Type","Datei Typ" }, 536{ "Mime Type","Datei Typ" },
537{ "All Files","Alle Dateien" }, 537{ "All Files","Alle Dateien" },
538{ "Files","Dateien" }, 538{ "Files","Dateien" },
539{ "Documents","DoKumente" }, 539{ "Documents","DoKumente" },
540{ "Select Categories","Selektiere Kategorien" }, 540{ "Select Categories","Selektiere Kategorien" },
541{ " &Deselect All "," Auswahl aufheben " }, 541{ " &Deselect All "," Auswahl aufheben " },
542{ "A&dd","Hinzu" }, 542{ "A&dd","Hinzu" },
543{ "&Modify","Ändern" }, 543{ "&Modify","Ändern" },
544{ "Edit Categories","Editiere Kategorien" }, 544{ "Edit Categories","Editiere Kategorien" },
545{ " &Edit Categories "," &Editiere Kategorien " }, 545{ " &Edit Categories "," &Editiere Kategorien " },
546{ "Beam Options","Beam Einstellungen" }, 546{ "Beam Options","Beam Einstellungen" },
547{ " With timezone "," Mit Zeitzone " }, 547{ " With timezone "," Mit Zeitzone " },
548{ " Local time ", " Lokale Zeit " }, 548{ " Local time ", " Lokale Zeit " },
549{ "Manage new Categories","Verwalte neue Kategorien" }, 549{ "Manage new Categories","Verwalte neue Kategorien" },
550{ "Add to category list","Füge zur Kategorieliste hinzu" }, 550{ "Add to category list","Füge zur Kategorieliste hinzu" },
551{ "Remove from Events/Todos","Entferne von Terminen/Todos" }, 551{ "Remove from Events/Todos","Entferne von Terminen/Todos" },
552{ "After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n ","Nach dem Importieren/Laden/Syncen\nkann es neue Kategorien in den \nTerminen oder Todos geben, die nicht\nin der Kategorieliste enthalten sind.\nBitte wählen Sie, was passieren soll:\n " }, 552{ "After importing/loading/syncing\nthere may be new categories in\nevents or todos\nwhich are not in the category list.\nPlease choose what to do:\n ","Nach dem Importieren/Laden/Syncen\nkann es neue Kategorien in den \nTerminen oder Todos geben, die nicht\nin der Kategorieliste enthalten sind.\nBitte wählen Sie, was passieren soll:\n " },
553{ "New categories not in list:","Kategorien, die nicht in der Liste sind:" }, 553{ "New categories not in list:","Kategorien, die nicht in der Liste sind:" },
554{ "File format","Datei Format" }, 554{ "File format","Datei Format" },
555{ "Time format","Zeit Format" }, 555{ "Time format","Zeit Format" },
556{ "Delete all\ncompleted To-Dos?","Lösche alle\nerledigten To-Dos?" }, 556{ "Delete all\ncompleted To-Dos?","Lösche alle\nerledigten To-Dos?" },
557{ "KO/Pi:Saving Data to File ...","KO/Pi: Speichere Kalender in Datei ..." }, 557{ "KO/Pi:Saving Data to File ...","KO/Pi: Speichere Kalender in Datei ..." },
558{ "KO/Pi:File Saved. Needed %d sec, %d ms","KO/Pi: Abgespeichert in %d sec, %d ms" }, 558{ "KO/Pi:File Saved. Needed %d sec, %d ms","KO/Pi: Abgespeichert in %d sec, %d ms" },
559{ "h","Std" }, 559{ "h","Std" },
560{ "min","Min" }, 560{ "min","Min" },
561{ "hou","Std" }, 561{ "hou","Std" },
562{ "day","Tag" }, 562{ "day","Tag" },
563{ "French","Französich" }, 563{ "French","Französich" },
564{ "Time","Zeit" }, 564{ "Time","Zeit" },
565{ "Event Viewer","Termin Ansicht" }, 565{ "Event Viewer","Termin Ansicht" },
566{ "Cancel Sync","Sync Abbrechen" }, 566{ "Cancel Sync","Sync Abbrechen" },
567{ "Remote","Fern" }, 567{ "Remote","Fern" },
568{ "Local","Lokal" }, 568{ "Local","Lokal" },
569{ "Conflict! Please choose entry","Konflikt! Bitte Eintrag wählen" }, 569{ "Conflict! Please choose entry","Konflikt! Bitte Eintrag wählen" },
570{ "Local: ","Lokal: " }, 570{ "Local: ","Lokal: " },
571{ "Remote: ","Fern: " }, 571{ "Remote: ","Fern: " },
572{ "Last modified: ","Zuletzt geändert: " }, 572{ "Last modified: ","Zuletzt geändert: " },
573{ "Location: ","Ort: " }, 573{ "Location: ","Ort: " },
574{ "<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>","<p><b>Von:</b> %1 </p><p><b>Bis:</b> %2</p>" }, 574{ "<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>","<p><b>Von:</b> %1 </p><p><b>Bis:</b> %2</p>" },
575{ "<p><b>On:</b> %1</p>","<p><b>Am:</b> %1</p>" }, 575{ "<p><b>On:</b> %1</p>","<p><b>Am:</b> %1</p>" },
576{ "<p><b>From:</b> %1</p> ","<p><b>Von:</b> %1</p> " }, 576{ "<p><b>From:</b> %1</p> ","<p><b>Von:</b> %1</p> " },
577{ "<p><b>To:</b> %1</p>","<p><b>Bis:</b> %1</p>" }, 577{ "<p><b>To:</b> %1</p>","<p><b>Bis:</b> %1</p>" },
578{ "<p><b>On:</b> %1</p> ","<p><b>Am:</b> %1</p> " }, 578{ "<p><b>On:</b> %1</p> ","<p><b>Am:</b> %1</p> " },
579{ "<p><b>From:</b> %1 <b>To:</b> %2</p>","<p><b>Von:</b> %1 <b>Bis:</b> %2</p>" }, 579{ "<p><b>From:</b> %1 <b>To:</b> %2</p>","<p><b>Von:</b> %1 <b>Bis:</b> %2</p>" },
580{ "This is a %1 recurring event.","Das ist ein %1 wiederholender Termin." }, 580{ "This is a %1 recurring event.","Das ist ein %1 wiederholender Termin." },
581{ "<b>Next recurrence is on:</b>","<b>Nächste Wiederholung ist am:</b>" }, 581{ "<b>Next recurrence is on:</b>","<b>Nächste Wiederholung ist am:</b>" },
582{ "<b>Last recurrence was on:</b>","<b>Letzte Wiederholung war am:</b>" }, 582{ "<b>Last recurrence was on:</b>","<b>Letzte Wiederholung war am:</b>" },
583{ "( %1 min before )","( %1 min vorher )" }, 583{ "( %1 min before )","( %1 min vorher )" },
584{ "<b>Alarm on: ","<b>Alarm am: " }, 584{ "<b>Alarm on: ","<b>Alarm am: " },
585{ "<b>Details: </b>","<b>Details: </b>" }, 585{ "<b>Details: </b>","<b>Details: </b>" },
586{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" }, 586{ "<p><b>Priority:</b> %2</p>","<p><b>Priorität:</b> %2</p>" },
587{ "<p><i>%1 % completed</i></p>","<p><i>%1 % erledigt</i></p>" }, 587{ "<p><i>%1 % completed</i></p>","<p><i>%1 % erledigt</i></p>" },
588{ "Organizer","Organisator" }, 588{ "Organizer","Organisator" },
589{ "Save","Speichern" }, 589{ "Save","Speichern" },
590{ "Exit (+save)","Beenden (+ speichern)" }, 590{ "Exit (+save)","Beenden (+ speichern)" },
591{ "Home","Zuhause" }, 591{ "Home","Zuhause" },
592{ "Office","Büro" }, 592{ "Office","Büro" },
593{ "Libary","Bücherei" }, 593{ "Libary","Bücherei" },
594{ "Doctor","Arzt" }, 594{ "Doctor","Arzt" },
595{ "Beach","Strand" }, 595{ "Beach","Strand" },
596{ "Conference room","Konferenzraum" }, 596{ "Conference room","Konferenzraum" },
597{ "Drive Home","Heimfahrt" }, 597{ "Drive Home","Heimfahrt" },
598{ "Watch TV","Tv gucken" }, 598{ "Watch TV","Tv gucken" },
599{ "Phone call","Telefonanruf" }, 599{ "Phone call","Telefonanruf" },
600{ "Pay bill","Rechnung bezahlen" }, 600{ "Pay bill","Rechnung bezahlen" },
601{ "Read book","Buch lesen" }, 601{ "Read book","Buch lesen" },
602{ "Watering plants","Pflanzen giessen" }, 602{ "Watering plants","Pflanzen giessen" },
603{"Appointment","Verabredung" }, 603{"Appointment","Verabredung" },
604{"Birthday","Geburtstag" }, 604{"Birthday","Geburtstag" },
605{"Business","Geschäft" }, 605{"Business","Geschäft" },
606{"Business Travel","Geschäftsreise" }, 606{"Business Travel","Geschäftsreise" },
607{"Cinema","Kino" }, 607{"Cinema","Kino" },
608{"Customer","Kunde" }, 608{"Customer","Kunde" },
609{"Break","Pause" }, 609{"Break","Pause" },
610{"Breakfast","Frühstück" }, 610{"Breakfast","Frühstück" },
611{"Competition","Wettkampf" }, 611{"Competition","Wettkampf" },
612{"Dinner","Abendessen" }, 612{"Dinner","Abendessen" },
613{"Education","Erziehung" }, 613{"Education","Erziehung" },
614{"Family","Familie" }, 614{"Family","Familie" },
615{"Favorites","Favoriten" }, 615{"Favorites","Favoriten" },
616{"Festival","Festival" }, 616{"Festival","Festival" },
617{"Fishing","Angeln" }, 617{"Fishing","Angeln" },
618{"Flight","Flug" }, 618{"Flight","Flug" },
619{"Gifts","Geschenk" }, 619{"Gifts","Geschenk" },
620{"Holiday","Feiertag" }, 620{"Holiday","Feiertag" },
621{"Holiday Cards","Ansichtskarten" }, 621{"Holiday Cards","Ansichtskarten" },
622{"Hot Contacts","Heisse Kontakte" }, 622{"Hot Contacts","Heisse Kontakte" },
623{"Hiking","Wandern" }, 623{"Hiking","Wandern" },
624{"Hunting","Jagen" }, 624{"Hunting","Jagen" },
625{"Key Customer","Wichtiger Kunde" }, 625{"Key Customer","Wichtiger Kunde" },
626{"Kids","Kinder" }, 626{"Kids","Kinder" },
627{"Lunch","Mittagessen" }, 627{"Lunch","Mittagessen" },
628{"Meeting","Treffen" }, 628{"Meeting","Treffen" },
629{"Miscellaneous","Verschiedenes" }, 629{"Miscellaneous","Verschiedenes" },
630{"Partner","Partner" }, 630{"Partner","Partner" },
631{"Party","Partie" }, 631{"Party","Partie" },
632{"Personal","Privat" }, 632{"Personal","Privat" },
633{"Personal Travel","Privatreise"}, 633{"Personal Travel","Privatreise"},
634{"PHB","PHB" }, 634{"PHB","PHB" },
635{"Phone Calls","Telefonanruf" }, 635{"Phone Calls","Telefonanruf" },
636{"Projects","Projekt" }, 636{"Projects","Projekt" },
637{"Recurring","Wiederholend" }, 637{"Recurring","Wiederholend" },
638{"School","Schule" }, 638{"School","Schule" },
639{"Shopping","Einkaufen" }, 639{"Shopping","Einkaufen" },
640{"Speach","Rede" }, 640{"Speach","Rede" },
641{"Special Occasion","Spez.Gelegenheit" }, 641{"Special Occasion","Spez.Gelegenheit" },
642{"Sports","Sport" }, 642{"Sports","Sport" },
643{"Talk","Vortrag" }, 643{"Talk","Vortrag" },
644{"Travel","Reise" }, 644{"Travel","Reise" },
645{"TV","TV" }, 645{"TV","TV" },
646{"Germany","Deutschland" }, 646{"Germany","Deutschland" },
647{"Sweden","Schweden" }, 647{"Sweden","Schweden" },
648{"Forest","Wald" }, 648{"Forest","Wald" },
649{ "Desert","Wüste" }, 649{ "Desert","Wüste" },
650{ "Kitchen","Küche" }, 650{ "Kitchen","Küche" },
651{ "Lake","See" }, 651{ "Lake","See" },
652{"University","Universität"}, 652{"University","Universität"},
653{"Vacation","Urlaub" }, 653{"Vacation","Urlaub" },
654{"VIP","VIP" }, 654{"VIP","VIP" },
655{ "Import Sharp Calendar","Importiere Sharp Kalender" }, 655{ "Import Sharp Calendar","Importiere Sharp Kalender" },
656{ "This todo has been cancelled!","Dieses Todo wurde gecancelt!" }, 656{ "This todo has been cancelled!","Dieses Todo wurde gecancelt!" },
657{ "This event has been cancelled!","Dieser Termin wurde gecancelt!" }, 657{ "This event has been cancelled!","Dieser Termin wurde gecancelt!" },
658{ "Cancelled","Gecancelt" }, 658{ "Cancelled","Gecancelt" },
659{ "Multiple sync","Mehrfach Sync" }, 659{ "Multiple sync","Mehrfach Sync" },
660{ "Local file","Lokale Datei" }, 660{ "Local file","Lokale Datei" },
661{ "Last file","Letzte Datei" }, 661{ "Last file","Letzte Datei" },
662{ "Keys + Colors...","Tasten + Farben..." }, 662{ "Keys + Colors...","Tasten + Farben..." },
663{ "Mini icons in toolbar(nr)","Mini Icons in ToolBar(bn)" }, 663{ "Mini icons in toolbar(nr)","Mini Icons in ToolBar(bn)" },
664{ "Quick load/save (w/o Unicode)","Schnelles Laden/Speichern (o Unicode)" }, 664{ "Quick load/save (w/o Unicode)","Schnelles Laden/Speichern (o Unicode)" },
665{ "Choose...","Wähle..." }, 665{ "Choose...","Wähle..." },
666{ "Use colors for application:","Setze Farben für Programm:" }, 666{ "Use colors for application:","Setze Farben für Programm:" },
667{ "Buttons, menus, etc.:","Knöpfe, Menu, etc.:" }, 667{ "Buttons, menus, etc.:","Knöpfe, Menu, etc.:" },
668{ "Frames, labels, etc.:","Rahmen, Label, etc.:" }, 668{ "Frames, labels, etc.:","Rahmen, Label, etc.:" },
669{ "Show parent To-Do's in What's Next view","Zeige Ober-Todo in What's Next Anz." }, 669{ "Show parent To-Do's in What's Next view","Zeige Ober-Todo in What's Next Anz." },
670{ "Show location in What's Next view","Zeige Ort in What's Next Anz." }, 670{ "Show location in What's Next view","Zeige Ort in What's Next Anz." },
671{ "Show events that recur ","Zeige Termine, die sich wiederholen:" }, 671{ "Show events that recur ","Zeige Termine, die sich wiederholen:" },
672{ "Show in every cell ","Zeige in jeder Zelle " }, 672{ "Show in every cell ","Zeige in jeder Zelle " },
673{ "short month","kurzen Monat" }, 673{ "short month","kurzen Monat" },
674{ "icons","Icons" }, 674{ "icons","Icons" },
675{ "Show Sat/Sun together","Zeige Sam/Son zusammen" }, 675{ "Show Sat/Sun together","Zeige Sam/Son zusammen" },
676{ "Categorie colors are applied to text","Kategorie Farben färben Text" }, 676{ "Categorie colors are applied to text","Kategorie Farben färben Text" },
677{ "Month view uses day colors","Monatsansicht zeigt Tagesfarben" }, 677{ "Month view uses day colors","Monatsansicht zeigt Tagesfarben" },
678{ "Day color odd months","Tagesfarbe ungerade Monate" }, 678{ "Day color odd months","Tagesfarbe ungerade Monate" },
679{ "Day color even months","Tagesfarbe gerade Monate" }, 679{ "Day color even months","Tagesfarbe gerade Monate" },
680{ "Color for Sundays + category \"Holiday\"","Farbe für Sonntag + Kateg.\" Feiertag\"" }, 680{ "Color for Sundays + category \"Holiday\"","Farbe für Sonntag + Kateg.\" Feiertag\"" },
681{ "To-do view shows complete as 'xx %'","Zeige Prozent erledigt als 'xx %'" }, 681{ "To-do view shows complete as 'xx %'","Zeige Prozent erledigt als 'xx %'" },
682{ "Small To-do view uses smaller font","Kleine To-do Ansicht nutzt kleineren Font" }, 682{ "Small To-do view uses smaller font","Kleine To-do Ansicht nutzt kleineren Font" },
683{ "Colors are applied to text","Farben werden auf Text angewendet" }, 683{ "Colors are applied to text","Farben werden auf Text angewendet" },
684{ "Use internal alarm notification","Nutze interne Alarm Benachrichtigung" }, 684{ "Use internal alarm notification","Nutze interne Alarm Benachrichtigung" },
685{ "Note: KO/Pi must be running to notify you about an alarm. Recommended for use on Zaurus: Disable this option and install KO/Pi alarm applet.\n","Achtung: KO/Pi muß ausgeführt werden damit die Benachrichtigung funktioniert. Empfehlung für Zaurus: Diese Option nicht wählen und KO/Pi Alarm Applet installieren.\n" }, 685{ "Note: KO/Pi must be running to notify you about an alarm. Recommended for use on Zaurus: Disable this option and install KO/Pi alarm applet.\n","Achtung: KO/Pi muß ausgeführt werden damit die Benachrichtigung funktioniert. Empfehlung für Zaurus: Diese Option nicht wählen und KO/Pi Alarm Applet installieren.\n" },
686{ "Play beeps count:","Anzahl der Alarmpiepse: " }, 686{ "Play beeps count:","Anzahl der Alarmpiepse: " },
687{ "Beeps interval in sec:","Zeitintervall der Alarmpiepse: " }, 687{ "Beeps interval in sec:","Zeitintervall der Alarmpiepse: " },
688{ "Default suspend time in min:","Standard Supendierungs Zeit: " }, 688{ "Default suspend time in min:","Standard Supendierungs Zeit: " },
689{ "Auto suspend count:","Anzahl der auto Suspendierungen" }, 689{ "Auto suspend count:","Anzahl der auto Suspendierungen" },
690{ "Alarm *.wav file for newly created alarm:","Alarm *.wav Datei für neu angelegte Alarme:" }, 690{ "Alarm *.wav file for newly created alarm:","Alarm *.wav Datei für neu angelegte Alarme:" },
691{ "New profile","Neues Profil" }, 691{ "New profile","Neues Profil" },
692{ "Clone profile","Klone Profil" }, 692{ "Clone profile","Klone Profil" },
693{ "Delete profile","Lösche Profil" }, 693{ "Delete profile","Lösche Profil" },
694{ "Profile:","Profil:" }, 694{ "Profile:","Profil:" },
695{ "Include in multiple sync","Beziehe Profil in mehrfach Sync mit ein" }, 695{ "Include in multiple sync","Beziehe Profil in mehrfach Sync mit ein" },
696{ "Force: Take local entry always","Erzwinge: Nimm immer lokalen Eintrag" }, 696{ "Force: Take local entry always","Erzwinge: Nimm immer lokalen Eintrag" },
697{ "Force: Take remote entry always","Erzwinge: Nimm immer fernen Eintrag" }, 697{ "Force: Take remote entry always","Erzwinge: Nimm immer fernen Eintrag" },
698{ "Show summary after sync","Zeige Zusammenfassung nach dem Synchronisieren" }, 698{ "Show summary after sync","Zeige Zusammenfassung nach dem Synchronisieren" },
699{ "Write back file","Schreibe Datei zurück" }, 699{ "Write back file","Schreibe Datei zurück" },
700{ "Remote file (w down/upload command)","Entfernte Datei (via down/upload Kommando)" }, 700{ "Remote file (w down/upload command)","Entfernte Datei (via down/upload Kommando)" },
701{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" }, 701{ "Pre sync (download) command:","Bevor Sync (download) Kommando:" },
702{ "Local device name:","Name dieses Gerätes:" }, 702{ "Local device name:","Name dieses Gerätes:" },
703{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" }, 703{ "Ask for preferences before sync","Frage nach Synchronisationseinstellungen vor dem Syncen" },
704{ "Sync preferences","Synchronisations Einstellungen" }, 704{ "Sync preferences","Synchronisations Einstellungen" },
705{ "Profile kind","Profil Art" }, 705{ "Profile kind","Profil Art" },
706{ "Local file","Lokale Datei" }, 706{ "Local file","Lokale Datei" },
707{ "Local file:","Lokale Datei:" }, 707{ "Local file:","Lokale Datei:" },
708{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" }, 708{ "Post sync (upload) command:","Nach Sync (upload) Kommando:" },
709{ "Fill in default values for:","Setze Beispiel Werte ein für:" }, 709{ "Fill in default values for:","Setze Beispiel Werte ein für:" },
710{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" }, 710{ "Hint: Use $PWD$ for placeholder of password!","Hinweis: Benutze $PWD$ als Platzhalter für ein Passwort!" },
711{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"}, 711{ "Synchronization Preferences","Einstellungen der Synchronisationsprofile"},
712{ "Device","Gerät:" }, 712{ "Device","Gerät:" },
713{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" }, 713{ "Sync with file \n...%1\nfrom:\n%2\n","Sync mit Datei \n...%1\nvom:\n%2\n" },
714{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n","Synchronisationsübersicht:\n\n %d items lokal hinzugefügt\n %d items entfernt hinzugefügt\n %d items lokal geändert\n %d items entfernt geändert\n %d items lokal gelöscht\n %d items entfernt gelöscht\n" }, 714{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n","Synchronisationsübersicht:\n\n %d items lokal hinzugefügt\n %d items entfernt hinzugefügt\n %d items lokal geändert\n %d items entfernt geändert\n %d items lokal gelöscht\n %d items entfernt gelöscht\n" },
715{ "Synchronization successful","Synchronisation erfolgreich" }, 715{ "Synchronization successful","Synchronisation erfolgreich" },
716{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." }, 716{ "Sync cancelled or failed. Nothing synced.","Sync abgebrochen oder fehlgeschlagen. Nichts wurde gesynced." },
717{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" }, 717{ "Sync file \n...%1\ndoes not exist!\nNothing synced!\n","Sync Datei \n...%1\nexistiert nicht!\nNichts wurde gesynced!\n" },
718{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" }, 718{ "Sync filename(*.ics/*.vcs)","Sync Dateiname(*.ics/*.vcs)" },
719{ "Enter password","Passwort eingeben" }, 719{ "Enter password","Passwort eingeben" },
720{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" }, 720{ "Do you really want\nto remote sync\nwith profile \n","Wollen Sie wirklich\nmit dem entfernten\nProfil syncen: \n" },
721{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." }, 721{ "Copy remote file to local machine...","Kopiere entfernte Datei auf lokalen Rechner..." },
722{ "Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n","Sorry, das Kopierkommando schlug fehl!\nKommando war:\n%1\n \nVersuche Kommando von Kosole um\nDetails für das Fehlschlagen\nzu erfahren.\n" }, 722{ "Sorry, the copy command failed!\nCommand was:\n%1\n \nTry command on console to get more\ndetailed info about the reason.\n","Sorry, das Kopierkommando schlug fehl!\nKommando war:\n%1\n \nVersuche Kommando von Kosole um\nDetails für das Fehlschlagen\nzu erfahren.\n" },
723{ "Writing back file result: ","Resultat des Dateizurückschreibens: " }, 723{ "Writing back file result: ","Resultat des Dateizurückschreibens: " },
724{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" }, 724{ "Syncronization sucessfully completed","Synchronisation erfolgreich abgeschlossen" },
725{ "Edit Calendar Filters","Editiere Kalendar Filter" }, 725{ "Edit Calendar Filters","Editiere Kalendar Filter" },
726{ "Enter filter name:","Neuer Filter Name:" }, 726{ "Enter filter name:","Neuer Filter Name:" },
727{ "Add Filter","Filter hinzufügen" }, 727{ "Add Filter","Filter hinzufügen" },
728{ "Question","Frage" }, 728{ "Question","Frage" },
729{ "Filter position: ","Filter Position: " }, 729{ "Filter position: ","Filter Position: " },
730{ "Month View","Monatsansicht" }, 730{ "Month View","Monatsansicht" },
731{ "This profil cannot be deleted!\n","Dieses Profil kann\nnicht gelöscht werden!" }, 731{ "This profil cannot be deleted!\n","Dieses Profil kann\nnicht gelöscht werden!" },
732{ "KO/Pi config error","KO/Pi Konfig. Fehler" }, 732{ "KO/Pi config error","KO/Pi Konfig. Fehler" },
733{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" }, 733{ "Local device name undefined!\nPlease define device name!","Name dieses Gerätes undefiniert!\nBitte Namen angeben!" },
734{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile haben denselben Namen!\nBitte unterschiedliche Namen wählen!" }, 734{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile haben denselben Namen!\nBitte unterschiedliche Namen wählen!" },
735{ "Access: ","Zugriff: " }, 735{ "Access: ","Zugriff: " },
736{ "Needs Action","Aktion notwendig" }, 736{ "Needs Action","Aktion notwendig" },
737{ "Accepted","Akzeptiert" }, 737{ "Accepted","Akzeptiert" },
738{ "Declined","Abgelehnt" }, 738{ "Declined","Abgelehnt" },
739{ "Tentative","Vorläufig" }, 739{ "Tentative","Vorläufig" },
740{ "Delegated","Beauftragt" }, 740{ "Delegated","Beauftragt" },
741{ "Completed","Vollständig" }, 741{ "Completed","Vollständig" },
742{ "In Process","In Bearbeitung" }, 742{ "In Process","In Bearbeitung" },
743{ "Participant","Teilnehmer" }, 743{ "Participant","Teilnehmer" },
744{ "Optional Participant","Möglicher Teilnehmer" }, 744{ "Optional Participant","Möglicher Teilnehmer" },
745{ "Observer","Beobachter" }, 745{ "Observer","Beobachter" },
746{ "Chair","Vorsitzender" }, 746{ "Chair","Vorsitzender" },
747{ "Not supported \non desktop!\n","" }, 747{ "Not supported \non desktop!\n","" },
748{ "Nothing selected!\n\nThis prints the full width of the Agenda view as you see it!\n\nTo determine the vertical range of the printing, please select\na vertical range (with the left mouse button down) in one column. ","Es ist nichts selektiert!\nDieses druckt die volle Breite der Agenda View, so wie man sie sieht.\nUm die verticale Auswahl zum Drucken zu bestimmen,\nbitte einen verticalen Zeitraum (mit gedrückter linker Maustaste)\nin einer Spalte auswählen. " }, 748{ "Nothing selected!\n\nThis prints the full width of the Agenda view as you see it!\n\nTo determine the vertical range of the printing, please select\na vertical range (with the left mouse button down) in one column. ","Es ist nichts selektiert!\nDieses druckt die volle Breite der Agenda View, so wie man sie sieht.\nUm die verticale Auswahl zum Drucken zu bestimmen,\nbitte einen verticalen Zeitraum (mit gedrückter linker Maustaste)\nin einer Spalte auswählen. " },
749{ "Date range: ","Datums Zeitspanne: " }, 749{ "Date range: ","Datums Zeitspanne: " },
750{ "Not supported \non PDA!\n","Nicht verfügbar\nauf dem PDA. " }, 750{ "Not supported \non PDA!\n","Nicht verfügbar\nauf dem PDA. " },
751{ "Syncing - close to abort!","Syncing-schließe um abzubrechen." }, 751{ "Syncing - close to abort!","Syncing-schließe um abzubrechen." },
752{ "Add / remove events","Add./entferne Termine" }, 752{ "Add / remove events","Add./entferne Termine" },
753{ "File does not exist:\n '%1'.","Datei existiert nicht:\n '%1'." }, 753{ "File does not exist:\n '%1'.","Datei existiert nicht:\n '%1'." },
754{ "Couldn't load calendar\n '%1'.","Kann Kalender nicht laden:\n '%1'." }, 754{ "Couldn't load calendar\n '%1'.","Kann Kalender nicht laden:\n '%1'." },
755{ "\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie gepeicherte Datei wurde verändert!\nDatei Grösse: %1 Bytes.\nZuletzt geändert: %2\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" }, 755{ "\nThe file on disk has changed!\nFile size: %1 bytes.\nLast modified: %2\nDo you want to:\n\n - Save and overwrite file?\n - Sync with file, then save?\n - Cancel without saving? \n","\nDie gepeicherte Datei wurde verändert!\nDatei Grösse: %1 Bytes.\nZuletzt geändert: %2\nMöchten Sie:\n\n - Speichern und die Datei überschreiben?\n - Mit Datei Synchronisieren, dann speichern?\n - Abbrechen ohne zu speichern? \n" },
756{ "Overwrite","Überschreiben" }, 756{ "Overwrite","Überschreiben" },
757{ "Sync+save","Syncen+speichern" }, 757{ "Sync+save","Syncen+speichern" },
758{ "Default","Standard" }, 758{ "Default","Standard" },
759{ " Categories added to list! "," Kategorien zur Liste hinzugefügt! " }, 759{ " Categories added to list! "," Kategorien zur Liste hinzugefügt! " },
760{ " %d items?"," %d Einträge?" }, 760{ " %d items?"," %d Einträge?" },
761{ "\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?","\nDieses ist ein\nwiederholender Termin!.\nSind Sie sicher, dass Sie\ndiesen Termin und alle\nWiederholungen löschen möchten?" }, 761{ "\nThis event recurs\nover multiple dates.\nAre you sure you want\nto delete this event\nand all its recurrences?","\nDieses ist ein\nwiederholender Termin!.\nSind Sie sicher, dass Sie\ndiesen Termin und alle\nWiederholungen löschen möchten?" },
762{ " ?\n\nDelete:\n"," ?\n\nLösche:\n" }, 762{ " ?\n\nDelete:\n"," ?\n\nLösche:\n" },
763{ "Current","Aktuelle" }, 763{ "Current","Aktuelle" },
764{ "\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n","\nDieses ist ein\nwiederholender Termin!\nMöchten sie alle Wiederholungen\nlöschen, oder nur die aktuelle am:\n" }, 764{ "\nThis event recurs\nover multiple dates.\nDo you want to delete\nall it's recurrences,\nor only the current one on:\n","\nDieses ist ein\nwiederholender Termin!\nMöchten sie alle Wiederholungen\nlöschen, oder nur die aktuelle am:\n" },
765{ "All","Alle" }, 765{ "All","Alle" },
766{ "Data Loss Warning","Datenverlust Warnung" }, 766{ "Data Loss Warning","Datenverlust Warnung" },
767{ "Proceed","Weitermachen" }, 767{ "Proceed","Weitermachen" },
768{ "The journal entries can not be\nexported to a vCalendar file.","Die Journal Einträge können\nnicht in eine vCalendar\nDatei exportiert werden!" }, 768{ "The journal entries can not be\nexported to a vCalendar file.","Die Journal Einträge können\nnicht in eine vCalendar\nDatei exportiert werden!" },
769{ "Filter disabled ","Filter abgeschaltet" }, 769{ "Filter disabled ","Filter abgeschaltet" },
770{ "Filter selected: ","Gewählter Filter: " }, 770{ "Filter selected: ","Gewählter Filter: " },
771{ "Toggle Cancel","Gecancelt ändern" }, 771{ "Toggle Cancel","Gecancelt ändern" },
772{ "&Toggle Cancel","Gecancel&t ändern" }, 772{ "&Toggle Cancel","Gecancel&t ändern" },
773{ "Configure Toolbar","Konfiguriere Toolbar" }, 773{ "Configure Toolbar","Konfiguriere Toolbar" },
774{ "Stretched TB","Gedehnte TB" }, 774{ "Stretched TB","Gedehnte TB" },
775{ "Import file \n...%1\ndoes not exist!\nNothing imported!\n","Import Datei \n...%1\nexistiert nicht!\nNichts importiert!\n" }, 775{ "Import file \n...%1\ndoes not exist!\nNothing imported!\n","Import Datei \n...%1\nexistiert nicht!\nNichts importiert!\n" },
776{ "Import filename(*.ics/*.vcs)","Import Dateiname(*.ics/*.vcs)" }, 776{ "Import filename(*.ics/*.vcs)","Import Dateiname(*.ics/*.vcs)" },
777{ "When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing","Wenn ein Kalender doppelt importiert\nwird, werden doppelte Einträge ignoriert!\nSie können eine Backup Datei anlegen unter\nDatei - Speichere Kalender Backup\num den Import rückgängig machen zu können.\n" }, 777{ "When importing a calendar twice\nduplicated events will be ignored!\nYou can create a backup file with\nFile - Save Calendar Backup\nto revert importing","Wenn ein Kalender doppelt importiert\nwird, werden doppelte Einträge ignoriert!\nSie können eine Backup Datei anlegen unter\nDatei - Speichere Kalender Backup\num den Import rückgängig machen zu können.\n" },
778{ "Not supported \non desktop!\n","Nur verfügbar auf PDA!" }, 778{ "Not supported \non desktop!\n","Nur verfügbar auf PDA!" },
779{ "Imported file successfully","Datei erfolgreich importiert" }, 779{ "Imported file successfully","Datei erfolgreich importiert" },
780{ "Error importing file","Fehler beim Importieren der Datei" }, 780{ "Error importing file","Fehler beim Importieren der Datei" },
781{ "Export vcal filename(*.vcs)","Export vcal Dateiname(*.vcs)" }, 781{ "Export vcal filename(*.vcs)","Export vcal Dateiname(*.vcs)" },
782{ "Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n","Zu speichernde Datei\existiert bereits!\nExist. Datei vom:\n%1\nÜberschreiben?\n" }, 782{ "Save file\nalready exists!\nOld save file from:\n%1\nOverwrite?\n","Zu speichernde Datei\existiert bereits!\nExist. Datei vom:\n%1\nÜberschreiben?\n" },
783{ "Overwrite!","Überschreiben!" }, 783{ "Overwrite!","Überschreiben!" },
784{ "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n","Import Datei \n...%1\nvom:\n%2\nDuplizierte Einträge\nwerden nicht importiert!\n" }, 784{ "Import file \n...%1\nfrom:\n%2\nDuplicated entries\nwill not be imported!\n","Import Datei \n...%1\nvom:\n%2\nDuplizierte Einträge\nwerden nicht importiert!\n" },
785{ "Load backup filename","Lade Backup Dateiname" }, 785{ "Load backup filename","Lade Backup Dateiname" },
786{ "Backup file\ndoes not exist!\nNothing loaded!","Backup Datei\nexistiert nicht!\nNichts geladen!" }, 786{ "Backup file\ndoes not exist!\nNothing loaded!","Backup Datei\nexistiert nicht!\nNichts geladen!" },
787{ "KO/Pi:Loaded %1","KO/Pi:Geladen %1" }, 787{ "KO/Pi:Loaded %1","KO/Pi:Geladen %1" },
788{ "Save backup filename","Speichere Backup Dateiname" }, 788{ "Save backup filename","Speichere Backup Dateiname" },
789{ "Backup file\nalready exists!\nOld backup file from:\n%1\nOverwrite?\n","Backup Datei\nexistiert bereits!\nAlte Backup Datei vom:\n%1\nÜberschreiben?\n" }, 789{ "Backup file\nalready exists!\nOld backup file from:\n%1\nOverwrite?\n","Backup Datei\nexistiert bereits!\nAlte Backup Datei vom:\n%1\nÜberschreiben?\n" },
790{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" }, 790{ "KO/Pi:Saved %1","KO/Pi:Gespeichert %1" },
791{ "Details of attendee","Teilnehmerdetails" }, 791{ "Details of attendee","Teilnehmerdetails" },
792{ "Work phone:\n","Telefon Arbeit:\n" }, 792{ "Work phone:\n","Telefon Arbeit:\n" },
793{ "Work mobile phone:\n","Mobiltelefon Arbeit:\n" }, 793{ "Work mobile phone:\n","Mobiltelefon Arbeit:\n" },
794{ "Home phone:\n","Telefon privat:\n" }, 794{ "Home phone:\n","Telefon privat:\n" },
795{ "Mobile home phone:\n","Mobiltelefon privat:\n" }, 795{ "Mobile home phone:\n","Mobiltelefon privat:\n" },
796{ "Email:\n","Email:\n" }, 796{ "Email:\n","Email:\n" },
797{ "Alarm disabled for this item","Alarm deaktiviert für dieses Item" }, 797{ "Alarm disabled for this item","Alarm deaktiviert für dieses Item" },
798{ "Audio Al.: ","Audio Al.: " }, 798{ "Audio Al.: ","Audio Al.: " },
799{ "Proc.Al.: ","Proz.Al.: " }, 799{ "Proc.Al.: ","Proz.Al.: " },
800{ "No sound set","Kein Sound definiert" }, 800{ "No sound set","Kein Sound definiert" },
801{ "*.wav|Wav Files","*.wav|Wav Dateien" }, 801{ "*.wav|Wav Files","*.wav|Wav Dateien" },
802{ "No program set","Kein Programm definiert" }, 802{ "No program set","Kein Programm definiert" },
803{ "Running '%1'","Ausführen '%1'" }, 803{ "Running '%1'","Ausführen '%1'" },
804{ "Playing '%1'","Abspielen '%1'" }, 804{ "Playing '%1'","Abspielen '%1'" },
805{ "Show Sync Events in WN/Agenda view","Zeige Sync Events in WN/Agenda Ansicht" }, 805{ "Show Sync Events in WN/Agenda view","Zeige Sync Events in WN/Agenda Ansicht" },
806{ "User defined (usertranslation.txt)","Benutzerdefiniert (usertranslation.txt)" }, 806{ "User defined (usertranslation.txt)","Benutzerdefiniert (usertranslation.txt)" },
807{ "Load!","Laden!" }, 807{ "Load!","Laden!" },
808{ "Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n","Backup Datei vom:\n%1\nDas Laden der Backup Datei\nlöscht die aktuellen Daten!\n" }, 808{ "Backup file from:\n%1\nLoading backup\nfile will delete\nyour current Data!\n","Backup Datei vom:\n%1\nDas Laden der Backup Datei\nlöscht die aktuellen Daten!\n" },
809{ "KO/Pi Features and hints","KO/Pi Eigenschaften und Tipps" }, 809{ "KO/Pi Features and hints","KO/Pi Eigenschaften und Tipps" },
810{ "KO/Pi User translation HowTo","KO/Pi Benutzer-Übersetzung HowTo" }, 810{ "KO/Pi User translation HowTo","KO/Pi Benutzer-Übersetzung HowTo" },
811{ "KO/Pi Synchronization HowTo","KO/Pi Synchronisation HowTo" }, 811{ "KO/Pi Synchronization HowTo","KO/Pi Synchronisation HowTo" },
812{ "Features + hints...","Eigenschaften + Tipps..." }, 812{ "Features + hints...","Eigenschaften + Tipps..." },
813{ "User translation...","Benutzer Übersetzung..." }, 813{ "User translation...","Benutzer Übersetzung..." },
814{ "Sync HowTo...","Synchronisation HowTo..." }, 814{ "Sync HowTo...","Synchronisation HowTo..." },
815{ "Print calendar...","Drucke Kalender..." }, 815{ "Print calendar...","Drucke Kalender..." },
816{ "Anniversary","Jahrestag" }, 816{ "Anniversary","Jahrestag" },
817{ "When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n","Wenn Geburtstage mehrfach importiert\nwerden, werden doppelte Einträge ignoriert\nwenn sie nicht verändert wurden.\n" }, 817{ "When importing birthdays twice\nduplicated events will be ignored,\nif the event has not been\nchanged in KO/Pi!\n","Wenn Geburtstage mehrfach importiert\nwerden, werden doppelte Einträge ignoriert\nwenn sie nicht verändert wurden.\n" },
818{ "Import Birthdays (KA/Pi)","Importiere Geburtstage (KA/Pi)" }, 818{ "Import Birthdays (KA/Pi)","Importiere Geburtstage (KA/Pi)" },
819{ "Next recurrence is on: ","Nächste Wiederholung ist am:" }, 819{ "Next recurrence is on: ","Nächste Wiederholung ist am:" },
820{ "<b>Alarm on: </b>","<b>Alarm am: </b>" }, 820{ "<b>Alarm on: </b>","<b>Alarm am: </b>" },
821{ "<b>Access: </b>","<b>Zugriff: </b>" }, 821{ "<b>Access: </b>","<b>Zugriff: </b>" },
822{ "(%1 min before)","(%1 min vorher)" }, 822{ "(%1 min before)","(%1 min vorher)" },
823{ "<b>Categories: </b>","<b>Kategorien: </b>" }, 823{ "<b>Categories: </b>","<b>Kategorien: </b>" },
824{ "Save Journal/Description...","Speichere Journal/Details..." }, 824{ "Save Journal/Description...","Speichere Journal/Details..." },
825{ "This saves the text/details of selected\nJournals and Events/Todos\nto a text file.","Das speichert den Text bzw.\ndie Details von selektierten\nJournalen und Events/Todos\nin eine Textdatei." }, 825{ "This saves the text/details of selected\nJournals and Events/Todos\nto a text file.","Das speichert den Text bzw.\ndie Details von selektierten\nJournalen und Events/Todos\nin eine Textdatei." },
826{ "Continue","Weitermachen" }, 826{ "Continue","Weitermachen" },
827{ " birthdays/anniversaries added!"," Geburts-/Jahrestage hinzugefügt" }, 827{ " birthdays/anniversaries added!"," Geburts-/Jahrestage hinzugefügt" },
828{ "Attendee:","Teilnehmer:" }, 828{ "Attendee:","Teilnehmer:" },
829{ "Click OK to search ->","Klicke zum Suchen auf OK ->" }, 829{ "Click OK to search ->","Klicke zum Suchen auf OK ->" },
830{ "On day ","Am Tag " }, 830{ "On day ","Am Tag " },
831{ "%1 of ","%1 des Monats" }, 831{ "%1 of ","%1 des Monats" },
832{ "%1 of the year","%1 des Jahres" }, 832{ "%1 of the year","%1 des Jahres" },
833{ "Anonymous","Anonymo" }, 833{ "Anonymous","Anonymo" },
834{ "nobody@nowhere","niemand@nirgendwo" }, 834{ "nobody@nowhere","niemand@nirgendwo" },
835{ "calendar.html","calendar.html" }, 835{ "calendar.html","calendar.html" },
836{ " Local Time"," Locale Zeit" }, 836{ " Local Time"," Locale Zeit" },
837{ "Unknown Name","Unbekannter Name" }, 837{ "Unknown Name","Unbekannter Name" },
838{ "unknown@nowhere","unbekannt@nirgendwo" }, 838{ "unknown@nowhere","unbekannt@nirgendwo" },
839{ "Beam via IR!","Beam via IR!" }, 839{ "Beam via IR!","Beam via IR!" },
840{ "Next Month","Nächster Monat" }, 840{ "Next Month","Nächster Monat" },
841{ "Prio","Prio" }, 841{ "Prio","Prio" },
842{ "Reparent Todo","Mache Sub-Todo" }, 842{ "Reparent Todo","Mache Sub-Todo" },
843{ "tomorrow","morgen" }, 843{ "tomorrow","morgen" },
844{ "today","heute" }, 844{ "today","heute" },
845{ "yesterday","gestern" }, 845{ "yesterday","gestern" },
846{ "Ok","Ok" }, 846{ "Ok","Ok" },
847{ "Ok+Agenda","Ok+Agenda" }, 847{ "Ok+Agenda","Ok+Agenda" },
848{ "Email","Email" }, 848{ "Email","Email" },
849{ "RSVP","RSVP" }, 849{ "RSVP","RSVP" },
850{ "Email:","Email:" }, 850{ "Email:","Email:" },
851{ "Appointment Time ","Termin Zeit " }, 851{ "Appointment Time ","Termin Zeit " },
852{ "2","2" }, 852{ "2","2" },
853{ "3","3" }, 853{ "3","3" },
854{ "4","4" }, 854{ "4","4" },
855{ " 0 %"," 0 %" }, 855{ " 0 %"," 0 %" },
856{ " 20 %"," 20 %" }, 856{ " 20 %"," 20 %" },
857{ " 40 %"," 40 %" }, 857{ " 40 %"," 40 %" },
858{ " 60 %"," 60 %" }, 858{ " 60 %"," 60 %" },
859{ " 80 %"," 80 %" }, 859{ " 80 %"," 80 %" },
860{ "100 %","100 %" }, 860{ "100 %","100 %" },
861{ "Filter","Filter" }, 861{ "Filter","Filter" },
862{ "Configure","Konfiguriere" }, 862{ "Configure","Konfiguriere" },
863{ "What's Next","What's Next" }, 863{ "What's Next","What's Next" },
864{ "Complete calendar...","Kompletten Kalender..." }, 864{ "Complete calendar...","Kompletten Kalender..." },
865{ "Filtered calendar...","Gefilterten Kalender..." }, 865{ "Filtered calendar...","Gefilterten Kalender..." },
866{ "Export to phone","Exportiere zum Handy" }, 866{ "Export to phone","Exportiere zum Handy" },
867{ "Beam receive enabled","Beam Empfang an" }, 867{ "Beam receive enabled","Beam Empfang an" },
868{ "What's new?","Was ist neu?" }, 868{ "What's new?","Was ist neu?" },
869{ "FAQ...","FAQ..." }, 869{ "FAQ...","FAQ..." },
870{ "Licence...","Licence..." }, 870{ "Licence...","Licence..." },
871{ "What's This?","What's This?" }, 871{ "What's This?","What's This?" },
872{ "&Edit...","&Editiere..." }, 872{ "&Edit...","&Editiere..." },
873{ "Oktober","Oktober" }, 873{ "Oktober","Oktober" },
874{ "Title","Titel" }, 874{ "Title","Titel" },
875{ "%1 %","%1 %" }, 875{ "%1 %","%1 %" },
876{ "Enable Pi-Sync","Schalte Pi-Sync an" }, 876{ "Enable Pi-Sync","Schalte Pi-Sync an" },
877{ "Import!","Importiere!" }, 877{ "Import!","Importiere!" },
878{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" }, 878{ "inserting birthdays - close to abort!","Burzeltage werden eingefügt - schließe um abzubrechen!" },
879{ "Export to phone options","Export ans Handy Optionen" }, 879{ "Export to phone options","Export ans Handy Optionen" },
880{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." }, 880{ "Please read Help-Sync Howto\nto know what settings to use.","Bitte lese Hilfe-Sync Howto\num zu erfahren welche Einstellungen\ndie richtigen sind." },
881{ "I/O device: ","I/O device: " }, 881{ "I/O device: ","I/O device: " },
882{ "Connection: ","Connection: " }, 882{ "Connection: ","Connection: " },
883{ "Model(opt.): ","Model(opt.): " }, 883{ "Model(opt.): ","Model(opt.): " },
884{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" }, 884{ "Write back events in future only","Schreibe nur zukünftige Termine zurück" },
885{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " }, 885{ "Max. weeks in future: ","Max. Wochen in der Zukunft: " },
886{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nToDo/Kalender Daten auf dem Handy!" }, 886{ "NOTE: This will remove all old\ntodo/calendar data on phone!","ACHTUNG: Das löscht alle alten\nToDo/Kalender Daten auf dem Handy!" },
887{ "Export to mobile phone!","Exportiere auf das Handy!" }, 887{ "Export to mobile phone!","Exportiere auf das Handy!" },
888{ "Export complete calendar","Exportiere kompletten Kalender" }, 888{ "Export complete calendar","Exportiere kompletten Kalender" },
889{ "Writing to phone...","Sende Daten ans Handy..." }, 889{ "Writing to phone...","Sende Daten ans Handy..." },
890{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" }, 890{ " This may take 1-3 minutes!"," Das kann 1-3 Minuten dauern!" },
891{ "Retry","Nochmal versuchen" }, 891{ "Retry","Nochmal versuchen" },
892{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" }, 892{ "KDE/Pim phone access","KDE/Pim Handy Zugriff" },
893{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" }, 893{ "Error accessing device!\nPlease turn on connection\nand retry!","Fehler beim Zugriff auf das Gerät!\nBitte die Verbindung aktivieren\nund nochmal versuchen!" },
894{ "Error exporting to phone!","Fehler beim Export auf das Handy!" }, 894{ "Error exporting to phone!","Fehler beim Export auf das Handy!" },
895{ "Export filtered calendar","Exportiere gefilterten Kalender" }, 895{ "Export filtered calendar","Exportiere gefilterten Kalender" },
896{ "Preferences","Vorlieben" }, 896{ "Preferences","Vorlieben" },
897{ "Global","Global" }, 897{ "Global","Global" },
898{ "Phone","Phone" }, 898{ "Phone","Phone" },
899{ "SMS","SMS" }, 899{ "SMS","SMS" },
900{ "Fax","Fax" }, 900{ "Fax","Fax" },
901{ "Pager","Pager" }, 901{ "Pager","Pager" },
902{ "SIP","SIP" }, 902{ "SIP","SIP" },
903{ "Italian","Italienisch" }, 903{ "Italian","Italienisch" },
904{ "24:00","24:00" }, 904{ "24:00","24:00" },
905{ "12:00am","12:00am" }, 905{ "12:00am","12:00am" },
906{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" }, 906{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" },
907{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" }, 907{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" },
908{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" }, 908{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" },
909{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" }, 909{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" },
910{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" }, 910{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" },
911{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" }, 911{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" },
912{ "Used Mail Client","Benutzter Mail Client" }, 912{ "Used Mail Client","Benutzter Mail Client" },
913{ "Channel:","Channel:" }, 913{ "Channel:","Channel:" },
914{ "Message:","Message:" }, 914{ "Message:","Message:" },
915{ "Parameters:","Parameter:" }, 915{ "Parameters:","Parameter:" },
916{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" }, 916{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" },
917{ "extra Message:","extra Message:" }, 917{ "extra Message:","extra Message:" },
918{ "extra Parameters:","extra Parameter:" }, 918{ "extra Parameters:","extra Parameter:" },
919{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" }, 919{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" },
920{ "External Apps.","Externe Appl." }, 920{ "External Apps.","Externe Appl." },
921{ "24 hours","24 Std." }, 921{ "24 hours","24 Std." },
922{ "3 hours","3 Std." }, 922{ "3 hours","3 Std." },
923{ "1 hour","1 Std." }, 923{ "1 hour","1 Std." },
924{ "15 minutes","15 Min." }, 924{ "15 minutes","15 Min." },
925{ "5 minutes","5 Min." }, 925{ "5 minutes","5 Min." },
926{ "1 minute","1 Min." }, 926{ "1 minute","1 Min." },
927{ "23","23" }, 927{ "23","23" },
928{ "Mon 15","Mon 15" }, 928{ "Mon 15","Mon 15" },
929{ "Configure KO","Konfiguriere KO" }, 929{ "Configure KO","Konfiguriere KO" },
930{ "Event text","Termin Text" }, 930{ "Event text","Termin Text" },
931{ "ToDo","ToDo" }, 931{ "ToDo","ToDo" },
932{ "Today","Heute" }, 932{ "Today","Heute" },
933{ "What's Next View","What's Next Ansicht" }, 933{ "What's Next View","What's Next Ansicht" },
934{ "Show Sync Events in \nWhat's Next/Agenda view","Zeige Sync Termine in \nWhat's Next/Agenda view" }, 934{ "Show Sync Events in \nWhat's Next/Agenda view","Zeige Sync Termine in \nWhat's Next/Agenda view" },
935{ "Use short date in \nWhat's Next/Event view","Zeige Kurzdatum in \nWhat's Next/Event view" }, 935{ "Use short date in \nWhat's Next/Event view","Zeige Kurzdatum in \nWhat's Next/Event view" },
936{ "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" }, 936{ "Allday Agenda view shows todos","Ganztag Agenda zeigt Todos" },
937{ "Alarm","Alarm" }, 937{ "Alarm","Alarm" },
938{ "Used %1 Client","Benutzter %1 Client" }, 938{ "Used %1 Client","Benutzter %1 Client" },
939{ "No email client installed","Kein Email Klient installiert" }, 939{ "No email client installed","Kein Email Klient installiert" },
940{ "Userdefined email client","Benutzerdef. Email Klient" }, 940{ "Userdefined email client","Benutzerdef. Email Klient" },
941{ "OM/Pi email client","OM/Pi Email Klient" }, 941{ "OM/Pi email client","OM/Pi Email Klient" },
942{ "Include in multiple ","Beziehe in multiple " }, 942{ "Include in multiple ","Beziehe in multiple " },
943{ "calendar ","Kalender " }, 943{ "calendar ","Kalender " },
944{ "addressbook ","Adressbuch " }, 944{ "addressbook ","Adressbuch " },
945{ "pwmanager","PWmanager" }, 945{ "pwmanager","PWmanager" },
946{ " sync"," Sync ein" }, 946{ " sync"," Sync ein" },
947{ "Write back synced data","Schreibe gesyncte Daten zurück" }, 947{ "Write back synced data","Schreibe gesyncte Daten zurück" },
948{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" }, 948{ "-- Write back (on remote) existing entries only","-- Schreibe nur existierende (entfernte) Einträge zurück" },
949{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" }, 949{ "-- Write back (calendar) entries in future only","-- Schreibe nur zukünftige Kalender-Einträge zurück" },
950{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " }, 950{ "---- Max. weeks in future: ","---- Max. wochen in der Zukunft: " },
951{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" }, 951{ "Pi-Sync ( direct Kx/Pi to Kx/Pi sync )","Pi-Sync ( direktes Kx/Pi zu Kx/Pi sync )" },
952{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" }, 952{ "Mobile device (cell phone)","Mobiles Gerät (Handy)" },
953{ "Help...","Hilfe..." }, 953{ "Help...","Hilfe..." },
954{ "Local file Cal:","Lokale Datei Kal:" }, 954{ "Local file Cal:","Lokale Datei Kal:" },
955{ "Local file ABook:","Lokale Datei ABuch:" }, 955{ "Local file ABook:","Lokale Datei ABuch:" },
956{ "Local file PWMgr:","Lokale Datei PWMgr:" }, 956{ "Local file PWMgr:","Lokale Datei PWMgr:" },
957{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" }, 957{ "Addressbook file (*.vcf) is used by KA/Pi","Adressbuch Datei (*.vcf) wird von KA/Pi genutzt" },
958{ "Calendar:","Kalender:" }, 958{ "Calendar:","Kalender:" },
959{ "AddressBook:","AdressBuch:" }, 959{ "AddressBook:","AdressBuch:" },
960{ "PWManager:","PWManager:" }, 960{ "PWManager:","PWManager:" },
961{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" }, 961{ "Addressbook file is used by KA/Pi","Adressbuch Datei wird von KA/Pi genutzt" },
962{ "ssh/scp","ssh/scp" }, 962{ "ssh/scp","ssh/scp" },
963{ "ftp","ftp" }, 963{ "ftp","ftp" },
964{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" }, 964{ "Password for remote access: (could be the same for each)","Passwort für entfernten Zugriff: (kann dasselbe sein für alle)" },
965{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" }, 965{ "Remote IP address: (could be the same for each)","Entfernte IP Adresse: (kann dasselbe sein für alle)" },
966{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" }, 966{ "Remote port number: (should be different for each)","Entfernte Port Nummer: (Sollte für alle unterschiedlich sein)" },
967{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" }, 967{ "command for downloading remote file to local device","Kommando zum Download der entfernten Datei zum lokalen Gerät" },
968{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" }, 968{ "command for uploading local temp file to remote device","Kommando zum Upload der lokalen temp. Datei zum entfernten Gerät" },
969{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" }, 969{ "Insert device where\nphone is connected. E.g.:\n","Füge Device ein, an dem\ndas Handy angeschlossen ist. Z.B.:\n" },
970{ "KDE-Pim sync config","KDE-Pim sync Konfig" }, 970{ "KDE-Pim sync config","KDE-Pim sync Konfig" },
971{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" }, 971{ "Insert kind of connection,e.g.:\n","Füge Art der Verbindung ein,z.B.:\n" },
972{ "Recommended: Leave empty!\n(Such that model can\nbe auto detected)\nOr insert name of model:\n","Empfohlen: Leer lassen!\n(So dass das Model\nautomatisch erkannt\nwerden kann)\nOder füge Model Name ein:\n" }, 972{ "Recommended: Leave empty!\n(Such that model can\nbe auto detected)\nOr insert name of model:\n","Empfohlen: Leer lassen!\n(So dass das Model\nautomatisch erkannt\nwerden kann)\nOder füge Model Name ein:\n" },
973{ "Port number (Default: %1)","Port Nummer (Default: %1)" }, 973{ "Port number (Default: %1)","Port Nummer (Default: %1)" },
974{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" }, 974{ "Password to enable\naccess from remote:","Passwort um entfernten\nZugriff zuzulassen:" },
975{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" }, 975{ "Automatically start\nat application startup","Starte automatisch\nbeim Programmstart" },
976{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" }, 976{ "Automatically sync\nwith KDE-Desktop","Automatischer Sync\nmit dem KDE-Desktop" },
977{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" }, 977{ "Enter port for Pi-Sync","Port Nummer für Pi-Sync" },
978{ "Disable Pi-Sync","Schalte Pi-Sync aus" }, 978{ "Disable Pi-Sync","Schalte Pi-Sync aus" },
979{ "Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!","Wollen Sie wirklich\nmit allen selektierten\nProfilen \"Multi-Syncen\"?\nDas Syncen dauert einige Zeit -\nalle Profile werden zweimal gesynct!" }, 979{ "Do you really want\nto multiple sync\nwith all checked profiles?\nSyncing takes some\ntime - all profiles\nare synced twice!","Wollen Sie wirklich\nmit allen selektierten\nProfilen \"Multi-Syncen\"?\nDas Syncen dauert einige Zeit -\nalle Profile werden zweimal gesynct!" },
980{ "KDE-Pim Sync","KDE-Pim Sync" }, 980{ "KDE-Pim Sync","KDE-Pim Sync" },
981{ "Multiple profiles","Multi-Sync Profile" }, 981{ "Multiple profiles","Multi-Sync Profile" },
982{ "Device: ","Gerät: " }, 982{ "Device: ","Gerät: " },
983{ "Multiple sync started.","Multi-Sync gestartet." }, 983{ "Multiple sync started.","Multi-Sync gestartet." },
984{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" }, 984{ "Nothing synced! No profiles defined for multisync!","Nichts gesynct! Keine Profile\nselektiert für Multi-Sync" },
985{ "Turn filter on","Schalte Filter an" }, 985{ "Turn filter on","Schalte Filter an" },
986{ "Turn filter off","Schalte Filter aus" }, 986{ "Turn filter off","Schalte Filter aus" },
987{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" }, 987{ "Key bindings KOrganizer/Pi","Tastatur Belegung KOrganizer/Pi" },
988{ "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" }, 988{ "<p><b>White</b>: Item readonly</p>\n","<p><b>Weiss</b>: Eintrag schreibgeschützt</p>\n" },
989{ "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" }, 989{ "<p><b>Dark yellow</b>: Event/todo with attendees.</p>\n","<p><b>Dunkelgelb</b>: Termin/Todo mit Teilnehmern.</p>\n" },
990{ "<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n","<p><b>Schwarz</b>: Termin/Todo mit Teilnehmern. Sie sind der Organisator!</p>\n" }, 990{ "<p><b>Black</b>: Event/todo with attendees. You are the organizer!</p>\n","<p><b>Schwarz</b>: Termin/Todo mit Teilnehmern. Sie sind der Organisator!</p>\n" },
991{ "<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n","<p><b>Dunkelgrün</b>: Information(Beschreibung) verfügbar.([i] in WN Ansicht)</p>\n" }, 991{ "<p><b>Dark green</b>: Information(description) available.([i] in WN view)</p>\n","<p><b>Dunkelgrün</b>: Information(Beschreibung) verfügbar.([i] in WN Ansicht)</p>\n" },
992{ "<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n","<p><b>Blau</b>: Wiederholender Termin.([r] in Whats'Next Ansicht)</p>\n" }, 992{ "<p><b>Blue</b>: Recurrent event.([r] in Whats'Next view)</p>\n","<p><b>Blau</b>: Wiederholender Termin.([r] in Whats'Next Ansicht)</p>\n" },
993{ "<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n","<p><b>Rot</b>: Alarm gesetzt.([a] in Whats'Next Ansicht)</p>\n" }, 993{ "<p><b>Red</b>: Alarm set.([a] in Whats'Next view)</p>\n","<p><b>Rot</b>: Alarm gesetzt.([a] in Whats'Next Ansicht)</p>\n" },
994{ "<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n","<p><b>Kreuz</b>: Eintrag gecancelt.([c] in Whats'Next Ansicht)</p>\n" }, 994{ "<p><b>Cross</b>: Item cancelled.([c] in Whats'Next view)</p>\n","<p><b>Kreuz</b>: Eintrag gecancelt.([c] in Whats'Next Ansicht)</p>\n" },
995{ "<p><b>(for square icons in agenda and month view)</b></p>\n","<p><b>(für quadratische Icons in Agenda und Monats Ansicht)</b></p>\n" }, 995{ "<p><b>(for square icons in agenda and month view)</b></p>\n","<p><b>(für quadratische Icons in Agenda und Monats Ansicht)</b></p>\n" },
996{ "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" }, 996{ "<p><h2>KO/Pi icon colors:</h2></p>\n","<p><h2>KO/Pi Icon Farben:</h2></p>\n" },
997{ "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" }, 997{ "<p><b>E</b>: Edit item</p>\n","<p><b>E</b>: Editiere Eintrag</p>\n" },
998{ "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" }, 998{ "<p><b>A</b>: Show agenda view.</p>\n","<p><b>A</b>: Zeige Agenda Ansicht.</p>\n" },
999{ "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" }, 999{ "<p><b>I,C</b>: Close dialog.</p>\n","<p><b>I,C</b>: Schließe Dialog.</p>\n" },
1000{ "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" }, 1000{ "<p><h3>In event/todo viewer:</h3></p>\n","<p><h3>In Termin/Todo Detail-Anzeige:</h3></p>\n" },
1001{ "<p><b>shift+up/down</b>: Goto first/last item</p>\n","<p><b>shift+up/down</b>: Gehe zum ersten/letzten Eintrag</p>\n" }, 1001{ "<p><b>shift+up/down</b>: Goto first/last item</p>\n","<p><b>shift+up/down</b>: Gehe zum ersten/letzten Eintrag</p>\n" },
1002{ "<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n","<p><b>ctrl+up/down</b>: Gehe hoch/runter 20% aller Einträge</p>\n" }, 1002{ "<p><b>ctrl+up/down</b>: Goto up/down by 20% of items</p>\n","<p><b>ctrl+up/down</b>: Gehe hoch/runter 20% aller Einträge</p>\n" },
1003{ "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" }, 1003{ "<p><b>up/down</b>: Next/prev item</p>\n","<p><b>up/down</b>: Nächster/vorheriger Eintrag</p>\n" },
1004{ "<p><b>return+shift</b>: Deselect item+one step down</p>\n","<p><b>return+shift</b>: Deselektiere Item+Cursor einen Eintrag runter</p>\n" }, 1004{ "<p><b>return+shift</b>: Deselect item+one step down</p>\n","<p><b>return+shift</b>: Deselektiere Item+Cursor einen Eintrag runter</p>\n" },
1005{ "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" }, 1005{ "<p><b>return</b>: Select item+one step down</p>\n","<p><b>return</b>: Selektiere Item+Cursor einen Eintrag runter</p>\n" },
1006{ "<p><b>I</b>: Show info of current item+one step down.</p>\n","<p><b>I</b>: Zeige Detail-Ansicht vom sel.Eintrag+Cursor einen Eintrag runter.</p>\n" }, 1006{ "<p><b>I</b>: Show info of current item+one step down.</p>\n","<p><b>I</b>: Zeige Detail-Ansicht vom sel.Eintrag+Cursor einen Eintrag runter.</p>\n" },
1007{ "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" }, 1007{ "<p><h3>In list view:</h3></p>\n","<p><h3>In Listen Ansicht:</h3></p>\n" },
1008{ "<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n","<p><b>return+shift</b>: Markiere Todo als nicht erledigt+Cursor einen Eintrag runter</p>\n" }, 1008{ "<p><b>return+shift</b>: Mark item as not completed+one step down</p>\n","<p><b>return+shift</b>: Markiere Todo als nicht erledigt+Cursor einen Eintrag runter</p>\n" },
1009{ "<p><b>return</b>: Mark item as completed+one step down.</p>\n","<p><b>return</b>: Markiere Todo als erledigt+Cursor einen Eintrag runter.</p>\n" }, 1009{ "<p><b>return</b>: Mark item as completed+one step down.</p>\n","<p><b>return</b>: Markiere Todo als erledigt+Cursor einen Eintrag runter.</p>\n" },
1010{ "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" }, 1010{ "<p><b>Q</b>: Toggle quick todo line edit.</p>\n","<p><b>Q</b>: Zeige/verstecke Quick Todo Eingabe Zeile.</p>\n" },
1011{ "<p><b>shift+P</b>: Make new <b>P</b>arent for todo selected with shift+S</p>\n","<p><b>shift+P</b>: Mache Todo zum neuen <b>P</b>arent Todo für das Todo, welches mit shift+Sselektiert wurde.</p>\n" }, 1011{ "<p><b>shift+P</b>: Make new <b>P</b>arent for todo selected with shift+S</p>\n","<p><b>shift+P</b>: Mache Todo zum neuen <b>P</b>arent Todo für das Todo, welches mit shift+Sselektiert wurde.</p>\n" },
1012{ "<p><b>shift+S</b>: Make <b>S</b>ubtodo (reparent todo)</p>\n","<p><b>shift+S</b>: Mache Todo zum <b>S</b>ubtodo</p>\n" }, 1012{ "<p><b>shift+S</b>: Make <b>S</b>ubtodo (reparent todo)</p>\n","<p><b>shift+S</b>: Mache Todo zum <b>S</b>ubtodo</p>\n" },
1013{ "<p><b>shift+U</b>: <b>U</b>nparent todo (make root todo)</p>\n","<p><b>shift+U</b>: <b>U</b>nparent Todo (Mache Sub-Todo zum Toplevel Todo)</p>\n" }, 1013{ "<p><b>shift+U</b>: <b>U</b>nparent todo (make root todo)</p>\n","<p><b>shift+U</b>: <b>U</b>nparent Todo (Mache Sub-Todo zum Toplevel Todo)</p>\n" },
1014{ "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" }, 1014{ "<p><h3>In todo view:</h3></p>\n","<p><h3>In Todo Anzige:</h3></p>\n" },
1015{ "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" }, 1015{ "<p><b>ctrl+up/down</b>: Scroll small todo view</p>\n","<p><b>ctrl+up/down</b>: Scrolle kleine Todo Ansicht</p>\n" },
1016{ "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" }, 1016{ "<p><b>up/down</b>: Scroll agenda view</p>\n","<p><b>up/down</b>: Scrolle Agenda Ansicht</p>\n" },
1017{ "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" }, 1017{ "<p><h3>In agenda view:</h3></p>\n","<p><h3>In Agenda Ansicht:</h3></p>\n" },
1018{ "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" }, 1018{ "<p><b>del,backspace</b>: Delete selected item</p>\n","<p><b>del,backspace</b>: Lösche selektiertes Item</p>\n" },
1019{ "<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n","<p><b>left</b>: Vorh. Woche | <b>left+ctrl</b>: Vorh. Monat</p>\n" }, 1019{ "<p><b>left</b>: Prev. week | <b>left+ctrl</b>: Prev. month</p>\n","<p><b>left</b>: Vorh. Woche | <b>left+ctrl</b>: Vorh. Monat</p>\n" },
1020{ "<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n","<p><b>right</b>: Nächste Woche | <b>right+ctrl</b>: Nächste Woche</p>\n" }, 1020{ "<p><b>right</b>: Next week | <b>right+ctrl</b>: Next month</p>\n","<p><b>right</b>: Nächste Woche | <b>right+ctrl</b>: Nächste Woche</p>\n" },
1021{ "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" }, 1021{ "<p><b>B</b>: Edit description (details) of selected item</p>\n","<p><b>B</b>: Editiere Beschreibung (Details) des selektierten Items</p>\n" },
1022{ "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" }, 1022{ "<p><b>C</b>: Show current time in agenda view</p>\n","<p><b>C</b>: Zeige aktuelle Zeit in Agenda Ansicht</p>\n" },
1023{ "<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n","<p><b>+,-</b> : Zoom rein/raus Agenda | <b>A</b>: Wechsle Ganztag Agenda Höhe</p>\n" }, 1023{ "<p><b>+,-</b> : Zoom in/out agenda | <b>A</b>: Toggle allday agenda height</p>\n","<p><b>+,-</b> : Zoom rein/raus Agenda | <b>A</b>: Wechsle Ganztag Agenda Höhe</p>\n" },
1024{ "<p><b>S+ctrl</b>: Add sub-todo | <b>X</b>: Toggle datenavigator</p>\n","<p><b>S+ctrl</b>: Füge Sub-Todo hinzu | <b>X</b>: Zeige/verstecke Datenavigator</p>\n" }, 1024{ "<p><b>S+ctrl</b>: Add sub-todo | <b>X</b>: Toggle datenavigator</p>\n","<p><b>S+ctrl</b>: Füge Sub-Todo hinzu | <b>X</b>: Zeige/verstecke Datenavigator</p>\n" },
1025{ "<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n","<p><b>T</b>: Gehe zu Heute | <b>T+ctrl</b>: Neues Todo</p>\n" }, 1025{ "<p><b>T</b>: Goto today | <b>T+ctrl</b>: New Todo</p>\n","<p><b>T</b>: Gehe zu Heute | <b>T+ctrl</b>: Neues Todo</p>\n" },
1026{ "<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n","<p><b>E</b>: Editiere selektiertes Item |<b> E+ctrl</b>: Neuer Termin</p>\n" }, 1026{ "<p><b>E</b>: Edit selected item |<b> E+ctrl</b>: New Event</p>\n","<p><b>E</b>: Editiere selektiertes Item |<b> E+ctrl</b>: Neuer Termin</p>\n" },
1027{ "<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n","<p><b>D</b>: Ein-Tages Ansicht | <b>M</b>: Monats Ansicht</p>\n" }, 1027{ "<p><b>D</b>: One day view | <b>M</b>: Month view</p>\n","<p><b>D</b>: Ein-Tages Ansicht | <b>M</b>: Monats Ansicht</p>\n" },
1028{ "<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n","<p><b>Z,Y</b>: Arbeitswochen Ansicht | <b>U</b>: Wochen Ansicht</p>\n" }, 1028{ "<p><b>Z,Y</b>: Work week view | <b>U</b>: Week view</p>\n","<p><b>Z,Y</b>: Arbeitswochen Ansicht | <b>U</b>: Wochen Ansicht</p>\n" },
1029{ "<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n","<p><b>V</b>: Todo Ansicht | <b>L</b>: Termin Listen Ansicht</p>\n" }, 1029{ "<p><b>V</b>: Todo view | <b>L</b>: Event list view</p>\n","<p><b>V</b>: Todo Ansicht | <b>L</b>: Termin Listen Ansicht</p>\n" },
1030{ "<p><b>N</b>: Next days view| <b>W</b>: What's next view\n ","<p><b>N</b>: Nächste-Tage Ansicht days view| <b>W</b>: What's next Ansicht\n " }, 1030{ "<p><b>N</b>: Next days view| <b>W</b>: What's next view\n ","<p><b>N</b>: Nächste-Tage Ansicht days view| <b>W</b>: What's next Ansicht\n " },
1031{ "<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n","<p><b>1-0</b> (+<b>ctrl</b>): Selektiere Filter 1-10 (11-20)</p>\n" }, 1031{ "<p><b>1-0</b> (+<b>ctrl</b>): Select filter 1-10 (11-20)</p>\n","<p><b>1-0</b> (+<b>ctrl</b>): Selektiere Filter 1-10 (11-20)</p>\n" },
1032{ "<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n","<p><b>O</b>: Filter An/Aus | <b>J</b>: Journal Ansicht</p>\n" }, 1032{ "<p><b>O</b>: Filter On/Off | <b>J</b>: Journal view</p>\n","<p><b>O</b>: Filter An/Aus | <b>J</b>: Journal Ansicht</p>\n" },
1033{ "<p><b>F</b>: Toggle filterview |<b>F+ctrl</b>: Edit filter </p>\n","<p><b>F</b>: Zeige/verstecke Filter Ansicht |<b>F+ctrl</b>: Editiere Filter </p>\n" }, 1033{ "<p><b>F</b>: Toggle filterview |<b>F+ctrl</b>: Edit filter </p>\n","<p><b>F</b>: Zeige/verstecke Filter Ansicht |<b>F+ctrl</b>: Editiere Filter </p>\n" },
1034{ "<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n","<p><b>Space</b>: Zeige fullscreen | <b>P</b>: Datums Picker</p>\n" }, 1034{ "<p><b>Space</b>: Toggle fullscreen | <b>P</b>: Date picker</p>\n","<p><b>Space</b>: Zeige fullscreen | <b>P</b>: Datums Picker</p>\n" },
1035{ "<p><b>I</b>: Show info for selected event/todo</p>\n","<p><b>I</b>: Zeige Info (Details) für selektiertes Item</p>\n" }, 1035{ "<p><b>I</b>: Show info for selected event/todo</p>\n","<p><b>I</b>: Zeige Info (Details) für selektiertes Item</p>\n" },
1036{ "<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n","<p><b>H</b>: Dieser Hilfe Dialog | <b>S</b>: Such Dialog</p>\n" }, 1036{ "<p><b>H</b>: This help dialog | <b>S</b>: Search dialog</p>\n","<p><b>H</b>: Dieser Hilfe Dialog | <b>S</b>: Such Dialog</p>\n" },
1037{ "<p><h2>KO/Pi key shortcuts:</h2></p>\n","<p><h2>KO/Pi Tastatur Kurzbefehle:</h2></p>\n" }, 1037{ "<p><h2>KO/Pi key shortcuts:</h2></p>\n","<p><h2>KO/Pi Tastatur Kurzbefehle:</h2></p>\n" },
1038{ "After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configurable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n","Nachdem etwas geändert wurde, werden die\nDaten automatisch in die Datei abgespeichert\n~/kdepim/apps/korganizer/mycalendar.ics\nnach (konfigurierbar) drei Minuten.\nAus Sicherheitsgründen wird noch einmal\nnach 10 Min. abgespeichert, wenn keine\nÄnderungen vorgenommen wurden. Die \nDaten werden automatisch gespeichert,\nwenn KO/Pi beendet wird.\nSie können eine Backup-Datei erstellen im\nMenu: Datei - Speichere Kalender Backup\n" }, 1038{ "After changing something, the data is\nautomatically saved to the file\n~/kdepim/apps/korganizer/mycalendar.ics\nafter (configurable) three minutes.\nFor safety reasons there is one autosaving\nafter 10 minutes (of idle time) again. The \ndata is saved automatically when closing KO/Pi\nYou can create a backup file \nwith: File - Save Calendar Backup\n","Nachdem etwas geändert wurde, werden die\nDaten automatisch in die Datei abgespeichert\n~/kdepim/apps/korganizer/mycalendar.ics\nnach (konfigurierbar) drei Minuten.\nAus Sicherheitsgründen wird noch einmal\nnach 10 Min. abgespeichert, wenn keine\nÄnderungen vorgenommen wurden. Die \nDaten werden automatisch gespeichert,\nwenn KO/Pi beendet wird.\nSie können eine Backup-Datei erstellen im\nMenu: Datei - Speichere Kalender Backup\n" },
1039{ "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" }, 1039{ "Auto Saving in KOrganizer/Pi","Auto Speichern in KOrganizer/Pi" },
1040{ "\nhttp://sourceforge.net/projects/kdepimpi\n","\nhttp://sourceforge.net/projects/kdepimpi\n" }, 1040{ "\nhttp://sourceforge.net/projects/kdepimpi\n","\nhttp://sourceforge.net/projects/kdepimpi\n" },
1041{ "\nor report them in the bugtracker on\n","\noder trage sie in dem Bugtracker ein auf\n" }, 1041{ "\nor report them in the bugtracker on\n","\noder trage sie in dem Bugtracker ein auf\n" },
1042{ "\nPlease report unexpected behaviour to\nlutz@pi-sync.net\n","\nBitte melde fehlerhaftes Verhalten an\nlutz@pi-sync.net\n" }, 1042{ "\nPlease report unexpected behaviour to\nlutz@pi-sync.net\n","\nBitte melde fehlerhaftes Verhalten an\nlutz@pi-sync.net\n" },
1043{ "2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n","2) Ein Audio Alarm Daemon\nfür den Zaurus ist verfügbar\nals zusätzliche Anwendung\n" }, 1043{ "2) Audio alarm daemon\nfor Zaurus is available!\nas an additional small application\n","2) Ein Audio Alarm Daemon\nfür den Zaurus ist verfügbar\nals zusätzliche Anwendung\n" },
1044{ "1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n","1) Importieren von *.vcs oder *.ics Dateien von\nanderen Anwendungen kann möglicherweise\n nicht richtig funktionieren,\nwenn die Termine Eigenschaften haben,\ndie KO/Pi nicht unterstützt.\n" }, 1044{ "1) Importing *.vcs or *.ics files from\nother applications may not work properly,\nif there are events with properties\nKO/Pi does not support.\n","1) Importieren von *.vcs oder *.ics Dateien von\nanderen Anwendungen kann möglicherweise\n nicht richtig funktionieren,\nwenn die Termine Eigenschaften haben,\ndie KO/Pi nicht unterstützt.\n" },
1045{ "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" }, 1045{ "Known Problems in KOrganizer/Pi","Bekannte Probleme in KOrganizer/Pi" },
1046{ "KO/Pi FAQ","KO/Pi FAQ" }, 1046{ "KO/Pi FAQ","KO/Pi FAQ" },
1047{ "(c) 2004 Lutz Rogowski\nEmail:lutz@pi-sync.net\nKO/Pi is based on KOrganizer\n(c) 2002,2003 Cornelius Schumacher\nEmail: schumacher@kde.org\nKOrganizer/Pi is licensed\nunder the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.korganizer.org\nwww.pi-sync.net\n","(c) 2004 Lutz Rogowski\nEmail:lutz@pi-sync.net\nKO/Pi basiert auf KOrganizer\n(c) 2002,2003 Cornelius Schumacher\nEmail: schumacher@kde.org\nKOrganizer/Pi ist lizensiert unter der GPL.\nKO/Pi kann kompiliert werden für\nLinux, Zaurus-PDA und Windows\nwww.korganizer.org\nwww.pi-sync.net\n" }, 1047{ "(c) 2004 Lutz Rogowski\nEmail:lutz@pi-sync.net\nKO/Pi is based on KOrganizer\n(c) 2002,2003 Cornelius Schumacher\nEmail: schumacher@kde.org\nKOrganizer/Pi is licensed\nunder the GPL.\nKO/Pi can be compiled for\nLinux, Zaurus-PDA and Windows\nwww.korganizer.org\nwww.pi-sync.net\n","(c) 2004 Lutz Rogowski\nEmail:lutz@pi-sync.net\nKO/Pi basiert auf KOrganizer\n(c) 2002,2003 Cornelius Schumacher\nEmail: schumacher@kde.org\nKOrganizer/Pi ist lizensiert unter der GPL.\nKO/Pi kann kompiliert werden für\nLinux, Zaurus-PDA und Windows\nwww.korganizer.org\nwww.pi-sync.net\n" },
1048{ "PDA-Edition\nfor: Zaurus 5x00 / 7x0 / 8x0\n","PDA-Edition\nfür: Zaurus 5x00 / 7x0 / 8x0\n" }, 1048{ "PDA-Edition\nfor: Zaurus 5x00 / 7x0 / 8x0\n","PDA-Edition\nfür: Zaurus 5x00 / 7x0 / 8x0\n" },
1049{ "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" }, 1049{ "KOrganizer/Platform-independent\n","KOrganizer/Platform-independent\n" },
1050{ "About KOrganizer/Pi","Über KOrganizer/Pi" }, 1050{ "About KOrganizer/Pi","Über KOrganizer/Pi" },
1051{ "From: ","Von: " }, 1051{ "From: ","Von: " },
1052{ "Remove sync info","Entferne Sync Info" }, 1052{ "Remove sync info","Entferne Sync Info" },
1053{ "For all profiles","Für alle Profile" }, 1053{ "For all profiles","Für alle Profile" },
1054{ "Hide not Running","Verstecke nicht Laufende" }, 1054{ "Hide not Running","Verstecke nicht Laufende" },
1055{ "ME","ME" }, 1055{ "ME","ME" },
1056{ "Toolbar","Toolbar" }, 1056{ "Toolbar","Toolbar" },
1057{ "Undo Delete...","Löschen rückgängig machen..." }, 1057{ "Undo Delete...","Löschen rückgängig machen..." },
1058{ "Undo Delete","Löschen rückgängig machen" }, 1058{ "Undo Delete","Löschen rückgängig machen" },
1059{ "KDE Sync HowTo...","KDE Sync HowTo..." }, 1059{ "KDE Sync HowTo...","KDE Sync HowTo..." },
1060{ "Multi Sync HowTo...","Multi Sync HowTo..." }, 1060{ "Multi Sync HowTo...","Multi Sync HowTo..." },
1061{ "Januar","Januar" }, 1061{ "Januar","Januar" },
1062{ "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" }, 1062{ "KO/Pi Keys + Colors","KO/Pi Tasten + Farben" },
1063{ "No Filter","Kein Filter" }, 1063{ "No Filter","Kein Filter" },
1064{ "Multiple Sync options","Multi Sync Optionen" }, 1064{ "Multiple Sync options","Multi Sync Optionen" },
1065{ "Sync algo options","Sync Ablauf Optionen" }, 1065{ "Sync algo options","Sync Ablauf Optionen" },
1066{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" }, 1066{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" },
1067{ "Incoming calendar filter:","Eingehender Kalender Filter:" }, 1067{ "Incoming calendar filter:","Eingehender Kalender Filter:" },
1068{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" }, 1068{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" },
1069{ "Write back options","Optionen zum Zurückschreiben" }, 1069{ "Write back options","Optionen zum Zurückschreiben" },
1070{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" }, 1070{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" },
1071{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" }, 1071{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" },
1072{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" }, 1072{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" },
1073{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" }, 1073{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" },
1074{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" }, 1074{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" },
1075{ "Time period","Zeitspanne" }, 1075{ "Time period","Zeitspanne" },
1076{ "From ","Von " }, 1076{ "From ","Von " },
1077{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " }, 1077{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " },
1078{ " weeks in the future "," Wochen in der Zukunft " }, 1078{ " weeks in the future "," Wochen in der Zukunft " },
1079{ "Profile kind specific settings","Profil Art abhängige Einstellungen" }, 1079{ "Profile kind specific settings","Profil Art abhängige Einstellungen" },
1080{ "Local temp file:","Lokale temp Datei:" }, 1080{ "Local temp file:","Lokale temp Datei:" },
1081{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" }, 1081{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" },
1082{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" }, 1082{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" },
1083{ "Language","Sprache" }, 1083{ "Language","Sprache" },
1084{ "Time Format","Zeit Format" }, 1084{ "Time Format","Zeit Format" },
1085{ "Time Zone","Zeit Zone" }, 1085{ "Time Zone","Zeit Zone" },
1086{ "%1 groups subscribed","%1 Guppen abboniert" }, 1086{ "%1 groups subscribed","%1 Guppen abboniert" },
1087{ "Your current storage dir is:\n%1\nYour mail is stored in:\n(storagedir)/apps/kopiemail/localmail","Aktuelles Speicherverzeichnis ist:\n%1\nIhre Mail wird gespeichert in:\n(speicherverz.)/apps/kopiemail/localmail" }, 1087{ "Your current storage dir is:\n%1\nYour mail is stored in:\n(storagedir)/apps/kopiemail/localmail","Aktuelles Speicherverzeichnis ist:\n%1\nIhre Mail wird gespeichert in:\n(speicherverz.)/apps/kopiemail/localmail" },
1088{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" }, 1088{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" },
1089{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" }, 1089{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" },
1090{ "Save settings","Speichere Einstellungen" }, 1090{ "Save settings","Speichere Einstellungen" },
1091{ "Save standard","Speichere Standard" }, 1091{ "Save standard","Speichere Standard" },
1092{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" }, 1092{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" },
1093{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" }, 1093{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" },
1094{ "Data storage path","Daten Speicherpfad" }, 1094{ "Data storage path","Daten Speicherpfad" },
1095{ "Language","Sprache" }, 1095{ "Language","Sprache" },
1096{ "Show time in agenda items","Zeige Zeit in Agenda Items" }, 1096{ "Show time in agenda items","Zeige Zeit in Agenda Items" },
1097{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" }, 1097{ "Color for Sundays + category "Holiday"","Farbe für Sonntags + Kategorie "Feiertag"" },
1098{ "Show events, that are done in \nWhat's Next view","Zeige abgelaufene Termine in\nWhat's Next Ansicht" }, 1098{ "Show events, that are done in \nWhat's Next view","Zeige abgelaufene Termine in\nWhat's Next Ansicht" },
1099{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos" }, 1099{ "Hide not running Todos in To-do view","Verstecke nicht laufende Todos" },
1100{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" }, 1100{ "+01:00 Europe/Oslo(CET)","+01:00 Europe/Oslo(CET)" },
1101{ "KO/Pi","KO/Pi" }, 1101{ "KO/Pi","KO/Pi" },
1102{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" }, 1102{ "There is nothing to undo!","Es gibt nichts zum\nRückgängigmachen!" },
1103{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." }, 1103{ "Recreating edit dialog. Please wait...","Recreating edit dialog. Please wait..." },
1104{ "Sound.Al.: ","Sound.Al.: " }, 1104{ "Sound.Al.: ","Sound.Al.: " },
1105{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" }, 1105{ "From: %1 To: %2 %3","Von: %1 Bis: %2 %3" },
1106{ "Restore","Wiederherstellen" }, 1106{ "Restore","Wiederherstellen" },
1107{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklicht\nwiederherstellen?" }, 1107{ "\nAre you sure you want\nto restore this?","\nMöchten Sie das wirklicht\nwiederherstellen?" },
1108{ "% completed","% komplett" }, 1108{ "% completed","% komplett" },
1109{ "%d item(s) found.","%d Item(s) gefunden." }, 1109{ "%d item(s) found.","%d Item(s) gefunden." },
1110{ "Set complete","Setze auf erledigt" }, 1110{ "Set complete","Setze auf erledigt" },
1111{ "(cancelled)","(gecancelt)" }, 1111{ "(cancelled)","(gecancelt)" },
1112{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" }, 1112{ "Click on the week number to\nshow week in agenda view","Klicke auf die Wochennummer\num die Woche in der Agenda anzuzeigen" },
1113{ " Local time "," Locale Zeit " }, 1113{ " Local time "," Locale Zeit " },
1114{ "Form2","Form2" }, 1114{ "Form2","Form2" },
1115{ "Filter enabled","Filter angeschaltet" }, 1115{ "Filter enabled","Filter angeschaltet" },
1116{ "Edit Filters","Ändere Filter" }, 1116{ "Edit Filters","Ändere Filter" },
1117{ "Print What's Next View...","Drucke What's Next Ansicht..." }, 1117{ "Print What's Next View...","Drucke What's Next Ansicht..." },
1118{ "Agenda","Agenda" }, 1118{ "Agenda","Agenda" },
1119{ " ("," (" }, 1119{ " ("," (" },
1120{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" }, 1120{ "<p><b>Due on:</b> %1</p>","<p><b>Fällig am:</b> %1</p>" },
1121{ "Print","Print" }, 1121{ "Print","Print" },
1122{ "&Setup Printer...","Drucker &Setup..." }, 1122{ "&Setup Printer...","Drucker &Setup..." },
1123{ "View Type","Zeige Typ" }, 1123{ "View Type","Zeige Typ" },
1124{ "Page &orientation:","Seiten Ausrichtung:" }, 1124{ "Page &orientation:","Seiten Ausrichtung:" },
1125{ "Use Default of Selected Style","Default des selektierten Stils" }, 1125{ "Use Default of Selected Style","Default des selektierten Stils" },
1126{ "Use Default Setting of Printer","Default Einstellung des Druckers" }, 1126{ "Use Default Setting of Printer","Default Einstellung des Druckers" },
1127{ "Portrait","Portrait" }, 1127{ "Portrait","Portrait" },
1128{ "Landscape","Landschaft" }, 1128{ "Landscape","Landschaft" },
1129{ "Print day","Drucke Tag" }, 1129{ "Print day","Drucke Tag" },
1130{ "CalPrintDay_Base","CalPrintDay_Base" }, 1130{ "CalPrintDay_Base","CalPrintDay_Base" },
1131{ "Date && Time Range","Datum && Zeitspanne" }, 1131{ "Date && Time Range","Datum && Zeitspanne" },
1132{ "&End date:","&Enddatum:" }, 1132{ "&End date:","&Enddatum:" },
1133{ "&Start date:","&Startdatum:" }, 1133{ "&Start date:","&Startdatum:" },
1134{ "Start &time:","Startzeit:" }, 1134{ "Start &time:","Startzeit:" },
1135{ "End ti&me:","Endzeit:" }, 1135{ "End ti&me:","Endzeit:" },
1136{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Termine einzuschliessen" }, 1136{ "E&xtend time range to include all events","Erweitere Zeitspanne um alle Termine einzuschliessen" },
1137{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" }, 1137{ "Include to&dos that are due on the printed day(s)","Inclusive To&dos, die an den selektierten Tagen fällig sind" },
1138{ "Alt+D","Alt+D" }, 1138{ "Alt+D","Alt+D" },
1139{ "&Use colors","Nutze Farben" }, 1139{ "&Use colors","Nutze Farben" },
1140{ "Alt+U","Alt+U" }, 1140{ "Alt+U","Alt+U" },
1141{ "Print week","Drucke Woche" }, 1141{ "Print week","Drucke Woche" },
1142{ "CalPrintWeek_Base","CalPrintWeek_Base" }, 1142{ "CalPrintWeek_Base","CalPrintWeek_Base" },
1143{ "Use &colors","Nutze Farben" }, 1143{ "Use &colors","Nutze Farben" },
1144{ "Type of View","Typ der Ansicht" }, 1144{ "Type of View","Typ der Ansicht" },
1145{ "Print as &Filofax page","Drucke als &Filofax Seite" }, 1145{ "Print as &Filofax page","Drucke als &Filofax Seite" },
1146{ "Alt+F","Alt+F" }, 1146{ "Alt+F","Alt+F" },
1147{ "Print as &timetable view:","Drucke als Zeittabelle:" }, 1147{ "Print as &timetable view:","Drucke als Zeittabelle:" },
1148{ "Alt+T","Alt+T" }, 1148{ "Alt+T","Alt+T" },
1149{ "Print as split week view","Drucke als gesplittete Wochenansicht" }, 1149{ "Print as split week view","Drucke als gesplittete Wochenansicht" },
1150{ "Print month","Drucke Monat" }, 1150{ "Print month","Drucke Monat" },
1151{ "CalPrintMonth_Base","CalPrintMonth_Base" }, 1151{ "CalPrintMonth_Base","CalPrintMonth_Base" },
1152{ "&Start month:","&Startmonat:" }, 1152{ "&Start month:","&Startmonat:" },
1153{ "&End month:","&Endmonat:" }, 1153{ "&End month:","&Endmonat:" },
1154{ "Print week &numbers","Drucke Wochen Nummer(n)" }, 1154{ "Print week &numbers","Drucke Wochen Nummer(n)" },
1155{ "Print todos","Drucke Todos" }, 1155{ "Print todos","Drucke Todos" },
1156{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" }, 1156{ "CalPrintTodoConfig_Base","CalPrintTodoConfig_Base" },
1157{ "Include &description of the item","Inclusive Itembeschreibung" }, 1157{ "Include &description of the item","Inclusive Itembeschreibung" },
1158{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" }, 1158{ "Include d&ue date of the item","Inclusive Fälligkeitsdatum des Items" },
1159{ "Include &priority of the item","Inclusive Priorität des Items" }, 1159{ "Include &priority of the item","Inclusive Priorität des Items" },
1160{ "Items to Print","Zu druckende Items" }, 1160{ "Items to Print","Zu druckende Items" },
1161{ "&From:","Von:" }, 1161{ "&From:","Von:" },
1162{ "&To:","Bis:" }, 1162{ "&To:","Bis:" },
1163{ "Print &all todo items","Drucke alle Todo Items" }, 1163{ "Print &all todo items","Drucke alle Todo Items" },
1164{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" }, 1164{ "Print only &uncompleted items","Drucke nur nicht erledigte Todos" },
1165{ "Only items due in the &range:","Nur Items in dem Zeitraum:" }, 1165{ "Only items due in the &range:","Nur Items in dem Zeitraum:" },
1166{ "Todo List","Todo Liste" }, 1166{ "Todo List","Todo Liste" },
1167{ "&Title:","&Titel:" }, 1167{ "&Title:","&Titel:" },
1168{ "Co&nnect subtodos with its parent","Verbinde Unter-Todos mit ihren Ober-Todos" }, 1168{ "Co&nnect subtodos with its parent","Verbinde Unter-Todos mit ihren Ober-Todos" },
1169{ "Todo list","Todo Liste" }, 1169{ "Todo list","Todo Liste" },
1170{ "&Print...","Drucke..." }, 1170{ "&Print...","Drucke..." },
1171{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" }, 1171{ "<qt>Printing on printer <b>%1</b></qt>","<qt>Drucke auf Drucker <b>%1</b></qt>" },
1172{ "[Unconfigured]","[Unkonfiguriert]" }, 1172{ "[Unconfigured]","[Unkonfiguriert]" },
1173{ "OK","OK" }, 1173{ "OK","OK" },
1174{ "FilterEditor","FilterEditor" }, 1174{ "FilterEditor","FilterEditor" },
1175{ "Include","Inclusive" }, 1175{ "Include","Inclusive" },
1176{ "Exclude","Exclusive" }, 1176{ "Exclude","Exclusive" },
1177{ "Edit Selection...","Editiere Auswahl" }, 1177{ "Edit Selection...","Editiere Auswahl" },
1178{ "recurring events","wiederholende Termine" }, 1178{ "recurring events","wiederholende Termine" },
1179{ "recurr. events","wiederh.Termine" }, 1179{ "recurr. events","wiederh.Termine" },
1180{ "completed to-dos","erledigte Todos" }, 1180{ "completed to-dos","erledigte Todos" },
1181{ "events","Termine" }, 1181{ "events","Termine" },
1182{ "todos","Todos" }, 1182{ "todos","Todos" },
1183{ "journals","Journale" }, 1183{ "journals","Journale" },
1184{ "public","öffentl." }, 1184{ "public","öffentl." },
1185{ "private","privat" }, 1185{ "private","privat" },
1186{ "confidential","vertraul." }, 1186{ "confidential","vertraul." },
1187{ "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Unter-Todos.\nAlle erledigten Unter-Todos\nwerden auch gelöscht!" }, 1187{ "\nhas sub-todos.\nAll completed sub-todos\nwill be deleted as well!","\nhat Unter-Todos.\nAlle erledigten Unter-Todos\nwerden auch gelöscht!" },
1188{ "Yesterday","Gestern" }, 1188{ "Yesterday","Gestern" },
1189{ "Day after tomorrow","Übermorgen" }, 1189{ "Day after tomorrow","Übermorgen" },
1190{ "Tomorrow","Morgen" }, 1190{ "Tomorrow","Morgen" },
1191{ "Day before yesterday","Vorgestern" }, 1191{ "Day before yesterday","Vorgestern" },
1192{ "Size %1","Größe %1" }, 1192{ "Size %1","Größe %1" },
1193{ "New Agendasize: %1","Neue Agendagröße: %1" }, 1193{ "New Agendasize: %1","Neue Agendagröße: %1" },
1194{ " (%1 y.)"," (%1 J.)" }, 1194{ " (%1 y.)"," (%1 J.)" },
1195{ "Allday:","Ganztägig:" }, 1195{ "Allday:","Ganztägig:" },
1196{ "compl.todos","erled.Todos" }, 1196{ "compl.todos","erled.Todos" },
1197{ "Day view","Tagesansicht" }, 1197{ "Day view","Tagesansicht" },
1198{ "Next days","Nächste Tage" }, 1198{ "Next days","Nächste Tage" },
1199{ "Next week","Nächste Woche" }, 1199{ "Next week","Nächste Woche" },
1200{ "Next two weeks","Nächste zwei Wochen" }, 1200{ "Next two weeks","Nächste zwei Wochen" },
1201{ "Next month","Nächster Monat" }, 1201{ "Next month","Nächster Monat" },
1202{ "Journal view","Journal" }, 1202{ "Journal view","Journal" },
1203{ "Display all opened","Zeige alle geöffnet" }, 1203{ "Display all opened","Zeige alle geöffnet" },
1204{ "Display all closed","Zeige alle geschlossen" }, 1204{ "Display all closed","Zeige alle geschlossen" },
1205{ "Display all flat","Zeige alle flach" }, 1205{ "Display all flat","Zeige alle flach" },
1206{ "<p><i>Completed on %1</i></p>","<p><i>Erledigt am %1</i></p>" }, 1206{ "<p><i>Completed on %1</i></p>","<p><i>Erledigt am %1</i></p>" },
1207{ "Default todo done color:","Standard Todo erledigt Farbe" }, 1207{ "Default todo done color:","Standard Todo erledigt Farbe" },
1208{ "Select week %1-%2","Selektiere Woche %1-%2" }, 1208{ "Select week %1-%2","Selektiere Woche %1-%2" },
1209{ "Select Week","Selektiere Woche" }, 1209{ "Select Week","Selektiere Woche" },
1210{ "Set alarm for selected...","Setze Alarm für Selekt..." }, 1210{ "Set alarm for selected...","Setze Alarm für Selekt..." },
1211{ "Set reminder offset to:","Setze Alarm Offset auf:" }, 1211{ "Set reminder offset to:","Setze Alarm Offset auf:" },
1212{ "Set Alarm!","Setze Alarm!" }, 1212{ "Set Alarm!","Setze Alarm!" },
1213{ "Canged alarm for %1 items","Alarm für %1 Items geändert" }, 1213{ "Canged alarm for %1 items","Alarm für %1 Items geändert" },
1214{ " and "," und " },
1215{ "<IMG src="%1"> only )","nur <IMG src="%1"> )" },
1216{ "Mail to selected","Mail an Ausgewählte" },
1217{ "Mail to all","Mail an Alle" },
1218{ "","" },
1214{ "","" }, 1219{ "","" },
1215{ "","" }, 1220{ "","" },
1216{ "","" }, 1221{ "","" },
1217{ "","" }, 1222{ "","" },
1218{ "","" }, 1223{ "","" },
1219{ "","" }, 1224{ "","" },
1220{ "","" }, 1225{ "","" },
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index 702eaa3..a8e4de5 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -1,3329 +1,3329 @@
1/* 1/*
2 This file is part of KAddressbook. 2 This file is part of KAddressbook.
3 Copyright (c) 2003 Tobias Koenig <tokoe@kde.org> 3 Copyright (c) 2003 Tobias Koenig <tokoe@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 Async a special exception, permission is given to link this program 19 Async 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/*s 24/*s
25Enhanced Version of the file for platform independent KDE tools. 25Enhanced Version of the file for platform independent KDE tools.
26Copyright (c) 2004 Ulf Schenk 26Copyright (c) 2004 Ulf Schenk
27 27
28$Id$ 28$Id$
29*/ 29*/
30 30
31#include "kabcore.h" 31#include "kabcore.h"
32 32
33#include <stdaddressbook.h> 33#include <stdaddressbook.h>
34#include <klocale.h> 34#include <klocale.h>
35#include <kfiledialog.h> 35#include <kfiledialog.h>
36#include <qtimer.h> 36#include <qtimer.h>
37#include <qlabel.h> 37#include <qlabel.h>
38#include <qregexp.h> 38#include <qregexp.h>
39#include <qlineedit.h> 39#include <qlineedit.h>
40#include <qcheckbox.h> 40#include <qcheckbox.h>
41#include <qpushbutton.h> 41#include <qpushbutton.h>
42#include <qprogressbar.h> 42#include <qprogressbar.h>
43#include <libkdepim/phoneaccess.h> 43#include <libkdepim/phoneaccess.h>
44 44
45#ifndef KAB_EMBEDDED 45#ifndef KAB_EMBEDDED
46#include <qclipboard.h> 46#include <qclipboard.h>
47#include <qdir.h> 47#include <qdir.h>
48#include <qfile.h> 48#include <qfile.h>
49#include <qapplicaton.h> 49#include <qapplicaton.h>
50#include <qprogressbar.h> 50#include <qprogressbar.h>
51#include <qlayout.h> 51#include <qlayout.h>
52#include <qregexp.h> 52#include <qregexp.h>
53#include <qvbox.h> 53#include <qvbox.h>
54#include <kabc/addresseelist.h> 54#include <kabc/addresseelist.h>
55#include <kabc/errorhandler.h> 55#include <kabc/errorhandler.h>
56#include <kabc/resource.h> 56#include <kabc/resource.h>
57#include <kabc/vcardconverter.h> 57#include <kabc/vcardconverter.h>
58#include <kapplication.h> 58#include <kapplication.h>
59#include <kactionclasses.h> 59#include <kactionclasses.h>
60#include <kcmultidialog.h> 60#include <kcmultidialog.h>
61#include <kdebug.h> 61#include <kdebug.h>
62#include <kdeversion.h> 62#include <kdeversion.h>
63#include <kkeydialog.h> 63#include <kkeydialog.h>
64#include <kmessagebox.h> 64#include <kmessagebox.h>
65#include <kprinter.h> 65#include <kprinter.h>
66#include <kprotocolinfo.h> 66#include <kprotocolinfo.h>
67#include <kresources/selectdialog.h> 67#include <kresources/selectdialog.h>
68#include <kstandarddirs.h> 68#include <kstandarddirs.h>
69#include <ktempfile.h> 69#include <ktempfile.h>
70#include <kxmlguiclient.h> 70#include <kxmlguiclient.h>
71#include <kaboutdata.h> 71#include <kaboutdata.h>
72#include <libkdepim/categoryselectdialog.h> 72#include <libkdepim/categoryselectdialog.h>
73 73
74#include "addresseeutil.h" 74#include "addresseeutil.h"
75#include "addresseeeditordialog.h" 75#include "addresseeeditordialog.h"
76#include "extensionmanager.h" 76#include "extensionmanager.h"
77#include "kstdaction.h" 77#include "kstdaction.h"
78#include "kaddressbookservice.h" 78#include "kaddressbookservice.h"
79#include "ldapsearchdialog.h" 79#include "ldapsearchdialog.h"
80#include "printing/printingwizard.h" 80#include "printing/printingwizard.h"
81#else // KAB_EMBEDDED 81#else // KAB_EMBEDDED
82 82
83#include <kapplication.h> 83#include <kapplication.h>
84#include "KDGanttMinimizeSplitter.h" 84#include "KDGanttMinimizeSplitter.h"
85#include "kaddressbookmain.h" 85#include "kaddressbookmain.h"
86#include "kactioncollection.h" 86#include "kactioncollection.h"
87#include "addresseedialog.h" 87#include "addresseedialog.h"
88//US 88//US
89#include <addresseeview.h> 89#include <addresseeview.h>
90 90
91#include <qapp.h> 91#include <qapp.h>
92#include <qmenubar.h> 92#include <qmenubar.h>
93//#include <qtoolbar.h> 93//#include <qtoolbar.h>
94#include <qmessagebox.h> 94#include <qmessagebox.h>
95#include <kdebug.h> 95#include <kdebug.h>
96#include <kiconloader.h> // needed for SmallIcon 96#include <kiconloader.h> // needed for SmallIcon
97#include <kresources/kcmkresources.h> 97#include <kresources/kcmkresources.h>
98#include <ktoolbar.h> 98#include <ktoolbar.h>
99 99
100 100
101//#include <qlabel.h> 101//#include <qlabel.h>
102 102
103 103
104#ifndef DESKTOP_VERSION 104#ifndef DESKTOP_VERSION
105#include <qpe/ir.h> 105#include <qpe/ir.h>
106#include <qpe/qpemenubar.h> 106#include <qpe/qpemenubar.h>
107#include <qtopia/qcopenvelope_qws.h> 107#include <qtopia/qcopenvelope_qws.h>
108#else 108#else
109 109
110#include <qmenubar.h> 110#include <qmenubar.h>
111#endif 111#endif
112 112
113#endif // KAB_EMBEDDED 113#endif // KAB_EMBEDDED
114#include "kcmconfigs/kcmkabconfig.h" 114#include "kcmconfigs/kcmkabconfig.h"
115#include "kcmconfigs/kcmkdepimconfig.h" 115#include "kcmconfigs/kcmkdepimconfig.h"
116#include "kpimglobalprefs.h" 116#include "kpimglobalprefs.h"
117#include "externalapphandler.h" 117#include "externalapphandler.h"
118#include "xxportselectdialog.h" 118#include "xxportselectdialog.h"
119 119
120 120
121#include <kresources/selectdialog.h> 121#include <kresources/selectdialog.h>
122#include <kmessagebox.h> 122#include <kmessagebox.h>
123 123
124#include <picture.h> 124#include <picture.h>
125#include <resource.h> 125#include <resource.h>
126 126
127//US#include <qsplitter.h> 127//US#include <qsplitter.h>
128#include <qmap.h> 128#include <qmap.h>
129#include <qdir.h> 129#include <qdir.h>
130#include <qfile.h> 130#include <qfile.h>
131#include <qvbox.h> 131#include <qvbox.h>
132#include <qlayout.h> 132#include <qlayout.h>
133#include <qclipboard.h> 133#include <qclipboard.h>
134#include <qtextstream.h> 134#include <qtextstream.h>
135#include <qradiobutton.h> 135#include <qradiobutton.h>
136#include <qbuttongroup.h> 136#include <qbuttongroup.h>
137 137
138#include <libkdepim/categoryselectdialog.h> 138#include <libkdepim/categoryselectdialog.h>
139#include <libkdepim/categoryeditdialog.h> 139#include <libkdepim/categoryeditdialog.h>
140#include <kabc/vcardconverter.h> 140#include <kabc/vcardconverter.h>
141 141
142 142
143#include "addresseeutil.h" 143#include "addresseeutil.h"
144#include "undocmds.h" 144#include "undocmds.h"
145#include "addresseeeditordialog.h" 145#include "addresseeeditordialog.h"
146#include "viewmanager.h" 146#include "viewmanager.h"
147#include "details/detailsviewcontainer.h" 147#include "details/detailsviewcontainer.h"
148#include "kabprefs.h" 148#include "kabprefs.h"
149#include "xxportmanager.h" 149#include "xxportmanager.h"
150#include "incsearchwidget.h" 150#include "incsearchwidget.h"
151#include "jumpbuttonbar.h" 151#include "jumpbuttonbar.h"
152#include "extensionmanager.h" 152#include "extensionmanager.h"
153#include "addresseeconfig.h" 153#include "addresseeconfig.h"
154#include "nameeditdialog.h" 154#include "nameeditdialog.h"
155#include <kcmultidialog.h> 155#include <kcmultidialog.h>
156 156
157#ifdef _WIN32_ 157#ifdef _WIN32_
158#ifdef _OL_IMPORT_ 158#ifdef _OL_IMPORT_
159#include "kaimportoldialog.h" 159#include "kaimportoldialog.h"
160#endif 160#endif
161#else 161#else
162#include <unistd.h> 162#include <unistd.h>
163#endif 163#endif
164// sync includes 164// sync includes
165#include <libkdepim/ksyncprofile.h> 165#include <libkdepim/ksyncprofile.h>
166#include <libkdepim/ksyncprefsdialog.h> 166#include <libkdepim/ksyncprefsdialog.h>
167 167
168 168
169class KABCatPrefs : public QDialog 169class KABCatPrefs : public QDialog
170{ 170{
171 public: 171 public:
172 KABCatPrefs( QWidget *parent=0, const char *name=0 ) : 172 KABCatPrefs( QWidget *parent=0, const char *name=0 ) :
173 QDialog( parent, name, true ) 173 QDialog( parent, name, true )
174 { 174 {
175 setCaption( i18n("Manage new Categories") ); 175 setCaption( i18n("Manage new Categories") );
176 QVBoxLayout* lay = new QVBoxLayout( this ); 176 QVBoxLayout* lay = new QVBoxLayout( this );
177 lay->setSpacing( 3 ); 177 lay->setSpacing( 3 );
178 lay->setMargin( 3 ); 178 lay->setMargin( 3 );
179 QLabel * lab = new QLabel( i18n("After importing/loading/syncing\nthere may be new categories in\naddressees\nwhich are not in the category list.\nPlease choose what to do:\n "), this ); 179 QLabel * lab = new QLabel( i18n("After importing/loading/syncing\nthere may be new categories in\naddressees\nwhich are not in the category list.\nPlease choose what to do:\n "), this );
180 lay->addWidget( lab ); 180 lay->addWidget( lab );
181 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this ); 181 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("New categories not in list:"), this );
182 lay->addWidget( format ); 182 lay->addWidget( format );
183 format->setExclusive ( true ) ; 183 format->setExclusive ( true ) ;
184 addCatBut = new QRadioButton(i18n("Add to category list"), format ); 184 addCatBut = new QRadioButton(i18n("Add to category list"), format );
185 new QRadioButton(i18n("Remove from addressees"), format ); 185 new QRadioButton(i18n("Remove from addressees"), format );
186 addCatBut->setChecked( true ); 186 addCatBut->setChecked( true );
187 QPushButton * ok = new QPushButton( i18n("OK"), this ); 187 QPushButton * ok = new QPushButton( i18n("OK"), this );
188 lay->addWidget( ok ); 188 lay->addWidget( ok );
189 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 189 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
190 lay->addWidget( cancel ); 190 lay->addWidget( cancel );
191 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 191 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
192 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 192 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
193 resize( 200, 200 ); 193 resize( 200, 200 );
194 } 194 }
195 195
196 bool addCat() { return addCatBut->isChecked(); } 196 bool addCat() { return addCatBut->isChecked(); }
197private: 197private:
198 QRadioButton* addCatBut; 198 QRadioButton* addCatBut;
199}; 199};
200 200
201class KABFormatPrefs : public QDialog 201class KABFormatPrefs : public QDialog
202{ 202{
203 public: 203 public:
204 KABFormatPrefs( QWidget *parent=0, const char *name=0 ) : 204 KABFormatPrefs( QWidget *parent=0, const char *name=0 ) :
205 QDialog( parent, name, true ) 205 QDialog( parent, name, true )
206 { 206 {
207 setCaption( i18n("Set formatted name") ); 207 setCaption( i18n("Set formatted name") );
208 QVBoxLayout* lay = new QVBoxLayout( this ); 208 QVBoxLayout* lay = new QVBoxLayout( this );
209 lay->setSpacing( 3 ); 209 lay->setSpacing( 3 );
210 lay->setMargin( 3 ); 210 lay->setMargin( 3 );
211 QLabel * lab = new QLabel( i18n("You can set the formatted name\nfor a list of contacts in one go."), this ); 211 QLabel * lab = new QLabel( i18n("You can set the formatted name\nfor a list of contacts in one go."), this );
212 lay->addWidget( lab ); 212 lay->addWidget( lab );
213 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("Set formatted name to:"), this ); 213 QButtonGroup* format = new QButtonGroup( 1, Horizontal, i18n("Set formatted name to:"), this );
214 lay->addWidget( format ); 214 lay->addWidget( format );
215 format->setExclusive ( true ) ; 215 format->setExclusive ( true ) ;
216 simple = new QRadioButton(i18n("Simple: James Bond"), format ); 216 simple = new QRadioButton(i18n("Simple: James Bond"), format );
217 full = new QRadioButton(i18n("Full: Mr. James 007 Bond I"), format ); 217 full = new QRadioButton(i18n("Full: Mr. James 007 Bond I"), format );
218 reverse = new QRadioButton(i18n("Reverse: Bond, James"), format ); 218 reverse = new QRadioButton(i18n("Reverse: Bond, James"), format );
219 company = new QRadioButton(i18n("Organization: MI6"), format ); 219 company = new QRadioButton(i18n("Organization: MI6"), format );
220 simple->setChecked( true ); 220 simple->setChecked( true );
221 setCompany = new QCheckBox(i18n("Set formatted name to\norganization, if name empty"), this); 221 setCompany = new QCheckBox(i18n("Set formatted name to\norganization, if name empty"), this);
222 lay->addWidget( setCompany ); 222 lay->addWidget( setCompany );
223 QPushButton * ok = new QPushButton( i18n("Select contact list"), this ); 223 QPushButton * ok = new QPushButton( i18n("Select contact list"), this );
224 lay->addWidget( ok ); 224 lay->addWidget( ok );
225 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 225 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
226 lay->addWidget( cancel ); 226 lay->addWidget( cancel );
227 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 227 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
228 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 228 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
229 //resize( 200, 200 ); 229 //resize( 200, 200 );
230 230
231 } 231 }
232public: 232public:
233 QRadioButton* simple, *full, *reverse, *company; 233 QRadioButton* simple, *full, *reverse, *company;
234 QCheckBox* setCompany; 234 QCheckBox* setCompany;
235}; 235};
236 236
237 237
238 238
239class KAex2phonePrefs : public QDialog 239class KAex2phonePrefs : public QDialog
240{ 240{
241 public: 241 public:
242 KAex2phonePrefs( QWidget *parent=0, const char *name=0 ) : 242 KAex2phonePrefs( QWidget *parent=0, const char *name=0 ) :
243 QDialog( parent, name, true ) 243 QDialog( parent, name, true )
244 { 244 {
245 setCaption( i18n("Export to phone options") ); 245 setCaption( i18n("Export to phone options") );
246 QVBoxLayout* lay = new QVBoxLayout( this ); 246 QVBoxLayout* lay = new QVBoxLayout( this );
247 lay->setSpacing( 3 ); 247 lay->setSpacing( 3 );
248 lay->setMargin( 3 ); 248 lay->setMargin( 3 );
249 QLabel *lab; 249 QLabel *lab;
250 lay->addWidget(lab = new QLabel( i18n("Please read Help-Sync Howto\nto know what settings to use."), this ) ); 250 lay->addWidget(lab = new QLabel( i18n("Please read Help-Sync Howto\nto know what settings to use."), this ) );
251 lab->setAlignment (AlignHCenter ); 251 lab->setAlignment (AlignHCenter );
252 QHBox* temphb; 252 QHBox* temphb;
253 temphb = new QHBox( this ); 253 temphb = new QHBox( this );
254 new QLabel( i18n("I/O device: "), temphb ); 254 new QLabel( i18n("I/O device: "), temphb );
255 mPhoneDevice = new QLineEdit( temphb); 255 mPhoneDevice = new QLineEdit( temphb);
256 lay->addWidget( temphb ); 256 lay->addWidget( temphb );
257 temphb = new QHBox( this ); 257 temphb = new QHBox( this );
258 new QLabel( i18n("Connection: "), temphb ); 258 new QLabel( i18n("Connection: "), temphb );
259 mPhoneConnection = new QLineEdit( temphb); 259 mPhoneConnection = new QLineEdit( temphb);
260 lay->addWidget( temphb ); 260 lay->addWidget( temphb );
261 temphb = new QHBox( this ); 261 temphb = new QHBox( this );
262 new QLabel( i18n("Model(opt.): "), temphb ); 262 new QLabel( i18n("Model(opt.): "), temphb );
263 mPhoneModel = new QLineEdit( temphb); 263 mPhoneModel = new QLineEdit( temphb);
264 lay->addWidget( temphb ); 264 lay->addWidget( temphb );
265 // mWriteToSim = new QCheckBox( i18n("Write Contacts to SIM card\n(if not, write to phone memory)"), this ); 265 // mWriteToSim = new QCheckBox( i18n("Write Contacts to SIM card\n(if not, write to phone memory)"), this );
266 // lay->addWidget( mWriteToSim ); 266 // lay->addWidget( mWriteToSim );
267 lay->addWidget(lab = new QLabel( i18n("NOTE: This will remove all old\ncontact data on phone!"), this ) ); 267 lay->addWidget(lab = new QLabel( i18n("NOTE: This will remove all old\ncontact data on phone!"), this ) );
268 lab->setAlignment (AlignHCenter); 268 lab->setAlignment (AlignHCenter);
269 QPushButton * ok = new QPushButton( i18n("Export to mobile phone!"), this ); 269 QPushButton * ok = new QPushButton( i18n("Export to mobile phone!"), this );
270 lay->addWidget( ok ); 270 lay->addWidget( ok );
271 QPushButton * cancel = new QPushButton( i18n("Cancel"), this ); 271 QPushButton * cancel = new QPushButton( i18n("Cancel"), this );
272 lay->addWidget( cancel ); 272 lay->addWidget( cancel );
273 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) ); 273 connect ( ok,SIGNAL(clicked() ),this , SLOT ( accept() ) );
274 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) ); 274 connect (cancel, SIGNAL(clicked() ), this, SLOT ( reject()) );
275 resize( 220, 240 ); 275 resize( 220, 240 );
276 276
277 } 277 }
278 278
279public: 279public:
280 QLineEdit* mPhoneConnection, *mPhoneDevice, *mPhoneModel; 280 QLineEdit* mPhoneConnection, *mPhoneDevice, *mPhoneModel;
281 QCheckBox* mWriteToSim; 281 QCheckBox* mWriteToSim;
282}; 282};
283 283
284 284
285bool pasteWithNewUid = true; 285bool pasteWithNewUid = true;
286 286
287#ifdef KAB_EMBEDDED 287#ifdef KAB_EMBEDDED
288KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name ) 288KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name )
289 : QWidget( parent, name ), KSyncInterface(), mGUIClient( client ), mViewManager( 0 ), 289 : QWidget( parent, name ), KSyncInterface(), mGUIClient( client ), mViewManager( 0 ),
290 mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/ 290 mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/
291 mReadWrite( readWrite ), mModified( false ), mMainWindow(client) 291 mReadWrite( readWrite ), mModified( false ), mMainWindow(client)
292#else //KAB_EMBEDDED 292#else //KAB_EMBEDDED
293KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name ) 293KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name )
294 : QWidget( parent, name ), KSyncInterface(), mGUIClient( client ), mViewManager( 0 ), 294 : QWidget( parent, name ), KSyncInterface(), mGUIClient( client ), mViewManager( 0 ),
295 mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ), 295 mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ),
296 mReadWrite( readWrite ), mModified( false ) 296 mReadWrite( readWrite ), mModified( false )
297#endif //KAB_EMBEDDED 297#endif //KAB_EMBEDDED
298{ 298{
299 // syncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)this, KSyncManager::KAPI, KABPrefs::instance(), syncMenu); 299 // syncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)this, KSyncManager::KAPI, KABPrefs::instance(), syncMenu);
300 // syncManager->setBlockSave(false); 300 // syncManager->setBlockSave(false);
301 mMiniSplitter = 0; 301 mMiniSplitter = 0;
302 mExtensionBarSplitter = 0; 302 mExtensionBarSplitter = 0;
303 mIsPart = !parent->inherits( "KAddressBookMain" ); 303 mIsPart = !parent->inherits( "KAddressBookMain" );
304 mAddressBook = KABC::StdAddressBook::self(); 304 mAddressBook = KABC::StdAddressBook::self();
305 KABC::StdAddressBook::setAutomaticSave( false ); 305 KABC::StdAddressBook::setAutomaticSave( false );
306 306
307#ifndef KAB_EMBEDDED 307#ifndef KAB_EMBEDDED
308 mAddressBook->setErrorHandler( new KABC::GUIErrorHandler ); 308 mAddressBook->setErrorHandler( new KABC::GUIErrorHandler );
309#endif //KAB_EMBEDDED 309#endif //KAB_EMBEDDED
310 310
311 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ), 311 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ),
312 SLOT( addressBookChanged() ) ); 312 SLOT( addressBookChanged() ) );
313 313
314#if 0 314#if 0
315 // LP moved to addressbook init method 315 // LP moved to addressbook init method
316 mAddressBook->addCustomField( i18n( "Department" ), KABC::Field::Organization, 316 mAddressBook->addCustomField( i18n( "Department" ), KABC::Field::Organization,
317 "X-Department", "KADDRESSBOOK" ); 317 "X-Department", "KADDRESSBOOK" );
318 mAddressBook->addCustomField( i18n( "Profession" ), KABC::Field::Organization, 318 mAddressBook->addCustomField( i18n( "Profession" ), KABC::Field::Organization,
319 "X-Profession", "KADDRESSBOOK" ); 319 "X-Profession", "KADDRESSBOOK" );
320 mAddressBook->addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization, 320 mAddressBook->addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization,
321 "X-AssistantsName", "KADDRESSBOOK" ); 321 "X-AssistantsName", "KADDRESSBOOK" );
322 mAddressBook->addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization, 322 mAddressBook->addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization,
323 "X-ManagersName", "KADDRESSBOOK" ); 323 "X-ManagersName", "KADDRESSBOOK" );
324 mAddressBook->addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal, 324 mAddressBook->addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal,
325 "X-SpousesName", "KADDRESSBOOK" ); 325 "X-SpousesName", "KADDRESSBOOK" );
326 mAddressBook->addCustomField( i18n( "Office" ), KABC::Field::Personal, 326 mAddressBook->addCustomField( i18n( "Office" ), KABC::Field::Personal,
327 "X-Office", "KADDRESSBOOK" ); 327 "X-Office", "KADDRESSBOOK" );
328 mAddressBook->addCustomField( i18n( "IM Address" ), KABC::Field::Personal, 328 mAddressBook->addCustomField( i18n( "IM Address" ), KABC::Field::Personal,
329 "X-IMAddress", "KADDRESSBOOK" ); 329 "X-IMAddress", "KADDRESSBOOK" );
330 mAddressBook->addCustomField( i18n( "Anniversary" ), KABC::Field::Personal, 330 mAddressBook->addCustomField( i18n( "Anniversary" ), KABC::Field::Personal,
331 "X-Anniversary", "KADDRESSBOOK" ); 331 "X-Anniversary", "KADDRESSBOOK" );
332 332
333 //US added this field to become compatible with Opie/qtopia addressbook 333 //US added this field to become compatible with Opie/qtopia addressbook
334 // values can be "female" or "male" or "". An empty field represents undefined. 334 // values can be "female" or "male" or "". An empty field represents undefined.
335 mAddressBook->addCustomField( i18n( "Gender" ), KABC::Field::Personal, 335 mAddressBook->addCustomField( i18n( "Gender" ), KABC::Field::Personal,
336 "X-Gender", "KADDRESSBOOK" ); 336 "X-Gender", "KADDRESSBOOK" );
337 mAddressBook->addCustomField( i18n( "Children" ), KABC::Field::Personal, 337 mAddressBook->addCustomField( i18n( "Children" ), KABC::Field::Personal,
338 "X-Children", "KADDRESSBOOK" ); 338 "X-Children", "KADDRESSBOOK" );
339 mAddressBook->addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal, 339 mAddressBook->addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal,
340 "X-FreeBusyUrl", "KADDRESSBOOK" ); 340 "X-FreeBusyUrl", "KADDRESSBOOK" );
341#endif 341#endif
342 initGUI(); 342 initGUI();
343 343
344 mIncSearchWidget->setFocus(); 344 mIncSearchWidget->setFocus();
345 345
346 346
347 connect( mViewManager, SIGNAL( selected( const QString& ) ), 347 connect( mViewManager, SIGNAL( selected( const QString& ) ),
348 SLOT( setContactSelected( const QString& ) ) ); 348 SLOT( setContactSelected( const QString& ) ) );
349 connect( mViewManager, SIGNAL( executed( const QString& ) ), 349 connect( mViewManager, SIGNAL( executed( const QString& ) ),
350 SLOT( executeContact( const QString& ) ) ); 350 SLOT( executeContact( const QString& ) ) );
351 351
352 connect( mViewManager, SIGNAL( deleteRequest( ) ), 352 connect( mViewManager, SIGNAL( deleteRequest( ) ),
353 SLOT( deleteContacts( ) ) ); 353 SLOT( deleteContacts( ) ) );
354 connect( mViewManager, SIGNAL( modified() ), 354 connect( mViewManager, SIGNAL( modified() ),
355 SLOT( setModified() ) ); 355 SLOT( setModified() ) );
356 356
357 connect( mExtensionManager, SIGNAL( modified( const KABC::Addressee::List& ) ), this, SLOT( extensionModified( const KABC::Addressee::List& ) ) ); 357 connect( mExtensionManager, SIGNAL( modified( const KABC::Addressee::List& ) ), this, SLOT( extensionModified( const KABC::Addressee::List& ) ) );
358 connect( mExtensionManager, SIGNAL( changedActiveExtension( int ) ), this, SLOT( extensionChanged( int ) ) ); 358 connect( mExtensionManager, SIGNAL( changedActiveExtension( int ) ), this, SLOT( extensionChanged( int ) ) );
359 359
360 connect( mXXPortManager, SIGNAL( modified() ), 360 connect( mXXPortManager, SIGNAL( modified() ),
361 SLOT( setModified() ) ); 361 SLOT( setModified() ) );
362 362
363 connect( mJumpButtonBar, SIGNAL( jumpToLetter( const QString& ) ), 363 connect( mJumpButtonBar, SIGNAL( jumpToLetter( const QString& ) ),
364 SLOT( incrementalSearch( const QString& ) ) ); 364 SLOT( incrementalSearch( const QString& ) ) );
365 connect( mIncSearchWidget, SIGNAL( fieldChanged() ), 365 connect( mIncSearchWidget, SIGNAL( fieldChanged() ),
366 mJumpButtonBar, SLOT( recreateButtons() ) ); 366 mJumpButtonBar, SLOT( recreateButtons() ) );
367 367
368 connect( mDetails, SIGNAL( sendEmail( const QString& ) ), 368 connect( mDetails, SIGNAL( sendEmail( const QString& ) ),
369 SLOT( sendMail( const QString& ) ) ); 369 SLOT( sendMail( const QString& ) ) );
370 370
371 371
372 connect( ExternalAppHandler::instance(), SIGNAL (requestForNameEmailUidList(const QString&, const QString&)),this, SLOT(requestForNameEmailUidList(const QString&, const QString&))); 372 connect( ExternalAppHandler::instance(), SIGNAL (requestForNameEmailUidList(const QString&, const QString&)),this, SLOT(requestForNameEmailUidList(const QString&, const QString&)));
373 connect( ExternalAppHandler::instance(), SIGNAL (requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&)),this, SLOT(requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&))); 373 connect( ExternalAppHandler::instance(), SIGNAL (requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&)),this, SLOT(requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&)));
374 connect( ExternalAppHandler::instance(), SIGNAL (requestForBirthdayList(const QString&, const QString&)),this, SLOT(requestForBirthdayList(const QString&, const QString&))); 374 connect( ExternalAppHandler::instance(), SIGNAL (requestForBirthdayList(const QString&, const QString&)),this, SLOT(requestForBirthdayList(const QString&, const QString&)));
375 connect( ExternalAppHandler::instance(), SIGNAL (nextView()),this, SLOT(setDetailsToggle())); 375 connect( ExternalAppHandler::instance(), SIGNAL (nextView()),this, SLOT(setDetailsToggle()));
376 376
377 377
378#ifndef KAB_EMBEDDED 378#ifndef KAB_EMBEDDED
379 connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ), 379 connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ),
380 mXXPortManager, SLOT( importVCard( const KURL& ) ) ); 380 mXXPortManager, SLOT( importVCard( const KURL& ) ) );
381 381
382 connect( mDetails, SIGNAL( browse( const QString& ) ), 382 connect( mDetails, SIGNAL( browse( const QString& ) ),
383 SLOT( browse( const QString& ) ) ); 383 SLOT( browse( const QString& ) ) );
384 384
385 385
386 mAddressBookService = new KAddressBookService( this ); 386 mAddressBookService = new KAddressBookService( this );
387 387
388#endif //KAB_EMBEDDED 388#endif //KAB_EMBEDDED
389 389
390 mMessageTimer = new QTimer( this ); 390 mMessageTimer = new QTimer( this );
391 connect( mMessageTimer, SIGNAL( timeout() ), this, SLOT( setCaptionBack() ) ); 391 connect( mMessageTimer, SIGNAL( timeout() ), this, SLOT( setCaptionBack() ) );
392 mEditorDialog = 0; 392 mEditorDialog = 0;
393 createAddresseeEditorDialog( this ); 393 createAddresseeEditorDialog( this );
394 setModified( false ); 394 setModified( false );
395 mBRdisabled = false; 395 mBRdisabled = false;
396#ifndef DESKTOP_VERSION 396#ifndef DESKTOP_VERSION
397 infrared = 0; 397 infrared = 0;
398#endif 398#endif
399 //toggleBeamReceive( ); 399 //toggleBeamReceive( );
400 //mMainWindow->toolBar()->show(); 400 //mMainWindow->toolBar()->show();
401 // we have a toolbar repainting error on the Zaurus when starting KA/Pi 401 // we have a toolbar repainting error on the Zaurus when starting KA/Pi
402 QTimer::singleShot( 10, this , SLOT ( updateToolBar())); 402 QTimer::singleShot( 10, this , SLOT ( updateToolBar()));
403} 403}
404 404
405void KABCore::updateToolBar() 405void KABCore::updateToolBar()
406{ 406{
407 static int iii = 0; 407 static int iii = 0;
408 ++iii; 408 ++iii;
409 mMainWindow->toolBar()->repaintMe(); 409 mMainWindow->toolBar()->repaintMe();
410 if ( iii < 4 ) 410 if ( iii < 4 )
411 QTimer::singleShot( 100*iii, this , SLOT ( updateToolBar())); 411 QTimer::singleShot( 100*iii, this , SLOT ( updateToolBar()));
412} 412}
413KABCore::~KABCore() 413KABCore::~KABCore()
414{ 414{
415 // save(); 415 // save();
416 //saveSettings(); 416 //saveSettings();
417 //KABPrefs::instance()->writeConfig(); 417 //KABPrefs::instance()->writeConfig();
418 delete AddresseeConfig::instance(); 418 delete AddresseeConfig::instance();
419 mAddressBook = 0; 419 mAddressBook = 0;
420 KABC::StdAddressBook::close(); 420 KABC::StdAddressBook::close();
421 421
422 delete syncManager; 422 delete syncManager;
423#ifndef DESKTOP_VERSION 423#ifndef DESKTOP_VERSION
424 if ( infrared ) 424 if ( infrared )
425 delete infrared; 425 delete infrared;
426#endif 426#endif
427} 427}
428void KABCore::receive( const QCString& cmsg, const QByteArray& data ) 428void KABCore::receive( const QCString& cmsg, const QByteArray& data )
429{ 429{
430 //qDebug("KA: QCOP message received: %s ", cmsg.data() ); 430 //qDebug("KA: QCOP message received: %s ", cmsg.data() );
431 if ( cmsg == "setDocument(QString)" ) { 431 if ( cmsg == "setDocument(QString)" ) {
432 QDataStream stream( data, IO_ReadOnly ); 432 QDataStream stream( data, IO_ReadOnly );
433 QString fileName; 433 QString fileName;
434 stream >> fileName; 434 stream >> fileName;
435 recieve( fileName ); 435 recieve( fileName );
436 return; 436 return;
437 } 437 }
438} 438}
439void KABCore::toggleBeamReceive( ) 439void KABCore::toggleBeamReceive( )
440{ 440{
441 if ( mBRdisabled ) 441 if ( mBRdisabled )
442 return; 442 return;
443#ifndef DESKTOP_VERSION 443#ifndef DESKTOP_VERSION
444 if ( infrared ) { 444 if ( infrared ) {
445 qDebug("KA: AB disable BeamReceive "); 445 qDebug("KA: AB disable BeamReceive ");
446 delete infrared; 446 delete infrared;
447 infrared = 0; 447 infrared = 0;
448 mActionBR->setChecked(false); 448 mActionBR->setChecked(false);
449 return; 449 return;
450 } 450 }
451 qDebug("KA: AB enable BeamReceive "); 451 qDebug("KA: AB enable BeamReceive ");
452 mActionBR->setChecked(true); 452 mActionBR->setChecked(true);
453 453
454 infrared = new QCopChannel("QPE/Application/addressbook",this, "channelAB" ) ; 454 infrared = new QCopChannel("QPE/Application/addressbook",this, "channelAB" ) ;
455 QObject::connect( infrared, SIGNAL (received ( const QCString &, const QByteArray & )),this, SLOT(receive( const QCString&, const QByteArray& ))); 455 QObject::connect( infrared, SIGNAL (received ( const QCString &, const QByteArray & )),this, SLOT(receive( const QCString&, const QByteArray& )));
456#endif 456#endif
457} 457}
458 458
459 459
460void KABCore::disableBR(bool b) 460void KABCore::disableBR(bool b)
461{ 461{
462#ifndef DESKTOP_VERSION 462#ifndef DESKTOP_VERSION
463 if ( b ) { 463 if ( b ) {
464 if ( infrared ) { 464 if ( infrared ) {
465 toggleBeamReceive( ); 465 toggleBeamReceive( );
466 } 466 }
467 mBRdisabled = true; 467 mBRdisabled = true;
468 } else { 468 } else {
469 if ( mBRdisabled ) { 469 if ( mBRdisabled ) {
470 mBRdisabled = false; 470 mBRdisabled = false;
471 //toggleBeamReceive( ); 471 //toggleBeamReceive( );
472 } 472 }
473 } 473 }
474#endif 474#endif
475 475
476} 476}
477void KABCore::recieve( QString fn ) 477void KABCore::recieve( QString fn )
478{ 478{
479 //qDebug("KABCore::recieve "); 479 //qDebug("KABCore::recieve ");
480 int count = mAddressBook->importFromFile( fn, true ); 480 int count = mAddressBook->importFromFile( fn, true );
481 if ( count ) 481 if ( count )
482 setModified( true ); 482 setModified( true );
483 mViewManager->refreshView(); 483 mViewManager->refreshView();
484 message(i18n("%1 contact(s) received!").arg( count )); 484 message(i18n("%1 contact(s) received!").arg( count ));
485 topLevelWidget()->showMaximized(); 485 topLevelWidget()->showMaximized();
486 topLevelWidget()->raise(); 486 topLevelWidget()->raise();
487} 487}
488void KABCore::restoreSettings() 488void KABCore::restoreSettings()
489{ 489{
490 mMultipleViewsAtOnce = KABPrefs::instance()->mMultipleViewsAtOnce; 490 mMultipleViewsAtOnce = KABPrefs::instance()->mMultipleViewsAtOnce;
491 491
492 bool state; 492 bool state;
493 493
494 if (mMultipleViewsAtOnce) 494 if (mMultipleViewsAtOnce)
495 state = KABPrefs::instance()->mDetailsPageVisible; 495 state = KABPrefs::instance()->mDetailsPageVisible;
496 else 496 else
497 state = false; 497 state = false;
498 498
499 mActionDetails->setChecked( state ); 499 mActionDetails->setChecked( state );
500 setDetailsVisible( state ); 500 setDetailsVisible( state );
501 501
502 state = KABPrefs::instance()->mJumpButtonBarVisible; 502 state = KABPrefs::instance()->mJumpButtonBarVisible;
503 503
504 mActionJumpBar->setChecked( state ); 504 mActionJumpBar->setChecked( state );
505 setJumpButtonBarVisible( state ); 505 setJumpButtonBarVisible( state );
506/*US 506/*US
507 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter; 507 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter;
508 if ( splitterSize.count() == 0 ) { 508 if ( splitterSize.count() == 0 ) {
509 splitterSize.append( width() / 2 ); 509 splitterSize.append( width() / 2 );
510 splitterSize.append( width() / 2 ); 510 splitterSize.append( width() / 2 );
511 } 511 }
512 mMiniSplitter->setSizes( splitterSize ); 512 mMiniSplitter->setSizes( splitterSize );
513 if ( mExtensionBarSplitter ) { 513 if ( mExtensionBarSplitter ) {
514 splitterSize = KABPrefs::instance()->mExtensionsSplitter; 514 splitterSize = KABPrefs::instance()->mExtensionsSplitter;
515 if ( splitterSize.count() == 0 ) { 515 if ( splitterSize.count() == 0 ) {
516 splitterSize.append( width() / 2 ); 516 splitterSize.append( width() / 2 );
517 splitterSize.append( width() / 2 ); 517 splitterSize.append( width() / 2 );
518 } 518 }
519 mExtensionBarSplitter->setSizes( splitterSize ); 519 mExtensionBarSplitter->setSizes( splitterSize );
520 520
521 } 521 }
522*/ 522*/
523 mViewManager->restoreSettings(); 523 mViewManager->restoreSettings();
524 mIncSearchWidget->setCurrentItem( KABPrefs::instance()->mCurrentIncSearchField ); 524 mIncSearchWidget->setCurrentItem( KABPrefs::instance()->mCurrentIncSearchField );
525 mExtensionManager->restoreSettings(); 525 mExtensionManager->restoreSettings();
526#ifdef DESKTOP_VERSION 526#ifdef DESKTOP_VERSION
527 int wid = width(); 527 int wid = width();
528 if ( wid < 10 ) 528 if ( wid < 10 )
529 wid = 400; 529 wid = 400;
530#else 530#else
531 int wid = QApplication::desktop()->width(); 531 int wid = QApplication::desktop()->width();
532 if ( wid < 640 ) 532 if ( wid < 640 )
533 wid = QApplication::desktop()->height(); 533 wid = QApplication::desktop()->height();
534#endif 534#endif
535 QValueList<int> splitterSize;// = KABPrefs::instance()->mDetailsSplitter; 535 QValueList<int> splitterSize;// = KABPrefs::instance()->mDetailsSplitter;
536 if ( true /*splitterSize.count() == 0*/ ) { 536 if ( true /*splitterSize.count() == 0*/ ) {
537 splitterSize.append( wid / 2 ); 537 splitterSize.append( wid / 2 );
538 splitterSize.append( wid / 2 ); 538 splitterSize.append( wid / 2 );
539 } 539 }
540 mMiniSplitter->setSizes( splitterSize ); 540 mMiniSplitter->setSizes( splitterSize );
541 if ( mExtensionBarSplitter ) { 541 if ( mExtensionBarSplitter ) {
542 //splitterSize = KABPrefs::instance()->mExtensionsSplitter; 542 //splitterSize = KABPrefs::instance()->mExtensionsSplitter;
543 if ( true /*splitterSize.count() == 0*/ ) { 543 if ( true /*splitterSize.count() == 0*/ ) {
544 splitterSize.append( wid / 2 ); 544 splitterSize.append( wid / 2 );
545 splitterSize.append( wid / 2 ); 545 splitterSize.append( wid / 2 );
546 } 546 }
547 mExtensionBarSplitter->setSizes( splitterSize ); 547 mExtensionBarSplitter->setSizes( splitterSize );
548 548
549 } 549 }
550 550
551 551
552} 552}
553 553
554void KABCore::saveSettings() 554void KABCore::saveSettings()
555{ 555{
556 KABPrefs::instance()->mJumpButtonBarVisible = mActionJumpBar->isChecked(); 556 KABPrefs::instance()->mJumpButtonBarVisible = mActionJumpBar->isChecked();
557 if ( mExtensionBarSplitter ) 557 if ( mExtensionBarSplitter )
558 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes(); 558 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes();
559 KABPrefs::instance()->mDetailsPageVisible = mActionDetails->isChecked(); 559 KABPrefs::instance()->mDetailsPageVisible = mActionDetails->isChecked();
560 KABPrefs::instance()->mDetailsSplitter = mMiniSplitter->sizes(); 560 KABPrefs::instance()->mDetailsSplitter = mMiniSplitter->sizes();
561#ifndef KAB_EMBEDDED 561#ifndef KAB_EMBEDDED
562 562
563 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes(); 563 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes();
564 KABPrefs::instance()->mDetailsSplitter = mDetailsSplitter->sizes(); 564 KABPrefs::instance()->mDetailsSplitter = mDetailsSplitter->sizes();
565#endif //KAB_EMBEDDED 565#endif //KAB_EMBEDDED
566 mExtensionManager->saveSettings(); 566 mExtensionManager->saveSettings();
567 mViewManager->saveSettings(); 567 mViewManager->saveSettings();
568 568
569 KABPrefs::instance()->mCurrentIncSearchField = mIncSearchWidget->currentItem(); 569 KABPrefs::instance()->mCurrentIncSearchField = mIncSearchWidget->currentItem();
570 KABPrefs::instance()->writeConfig(); 570 KABPrefs::instance()->writeConfig();
571 qDebug("KA: KABCore::saveSettings() "); 571 qDebug("KA: KABCore::saveSettings() ");
572} 572}
573 573
574KABC::AddressBook *KABCore::addressBook() const 574KABC::AddressBook *KABCore::addressBook() const
575{ 575{
576 return mAddressBook; 576 return mAddressBook;
577} 577}
578 578
579KConfig *KABCore::config() 579KConfig *KABCore::config()
580{ 580{
581#ifndef KAB_EMBEDDED 581#ifndef KAB_EMBEDDED
582 return KABPrefs::instance()->config(); 582 return KABPrefs::instance()->config();
583#else //KAB_EMBEDDED 583#else //KAB_EMBEDDED
584 return KABPrefs::instance()->getConfig(); 584 return KABPrefs::instance()->getConfig();
585#endif //KAB_EMBEDDED 585#endif //KAB_EMBEDDED
586} 586}
587 587
588KActionCollection *KABCore::actionCollection() const 588KActionCollection *KABCore::actionCollection() const
589{ 589{
590 return mGUIClient->actionCollection(); 590 return mGUIClient->actionCollection();
591} 591}
592 592
593KABC::Field *KABCore::currentSearchField() const 593KABC::Field *KABCore::currentSearchField() const
594{ 594{
595 if (mIncSearchWidget) 595 if (mIncSearchWidget)
596 return mIncSearchWidget->currentField(); 596 return mIncSearchWidget->currentField();
597 else 597 else
598 return 0; 598 return 0;
599} 599}
600 600
601QStringList KABCore::selectedUIDs() const 601QStringList KABCore::selectedUIDs() const
602{ 602{
603 return mViewManager->selectedUids(); 603 return mViewManager->selectedUids();
604} 604}
605 605
606KABC::Resource *KABCore::requestResource( QWidget *parent ) 606KABC::Resource *KABCore::requestResource( QWidget *parent )
607{ 607{
608 QPtrList<KABC::Resource> kabcResources = addressBook()->resources(); 608 QPtrList<KABC::Resource> kabcResources = addressBook()->resources();
609 609
610 QPtrList<KRES::Resource> kresResources; 610 QPtrList<KRES::Resource> kresResources;
611 QPtrListIterator<KABC::Resource> resIt( kabcResources ); 611 QPtrListIterator<KABC::Resource> resIt( kabcResources );
612 KABC::Resource *resource; 612 KABC::Resource *resource;
613 while ( ( resource = resIt.current() ) != 0 ) { 613 while ( ( resource = resIt.current() ) != 0 ) {
614 ++resIt; 614 ++resIt;
615 if ( !resource->readOnly() ) { 615 if ( !resource->readOnly() ) {
616 KRES::Resource *res = static_cast<KRES::Resource*>( resource ); 616 KRES::Resource *res = static_cast<KRES::Resource*>( resource );
617 if ( res ) 617 if ( res )
618 kresResources.append( res ); 618 kresResources.append( res );
619 } 619 }
620 } 620 }
621 621
622 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent ); 622 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent );
623 return static_cast<KABC::Resource*>( res ); 623 return static_cast<KABC::Resource*>( res );
624} 624}
625 625
626#ifndef KAB_EMBEDDED 626#ifndef KAB_EMBEDDED
627KAboutData *KABCore::createAboutData() 627KAboutData *KABCore::createAboutData()
628#else //KAB_EMBEDDED 628#else //KAB_EMBEDDED
629void KABCore::createAboutData() 629void KABCore::createAboutData()
630#endif //KAB_EMBEDDED 630#endif //KAB_EMBEDDED
631{ 631{
632#ifndef KAB_EMBEDDED 632#ifndef KAB_EMBEDDED
633 KAboutData *about = new KAboutData( "kaddressbook", I18N_NOOP( "KAddressBook" ), 633 KAboutData *about = new KAboutData( "kaddressbook", I18N_NOOP( "KAddressBook" ),
634 "3.1", I18N_NOOP( "The KDE Address Book" ), 634 "3.1", I18N_NOOP( "The KDE Address Book" ),
635 KAboutData::License_GPL_V2, 635 KAboutData::License_GPL_V2,
636 I18N_NOOP( "(c) 1997-2003, The KDE PIM Team" ) ); 636 I18N_NOOP( "(c) 1997-2003, The KDE PIM Team" ) );
637 about->addAuthor( "Tobias Koenig", I18N_NOOP( "Current maintainer " ), "tokoe@kde.org" ); 637 about->addAuthor( "Tobias Koenig", I18N_NOOP( "Current maintainer " ), "tokoe@kde.org" );
638 about->addAuthor( "Don Sanders", I18N_NOOP( "Original author " ) ); 638 about->addAuthor( "Don Sanders", I18N_NOOP( "Original author " ) );
639 about->addAuthor( "Cornelius Schumacher", 639 about->addAuthor( "Cornelius Schumacher",
640 I18N_NOOP( "Co-maintainer, libkabc port, CSV import/export " ), 640 I18N_NOOP( "Co-maintainer, libkabc port, CSV import/export " ),
641 "schumacher@kde.org" ); 641 "schumacher@kde.org" );
642 about->addAuthor( "Mike Pilone", I18N_NOOP( "GUI and framework redesign " ), 642 about->addAuthor( "Mike Pilone", I18N_NOOP( "GUI and framework redesign " ),
643 "mpilone@slac.com" ); 643 "mpilone@slac.com" );
644 about->addAuthor( "Greg Stern", I18N_NOOP( "DCOP interface" ) ); 644 about->addAuthor( "Greg Stern", I18N_NOOP( "DCOP interface" ) );
645 about->addAuthor( "Mark Westcott", I18N_NOOP( "Contact pinning" ) ); 645 about->addAuthor( "Mark Westcott", I18N_NOOP( "Contact pinning" ) );
646 about->addAuthor( "Michel Boyer de la Giroday", I18N_NOOP( "LDAP Lookup\n" ), 646 about->addAuthor( "Michel Boyer de la Giroday", I18N_NOOP( "LDAP Lookup\n" ),
647 "michel@klaralvdalens-datakonsult.se" ); 647 "michel@klaralvdalens-datakonsult.se" );
648 about->addAuthor( "Steffen Hansen", I18N_NOOP( "LDAP Lookup " ), 648 about->addAuthor( "Steffen Hansen", I18N_NOOP( "LDAP Lookup " ),
649 "hansen@kde.org" ); 649 "hansen@kde.org" );
650 650
651 return about; 651 return about;
652#endif //KAB_EMBEDDED 652#endif //KAB_EMBEDDED
653 653
654 QString version; 654 QString version;
655#include <../version> 655#include <../version>
656 QMessageBox::about( this, "About KAddressbook/Pi", 656 QMessageBox::about( this, "About KAddressbook/Pi",
657 "KAddressbook/Platform-independent\n" 657 "KAddressbook/Platform-independent\n"
658 "(KA/Pi) " +version + " - " + 658 "(KA/Pi) " +version + " - " +
659#ifdef DESKTOP_VERSION 659#ifdef DESKTOP_VERSION
660 "Desktop Edition\n" 660 "Desktop Edition\n"
661#else 661#else
662 "PDA-Edition\n" 662 "PDA-Edition\n"
663 "for: Zaurus 5500 / 7x0 / 8x0\n" 663 "for: Zaurus 5500 / 7x0 / 8x0\n"
664#endif 664#endif
665 665
666 "(c) 2004 Ulf Schenk\n" 666 "(c) 2004 Ulf Schenk\n"
667 "(c) 2004 Lutz Rogowski\n" 667 "(c) 2004 Lutz Rogowski\n"
668 "(c) 1997-2003, The KDE PIM Team\n" 668 "(c) 1997-2003, The KDE PIM Team\n"
669 "Tobias Koenig Current maintainer\ntokoe@kde.org\n" 669 "Tobias Koenig Current maintainer\ntokoe@kde.org\n"
670 "Don Sanders Original author\n" 670 "Don Sanders Original author\n"
671 "Cornelius Schumacher Co-maintainer\nschumacher@kde.org\n" 671 "Cornelius Schumacher Co-maintainer\nschumacher@kde.org\n"
672 "Mike Pilone GUI and framework redesign\nmpilone@slac.com\n" 672 "Mike Pilone GUI and framework redesign\nmpilone@slac.com\n"
673 "Greg Stern DCOP interface\n" 673 "Greg Stern DCOP interface\n"
674 "Mark Westcot Contact pinning\n" 674 "Mark Westcot Contact pinning\n"
675 "Michel Boyer de la Giroday LDAP Lookup\n" "michel@klaralvdalens-datakonsult.se\n" 675 "Michel Boyer de la Giroday LDAP Lookup\n" "michel@klaralvdalens-datakonsult.se\n"
676 "Steffen Hansen LDAP Lookup\nhansen@kde.org\n" 676 "Steffen Hansen LDAP Lookup\nhansen@kde.org\n"
677#ifdef _WIN32_ 677#ifdef _WIN32_
678 "(c) 2004 Lutz Rogowski Import from OL\nrogowski@kde.org\n" 678 "(c) 2004 Lutz Rogowski Import from OL\nrogowski@kde.org\n"
679#endif 679#endif
680 ); 680 );
681} 681}
682 682
683void KABCore::setContactSelected( const QString &uid ) 683void KABCore::setContactSelected( const QString &uid )
684{ 684{
685 KABC::Addressee addr = mAddressBook->findByUid( uid ); 685 KABC::Addressee addr = mAddressBook->findByUid( uid );
686 if ( !mDetails->isHidden() ) 686 if ( !mDetails->isHidden() )
687 mDetails->setAddressee( addr ); 687 mDetails->setAddressee( addr );
688 688
689 if ( !addr.isEmpty() ) { 689 if ( !addr.isEmpty() ) {
690 emit contactSelected( addr.formattedName() ); 690 emit contactSelected( addr.formattedName() );
691 KABC::Picture pic = addr.photo(); 691 KABC::Picture pic = addr.photo();
692 if ( pic.isIntern() ) { 692 if ( pic.isIntern() ) {
693//US emit contactSelected( pic.data() ); 693//US emit contactSelected( pic.data() );
694//US instead use: 694//US instead use:
695 QPixmap px; 695 QPixmap px;
696 if (pic.data().isNull() != true) 696 if (pic.data().isNull() != true)
697 { 697 {
698 px.convertFromImage(pic.data()); 698 px.convertFromImage(pic.data());
699 } 699 }
700 700
701 emit contactSelected( px ); 701 emit contactSelected( px );
702 } 702 }
703 } 703 }
704 704
705 705
706 mExtensionManager->setSelectionChanged(); 706 mExtensionManager->setSelectionChanged();
707 707
708 // update the actions 708 // update the actions
709 bool selected = !uid.isEmpty(); 709 bool selected = !uid.isEmpty();
710 710
711 if ( mReadWrite ) { 711 if ( mReadWrite ) {
712 mActionCut->setEnabled( selected ); 712 mActionCut->setEnabled( selected );
713 mActionPaste->setEnabled( selected ); 713 mActionPaste->setEnabled( selected );
714 } 714 }
715 715
716 mActionCopy->setEnabled( selected ); 716 mActionCopy->setEnabled( selected );
717 mActionDelete->setEnabled( selected ); 717 mActionDelete->setEnabled( selected );
718 mActionEditAddressee->setEnabled( selected ); 718 mActionEditAddressee->setEnabled( selected );
719 mActionMail->setEnabled( selected ); 719 mActionMail->setEnabled( selected );
720 mActionMailVCard->setEnabled( selected ); 720 mActionMailVCard->setEnabled( selected );
721 //if (mActionBeam) 721 //if (mActionBeam)
722 //mActionBeam->setEnabled( selected ); 722 //mActionBeam->setEnabled( selected );
723 mActionWhoAmI->setEnabled( selected ); 723 mActionWhoAmI->setEnabled( selected );
724} 724}
725 725
726void KABCore::sendMail() 726void KABCore::sendMail()
727{ 727{
728 sendMail( mViewManager->selectedEmails().join( ", " ) ); 728 sendMail( mViewManager->selectedEmails().join( ", " ) );
729} 729}
730 730
731void KABCore::sendMail( const QString& emaillist ) 731void KABCore::sendMail( const QString& emaillist )
732{ 732{
733 // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... " 733 // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... "
734 if (emaillist.contains(",") > 0) 734 if (emaillist.contains(",") > 0)
735 ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null ); 735 ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null );
736 else 736 else
737 ExternalAppHandler::instance()->mailToOneContact( emaillist ); 737 ExternalAppHandler::instance()->mailToOneContact( emaillist );
738} 738}
739 739
740 740
741 741
742void KABCore::mailVCard() 742void KABCore::mailVCard()
743{ 743{
744 QStringList uids = mViewManager->selectedUids(); 744 QStringList uids = mViewManager->selectedUids();
745 if ( !uids.isEmpty() ) 745 if ( !uids.isEmpty() )
746 mailVCard( uids ); 746 mailVCard( uids );
747} 747}
748 748
749void KABCore::mailVCard( const QStringList& uids ) 749void KABCore::mailVCard( const QStringList& uids )
750{ 750{
751 QStringList urls; 751 QStringList urls;
752 752
753// QString tmpdir = locateLocal("tmp", KGlobal::getAppName()); 753// QString tmpdir = locateLocal("tmp", KGlobal::getAppName());
754 754
755 QString dirName = "/tmp/" + KApplication::randomString( 8 ); 755 QString dirName = "/tmp/" + KApplication::randomString( 8 );
756 756
757 757
758 758
759 QDir().mkdir( dirName, true ); 759 QDir().mkdir( dirName, true );
760 760
761 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 761 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
762 KABC::Addressee a = mAddressBook->findByUid( *it ); 762 KABC::Addressee a = mAddressBook->findByUid( *it );
763 763
764 if ( a.isEmpty() ) 764 if ( a.isEmpty() )
765 continue; 765 continue;
766 766
767 QString name = a.givenName() + "_" + a.familyName() + ".vcf"; 767 QString name = a.givenName() + "_" + a.familyName() + ".vcf";
768 768
769 QString fileName = dirName + "/" + name; 769 QString fileName = dirName + "/" + name;
770 770
771 QFile outFile(fileName); 771 QFile outFile(fileName);
772 772
773 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully 773 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully
774 KABC::VCardConverter converter; 774 KABC::VCardConverter converter;
775 QString vcard; 775 QString vcard;
776 776
777 converter.addresseeToVCard( a, vcard ); 777 converter.addresseeToVCard( a, vcard );
778 778
779 QTextStream t( &outFile ); // use a text stream 779 QTextStream t( &outFile ); // use a text stream
780 t.setEncoding( QTextStream::UnicodeUTF8 ); 780 t.setEncoding( QTextStream::UnicodeUTF8 );
781 t << vcard; 781 t << vcard;
782 782
783 outFile.close(); 783 outFile.close();
784 784
785 urls.append( fileName ); 785 urls.append( fileName );
786 } 786 }
787 } 787 }
788 788
789 bool result = ExternalAppHandler::instance()->mailToMultipleContacts( QString::null, urls.join(", ") ); 789 bool result = ExternalAppHandler::instance()->mailToMultipleContacts( QString::null, urls.join(", ") );
790 790
791 791
792/*US 792/*US
793 kapp->invokeMailer( QString::null, QString::null, QString::null, 793 kapp->invokeMailer( QString::null, QString::null, QString::null,
794 QString::null, // subject 794 QString::null, // subject
795 QString::null, // body 795 QString::null, // body
796 QString::null, 796 QString::null,
797 urls ); // attachments 797 urls ); // attachments
798*/ 798*/
799 799
800} 800}
801 801
802/** 802/**
803 Beams the "WhoAmI contact. 803 Beams the "WhoAmI contact.
804*/ 804*/
805void KABCore::beamMySelf() 805void KABCore::beamMySelf()
806{ 806{
807 KABC::Addressee a = KABC::StdAddressBook::self()->whoAmI(); 807 KABC::Addressee a = KABC::StdAddressBook::self()->whoAmI();
808 if (!a.isEmpty()) 808 if (!a.isEmpty())
809 { 809 {
810 QStringList uids; 810 QStringList uids;
811 uids << a.uid(); 811 uids << a.uid();
812 812
813 beamVCard(uids); 813 beamVCard(uids);
814 } else { 814 } else {
815 KMessageBox::information( this, i18n( "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n" ) ); 815 KMessageBox::information( this, i18n( "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n" ) );
816 816
817 817
818 } 818 }
819} 819}
820void KABCore::updateMainWindow() 820void KABCore::updateMainWindow()
821{ 821{
822 822
823 mMainWindow->showMaximized(); 823 mMainWindow->showMaximized();
824 mMainWindow->update(); 824 mMainWindow->update();
825} 825}
826void KABCore::resizeEvent(QResizeEvent* e ) 826void KABCore::resizeEvent(QResizeEvent* e )
827{ 827{
828 if ( !mMiniSplitter ) 828 if ( !mMiniSplitter )
829 return; 829 return;
830 //qDebug("KABCore::resizeEvent(QResizeEvent* e ) "); 830 //qDebug("KABCore::resizeEvent(QResizeEvent* e ) ");
831 if ( QApplication::desktop()->width() >= 480 ) { 831 if ( QApplication::desktop()->width() >= 480 ) {
832 if (QApplication::desktop()->width() == 640 ) { // e.g. 640x480 832 if (QApplication::desktop()->width() == 640 ) { // e.g. 640x480
833 if ( mMiniSplitter->orientation() == Qt::Vertical ) { 833 if ( mMiniSplitter->orientation() == Qt::Vertical ) {
834 mMiniSplitter->setOrientation( Qt::Horizontal); 834 mMiniSplitter->setOrientation( Qt::Horizontal);
835 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 835 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
836 if ( QApplication::desktop()->width() <= 640 ) { 836 if ( QApplication::desktop()->width() <= 640 ) {
837 //mMainWindow->setMaximumSize( QApplication::desktop()->size() ); 837 //mMainWindow->setMaximumSize( QApplication::desktop()->size() );
838 mViewManager->getFilterAction()->setComboWidth( 150 ); 838 mViewManager->getFilterAction()->setComboWidth( 150 );
839 QTimer::singleShot( 1, this , SLOT ( updateMainWindow())); 839 QTimer::singleShot( 1, this , SLOT ( updateMainWindow()));
840 } 840 }
841 } 841 }
842 } else if (QApplication::desktop()->width() == 480 ){// e.g. 480x640 842 } else if (QApplication::desktop()->width() == 480 ){// e.g. 480x640
843 if ( mMiniSplitter->orientation() == Qt::Horizontal ) { 843 if ( mMiniSplitter->orientation() == Qt::Horizontal ) {
844 mMiniSplitter->setOrientation( Qt::Vertical ); 844 mMiniSplitter->setOrientation( Qt::Vertical );
845 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down ); 845 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down );
846 if ( QApplication::desktop()->width() <= 640 ) { 846 if ( QApplication::desktop()->width() <= 640 ) {
847 //mMainWindow->setMaximumSize( QApplication::desktop()->size() ); 847 //mMainWindow->setMaximumSize( QApplication::desktop()->size() );
848 mMainWindow->showMinimized(); 848 mMainWindow->showMinimized();
849 mViewManager->getFilterAction()->setComboWidth( 0 ); 849 mViewManager->getFilterAction()->setComboWidth( 0 );
850 QTimer::singleShot( 1, this , SLOT ( updateMainWindow())); 850 QTimer::singleShot( 1, this , SLOT ( updateMainWindow()));
851 } 851 }
852 } 852 }
853 } 853 }
854 } 854 }
855 855
856} 856}
857void KABCore::export2phone() 857void KABCore::export2phone()
858{ 858{
859 859
860 QStringList uids; 860 QStringList uids;
861 XXPortSelectDialog dlg( this, false, this ); 861 XXPortSelectDialog dlg( this, false, this );
862 if ( dlg.exec() ) 862 if ( dlg.exec() )
863 uids = dlg.uids(); 863 uids = dlg.uids();
864 else 864 else
865 return; 865 return;
866 if ( uids.isEmpty() ) 866 if ( uids.isEmpty() )
867 return; 867 return;
868 // qDebug("count %d ", uids.count()); 868 // qDebug("count %d ", uids.count());
869 869
870 KAex2phonePrefs ex2phone; 870 KAex2phonePrefs ex2phone;
871 ex2phone.mPhoneConnection->setText( KPimGlobalPrefs::instance()->mEx2PhoneConnection ); 871 ex2phone.mPhoneConnection->setText( KPimGlobalPrefs::instance()->mEx2PhoneConnection );
872 ex2phone.mPhoneDevice->setText( KPimGlobalPrefs::instance()->mEx2PhoneDevice ); 872 ex2phone.mPhoneDevice->setText( KPimGlobalPrefs::instance()->mEx2PhoneDevice );
873 ex2phone.mPhoneModel->setText( KPimGlobalPrefs::instance()->mEx2PhoneModel ); 873 ex2phone.mPhoneModel->setText( KPimGlobalPrefs::instance()->mEx2PhoneModel );
874 874
875 if ( !ex2phone.exec() ) { 875 if ( !ex2phone.exec() ) {
876 return; 876 return;
877 } 877 }
878 KPimGlobalPrefs::instance()->mEx2PhoneConnection = ex2phone.mPhoneConnection->text(); 878 KPimGlobalPrefs::instance()->mEx2PhoneConnection = ex2phone.mPhoneConnection->text();
879 KPimGlobalPrefs::instance()->mEx2PhoneDevice = ex2phone.mPhoneDevice->text(); 879 KPimGlobalPrefs::instance()->mEx2PhoneDevice = ex2phone.mPhoneDevice->text();
880 KPimGlobalPrefs::instance()->mEx2PhoneModel = ex2phone.mPhoneModel->text(); 880 KPimGlobalPrefs::instance()->mEx2PhoneModel = ex2phone.mPhoneModel->text();
881 881
882 882
883 PhoneAccess::writeConfig( KPimGlobalPrefs::instance()->mEx2PhoneDevice, 883 PhoneAccess::writeConfig( KPimGlobalPrefs::instance()->mEx2PhoneDevice,
884 KPimGlobalPrefs::instance()->mEx2PhoneConnection, 884 KPimGlobalPrefs::instance()->mEx2PhoneConnection,
885 KPimGlobalPrefs::instance()->mEx2PhoneModel ); 885 KPimGlobalPrefs::instance()->mEx2PhoneModel );
886 886
887 QString fileName = getPhoneFile(); 887 QString fileName = getPhoneFile();
888 if ( ! mAddressBook->export2PhoneFormat( uids ,fileName ) ) 888 if ( ! mAddressBook->export2PhoneFormat( uids ,fileName ) )
889 return; 889 return;
890 890
891 message(i18n("Exporting to phone...")); 891 message(i18n("Exporting to phone..."));
892 QTimer::singleShot( 1, this , SLOT ( writeToPhone())); 892 QTimer::singleShot( 1, this , SLOT ( writeToPhone()));
893 893
894} 894}
895QString KABCore::getPhoneFile() 895QString KABCore::getPhoneFile()
896{ 896{
897#ifdef DESKTOP_VERSION 897#ifdef DESKTOP_VERSION
898 return locateLocal("tmp", "phonefile.vcf"); 898 return locateLocal("tmp", "phonefile.vcf");
899#else 899#else
900 return "/tmp/phonefile.vcf"; 900 return "/tmp/phonefile.vcf";
901#endif 901#endif
902 902
903} 903}
904void KABCore::writeToPhone( ) 904void KABCore::writeToPhone( )
905{ 905{
906 if ( PhoneAccess::writeToPhone( getPhoneFile() ) ) 906 if ( PhoneAccess::writeToPhone( getPhoneFile() ) )
907 message(i18n("Export to phone finished!")); 907 message(i18n("Export to phone finished!"));
908 else 908 else
909 qDebug(i18n("KA: Error exporting to phone")); 909 qDebug(i18n("KA: Error exporting to phone"));
910} 910}
911void KABCore::beamVCard() 911void KABCore::beamVCard()
912{ 912{
913 QStringList uids; 913 QStringList uids;
914 XXPortSelectDialog dlg( this, false, this ); 914 XXPortSelectDialog dlg( this, false, this );
915 if ( dlg.exec() ) 915 if ( dlg.exec() )
916 uids = dlg.uids(); 916 uids = dlg.uids();
917 else 917 else
918 return; 918 return;
919 if ( uids.isEmpty() ) 919 if ( uids.isEmpty() )
920 return; 920 return;
921 beamVCard( uids ); 921 beamVCard( uids );
922} 922}
923 923
924 924
925void KABCore::beamVCard(const QStringList& uids) 925void KABCore::beamVCard(const QStringList& uids)
926{ 926{
927 927
928 // LR: we should use the /tmp dir on the Zaurus, 928 // LR: we should use the /tmp dir on the Zaurus,
929 // because: /tmp = RAM, (HOME)/kdepim = flash memory 929 // because: /tmp = RAM, (HOME)/kdepim = flash memory
930 930
931#ifdef DESKTOP_VERSION 931#ifdef DESKTOP_VERSION
932 QString fileName = locateLocal("tmp", "kapibeamfile.vcf"); 932 QString fileName = locateLocal("tmp", "kapibeamfile.vcf");
933#else 933#else
934 QString fileName = "/tmp/kapibeamfile.vcf"; 934 QString fileName = "/tmp/kapibeamfile.vcf";
935#endif 935#endif
936 936
937 KABC::VCardConverter converter; 937 KABC::VCardConverter converter;
938 QString description; 938 QString description;
939 QString datastream; 939 QString datastream;
940 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 940 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
941 KABC::Addressee a = mAddressBook->findByUid( *it ); 941 KABC::Addressee a = mAddressBook->findByUid( *it );
942 942
943 if ( a.isEmpty() ) 943 if ( a.isEmpty() )
944 continue; 944 continue;
945 945
946 if (description.isEmpty()) 946 if (description.isEmpty())
947 description = a.formattedName(); 947 description = a.formattedName();
948 948
949 QString vcard; 949 QString vcard;
950 converter.addresseeToVCard( a, vcard ); 950 converter.addresseeToVCard( a, vcard );
951 int start = 0; 951 int start = 0;
952 int next; 952 int next;
953 while ( (next = vcard.find("TYPE=", start) )>= 0 ) { 953 while ( (next = vcard.find("TYPE=", start) )>= 0 ) {
954 int semi = vcard.find(";", next); 954 int semi = vcard.find(";", next);
955 int dopp = vcard.find(":", next); 955 int dopp = vcard.find(":", next);
956 int sep; 956 int sep;
957 if ( semi < dopp && semi >= 0 ) 957 if ( semi < dopp && semi >= 0 )
958 sep = semi ; 958 sep = semi ;
959 else 959 else
960 sep = dopp; 960 sep = dopp;
961 datastream +=vcard.mid( start, next - start); 961 datastream +=vcard.mid( start, next - start);
962 datastream +=vcard.mid( next+5,sep -next -5 ).upper(); 962 datastream +=vcard.mid( next+5,sep -next -5 ).upper();
963 start = sep; 963 start = sep;
964 } 964 }
965 datastream += vcard.mid( start,vcard.length() ); 965 datastream += vcard.mid( start,vcard.length() );
966 } 966 }
967#ifndef DESKTOP_VERSION 967#ifndef DESKTOP_VERSION
968 QFile outFile(fileName); 968 QFile outFile(fileName);
969 if ( outFile.open(IO_WriteOnly) ) { 969 if ( outFile.open(IO_WriteOnly) ) {
970 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" ); 970 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" );
971 QTextStream t( &outFile ); // use a text stream 971 QTextStream t( &outFile ); // use a text stream
972 //t.setEncoding( QTextStream::UnicodeUTF8 ); 972 //t.setEncoding( QTextStream::UnicodeUTF8 );
973 t.setEncoding( QTextStream::Latin1 ); 973 t.setEncoding( QTextStream::Latin1 );
974 t <<datastream.latin1(); 974 t <<datastream.latin1();
975 outFile.close(); 975 outFile.close();
976 Ir *ir = new Ir( this ); 976 Ir *ir = new Ir( this );
977 connect( ir, SIGNAL( done(Ir*) ), this, SLOT( beamDone(Ir*) ) ); 977 connect( ir, SIGNAL( done(Ir*) ), this, SLOT( beamDone(Ir*) ) );
978 ir->send( fileName, description, "text/x-vCard" ); 978 ir->send( fileName, description, "text/x-vCard" );
979 } else { 979 } else {
980 qDebug("KA: Error open temp beam file "); 980 qDebug("KA: Error open temp beam file ");
981 return; 981 return;
982 } 982 }
983#endif 983#endif
984 984
985} 985}
986 986
987void KABCore::beamDone( Ir *ir ) 987void KABCore::beamDone( Ir *ir )
988{ 988{
989#ifndef DESKTOP_VERSION 989#ifndef DESKTOP_VERSION
990 delete ir; 990 delete ir;
991#endif 991#endif
992 topLevelWidget()->raise(); 992 topLevelWidget()->raise();
993 message( i18n("Beaming finished!") ); 993 message( i18n("Beaming finished!") );
994} 994}
995 995
996 996
997void KABCore::browse( const QString& url ) 997void KABCore::browse( const QString& url )
998{ 998{
999#ifndef KAB_EMBEDDED 999#ifndef KAB_EMBEDDED
1000 kapp->invokeBrowser( url ); 1000 kapp->invokeBrowser( url );
1001#else //KAB_EMBEDDED 1001#else //KAB_EMBEDDED
1002 qDebug("KABCore::browse must be fixed"); 1002 qDebug("KABCore::browse must be fixed");
1003#endif //KAB_EMBEDDED 1003#endif //KAB_EMBEDDED
1004} 1004}
1005 1005
1006void KABCore::selectAllContacts() 1006void KABCore::selectAllContacts()
1007{ 1007{
1008 mViewManager->setSelected( QString::null, true ); 1008 mViewManager->setSelected( QString::null, true );
1009} 1009}
1010 1010
1011void KABCore::deleteContacts() 1011void KABCore::deleteContacts()
1012{ 1012{
1013 QStringList uidList = mViewManager->selectedUids(); 1013 QStringList uidList = mViewManager->selectedUids();
1014 deleteContacts( uidList ); 1014 deleteContacts( uidList );
1015} 1015}
1016 1016
1017void KABCore::deleteContacts( const QStringList &uids ) 1017void KABCore::deleteContacts( const QStringList &uids )
1018{ 1018{
1019 if ( uids.count() > 0 ) { 1019 if ( uids.count() > 0 ) {
1020 PwDeleteCommand *command = new PwDeleteCommand( mAddressBook, uids ); 1020 PwDeleteCommand *command = new PwDeleteCommand( mAddressBook, uids );
1021 UndoStack::instance()->push( command ); 1021 UndoStack::instance()->push( command );
1022 RedoStack::instance()->clear(); 1022 RedoStack::instance()->clear();
1023 1023
1024 // now if we deleted anything, refresh 1024 // now if we deleted anything, refresh
1025 setContactSelected( QString::null ); 1025 setContactSelected( QString::null );
1026 setModified( true ); 1026 setModified( true );
1027 } 1027 }
1028} 1028}
1029 1029
1030void KABCore::copyContacts() 1030void KABCore::copyContacts()
1031{ 1031{
1032 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 1032 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
1033 1033
1034 QString clipText = AddresseeUtil::addresseesToClipboard( addrList ); 1034 QString clipText = AddresseeUtil::addresseesToClipboard( addrList );
1035 1035
1036 kdDebug(5720) << "KABCore::copyContacts: " << clipText << endl; 1036 kdDebug(5720) << "KABCore::copyContacts: " << clipText << endl;
1037 1037
1038 QClipboard *cb = QApplication::clipboard(); 1038 QClipboard *cb = QApplication::clipboard();
1039 cb->setText( clipText ); 1039 cb->setText( clipText );
1040} 1040}
1041 1041
1042void KABCore::cutContacts() 1042void KABCore::cutContacts()
1043{ 1043{
1044 QStringList uidList = mViewManager->selectedUids(); 1044 QStringList uidList = mViewManager->selectedUids();
1045 1045
1046//US if ( uidList.size() > 0 ) { 1046//US if ( uidList.size() > 0 ) {
1047 if ( uidList.count() > 0 ) { 1047 if ( uidList.count() > 0 ) {
1048 PwCutCommand *command = new PwCutCommand( mAddressBook, uidList ); 1048 PwCutCommand *command = new PwCutCommand( mAddressBook, uidList );
1049 UndoStack::instance()->push( command ); 1049 UndoStack::instance()->push( command );
1050 RedoStack::instance()->clear(); 1050 RedoStack::instance()->clear();
1051 1051
1052 setModified( true ); 1052 setModified( true );
1053 } 1053 }
1054} 1054}
1055 1055
1056void KABCore::pasteContacts() 1056void KABCore::pasteContacts()
1057{ 1057{
1058 QClipboard *cb = QApplication::clipboard(); 1058 QClipboard *cb = QApplication::clipboard();
1059 1059
1060 KABC::Addressee::List list = AddresseeUtil::clipboardToAddressees( cb->text() ); 1060 KABC::Addressee::List list = AddresseeUtil::clipboardToAddressees( cb->text() );
1061 1061
1062 pasteContacts( list ); 1062 pasteContacts( list );
1063} 1063}
1064 1064
1065void KABCore::pasteContacts( KABC::Addressee::List &list ) 1065void KABCore::pasteContacts( KABC::Addressee::List &list )
1066{ 1066{
1067 KABC::Resource *resource = requestResource( this ); 1067 KABC::Resource *resource = requestResource( this );
1068 KABC::Addressee::List::Iterator it; 1068 KABC::Addressee::List::Iterator it;
1069 for ( it = list.begin(); it != list.end(); ++it ) 1069 for ( it = list.begin(); it != list.end(); ++it )
1070 (*it).setResource( resource ); 1070 (*it).setResource( resource );
1071 1071
1072 PwPasteCommand *command = new PwPasteCommand( this, list ); 1072 PwPasteCommand *command = new PwPasteCommand( this, list );
1073 UndoStack::instance()->push( command ); 1073 UndoStack::instance()->push( command );
1074 RedoStack::instance()->clear(); 1074 RedoStack::instance()->clear();
1075 1075
1076 setModified( true ); 1076 setModified( true );
1077} 1077}
1078 1078
1079void KABCore::setWhoAmI() 1079void KABCore::setWhoAmI()
1080{ 1080{
1081 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 1081 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
1082 1082
1083 if ( addrList.count() > 1 ) { 1083 if ( addrList.count() > 1 ) {
1084 KMessageBox::sorry( this, i18n( "Please select only one contact." ) ); 1084 KMessageBox::sorry( this, i18n( "Please select only one contact." ) );
1085 return; 1085 return;
1086 } 1086 }
1087 1087
1088 QString text( i18n( "<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>" ) ); 1088 QString text( i18n( "<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>" ) );
1089 if ( KMessageBox::questionYesNo( this, text.arg( addrList[ 0 ].assembledName() ) ) == KMessageBox::Yes ) 1089 if ( KMessageBox::questionYesNo( this, text.arg( addrList[ 0 ].assembledName() ) ) == KMessageBox::Yes )
1090 static_cast<KABC::StdAddressBook*>( KABC::StdAddressBook::self() )->setWhoAmI( addrList[ 0 ] ); 1090 static_cast<KABC::StdAddressBook*>( KABC::StdAddressBook::self() )->setWhoAmI( addrList[ 0 ] );
1091} 1091}
1092void KABCore::editCategories() 1092void KABCore::editCategories()
1093{ 1093{
1094 KPIM::CategoryEditDialog dlg ( KABPrefs::instance(), this, "", true ); 1094 KPIM::CategoryEditDialog dlg ( KABPrefs::instance(), this, "", true );
1095 dlg.exec(); 1095 dlg.exec();
1096} 1096}
1097void KABCore::setCategories() 1097void KABCore::setCategories()
1098{ 1098{
1099 1099
1100 QStringList uids; 1100 QStringList uids;
1101 XXPortSelectDialog dlgx( this, false, this ); 1101 XXPortSelectDialog dlgx( this, false, this );
1102 if ( dlgx.exec() ) 1102 if ( dlgx.exec() )
1103 uids = dlgx.uids(); 1103 uids = dlgx.uids();
1104 else 1104 else
1105 return; 1105 return;
1106 if ( uids.isEmpty() ) 1106 if ( uids.isEmpty() )
1107 return; 1107 return;
1108 // qDebug("count %d ", uids.count()); 1108 // qDebug("count %d ", uids.count());
1109 1109
1110 1110
1111 KPIM::CategorySelectDialog dlg( KABPrefs::instance(), this, "", true ); 1111 KPIM::CategorySelectDialog dlg( KABPrefs::instance(), this, "", true );
1112 if ( !dlg.exec() ) { 1112 if ( !dlg.exec() ) {
1113 message( i18n("Setting categories cancelled") ); 1113 message( i18n("Setting categories cancelled") );
1114 return; 1114 return;
1115 } 1115 }
1116 bool merge = false; 1116 bool merge = false;
1117 QString msg = i18n( "Merge with existing categories?" ); 1117 QString msg = i18n( "Merge with existing categories?" );
1118 if ( KMessageBox::questionYesNo( this, msg ) == KMessageBox::Yes ) 1118 if ( KMessageBox::questionYesNo( this, msg ) == KMessageBox::Yes )
1119 merge = true; 1119 merge = true;
1120 1120
1121 message( i18n("Setting categories ... please wait!") ); 1121 message( i18n("Setting categories ... please wait!") );
1122 QStringList categories = dlg.selectedCategories(); 1122 QStringList categories = dlg.selectedCategories();
1123 1123
1124 //QStringList uids = mViewManager->selectedUids(); 1124 //QStringList uids = mViewManager->selectedUids();
1125 QStringList::Iterator it; 1125 QStringList::Iterator it;
1126 for ( it = uids.begin(); it != uids.end(); ++it ) { 1126 for ( it = uids.begin(); it != uids.end(); ++it ) {
1127 KABC::Addressee addr = mAddressBook->findByUid( *it ); 1127 KABC::Addressee addr = mAddressBook->findByUid( *it );
1128 if ( !addr.isEmpty() ) { 1128 if ( !addr.isEmpty() ) {
1129 if ( !merge ) 1129 if ( !merge )
1130 addr.setCategories( categories ); 1130 addr.setCategories( categories );
1131 else { 1131 else {
1132 QStringList addrCategories = addr.categories(); 1132 QStringList addrCategories = addr.categories();
1133 QStringList::Iterator catIt; 1133 QStringList::Iterator catIt;
1134 for ( catIt = categories.begin(); catIt != categories.end(); ++catIt ) { 1134 for ( catIt = categories.begin(); catIt != categories.end(); ++catIt ) {
1135 if ( !addrCategories.contains( *catIt ) ) 1135 if ( !addrCategories.contains( *catIt ) )
1136 addrCategories.append( *catIt ); 1136 addrCategories.append( *catIt );
1137 } 1137 }
1138 addr.setCategories( addrCategories ); 1138 addr.setCategories( addrCategories );
1139 } 1139 }
1140 mAddressBook->insertAddressee( addr ); 1140 mAddressBook->insertAddressee( addr );
1141 } 1141 }
1142 } 1142 }
1143 1143
1144 if ( uids.count() > 0 ) 1144 if ( uids.count() > 0 )
1145 setModified( true ); 1145 setModified( true );
1146 message( i18n("Setting categories completed!") ); 1146 message( i18n("Setting categories completed!") );
1147} 1147}
1148 1148
1149void KABCore::setSearchFields( const KABC::Field::List &fields ) 1149void KABCore::setSearchFields( const KABC::Field::List &fields )
1150{ 1150{
1151 mIncSearchWidget->setFields( fields ); 1151 mIncSearchWidget->setFields( fields );
1152} 1152}
1153 1153
1154void KABCore::incrementalSearch( const QString& text ) 1154void KABCore::incrementalSearch( const QString& text )
1155{ 1155{
1156 mViewManager->doSearch( text, mIncSearchWidget->currentField() ); 1156 mViewManager->doSearch( text, mIncSearchWidget->currentField() );
1157} 1157}
1158 1158
1159void KABCore::setModified() 1159void KABCore::setModified()
1160{ 1160{
1161 setModified( true ); 1161 setModified( true );
1162} 1162}
1163 1163
1164void KABCore::setModifiedWOrefresh() 1164void KABCore::setModifiedWOrefresh()
1165{ 1165{
1166 // qDebug("KABCore::setModifiedWOrefresh() "); 1166 // qDebug("KABCore::setModifiedWOrefresh() ");
1167 mModified = true; 1167 mModified = true;
1168 mActionSave->setEnabled( mModified ); 1168 mActionSave->setEnabled( mModified );
1169 1169
1170 1170
1171} 1171}
1172void KABCore::setModified( bool modified ) 1172void KABCore::setModified( bool modified )
1173{ 1173{
1174 mModified = modified; 1174 mModified = modified;
1175 mActionSave->setEnabled( mModified ); 1175 mActionSave->setEnabled( mModified );
1176 1176
1177 if ( modified ) 1177 if ( modified )
1178 mJumpButtonBar->recreateButtons(); 1178 mJumpButtonBar->recreateButtons();
1179 1179
1180 mViewManager->refreshView(); 1180 mViewManager->refreshView();
1181 1181
1182} 1182}
1183 1183
1184bool KABCore::modified() const 1184bool KABCore::modified() const
1185{ 1185{
1186 return mModified; 1186 return mModified;
1187} 1187}
1188 1188
1189void KABCore::contactModified( const KABC::Addressee &addr ) 1189void KABCore::contactModified( const KABC::Addressee &addr )
1190{ 1190{
1191 addrModified( addr ); 1191 addrModified( addr );
1192#if 0 // debug only 1192#if 0 // debug only
1193 KABC::Addressee ad = addr; 1193 KABC::Addressee ad = addr;
1194 ad.computeCsum( "123"); 1194 ad.computeCsum( "123");
1195#endif 1195#endif
1196} 1196}
1197 1197
1198void KABCore::addrModified( const KABC::Addressee &addr ,bool updateDetails ) 1198void KABCore::addrModified( const KABC::Addressee &addr ,bool updateDetails )
1199{ 1199{
1200 1200
1201 Command *command = 0; 1201 Command *command = 0;
1202 QString uid; 1202 QString uid;
1203 1203
1204 // check if it exists already 1204 // check if it exists already
1205 KABC::Addressee origAddr = mAddressBook->findByUid( addr.uid() ); 1205 KABC::Addressee origAddr = mAddressBook->findByUid( addr.uid() );
1206 if ( origAddr.isEmpty() ) 1206 if ( origAddr.isEmpty() )
1207 command = new PwNewCommand( mAddressBook, addr ); 1207 command = new PwNewCommand( mAddressBook, addr );
1208 else { 1208 else {
1209 command = new PwEditCommand( mAddressBook, origAddr, addr ); 1209 command = new PwEditCommand( mAddressBook, origAddr, addr );
1210 uid = addr.uid(); 1210 uid = addr.uid();
1211 } 1211 }
1212 1212
1213 UndoStack::instance()->push( command ); 1213 UndoStack::instance()->push( command );
1214 RedoStack::instance()->clear(); 1214 RedoStack::instance()->clear();
1215 if ( updateDetails ) 1215 if ( updateDetails )
1216 mDetails->setAddressee( addr ); 1216 mDetails->setAddressee( addr );
1217 setModified( true ); 1217 setModified( true );
1218} 1218}
1219 1219
1220void KABCore::newContact() 1220void KABCore::newContact()
1221{ 1221{
1222 1222
1223 1223
1224 QPtrList<KABC::Resource> kabcResources = mAddressBook->resources(); 1224 QPtrList<KABC::Resource> kabcResources = mAddressBook->resources();
1225 1225
1226 QPtrList<KRES::Resource> kresResources; 1226 QPtrList<KRES::Resource> kresResources;
1227 QPtrListIterator<KABC::Resource> it( kabcResources ); 1227 QPtrListIterator<KABC::Resource> it( kabcResources );
1228 KABC::Resource *resource; 1228 KABC::Resource *resource;
1229 while ( ( resource = it.current() ) != 0 ) { 1229 while ( ( resource = it.current() ) != 0 ) {
1230 ++it; 1230 ++it;
1231 if ( !resource->readOnly() ) { 1231 if ( !resource->readOnly() ) {
1232 KRES::Resource *res = static_cast<KRES::Resource*>( resource ); 1232 KRES::Resource *res = static_cast<KRES::Resource*>( resource );
1233 if ( res ) 1233 if ( res )
1234 kresResources.append( res ); 1234 kresResources.append( res );
1235 } 1235 }
1236 } 1236 }
1237 1237
1238 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, this ); 1238 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, this );
1239 resource = static_cast<KABC::Resource*>( res ); 1239 resource = static_cast<KABC::Resource*>( res );
1240 1240
1241 if ( resource ) { 1241 if ( resource ) {
1242 KABC::Addressee addr; 1242 KABC::Addressee addr;
1243 addr.setResource( resource ); 1243 addr.setResource( resource );
1244 mEditorDialog->setAddressee( addr ); 1244 mEditorDialog->setAddressee( addr );
1245 KApplication::execDialog ( mEditorDialog ); 1245 KApplication::execDialog ( mEditorDialog );
1246 1246
1247 } else 1247 } else
1248 return; 1248 return;
1249 1249
1250 // mEditorDict.insert( dialog->addressee().uid(), dialog ); 1250 // mEditorDict.insert( dialog->addressee().uid(), dialog );
1251 1251
1252 1252
1253} 1253}
1254 1254
1255void KABCore::addEmail( QString aStr ) 1255void KABCore::addEmail( QString aStr )
1256{ 1256{
1257#ifndef KAB_EMBEDDED 1257#ifndef KAB_EMBEDDED
1258 QString fullName, email; 1258 QString fullName, email;
1259 1259
1260 KABC::Addressee::parseEmailAddress( aStr, fullName, email ); 1260 KABC::Addressee::parseEmailAddress( aStr, fullName, email );
1261 1261
1262 // Try to lookup the addressee matching the email address 1262 // Try to lookup the addressee matching the email address
1263 bool found = false; 1263 bool found = false;
1264 QStringList emailList; 1264 QStringList emailList;
1265 KABC::AddressBook::Iterator it; 1265 KABC::AddressBook::Iterator it;
1266 for ( it = mAddressBook->begin(); !found && (it != mAddressBook->end()); ++it ) { 1266 for ( it = mAddressBook->begin(); !found && (it != mAddressBook->end()); ++it ) {
1267 emailList = (*it).emails(); 1267 emailList = (*it).emails();
1268 if ( emailList.contains( email ) > 0 ) { 1268 if ( emailList.contains( email ) > 0 ) {
1269 found = true; 1269 found = true;
1270 (*it).setNameFromString( fullName ); 1270 (*it).setNameFromString( fullName );
1271 editContact( (*it).uid() ); 1271 editContact( (*it).uid() );
1272 } 1272 }
1273 } 1273 }
1274 1274
1275 if ( !found ) { 1275 if ( !found ) {
1276 KABC::Addressee addr; 1276 KABC::Addressee addr;
1277 addr.setNameFromString( fullName ); 1277 addr.setNameFromString( fullName );
1278 addr.insertEmail( email, true ); 1278 addr.insertEmail( email, true );
1279 1279
1280 mAddressBook->insertAddressee( addr ); 1280 mAddressBook->insertAddressee( addr );
1281 mViewManager->refreshView( addr.uid() ); 1281 mViewManager->refreshView( addr.uid() );
1282 editContact( addr.uid() ); 1282 editContact( addr.uid() );
1283 } 1283 }
1284#else //KAB_EMBEDDED 1284#else //KAB_EMBEDDED
1285 qDebug("KABCore::addEmail finsih method"); 1285 qDebug("KABCore::addEmail finsih method");
1286#endif //KAB_EMBEDDED 1286#endif //KAB_EMBEDDED
1287} 1287}
1288 1288
1289void KABCore::importVCard( const KURL &url, bool showPreview ) 1289void KABCore::importVCard( const KURL &url, bool showPreview )
1290{ 1290{
1291 mXXPortManager->importVCard( url, showPreview ); 1291 mXXPortManager->importVCard( url, showPreview );
1292} 1292}
1293void KABCore::importFromOL() 1293void KABCore::importFromOL()
1294{ 1294{
1295#ifdef _OL_IMPORT_ 1295#ifdef _OL_IMPORT_
1296 KAImportOLdialog* idgl = new KAImportOLdialog( i18n("Import Contacts from OL"), mAddressBook, this ); 1296 KAImportOLdialog* idgl = new KAImportOLdialog( i18n("Import Contacts from OL"), mAddressBook, this );
1297 idgl->exec(); 1297 idgl->exec();
1298 KABC::Addressee::List list = idgl->getAddressList(); 1298 KABC::Addressee::List list = idgl->getAddressList();
1299 if ( list.count() > 0 ) { 1299 if ( list.count() > 0 ) {
1300 KABC::Addressee::List listNew; 1300 KABC::Addressee::List listNew;
1301 KABC::Addressee::List listExisting; 1301 KABC::Addressee::List listExisting;
1302 KABC::Addressee::List::Iterator it; 1302 KABC::Addressee::List::Iterator it;
1303 KABC::AddressBook::Iterator iter; 1303 KABC::AddressBook::Iterator iter;
1304 for ( it = list.begin(); it != list.end(); ++it ) { 1304 for ( it = list.begin(); it != list.end(); ++it ) {
1305 if ( mAddressBook->findByUid((*it).uid() ).isEmpty()) 1305 if ( mAddressBook->findByUid((*it).uid() ).isEmpty())
1306 listNew.append( (*it) ); 1306 listNew.append( (*it) );
1307 else 1307 else
1308 listExisting.append( (*it) ); 1308 listExisting.append( (*it) );
1309 } 1309 }
1310 if ( listExisting.count() > 0 ) 1310 if ( listExisting.count() > 0 )
1311 KMessageBox::information( this, i18n("%1 contacts not added to addressbook\nbecause they were already in the addressbook!").arg( listExisting.count() )); 1311 KMessageBox::information( this, i18n("%1 contacts not added to addressbook\nbecause they were already in the addressbook!").arg( listExisting.count() ));
1312 if ( listNew.count() > 0 ) { 1312 if ( listNew.count() > 0 ) {
1313 pasteWithNewUid = false; 1313 pasteWithNewUid = false;
1314 pasteContacts( listNew ); 1314 pasteContacts( listNew );
1315 pasteWithNewUid = true; 1315 pasteWithNewUid = true;
1316 } 1316 }
1317 } 1317 }
1318 delete idgl; 1318 delete idgl;
1319#endif 1319#endif
1320} 1320}
1321 1321
1322void KABCore::importVCard( const QString &vCard, bool showPreview ) 1322void KABCore::importVCard( const QString &vCard, bool showPreview )
1323{ 1323{
1324 mXXPortManager->importVCard( vCard, showPreview ); 1324 mXXPortManager->importVCard( vCard, showPreview );
1325} 1325}
1326 1326
1327//US added a second method without defaultparameter 1327//US added a second method without defaultparameter
1328void KABCore::editContact2() { 1328void KABCore::editContact2() {
1329 editContact( QString::null ); 1329 editContact( QString::null );
1330} 1330}
1331 1331
1332void KABCore::editContact( const QString &uid ) 1332void KABCore::editContact( const QString &uid )
1333{ 1333{
1334 1334
1335 if ( mExtensionManager->isQuickEditVisible() ) 1335 if ( mExtensionManager->isQuickEditVisible() )
1336 return; 1336 return;
1337 1337
1338 // First, locate the contact entry 1338 // First, locate the contact entry
1339 QString localUID = uid; 1339 QString localUID = uid;
1340 if ( localUID.isNull() ) { 1340 if ( localUID.isNull() ) {
1341 QStringList uidList = mViewManager->selectedUids(); 1341 QStringList uidList = mViewManager->selectedUids();
1342 if ( uidList.count() > 0 ) 1342 if ( uidList.count() > 0 )
1343 localUID = *( uidList.at( 0 ) ); 1343 localUID = *( uidList.at( 0 ) );
1344 } 1344 }
1345 1345
1346 KABC::Addressee addr = mAddressBook->findByUid( localUID ); 1346 KABC::Addressee addr = mAddressBook->findByUid( localUID );
1347 if ( !addr.isEmpty() ) { 1347 if ( !addr.isEmpty() ) {
1348 mEditorDialog->setAddressee( addr ); 1348 mEditorDialog->setAddressee( addr );
1349 KApplication::execDialog ( mEditorDialog ); 1349 KApplication::execDialog ( mEditorDialog );
1350 } 1350 }
1351} 1351}
1352 1352
1353/** 1353/**
1354 Shows or edits the detail view for the given uid. If the uid is QString::null, 1354 Shows or edits the detail view for the given uid. If the uid is QString::null,
1355 the method will try to find a selected addressee in the view. 1355 the method will try to find a selected addressee in the view.
1356 */ 1356 */
1357void KABCore::executeContact( const QString &uid /*US = QString::null*/ ) 1357void KABCore::executeContact( const QString &uid /*US = QString::null*/ )
1358{ 1358{
1359 if ( mMultipleViewsAtOnce ) 1359 if ( mMultipleViewsAtOnce )
1360 { 1360 {
1361 editContact( uid ); 1361 editContact( uid );
1362 } 1362 }
1363 else 1363 else
1364 { 1364 {
1365 setDetailsVisible( true ); 1365 setDetailsVisible( true );
1366 mActionDetails->setChecked(true); 1366 mActionDetails->setChecked(true);
1367 } 1367 }
1368 1368
1369} 1369}
1370 1370
1371void KABCore::save() 1371void KABCore::save()
1372{ 1372{
1373 if (syncManager->blockSave()) 1373 if (syncManager->blockSave())
1374 return; 1374 return;
1375 if ( !mModified ) 1375 if ( !mModified )
1376 return; 1376 return;
1377 1377
1378 syncManager->setBlockSave(true); 1378 syncManager->setBlockSave(true);
1379 QString text = i18n( "There was an error while attempting to save\n the " 1379 QString text = i18n( "There was an error while attempting to save\n the "
1380 "address book. Please check that some \nother application is " 1380 "address book. Please check that some \nother application is "
1381 "not using it. " ); 1381 "not using it. " );
1382 message(i18n("Saving ... please wait! "), false); 1382 message(i18n("Saving ... please wait! "), false);
1383 //qApp->processEvents(); 1383 //qApp->processEvents();
1384#ifndef KAB_EMBEDDED 1384#ifndef KAB_EMBEDDED
1385 KABC::StdAddressBook *b = dynamic_cast<KABC::StdAddressBook*>( mAddressBook ); 1385 KABC::StdAddressBook *b = dynamic_cast<KABC::StdAddressBook*>( mAddressBook );
1386 if ( !b || !b->save() ) { 1386 if ( !b || !b->save() ) {
1387 KMessageBox::error( this, text, i18n( "Unable to Save" ) ); 1387 KMessageBox::error( this, text, i18n( "Unable to Save" ) );
1388 } 1388 }
1389#else //KAB_EMBEDDED 1389#else //KAB_EMBEDDED
1390 KABC::StdAddressBook *b = (KABC::StdAddressBook*)( mAddressBook ); 1390 KABC::StdAddressBook *b = (KABC::StdAddressBook*)( mAddressBook );
1391 if ( !b || !b->save() ) { 1391 if ( !b || !b->save() ) {
1392 QMessageBox::critical( this, i18n( "Unable to Save" ), text, i18n("Ok")); 1392 QMessageBox::critical( this, i18n( "Unable to Save" ), text, i18n("Ok"));
1393 } 1393 }
1394#endif //KAB_EMBEDDED 1394#endif //KAB_EMBEDDED
1395 1395
1396 message(i18n("Addressbook saved!")); 1396 message(i18n("Addressbook saved!"));
1397 setModified( false ); 1397 setModified( false );
1398 syncManager->setBlockSave(false); 1398 syncManager->setBlockSave(false);
1399} 1399}
1400 1400
1401 1401
1402void KABCore::undo() 1402void KABCore::undo()
1403{ 1403{
1404 UndoStack::instance()->undo(); 1404 UndoStack::instance()->undo();
1405 1405
1406 // Refresh the view 1406 // Refresh the view
1407 mViewManager->refreshView(); 1407 mViewManager->refreshView();
1408} 1408}
1409 1409
1410void KABCore::redo() 1410void KABCore::redo()
1411{ 1411{
1412 RedoStack::instance()->redo(); 1412 RedoStack::instance()->redo();
1413 1413
1414 // Refresh the view 1414 // Refresh the view
1415 mViewManager->refreshView(); 1415 mViewManager->refreshView();
1416} 1416}
1417void KABCore::setJumpButtonBar( bool visible ) 1417void KABCore::setJumpButtonBar( bool visible )
1418{ 1418{
1419 setJumpButtonBarVisible(visible ); 1419 setJumpButtonBarVisible(visible );
1420 saveSettings(); 1420 saveSettings();
1421} 1421}
1422void KABCore::setJumpButtonBarVisible( bool visible ) 1422void KABCore::setJumpButtonBarVisible( bool visible )
1423{ 1423{
1424 if (mMultipleViewsAtOnce) 1424 if (mMultipleViewsAtOnce)
1425 { 1425 {
1426 if ( visible ) 1426 if ( visible )
1427 mJumpButtonBar->show(); 1427 mJumpButtonBar->show();
1428 else 1428 else
1429 mJumpButtonBar->hide(); 1429 mJumpButtonBar->hide();
1430 } 1430 }
1431 else 1431 else
1432 { 1432 {
1433 // show the jumpbar only if "the details are hidden" == "viewmanager are shown" 1433 // show the jumpbar only if "the details are hidden" == "viewmanager are shown"
1434 if (mViewManager->isVisible()) 1434 if (mViewManager->isVisible())
1435 { 1435 {
1436 if ( visible ) 1436 if ( visible )
1437 mJumpButtonBar->show(); 1437 mJumpButtonBar->show();
1438 else 1438 else
1439 mJumpButtonBar->hide(); 1439 mJumpButtonBar->hide();
1440 } 1440 }
1441 else 1441 else
1442 { 1442 {
1443 mJumpButtonBar->hide(); 1443 mJumpButtonBar->hide();
1444 } 1444 }
1445 } 1445 }
1446} 1446}
1447 1447
1448 1448
1449void KABCore::setDetailsToState() 1449void KABCore::setDetailsToState()
1450{ 1450{
1451 setDetailsVisible( mActionDetails->isChecked() ); 1451 setDetailsVisible( mActionDetails->isChecked() );
1452} 1452}
1453void KABCore::setDetailsToggle() 1453void KABCore::setDetailsToggle()
1454{ 1454{
1455 mActionDetails->setChecked( !mActionDetails->isChecked() ); 1455 mActionDetails->setChecked( !mActionDetails->isChecked() );
1456 setDetailsToState(); 1456 setDetailsToState();
1457} 1457}
1458 1458
1459 1459
1460 1460
1461void KABCore::setDetailsVisible( bool visible ) 1461void KABCore::setDetailsVisible( bool visible )
1462{ 1462{
1463 if (visible && mDetails->isHidden()) 1463 if (visible && mDetails->isHidden())
1464 { 1464 {
1465 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 1465 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
1466 if ( addrList.count() > 0 ) 1466 if ( addrList.count() > 0 )
1467 mDetails->setAddressee( addrList[ 0 ] ); 1467 mDetails->setAddressee( addrList[ 0 ] );
1468 } 1468 }
1469 1469
1470 // mMultipleViewsAtOnce=false: mDetails is always visible. But we switch between 1470 // mMultipleViewsAtOnce=false: mDetails is always visible. But we switch between
1471 // the listview and the detailview. We do that by changing the splitbar size. 1471 // the listview and the detailview. We do that by changing the splitbar size.
1472 if (mMultipleViewsAtOnce) 1472 if (mMultipleViewsAtOnce)
1473 { 1473 {
1474 if ( visible ) 1474 if ( visible )
1475 mDetails->show(); 1475 mDetails->show();
1476 else 1476 else
1477 mDetails->hide(); 1477 mDetails->hide();
1478 } 1478 }
1479 else 1479 else
1480 { 1480 {
1481 if ( visible ) { 1481 if ( visible ) {
1482 mViewManager->hide(); 1482 mViewManager->hide();
1483 mDetails->show(); 1483 mDetails->show();
1484 mIncSearchWidget->setFocus(); 1484 mIncSearchWidget->setFocus();
1485 } 1485 }
1486 else { 1486 else {
1487 mViewManager->show(); 1487 mViewManager->show();
1488 mDetails->hide(); 1488 mDetails->hide();
1489 mViewManager->setFocusAV(); 1489 mViewManager->setFocusAV();
1490 } 1490 }
1491 setJumpButtonBarVisible( !visible ); 1491 setJumpButtonBarVisible( !visible );
1492 } 1492 }
1493 1493
1494} 1494}
1495 1495
1496void KABCore::extensionChanged( int id ) 1496void KABCore::extensionChanged( int id )
1497{ 1497{
1498 //change the details view only for non desktop systems 1498 //change the details view only for non desktop systems
1499#ifndef DESKTOP_VERSION 1499#ifndef DESKTOP_VERSION
1500 1500
1501 if (id == 0) 1501 if (id == 0)
1502 { 1502 {
1503 //the user disabled the extension. 1503 //the user disabled the extension.
1504 1504
1505 if (mMultipleViewsAtOnce) 1505 if (mMultipleViewsAtOnce)
1506 { // enable detailsview again 1506 { // enable detailsview again
1507 setDetailsVisible( true ); 1507 setDetailsVisible( true );
1508 mActionDetails->setChecked( true ); 1508 mActionDetails->setChecked( true );
1509 } 1509 }
1510 else 1510 else
1511 { //go back to the listview 1511 { //go back to the listview
1512 setDetailsVisible( false ); 1512 setDetailsVisible( false );
1513 mActionDetails->setChecked( false ); 1513 mActionDetails->setChecked( false );
1514 mActionDetails->setEnabled(true); 1514 mActionDetails->setEnabled(true);
1515 } 1515 }
1516 1516
1517 } 1517 }
1518 else 1518 else
1519 { 1519 {
1520 //the user enabled the extension. 1520 //the user enabled the extension.
1521 setDetailsVisible( false ); 1521 setDetailsVisible( false );
1522 mActionDetails->setChecked( false ); 1522 mActionDetails->setChecked( false );
1523 1523
1524 if (!mMultipleViewsAtOnce) 1524 if (!mMultipleViewsAtOnce)
1525 { 1525 {
1526 mActionDetails->setEnabled(false); 1526 mActionDetails->setEnabled(false);
1527 } 1527 }
1528 1528
1529 mExtensionManager->setSelectionChanged(); 1529 mExtensionManager->setSelectionChanged();
1530 1530
1531 } 1531 }
1532 1532
1533#endif// DESKTOP_VERSION 1533#endif// DESKTOP_VERSION
1534 1534
1535} 1535}
1536 1536
1537 1537
1538void KABCore::extensionModified( const KABC::Addressee::List &list ) 1538void KABCore::extensionModified( const KABC::Addressee::List &list )
1539{ 1539{
1540 1540
1541 if ( list.count() != 0 ) { 1541 if ( list.count() != 0 ) {
1542 KABC::Addressee::List::ConstIterator it; 1542 KABC::Addressee::List::ConstIterator it;
1543 for ( it = list.begin(); it != list.end(); ++it ) 1543 for ( it = list.begin(); it != list.end(); ++it )
1544 mAddressBook->insertAddressee( *it ); 1544 mAddressBook->insertAddressee( *it );
1545 if ( list.count() > 1 ) 1545 if ( list.count() > 1 )
1546 setModified(); 1546 setModified();
1547 else 1547 else
1548 setModifiedWOrefresh(); 1548 setModifiedWOrefresh();
1549 } 1549 }
1550 if ( list.count() == 0 ) 1550 if ( list.count() == 0 )
1551 mViewManager->refreshView(); 1551 mViewManager->refreshView();
1552 else 1552 else
1553 mViewManager->refreshView( list[ 0 ].uid() ); 1553 mViewManager->refreshView( list[ 0 ].uid() );
1554 1554
1555 1555
1556 1556
1557} 1557}
1558 1558
1559QString KABCore::getNameByPhone( const QString &phone ) 1559QString KABCore::getNameByPhone( const QString &phone )
1560{ 1560{
1561#ifndef KAB_EMBEDDED 1561#ifndef KAB_EMBEDDED
1562 QRegExp r( "[/*/-/ ]" ); 1562 QRegExp r( "[/*/-/ ]" );
1563 QString localPhone( phone ); 1563 QString localPhone( phone );
1564 1564
1565 bool found = false; 1565 bool found = false;
1566 QString ownerName = ""; 1566 QString ownerName = "";
1567 KABC::AddressBook::Iterator iter; 1567 KABC::AddressBook::Iterator iter;
1568 KABC::PhoneNumber::List::Iterator phoneIter; 1568 KABC::PhoneNumber::List::Iterator phoneIter;
1569 KABC::PhoneNumber::List phoneList; 1569 KABC::PhoneNumber::List phoneList;
1570 for ( iter = mAddressBook->begin(); !found && ( iter != mAddressBook->end() ); ++iter ) { 1570 for ( iter = mAddressBook->begin(); !found && ( iter != mAddressBook->end() ); ++iter ) {
1571 phoneList = (*iter).phoneNumbers(); 1571 phoneList = (*iter).phoneNumbers();
1572 for ( phoneIter = phoneList.begin(); !found && ( phoneIter != phoneList.end() ); 1572 for ( phoneIter = phoneList.begin(); !found && ( phoneIter != phoneList.end() );
1573 ++phoneIter) { 1573 ++phoneIter) {
1574 // Get rid of separator chars so just the numbers are compared. 1574 // Get rid of separator chars so just the numbers are compared.
1575 if ( (*phoneIter).number().replace( r, "" ) == localPhone.replace( r, "" ) ) { 1575 if ( (*phoneIter).number().replace( r, "" ) == localPhone.replace( r, "" ) ) {
1576 ownerName = (*iter).formattedName(); 1576 ownerName = (*iter).formattedName();
1577 found = true; 1577 found = true;
1578 } 1578 }
1579 } 1579 }
1580 } 1580 }
1581 1581
1582 return ownerName; 1582 return ownerName;
1583#else //KAB_EMBEDDED 1583#else //KAB_EMBEDDED
1584 qDebug("KABCore::getNameByPhone finsih method"); 1584 qDebug("KABCore::getNameByPhone finsih method");
1585 return ""; 1585 return "";
1586#endif //KAB_EMBEDDED 1586#endif //KAB_EMBEDDED
1587 1587
1588} 1588}
1589 1589
1590void KABCore::openConfigDialog() 1590void KABCore::openConfigDialog()
1591{ 1591{
1592 KCMultiDialog* ConfigureDialog = new KCMultiDialog( "PIM", this ,"kabconfigdialog", true ); 1592 KCMultiDialog* ConfigureDialog = new KCMultiDialog( "PIM", this ,"kabconfigdialog", true );
1593 KCMKabConfig* kabcfg = new KCMKabConfig( ConfigureDialog->getNewVBoxPage(i18n( "Addressbook")) , "KCMKabConfig" ); 1593 KCMKabConfig* kabcfg = new KCMKabConfig( ConfigureDialog->getNewVBoxPage(i18n( "Addressbook")) , "KCMKabConfig" );
1594 ConfigureDialog->addModule(kabcfg ); 1594 ConfigureDialog->addModule(kabcfg );
1595 KCMKdePimConfig* kdelibcfg = new KCMKdePimConfig( ConfigureDialog->getNewVBoxPage(i18n( "Global")) , "KCMKdeLibConfig" ); 1595 KCMKdePimConfig* kdelibcfg = new KCMKdePimConfig( ConfigureDialog->getNewVBoxPage(i18n( "Global")) , "KCMKdeLibConfig" );
1596 ConfigureDialog->addModule(kdelibcfg ); 1596 ConfigureDialog->addModule(kdelibcfg );
1597 1597
1598 connect( ConfigureDialog, SIGNAL( applyClicked() ), 1598 connect( ConfigureDialog, SIGNAL( applyClicked() ),
1599 this, SLOT( configurationChanged() ) ); 1599 this, SLOT( configurationChanged() ) );
1600 connect( ConfigureDialog, SIGNAL( okClicked() ), 1600 connect( ConfigureDialog, SIGNAL( okClicked() ),
1601 this, SLOT( configurationChanged() ) ); 1601 this, SLOT( configurationChanged() ) );
1602 saveSettings(); 1602 saveSettings();
1603#ifndef DESKTOP_VERSION 1603#ifndef DESKTOP_VERSION
1604 ConfigureDialog->showMaximized(); 1604 ConfigureDialog->showMaximized();
1605#endif 1605#endif
1606 if ( ConfigureDialog->exec() ) 1606 if ( ConfigureDialog->exec() )
1607 KMessageBox::information( this, i18n("Some changes are only\neffective after a restart!\n") ); 1607 KMessageBox::information( this, i18n("Some changes are only\neffective after a restart!\n") );
1608 delete ConfigureDialog; 1608 delete ConfigureDialog;
1609} 1609}
1610 1610
1611void KABCore::openLDAPDialog() 1611void KABCore::openLDAPDialog()
1612{ 1612{
1613#ifndef KAB_EMBEDDED 1613#ifndef KAB_EMBEDDED
1614 if ( !mLdapSearchDialog ) { 1614 if ( !mLdapSearchDialog ) {
1615 mLdapSearchDialog = new LDAPSearchDialog( mAddressBook, this ); 1615 mLdapSearchDialog = new LDAPSearchDialog( mAddressBook, this );
1616 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), mViewManager, 1616 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), mViewManager,
1617 SLOT( refreshView() ) ); 1617 SLOT( refreshView() ) );
1618 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), this, 1618 connect( mLdapSearchDialog, SIGNAL( addresseesAdded() ), this,
1619 SLOT( setModified() ) ); 1619 SLOT( setModified() ) );
1620 } else 1620 } else
1621 mLdapSearchDialog->restoreSettings(); 1621 mLdapSearchDialog->restoreSettings();
1622 1622
1623 if ( mLdapSearchDialog->isOK() ) 1623 if ( mLdapSearchDialog->isOK() )
1624 mLdapSearchDialog->exec(); 1624 mLdapSearchDialog->exec();
1625#else //KAB_EMBEDDED 1625#else //KAB_EMBEDDED
1626 qDebug("KABCore::openLDAPDialog() finsih method"); 1626 qDebug("KABCore::openLDAPDialog() finsih method");
1627#endif //KAB_EMBEDDED 1627#endif //KAB_EMBEDDED
1628} 1628}
1629 1629
1630void KABCore::print() 1630void KABCore::print()
1631{ 1631{
1632#ifndef KAB_EMBEDDED 1632#ifndef KAB_EMBEDDED
1633 KPrinter printer; 1633 KPrinter printer;
1634 if ( !printer.setup( this ) ) 1634 if ( !printer.setup( this ) )
1635 return; 1635 return;
1636 1636
1637 KABPrinting::PrintingWizard wizard( &printer, mAddressBook, 1637 KABPrinting::PrintingWizard wizard( &printer, mAddressBook,
1638 mViewManager->selectedUids(), this ); 1638 mViewManager->selectedUids(), this );
1639 1639
1640 wizard.exec(); 1640 wizard.exec();
1641#else //KAB_EMBEDDED 1641#else //KAB_EMBEDDED
1642 qDebug("KABCore::print() finsih method"); 1642 qDebug("KABCore::print() finsih method");
1643#endif //KAB_EMBEDDED 1643#endif //KAB_EMBEDDED
1644 1644
1645} 1645}
1646 1646
1647 1647
1648void KABCore::addGUIClient( KXMLGUIClient *client ) 1648void KABCore::addGUIClient( KXMLGUIClient *client )
1649{ 1649{
1650 if ( mGUIClient ) 1650 if ( mGUIClient )
1651 mGUIClient->insertChildClient( client ); 1651 mGUIClient->insertChildClient( client );
1652 else 1652 else
1653 KMessageBox::error( this, "no KXMLGUICLient"); 1653 KMessageBox::error( this, "no KXMLGUICLient");
1654} 1654}
1655 1655
1656 1656
1657void KABCore::configurationChanged() 1657void KABCore::configurationChanged()
1658{ 1658{
1659 mExtensionManager->reconfigure(); 1659 mExtensionManager->reconfigure();
1660} 1660}
1661 1661
1662void KABCore::addressBookChanged() 1662void KABCore::addressBookChanged()
1663{ 1663{
1664/*US 1664/*US
1665 QDictIterator<AddresseeEditorDialog> it( mEditorDict ); 1665 QDictIterator<AddresseeEditorDialog> it( mEditorDict );
1666 while ( it.current() ) { 1666 while ( it.current() ) {
1667 if ( it.current()->dirty() ) { 1667 if ( it.current()->dirty() ) {
1668 QString text = i18n( "Data has been changed externally. Unsaved " 1668 QString text = i18n( "Data has been changed externally. Unsaved "
1669 "changes will be lost." ); 1669 "changes will be lost." );
1670 KMessageBox::information( this, text ); 1670 KMessageBox::information( this, text );
1671 } 1671 }
1672 it.current()->setAddressee( mAddressBook->findByUid( it.currentKey() ) ); 1672 it.current()->setAddressee( mAddressBook->findByUid( it.currentKey() ) );
1673 ++it; 1673 ++it;
1674 } 1674 }
1675*/ 1675*/
1676 if (mEditorDialog) 1676 if (mEditorDialog)
1677 { 1677 {
1678 if (mEditorDialog->dirty()) 1678 if (mEditorDialog->dirty())
1679 { 1679 {
1680 QString text = i18n( "Data has been changed externally. Unsaved " 1680 QString text = i18n( "Data has been changed externally. Unsaved "
1681 "changes will be lost." ); 1681 "changes will be lost." );
1682 KMessageBox::information( this, text ); 1682 KMessageBox::information( this, text );
1683 } 1683 }
1684 QString currentuid = mEditorDialog->addressee().uid(); 1684 QString currentuid = mEditorDialog->addressee().uid();
1685 mEditorDialog->setAddressee( mAddressBook->findByUid( currentuid ) ); 1685 mEditorDialog->setAddressee( mAddressBook->findByUid( currentuid ) );
1686 } 1686 }
1687 mViewManager->refreshView(); 1687 mViewManager->refreshView();
1688 1688
1689 1689
1690} 1690}
1691 1691
1692AddresseeEditorDialog *KABCore::createAddresseeEditorDialog( QWidget *parent, 1692AddresseeEditorDialog *KABCore::createAddresseeEditorDialog( QWidget *parent,
1693 const char *name ) 1693 const char *name )
1694{ 1694{
1695 1695
1696 if ( mEditorDialog == 0 ) { 1696 if ( mEditorDialog == 0 ) {
1697 mEditorDialog = new AddresseeEditorDialog( this, parent, 1697 mEditorDialog = new AddresseeEditorDialog( this, parent,
1698 name ? name : "editorDialog" ); 1698 name ? name : "editorDialog" );
1699 1699
1700 1700
1701 connect( mEditorDialog, SIGNAL( contactModified( const KABC::Addressee& ) ), 1701 connect( mEditorDialog, SIGNAL( contactModified( const KABC::Addressee& ) ),
1702 SLOT( contactModified( const KABC::Addressee& ) ) ); 1702 SLOT( contactModified( const KABC::Addressee& ) ) );
1703 //connect( mEditorDialog, SIGNAL( editorDestroyed( const QString& ) ), 1703 //connect( mEditorDialog, SIGNAL( editorDestroyed( const QString& ) ),
1704 // SLOT( slotEditorDestroyed( const QString& ) ) ; 1704 // SLOT( slotEditorDestroyed( const QString& ) ) ;
1705 } 1705 }
1706 1706
1707 return mEditorDialog; 1707 return mEditorDialog;
1708} 1708}
1709 1709
1710void KABCore::slotEditorDestroyed( const QString &uid ) 1710void KABCore::slotEditorDestroyed( const QString &uid )
1711{ 1711{
1712 //mEditorDict.remove( uid ); 1712 //mEditorDict.remove( uid );
1713} 1713}
1714 1714
1715void KABCore::initGUI() 1715void KABCore::initGUI()
1716{ 1716{
1717#ifndef KAB_EMBEDDED 1717#ifndef KAB_EMBEDDED
1718 QHBoxLayout *topLayout = new QHBoxLayout( this ); 1718 QHBoxLayout *topLayout = new QHBoxLayout( this );
1719 topLayout->setSpacing( KDialogBase::spacingHint() ); 1719 topLayout->setSpacing( KDialogBase::spacingHint() );
1720 1720
1721 mExtensionBarSplitter = new QSplitter( this ); 1721 mExtensionBarSplitter = new QSplitter( this );
1722 mExtensionBarSplitter->setOrientation( Qt::Vertical ); 1722 mExtensionBarSplitter->setOrientation( Qt::Vertical );
1723 1723
1724 mDetailsSplitter = new QSplitter( mExtensionBarSplitter ); 1724 mDetailsSplitter = new QSplitter( mExtensionBarSplitter );
1725 1725
1726 QVBox *viewSpace = new QVBox( mDetailsSplitter ); 1726 QVBox *viewSpace = new QVBox( mDetailsSplitter );
1727 mIncSearchWidget = new IncSearchWidget( viewSpace ); 1727 mIncSearchWidget = new IncSearchWidget( viewSpace );
1728 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), 1728 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
1729 SLOT( incrementalSearch( const QString& ) ) ); 1729 SLOT( incrementalSearch( const QString& ) ) );
1730 1730
1731 mViewManager = new ViewManager( this, viewSpace ); 1731 mViewManager = new ViewManager( this, viewSpace );
1732 viewSpace->setStretchFactor( mViewManager, 1 ); 1732 viewSpace->setStretchFactor( mViewManager, 1 );
1733 1733
1734 mDetails = new ViewContainer( mDetailsSplitter ); 1734 mDetails = new ViewContainer( mDetailsSplitter );
1735 1735
1736 mJumpButtonBar = new JumpButtonBar( this, this ); 1736 mJumpButtonBar = new JumpButtonBar( this, this );
1737 1737
1738 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter ); 1738 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter );
1739 1739
1740 topLayout->addWidget( mExtensionBarSplitter ); 1740 topLayout->addWidget( mExtensionBarSplitter );
1741 topLayout->setStretchFactor( mExtensionBarSplitter, 100 ); 1741 topLayout->setStretchFactor( mExtensionBarSplitter, 100 );
1742 topLayout->addWidget( mJumpButtonBar ); 1742 topLayout->addWidget( mJumpButtonBar );
1743 //topLayout->setStretchFactor( mJumpButtonBar, 1 ); 1743 //topLayout->setStretchFactor( mJumpButtonBar, 1 );
1744 1744
1745 mXXPortManager = new XXPortManager( this, this ); 1745 mXXPortManager = new XXPortManager( this, this );
1746 1746
1747#else //KAB_EMBEDDED 1747#else //KAB_EMBEDDED
1748 //US initialize viewMenu before settingup viewmanager. 1748 //US initialize viewMenu before settingup viewmanager.
1749 // Viewmanager needs this menu to plugin submenues. 1749 // Viewmanager needs this menu to plugin submenues.
1750 viewMenu = new QPopupMenu( this ); 1750 viewMenu = new QPopupMenu( this );
1751 settingsMenu = new QPopupMenu( this ); 1751 settingsMenu = new QPopupMenu( this );
1752 //filterMenu = new QPopupMenu( this ); 1752 //filterMenu = new QPopupMenu( this );
1753 ImportMenu = new QPopupMenu( this ); 1753 ImportMenu = new QPopupMenu( this );
1754 ExportMenu = new QPopupMenu( this ); 1754 ExportMenu = new QPopupMenu( this );
1755 syncMenu = new QPopupMenu( this ); 1755 syncMenu = new QPopupMenu( this );
1756 changeMenu= new QPopupMenu( this ); 1756 changeMenu= new QPopupMenu( this );
1757 beamMenu= new QPopupMenu( this ); 1757 beamMenu= new QPopupMenu( this );
1758 1758
1759//US since we have no splitter for the embedded system, setup 1759//US since we have no splitter for the embedded system, setup
1760// a layout with two frames. One left and one right. 1760// a layout with two frames. One left and one right.
1761 1761
1762 QBoxLayout *topLayout; 1762 QBoxLayout *topLayout;
1763 1763
1764 // = new QHBoxLayout( this ); 1764 // = new QHBoxLayout( this );
1765// QBoxLayout *topLayout = (QBoxLayout*)layout(); 1765// QBoxLayout *topLayout = (QBoxLayout*)layout();
1766 1766
1767// QWidget *mainBox = new QWidget( this ); 1767// QWidget *mainBox = new QWidget( this );
1768// QBoxLayout * mainBoxLayout = new QHBoxLayout(mainBox); 1768// QBoxLayout * mainBoxLayout = new QHBoxLayout(mainBox);
1769 1769
1770#ifdef DESKTOP_VERSION 1770#ifdef DESKTOP_VERSION
1771 topLayout = new QHBoxLayout( this ); 1771 topLayout = new QHBoxLayout( this );
1772 1772
1773 1773
1774 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 1774 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
1775 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 1775 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
1776 1776
1777 topLayout->addWidget(mMiniSplitter ); 1777 topLayout->addWidget(mMiniSplitter );
1778 1778
1779 mExtensionBarSplitter = new KDGanttMinimizeSplitter( Qt::Vertical,mMiniSplitter ); 1779 mExtensionBarSplitter = new KDGanttMinimizeSplitter( Qt::Vertical,mMiniSplitter );
1780 mExtensionBarSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down ); 1780 mExtensionBarSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down );
1781 mViewManager = new ViewManager( this, mExtensionBarSplitter ); 1781 mViewManager = new ViewManager( this, mExtensionBarSplitter );
1782 mDetails = new ViewContainer( mMiniSplitter ); 1782 mDetails = new ViewContainer( mMiniSplitter );
1783 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter ); 1783 mExtensionManager = new ExtensionManager( this, mExtensionBarSplitter );
1784#else 1784#else
1785 if ( QApplication::desktop()->width() > 480 ) { 1785 if ( QApplication::desktop()->width() > 480 ) {
1786 topLayout = new QHBoxLayout( this ); 1786 topLayout = new QHBoxLayout( this );
1787 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this); 1787 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, this);
1788 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right ); 1788 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
1789 } else { 1789 } else {
1790 1790
1791 topLayout = new QHBoxLayout( this ); 1791 topLayout = new QHBoxLayout( this );
1792 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Vertical, this); 1792 mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Vertical, this);
1793 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down ); 1793 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Down );
1794 } 1794 }
1795 1795
1796 topLayout->addWidget(mMiniSplitter ); 1796 topLayout->addWidget(mMiniSplitter );
1797 mViewManager = new ViewManager( this, mMiniSplitter ); 1797 mViewManager = new ViewManager( this, mMiniSplitter );
1798 mDetails = new ViewContainer( mMiniSplitter ); 1798 mDetails = new ViewContainer( mMiniSplitter );
1799 1799
1800 1800
1801 mExtensionManager = new ExtensionManager( this, mMiniSplitter ); 1801 mExtensionManager = new ExtensionManager( this, mMiniSplitter );
1802#endif 1802#endif
1803 //eh->hide(); 1803 //eh->hide();
1804 // topLayout->addWidget(mExtensionManager ); 1804 // topLayout->addWidget(mExtensionManager );
1805 1805
1806 1806
1807/*US 1807/*US
1808#ifndef KAB_NOSPLITTER 1808#ifndef KAB_NOSPLITTER
1809 QHBoxLayout *topLayout = new QHBoxLayout( this ); 1809 QHBoxLayout *topLayout = new QHBoxLayout( this );
1810//US topLayout->setSpacing( KDialogBase::spacingHint() ); 1810//US topLayout->setSpacing( KDialogBase::spacingHint() );
1811 topLayout->setSpacing( 10 ); 1811 topLayout->setSpacing( 10 );
1812 1812
1813 mDetailsSplitter = new QSplitter( this ); 1813 mDetailsSplitter = new QSplitter( this );
1814 1814
1815 QVBox *viewSpace = new QVBox( mDetailsSplitter ); 1815 QVBox *viewSpace = new QVBox( mDetailsSplitter );
1816 1816
1817 mViewManager = new ViewManager( this, viewSpace ); 1817 mViewManager = new ViewManager( this, viewSpace );
1818 viewSpace->setStretchFactor( mViewManager, 1 ); 1818 viewSpace->setStretchFactor( mViewManager, 1 );
1819 1819
1820 mDetails = new ViewContainer( mDetailsSplitter ); 1820 mDetails = new ViewContainer( mDetailsSplitter );
1821 1821
1822 topLayout->addWidget( mDetailsSplitter ); 1822 topLayout->addWidget( mDetailsSplitter );
1823 topLayout->setStretchFactor( mDetailsSplitter, 100 ); 1823 topLayout->setStretchFactor( mDetailsSplitter, 100 );
1824#else //KAB_NOSPLITTER 1824#else //KAB_NOSPLITTER
1825 QHBoxLayout *topLayout = new QHBoxLayout( this ); 1825 QHBoxLayout *topLayout = new QHBoxLayout( this );
1826//US topLayout->setSpacing( KDialogBase::spacingHint() ); 1826//US topLayout->setSpacing( KDialogBase::spacingHint() );
1827 topLayout->setSpacing( 10 ); 1827 topLayout->setSpacing( 10 );
1828 1828
1829// mDetailsSplitter = new QSplitter( this ); 1829// mDetailsSplitter = new QSplitter( this );
1830 1830
1831 QVBox *viewSpace = new QVBox( this ); 1831 QVBox *viewSpace = new QVBox( this );
1832 1832
1833 mViewManager = new ViewManager( this, viewSpace ); 1833 mViewManager = new ViewManager( this, viewSpace );
1834 viewSpace->setStretchFactor( mViewManager, 1 ); 1834 viewSpace->setStretchFactor( mViewManager, 1 );
1835 1835
1836 mDetails = new ViewContainer( this ); 1836 mDetails = new ViewContainer( this );
1837 1837
1838 topLayout->addWidget( viewSpace ); 1838 topLayout->addWidget( viewSpace );
1839// topLayout->setStretchFactor( mDetailsSplitter, 100 ); 1839// topLayout->setStretchFactor( mDetailsSplitter, 100 );
1840 topLayout->addWidget( mDetails ); 1840 topLayout->addWidget( mDetails );
1841#endif //KAB_NOSPLITTER 1841#endif //KAB_NOSPLITTER
1842*/ 1842*/
1843 1843
1844 syncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)this, KSyncManager::KAPI, KABPrefs::instance(), syncMenu); 1844 syncManager = new KSyncManager((QWidget*)this, (KSyncInterface*)this, KSyncManager::KAPI, KABPrefs::instance(), syncMenu);
1845 syncManager->setBlockSave(false); 1845 syncManager->setBlockSave(false);
1846 1846
1847 connect(syncManager , SIGNAL( request_file() ), this, SLOT( syncFileRequest() ) ); 1847 connect(syncManager , SIGNAL( request_file() ), this, SLOT( syncFileRequest() ) );
1848 connect(syncManager , SIGNAL( getFile( bool )), this, SLOT(getFile( bool ) ) ); 1848 connect(syncManager , SIGNAL( getFile( bool )), this, SLOT(getFile( bool ) ) );
1849 QString sync_file = sentSyncFile(); 1849 QString sync_file = sentSyncFile();
1850 //qDebug("KABCore::initGUI()::setting tmp sync file to:%s ",sync_file.latin1()); 1850 //qDebug("KABCore::initGUI()::setting tmp sync file to:%s ",sync_file.latin1());
1851 syncManager->setDefaultFileName( sync_file ); 1851 syncManager->setDefaultFileName( sync_file );
1852 //connect(syncManager , SIGNAL( ), this, SLOT( ) ); 1852 //connect(syncManager , SIGNAL( ), this, SLOT( ) );
1853 1853
1854#endif //KAB_EMBEDDED 1854#endif //KAB_EMBEDDED
1855 initActions(); 1855 initActions();
1856 1856
1857#ifdef KAB_EMBEDDED 1857#ifdef KAB_EMBEDDED
1858 addActionsManually(); 1858 addActionsManually();
1859 //US make sure the export and import menues are initialized before creating the xxPortManager. 1859 //US make sure the export and import menues are initialized before creating the xxPortManager.
1860 mXXPortManager = new XXPortManager( this, this ); 1860 mXXPortManager = new XXPortManager( this, this );
1861 1861
1862 // LR mIncSearchWidget = new IncSearchWidget( mMainWindow->getIconToolBar() ); 1862 // LR mIncSearchWidget = new IncSearchWidget( mMainWindow->getIconToolBar() );
1863 //mMainWindow->toolBar()->insertWidget(-1, 4, mIncSearchWidget); 1863 //mMainWindow->toolBar()->insertWidget(-1, 4, mIncSearchWidget);
1864 // mActionQuit->plug ( mMainWindow->toolBar()); 1864 // mActionQuit->plug ( mMainWindow->toolBar());
1865 //mIncSearchWidget = new IncSearchWidget( mMainWindow->toolBar() ); 1865 //mIncSearchWidget = new IncSearchWidget( mMainWindow->toolBar() );
1866 //mMainWindow->toolBar()->insertWidget(-1, 0, mIncSearchWidget); 1866 //mMainWindow->toolBar()->insertWidget(-1, 0, mIncSearchWidget);
1867 // mIncSearchWidget->hide(); 1867 // mIncSearchWidget->hide();
1868 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), 1868 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
1869 SLOT( incrementalSearch( const QString& ) ) ); 1869 SLOT( incrementalSearch( const QString& ) ) );
1870 connect( mIncSearchWidget, SIGNAL( scrollUP() ),mViewManager, SLOT( scrollUP() ) ); 1870 connect( mIncSearchWidget, SIGNAL( scrollUP() ),mViewManager, SLOT( scrollUP() ) );
1871 connect( mIncSearchWidget, SIGNAL( scrollDOWN() ),mViewManager, SLOT( scrollDOWN() ) ); 1871 connect( mIncSearchWidget, SIGNAL( scrollDOWN() ),mViewManager, SLOT( scrollDOWN() ) );
1872 1872
1873 mJumpButtonBar = new JumpButtonBar( this, this ); 1873 mJumpButtonBar = new JumpButtonBar( this, this );
1874 1874
1875 topLayout->addWidget( mJumpButtonBar ); 1875 topLayout->addWidget( mJumpButtonBar );
1876//US topLayout->setStretchFactor( mJumpButtonBar, 10 ); 1876//US topLayout->setStretchFactor( mJumpButtonBar, 10 );
1877 1877
1878// mMainWindow->getIconToolBar()->raise(); 1878// mMainWindow->getIconToolBar()->raise();
1879 1879
1880#endif //KAB_EMBEDDED 1880#endif //KAB_EMBEDDED
1881 1881
1882} 1882}
1883void KABCore::initActions() 1883void KABCore::initActions()
1884{ 1884{
1885//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart); 1885//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart);
1886 1886
1887#ifndef KAB_EMBEDDED 1887#ifndef KAB_EMBEDDED
1888 connect( QApplication::clipboard(), SIGNAL( dataChanged() ), 1888 connect( QApplication::clipboard(), SIGNAL( dataChanged() ),
1889 SLOT( clipboardDataChanged() ) ); 1889 SLOT( clipboardDataChanged() ) );
1890#endif //KAB_EMBEDDED 1890#endif //KAB_EMBEDDED
1891 1891
1892 // file menu 1892 // file menu
1893 1893
1894 mActionMail = KStdAction::mail( this, SLOT( sendMail() ), actionCollection() ); 1894 mActionMail = KStdAction::mail( this, SLOT( sendMail() ), actionCollection() );
1895 //mActionPrint = KStdAction::print( this, SLOT( print() ), actionCollection() ); 1895 //mActionPrint = KStdAction::print( this, SLOT( print() ), actionCollection() );
1896 mActionPrint = new KAction( i18n( "&Print View" ), "fileprint", CTRL + Key_P, mViewManager, 1896 mActionPrint = new KAction( i18n( "&Print View" ), "fileprint", CTRL + Key_P, mViewManager,
1897 SLOT( printView() ), actionCollection(), "kaddressbook_print" ); 1897 SLOT( printView() ), actionCollection(), "kaddressbook_print" );
1898 1898
1899 1899
1900 mActionPrintDetails = new KAction( i18n( "&Print Details" ), "fileprint", 0, mDetails, 1900 mActionPrintDetails = new KAction( i18n( "&Print Details" ), "fileprint", 0, mDetails,
1901 SLOT( printView() ), actionCollection(), "kaddressbook_print2" ); 1901 SLOT( printView() ), actionCollection(), "kaddressbook_print2" );
1902 1902
1903 mActionSave = new KAction( i18n( "&Save" ), "filesave", CTRL+Key_S, this, 1903 mActionSave = new KAction( i18n( "&Save" ), "filesave", CTRL+Key_S, this,
1904 SLOT( save() ), actionCollection(), "file_sync" ); 1904 SLOT( save() ), actionCollection(), "file_sync" );
1905 1905
1906 mActionNewContact = new KAction( i18n( "&New Contact..." ), "filenew", CTRL+Key_N, this, 1906 mActionNewContact = new KAction( i18n( "&New Contact..." ), "filenew", CTRL+Key_N, this,
1907 SLOT( newContact() ), actionCollection(), "file_new_contact" ); 1907 SLOT( newContact() ), actionCollection(), "file_new_contact" );
1908 1908
1909 mActionMailVCard = new KAction(i18n("Mail &vCard..."), "mail_post_to", 0, 1909 mActionMailVCard = new KAction(i18n("Mail &vCard..."), "mail_post_to", 0,
1910 this, SLOT( mailVCard() ), 1910 this, SLOT( mailVCard() ),
1911 actionCollection(), "file_mail_vcard"); 1911 actionCollection(), "file_mail_vcard");
1912 1912
1913 mActionExport2phone = new KAction( i18n( "Export to phone" ), "ex2phone", 0, this, 1913 mActionExport2phone = new KAction( i18n( "Export to phone" ), "ex2phone", 0, this,
1914 SLOT( export2phone() ), actionCollection(), 1914 SLOT( export2phone() ), actionCollection(),
1915 "kaddressbook_ex2phone" ); 1915 "kaddressbook_ex2phone" );
1916 1916
1917 mActionBeamVCard = 0; 1917 mActionBeamVCard = 0;
1918 mActionBeam = 0; 1918 mActionBeam = 0;
1919 1919
1920#ifndef DESKTOP_VERSION 1920#ifndef DESKTOP_VERSION
1921 if ( Ir::supported() ) { 1921 if ( Ir::supported() ) {
1922 mActionBeamVCard = new KAction( i18n( "Beam v&Card(s)..." ), "beam", 0, this, 1922 mActionBeamVCard = new KAction( i18n( "Beam v&Card(s)..." ), "beam", 0, this,
1923 SLOT( beamVCard() ), actionCollection(), 1923 SLOT( beamVCard() ), actionCollection(),
1924 "kaddressbook_beam_vcard" ); 1924 "kaddressbook_beam_vcard" );
1925 1925
1926 mActionBeam = new KAction( i18n( "&Beam personal vCard" ), "beam", 0, this, 1926 mActionBeam = new KAction( i18n( "&Beam personal vCard" ), "beam", 0, this,
1927 SLOT( beamMySelf() ), actionCollection(), 1927 SLOT( beamMySelf() ), actionCollection(),
1928 "kaddressbook_beam_myself" ); 1928 "kaddressbook_beam_myself" );
1929 } 1929 }
1930#endif 1930#endif
1931 1931
1932 mActionEditAddressee = new KAction( i18n( "&Edit Contact..." ), "edit", 0, 1932 mActionEditAddressee = new KAction( i18n( "&Edit Contact..." ), "edit", 0,
1933 this, SLOT( editContact2() ), 1933 this, SLOT( editContact2() ),
1934 actionCollection(), "file_properties" ); 1934 actionCollection(), "file_properties" );
1935 1935
1936#ifdef KAB_EMBEDDED 1936#ifdef KAB_EMBEDDED
1937 // mActionQuit = KStdAction::quit( mMainWindow, SLOT( exit() ), actionCollection() ); 1937 // mActionQuit = KStdAction::quit( mMainWindow, SLOT( exit() ), actionCollection() );
1938 mActionQuit = new KAction( i18n( "&Exit" ), "exit", 0, 1938 mActionQuit = new KAction( i18n( "&Exit" ), "exit", 0,
1939 mMainWindow, SLOT( exit() ), 1939 mMainWindow, SLOT( exit() ),
1940 actionCollection(), "quit" ); 1940 actionCollection(), "quit" );
1941#endif //KAB_EMBEDDED 1941#endif //KAB_EMBEDDED
1942 1942
1943 // edit menu 1943 // edit menu
1944 if ( mIsPart ) { 1944 if ( mIsPart ) {
1945 mActionCopy = new KAction( i18n( "&Copy" ), "editcopy", CTRL + Key_C, this, 1945 mActionCopy = new KAction( i18n( "&Copy" ), "editcopy", CTRL + Key_C, this,
1946 SLOT( copyContacts() ), actionCollection(), 1946 SLOT( copyContacts() ), actionCollection(),
1947 "kaddressbook_copy" ); 1947 "kaddressbook_copy" );
1948 mActionCut = new KAction( i18n( "Cu&t" ), "editcut", CTRL + Key_X, this, 1948 mActionCut = new KAction( i18n( "Cu&t" ), "editcut", CTRL + Key_X, this,
1949 SLOT( cutContacts() ), actionCollection(), 1949 SLOT( cutContacts() ), actionCollection(),
1950 "kaddressbook_cut" ); 1950 "kaddressbook_cut" );
1951 mActionPaste = new KAction( i18n( "&Paste" ), "editpaste", CTRL + Key_V, this, 1951 mActionPaste = new KAction( i18n( "&Paste" ), "editpaste", CTRL + Key_V, this,
1952 SLOT( pasteContacts() ), actionCollection(), 1952 SLOT( pasteContacts() ), actionCollection(),
1953 "kaddressbook_paste" ); 1953 "kaddressbook_paste" );
1954 mActionSelectAll = new KAction( i18n( "Select &All" ), CTRL + Key_A, this, 1954 mActionSelectAll = new KAction( i18n( "Select &All" ), CTRL + Key_A, this,
1955 SLOT( selectAllContacts() ), actionCollection(), 1955 SLOT( selectAllContacts() ), actionCollection(),
1956 "kaddressbook_select_all" ); 1956 "kaddressbook_select_all" );
1957 mActionUndo = new KAction( i18n( "&Undo" ), "undo", CTRL + Key_Z, this, 1957 mActionUndo = new KAction( i18n( "&Undo" ), "undo", CTRL + Key_Z, this,
1958 SLOT( undo() ), actionCollection(), 1958 SLOT( undo() ), actionCollection(),
1959 "kaddressbook_undo" ); 1959 "kaddressbook_undo" );
1960 mActionRedo = new KAction( i18n( "Re&do" ), "redo", CTRL + SHIFT + Key_Z, 1960 mActionRedo = new KAction( i18n( "Re&do" ), "redo", CTRL + SHIFT + Key_Z,
1961 this, SLOT( redo() ), actionCollection(), 1961 this, SLOT( redo() ), actionCollection(),
1962 "kaddressbook_redo" ); 1962 "kaddressbook_redo" );
1963 } else { 1963 } else {
1964 mActionCopy = KStdAction::copy( this, SLOT( copyContacts() ), actionCollection() ); 1964 mActionCopy = KStdAction::copy( this, SLOT( copyContacts() ), actionCollection() );
1965 mActionCut = KStdAction::cut( this, SLOT( cutContacts() ), actionCollection() ); 1965 mActionCut = KStdAction::cut( this, SLOT( cutContacts() ), actionCollection() );
1966 mActionPaste = KStdAction::paste( this, SLOT( pasteContacts() ), actionCollection() ); 1966 mActionPaste = KStdAction::paste( this, SLOT( pasteContacts() ), actionCollection() );
1967 mActionSelectAll = KStdAction::selectAll( this, SLOT( selectAllContacts() ), actionCollection() ); 1967 mActionSelectAll = KStdAction::selectAll( this, SLOT( selectAllContacts() ), actionCollection() );
1968 mActionUndo = KStdAction::undo( this, SLOT( undo() ), actionCollection() ); 1968 mActionUndo = KStdAction::undo( this, SLOT( undo() ), actionCollection() );
1969 mActionRedo = KStdAction::redo( this, SLOT( redo() ), actionCollection() ); 1969 mActionRedo = KStdAction::redo( this, SLOT( redo() ), actionCollection() );
1970 } 1970 }
1971 1971
1972 mActionDelete = new KAction( i18n( "&Delete Contact" ), "editdelete", 1972 mActionDelete = new KAction( i18n( "&Delete Contact" ), "editdelete",
1973 Key_Delete, this, SLOT( deleteContacts() ), 1973 Key_Delete, this, SLOT( deleteContacts() ),
1974 actionCollection(), "edit_delete" ); 1974 actionCollection(), "edit_delete" );
1975 1975
1976 mActionUndo->setEnabled( false ); 1976 mActionUndo->setEnabled( false );
1977 mActionRedo->setEnabled( false ); 1977 mActionRedo->setEnabled( false );
1978 1978
1979 // settings menu 1979 // settings menu
1980#ifdef KAB_EMBEDDED 1980#ifdef KAB_EMBEDDED
1981//US special menuentry to configure the addressbook resources. On KDE 1981//US special menuentry to configure the addressbook resources. On KDE
1982// you do that through the control center !!! 1982// you do that through the control center !!!
1983 mActionConfigResources = new KAction( i18n( "Configure &Resources..." ), "configure_resources", 0, this, 1983 mActionConfigResources = new KAction( i18n( "Configure &Resources..." ), "configure_resources", 0, this,
1984 SLOT( configureResources() ), actionCollection(), 1984 SLOT( configureResources() ), actionCollection(),
1985 "kaddressbook_configure_resources" ); 1985 "kaddressbook_configure_resources" );
1986#endif //KAB_EMBEDDED 1986#endif //KAB_EMBEDDED
1987 1987
1988 if ( mIsPart ) { 1988 if ( mIsPart ) {
1989 mActionConfigKAddressbook = new KAction( i18n( "&Configure KAddressBook..." ), "configure", 0, this, 1989 mActionConfigKAddressbook = new KAction( i18n( "&Configure KAddressBook..." ), "configure", 0, this,
1990 SLOT( openConfigDialog() ), actionCollection(), 1990 SLOT( openConfigDialog() ), actionCollection(),
1991 "kaddressbook_configure" ); 1991 "kaddressbook_configure" );
1992 1992
1993 //US not implemented yet 1993 //US not implemented yet
1994 //mActionConfigShortcuts = new KAction( i18n( "Configure S&hortcuts..." ), "configure_shortcuts", 0, 1994 //mActionConfigShortcuts = new KAction( i18n( "Configure S&hortcuts..." ), "configure_shortcuts", 0,
1995 // this, SLOT( configureKeyBindings() ), actionCollection(), 1995 // this, SLOT( configureKeyBindings() ), actionCollection(),
1996 // "kaddressbook_configure_shortcuts" ); 1996 // "kaddressbook_configure_shortcuts" );
1997#ifdef KAB_EMBEDDED 1997#ifdef KAB_EMBEDDED
1998 mActionConfigureToolbars = KStdAction::configureToolbars( this, SLOT( mMainWindow->configureToolbars() ), actionCollection() ); 1998 mActionConfigureToolbars = KStdAction::configureToolbars( this, SLOT( mMainWindow->configureToolbars() ), actionCollection() );
1999 mActionConfigureToolbars->setEnabled( false ); 1999 mActionConfigureToolbars->setEnabled( false );
2000#endif //KAB_EMBEDDED 2000#endif //KAB_EMBEDDED
2001 2001
2002 } else { 2002 } else {
2003 mActionConfigKAddressbook = KStdAction::preferences( this, SLOT( openConfigDialog() ), actionCollection() ); 2003 mActionConfigKAddressbook = KStdAction::preferences( this, SLOT( openConfigDialog() ), actionCollection() );
2004 2004
2005 //US not implemented yet 2005 //US not implemented yet
2006 //mActionKeyBindings = KStdAction::keyBindings( this, SLOT( configureKeyBindings() ), actionCollection() ); 2006 //mActionKeyBindings = KStdAction::keyBindings( this, SLOT( configureKeyBindings() ), actionCollection() );
2007 } 2007 }
2008 2008
2009 mActionJumpBar = new KToggleAction( i18n( "Show Jump Bar" ), 0, 0, 2009 mActionJumpBar = new KToggleAction( i18n( "Show Jump Bar" ), 0, 0,
2010 actionCollection(), "options_show_jump_bar" ); 2010 actionCollection(), "options_show_jump_bar" );
2011 connect( mActionJumpBar, SIGNAL( toggled( bool ) ), SLOT( setJumpButtonBar( bool ) ) ); 2011 connect( mActionJumpBar, SIGNAL( toggled( bool ) ), SLOT( setJumpButtonBar( bool ) ) );
2012 2012
2013 mActionDetails = new KToggleAction( i18n( "Show Details" ), "listview", 0, 2013 mActionDetails = new KToggleAction( i18n( "Show Details" ), "listview", 0,
2014 actionCollection(), "options_show_details" ); 2014 actionCollection(), "options_show_details" );
2015 connect( mActionDetails, SIGNAL( toggled( bool ) ), SLOT( setDetailsVisible( bool ) ) ); 2015 connect( mActionDetails, SIGNAL( toggled( bool ) ), SLOT( setDetailsVisible( bool ) ) );
2016 2016
2017 2017
2018 mActionBR = new KToggleAction( i18n( "Beam receive enabled" ), "beam", 0, this, 2018 mActionBR = new KToggleAction( i18n( "Beam receive enabled" ), "beam", 0, this,
2019 SLOT( toggleBeamReceive() ), actionCollection(), 2019 SLOT( toggleBeamReceive() ), actionCollection(),
2020 "kaddressbook_beam_rec" ); 2020 "kaddressbook_beam_rec" );
2021 2021
2022 2022
2023 // misc 2023 // misc
2024 // only enable LDAP lookup if we can handle the protocol 2024 // only enable LDAP lookup if we can handle the protocol
2025#ifndef KAB_EMBEDDED 2025#ifndef KAB_EMBEDDED
2026 if ( KProtocolInfo::isKnownProtocol( KURL( "ldap://localhost" ) ) ) { 2026 if ( KProtocolInfo::isKnownProtocol( KURL( "ldap://localhost" ) ) ) {
2027 new KAction( i18n( "&Lookup Addresses in Directory" ), "find", 0, 2027 new KAction( i18n( "&Lookup Addresses in Directory" ), "find", 0,
2028 this, SLOT( openLDAPDialog() ), actionCollection(), 2028 this, SLOT( openLDAPDialog() ), actionCollection(),
2029 "ldap_lookup" ); 2029 "ldap_lookup" );
2030 } 2030 }
2031#else //KAB_EMBEDDED 2031#else //KAB_EMBEDDED
2032 //qDebug("KABCore::initActions() LDAP has to be implemented"); 2032 //qDebug("KABCore::initActions() LDAP has to be implemented");
2033#endif //KAB_EMBEDDED 2033#endif //KAB_EMBEDDED
2034 2034
2035 2035
2036 mActionWhoAmI = new KAction( i18n( "Set Who Am I" ), "personal", 0, this, 2036 mActionWhoAmI = new KAction( i18n( "Set Who Am I" ), "personal", 0, this,
2037 SLOT( setWhoAmI() ), actionCollection(), 2037 SLOT( setWhoAmI() ), actionCollection(),
2038 "set_personal" ); 2038 "set_personal" );
2039 2039
2040 2040
2041 mActionCategories = new KAction( i18n( "Set Categories for Contacts..." ), 0, this, 2041 mActionCategories = new KAction( i18n( "Set Categories for Contacts..." ), 0, this,
2042 SLOT( setCategories() ), actionCollection(), 2042 SLOT( setCategories() ), actionCollection(),
2043 "edit_set_categories" ); 2043 "edit_set_categories" );
2044 mActionEditCategories = new KAction( i18n( "Edit Category List..." ), 0, this, 2044 mActionEditCategories = new KAction( i18n( "Edit Category List..." ), 0, this,
2045 SLOT( editCategories() ), actionCollection(), 2045 SLOT( editCategories() ), actionCollection(),
2046 "edit__categories" ); 2046 "edit__categories" );
2047 2047
2048 mActionRemoveVoice = new KAction( i18n( "Remove \"voice\"..." ), 0, this, 2048 mActionRemoveVoice = new KAction( i18n( "Remove \"voice\"..." ), 0, this,
2049 SLOT( removeVoice() ), actionCollection(), 2049 SLOT( removeVoice() ), actionCollection(),
2050 "remove_voice" ); 2050 "remove_voice" );
2051 mActionSetFormattedName = new KAction( i18n( "Set formatted name..." ), 0, this, 2051 mActionSetFormattedName = new KAction( i18n( "Set formatted name..." ), 0, this,
2052 SLOT( setFormattedName() ), actionCollection(), 2052 SLOT( setFormattedName() ), actionCollection(),
2053 "set_formatted" ); 2053 "set_formatted" );
2054 2054
2055 mActionManageCategories= new KAction( i18n( "Manage new categories..." ), 0, this, 2055 mActionManageCategories= new KAction( i18n( "Manage new categories..." ), 0, this,
2056 SLOT( manageCategories() ), actionCollection(), 2056 SLOT( manageCategories() ), actionCollection(),
2057 "remove_voice" ); 2057 "remove_voice" );
2058 2058
2059 2059
2060 mActionImportOL = new KAction( i18n( "Import from Outlook..." ), 0, this, 2060 mActionImportOL = new KAction( i18n( "Import from Outlook..." ), 0, this,
2061 SLOT( importFromOL() ), actionCollection(), 2061 SLOT( importFromOL() ), actionCollection(),
2062 "import_OL" ); 2062 "import_OL" );
2063#ifdef KAB_EMBEDDED 2063#ifdef KAB_EMBEDDED
2064 mActionLicence = new KAction( i18n( "Licence" ), 0, 2064 mActionLicence = new KAction( i18n( "Licence" ), 0,
2065 this, SLOT( showLicence() ), actionCollection(), 2065 this, SLOT( showLicence() ), actionCollection(),
2066 "licence_about_data" ); 2066 "licence_about_data" );
2067 mActionFaq = new KAction( i18n( "Faq" ), 0, 2067 mActionFaq = new KAction( i18n( "Faq" ), 0,
2068 this, SLOT( faq() ), actionCollection(), 2068 this, SLOT( faq() ), actionCollection(),
2069 "faq_about_data" ); 2069 "faq_about_data" );
2070 mActionWN = new KAction( i18n( "What's New?" ), 0, 2070 mActionWN = new KAction( i18n( "What's New?" ), 0,
2071 this, SLOT( whatsnew() ), actionCollection(), 2071 this, SLOT( whatsnew() ), actionCollection(),
2072 "wn" ); 2072 "wn" );
2073 mActionSyncHowto = new KAction( i18n( "Sync HowTo" ), 0, 2073 mActionSyncHowto = new KAction( i18n( "Sync HowTo" ), 0,
2074 this, SLOT( synchowto() ), actionCollection(), 2074 this, SLOT( synchowto() ), actionCollection(),
2075 "sync" ); 2075 "sync" );
2076 mActionKdeSyncHowto = new KAction( i18n( "Kde Sync HowTo" ), 0, 2076 mActionKdeSyncHowto = new KAction( i18n( "Kde Sync HowTo" ), 0,
2077 this, SLOT( kdesynchowto() ), actionCollection(), 2077 this, SLOT( kdesynchowto() ), actionCollection(),
2078 "kdesync" ); 2078 "kdesync" );
2079 mActionMultiSyncHowto = new KAction( i18n( "Multi Sync HowTo" ), 0, 2079 mActionMultiSyncHowto = new KAction( i18n( "Multi Sync HowTo" ), 0,
2080 this, SLOT( multisynchowto() ), actionCollection(), 2080 this, SLOT( multisynchowto() ), actionCollection(),
2081 "multisync" ); 2081 "multisync" );
2082 2082
2083 mActionAboutKAddressbook = new KAction( i18n( "&About KAddressBook" ), "kaddressbook2", 0, 2083 mActionAboutKAddressbook = new KAction( i18n( "&About KAddressBook" ), "kaddressbook2", 0,
2084 this, SLOT( createAboutData() ), actionCollection(), 2084 this, SLOT( createAboutData() ), actionCollection(),
2085 "kaddressbook_about_data" ); 2085 "kaddressbook_about_data" );
2086#endif //KAB_EMBEDDED 2086#endif //KAB_EMBEDDED
2087 2087
2088 clipboardDataChanged(); 2088 clipboardDataChanged();
2089 connect( UndoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) ); 2089 connect( UndoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) );
2090 connect( RedoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) ); 2090 connect( RedoStack::instance(), SIGNAL( changed() ), SLOT( updateActionMenu() ) );
2091} 2091}
2092 2092
2093//US we need this function, to plug all actions into the correct menues. 2093//US we need this function, to plug all actions into the correct menues.
2094// KDE uses a XML format to plug the actions, but we work her without this overhead. 2094// KDE uses a XML format to plug the actions, but we work her without this overhead.
2095void KABCore::addActionsManually() 2095void KABCore::addActionsManually()
2096{ 2096{
2097//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart); 2097//US qDebug("KABCore::initActions(): mIsPart %i", mIsPart);
2098 2098
2099#ifdef KAB_EMBEDDED 2099#ifdef KAB_EMBEDDED
2100 QPopupMenu *fileMenu = new QPopupMenu( this ); 2100 QPopupMenu *fileMenu = new QPopupMenu( this );
2101 QPopupMenu *editMenu = new QPopupMenu( this ); 2101 QPopupMenu *editMenu = new QPopupMenu( this );
2102 QPopupMenu *helpMenu = new QPopupMenu( this ); 2102 QPopupMenu *helpMenu = new QPopupMenu( this );
2103 2103
2104 KToolBar* tb = mMainWindow->toolBar(); 2104 KToolBar* tb = mMainWindow->toolBar();
2105 2105
2106#ifndef DESKTOP_VERSION 2106#ifndef DESKTOP_VERSION
2107 if ( KABPrefs::instance()->mFullMenuBarVisible ) { 2107 if ( KABPrefs::instance()->mFullMenuBarVisible ) {
2108#endif 2108#endif
2109 QMenuBar* mb = mMainWindow->menuBar(); 2109 QMenuBar* mb = mMainWindow->menuBar();
2110 2110
2111 //US setup menubar. 2111 //US setup menubar.
2112 //Disable the following block if you do not want to have a menubar. 2112 //Disable the following block if you do not want to have a menubar.
2113 mb->insertItem( i18n("&File"), fileMenu ); 2113 mb->insertItem( i18n("&File"), fileMenu );
2114 mb->insertItem( i18n("&Edit"), editMenu ); 2114 mb->insertItem( i18n("&Edit"), editMenu );
2115 mb->insertItem( i18n("&View"), viewMenu ); 2115 mb->insertItem( i18n("&View"), viewMenu );
2116 mb->insertItem( i18n("&Settings"), settingsMenu ); 2116 mb->insertItem( i18n("&Settings"), settingsMenu );
2117#ifdef DESKTOP_VERSION 2117#ifdef DESKTOP_VERSION
2118 mb->insertItem( i18n("Synchronize"), syncMenu ); 2118 mb->insertItem( i18n("Synchronize"), syncMenu );
2119#else 2119#else
2120 mb->insertItem( i18n("Sync"), syncMenu ); 2120 mb->insertItem( i18n("Sync"), syncMenu );
2121#endif 2121#endif
2122 //mb->insertItem( i18n("&Change"), changeMenu ); 2122 //mb->insertItem( i18n("&Change"), changeMenu );
2123 mb->insertItem( i18n("&Help"), helpMenu ); 2123 mb->insertItem( i18n("&Help"), helpMenu );
2124 mIncSearchWidget = new IncSearchWidget( tb ); 2124 mIncSearchWidget = new IncSearchWidget( tb );
2125 // tb->insertWidget(-1, 0, mIncSearchWidget); 2125 // tb->insertWidget(-1, 0, mIncSearchWidget);
2126#ifndef DESKTOP_VERSION 2126#ifndef DESKTOP_VERSION
2127 } else { 2127 } else {
2128 //US setup toolbar 2128 //US setup toolbar
2129 QPEMenuBar *menuBarTB = new QPEMenuBar( tb ); 2129 QPEMenuBar *menuBarTB = new QPEMenuBar( tb );
2130 QPopupMenu *popupBarTB = new QPopupMenu( this ); 2130 QPopupMenu *popupBarTB = new QPopupMenu( this );
2131 menuBarTB->insertItem( "ME", popupBarTB); 2131 menuBarTB->insertItem( "ME", popupBarTB);
2132 tb->insertWidget(-1, 0, menuBarTB); 2132 tb->insertWidget(-1, 0, menuBarTB);
2133 mIncSearchWidget = new IncSearchWidget( tb ); 2133 mIncSearchWidget = new IncSearchWidget( tb );
2134 2134
2135 tb->enableMoving(false); 2135 tb->enableMoving(false);
2136 popupBarTB->insertItem( i18n("&File"), fileMenu ); 2136 popupBarTB->insertItem( i18n("&File"), fileMenu );
2137 popupBarTB->insertItem( i18n("&Edit"), editMenu ); 2137 popupBarTB->insertItem( i18n("&Edit"), editMenu );
2138 popupBarTB->insertItem( i18n("&View"), viewMenu ); 2138 popupBarTB->insertItem( i18n("&View"), viewMenu );
2139 popupBarTB->insertItem( i18n("&Settings"), settingsMenu ); 2139 popupBarTB->insertItem( i18n("&Settings"), settingsMenu );
2140 popupBarTB->insertItem( i18n("Synchronize"), syncMenu ); 2140 popupBarTB->insertItem( i18n("Synchronize"), syncMenu );
2141 mViewManager->getFilterAction()->plug ( popupBarTB); 2141 mViewManager->getFilterAction()->plug ( popupBarTB);
2142 //popupBarTB->insertItem( i18n("&Change selected"), changeMenu ); 2142 //popupBarTB->insertItem( i18n("&Change selected"), changeMenu );
2143 popupBarTB->insertItem( i18n("&Help"), helpMenu ); 2143 popupBarTB->insertItem( i18n("&Help"), helpMenu );
2144 if (QApplication::desktop()->width() > 320 ) { 2144 if (QApplication::desktop()->width() > 320 ) {
2145 // mViewManager->getFilterAction()->plug ( tb); 2145 // mViewManager->getFilterAction()->plug ( tb);
2146 } 2146 }
2147 } 2147 }
2148#endif 2148#endif
2149 // mActionQuit->plug ( mMainWindow->toolBar()); 2149 // mActionQuit->plug ( mMainWindow->toolBar());
2150 2150
2151 2151
2152 2152
2153 //US Now connect the actions with the menue entries. 2153 //US Now connect the actions with the menue entries.
2154#ifdef DESKTOP_VERSION 2154#ifdef DESKTOP_VERSION
2155 mActionPrint->plug( fileMenu ); 2155 mActionPrint->plug( fileMenu );
2156 mActionPrintDetails->plug( fileMenu ); 2156 mActionPrintDetails->plug( fileMenu );
2157 fileMenu->insertSeparator(); 2157 fileMenu->insertSeparator();
2158#endif 2158#endif
2159 mActionMail->plug( fileMenu ); 2159 mActionMail->plug( fileMenu );
2160 fileMenu->insertSeparator(); 2160 fileMenu->insertSeparator();
2161 2161
2162 mActionNewContact->plug( fileMenu ); 2162 mActionNewContact->plug( fileMenu );
2163 mActionNewContact->plug( tb ); 2163 mActionNewContact->plug( tb );
2164 2164
2165 mActionEditAddressee->plug( fileMenu ); 2165 mActionEditAddressee->plug( fileMenu );
2166 // if ((KGlobal::getDesktopSize() > KGlobal::Small ) || 2166 // if ((KGlobal::getDesktopSize() > KGlobal::Small ) ||
2167 // (!KABPrefs::instance()->mMultipleViewsAtOnce )) 2167 // (!KABPrefs::instance()->mMultipleViewsAtOnce ))
2168 mActionEditAddressee->plug( tb ); 2168 mActionEditAddressee->plug( tb );
2169 2169
2170 fileMenu->insertSeparator(); 2170 fileMenu->insertSeparator();
2171 mActionSave->plug( fileMenu ); 2171 mActionSave->plug( fileMenu );
2172 fileMenu->insertItem( "&Import", ImportMenu ); 2172 fileMenu->insertItem( "&Import", ImportMenu );
2173 fileMenu->insertItem( "&Export", ExportMenu ); 2173 fileMenu->insertItem( "&Export", ExportMenu );
2174 fileMenu->insertItem( i18n("&Change"), changeMenu ); 2174 fileMenu->insertItem( i18n("&Change"), changeMenu );
2175#ifndef DESKTOP_VERSION 2175#ifndef DESKTOP_VERSION
2176 if ( Ir::supported() ) fileMenu->insertItem( i18n("&Beam"), beamMenu ); 2176 if ( Ir::supported() ) fileMenu->insertItem( i18n("&Beam"), beamMenu );
2177#endif 2177#endif
2178#if 0 2178#if 0
2179 // PENDING fix MailVCard 2179 // PENDING fix MailVCard
2180 fileMenu->insertSeparator(); 2180 fileMenu->insertSeparator();
2181 mActionMailVCard->plug( fileMenu ); 2181 mActionMailVCard->plug( fileMenu );
2182#endif 2182#endif
2183#ifndef DESKTOP_VERSION 2183#ifndef DESKTOP_VERSION
2184 if ( Ir::supported() ) mActionBR->plug( beamMenu ); 2184 if ( Ir::supported() ) mActionBR->plug( beamMenu );
2185 if ( Ir::supported() ) mActionBeamVCard->plug( beamMenu ); 2185 if ( Ir::supported() ) mActionBeamVCard->plug( beamMenu );
2186 if ( Ir::supported() ) mActionBeam->plug( beamMenu ); 2186 if ( Ir::supported() ) mActionBeam->plug( beamMenu );
2187#endif 2187#endif
2188 fileMenu->insertSeparator(); 2188 fileMenu->insertSeparator();
2189 mActionQuit->plug( fileMenu ); 2189 mActionQuit->plug( fileMenu );
2190#ifdef _OL_IMPORT_ 2190#ifdef _OL_IMPORT_
2191 mActionImportOL->plug( ImportMenu ); 2191 mActionImportOL->plug( ImportMenu );
2192#endif 2192#endif
2193 // edit menu 2193 // edit menu
2194 mActionUndo->plug( editMenu ); 2194 mActionUndo->plug( editMenu );
2195 mActionRedo->plug( editMenu ); 2195 mActionRedo->plug( editMenu );
2196 editMenu->insertSeparator(); 2196 editMenu->insertSeparator();
2197 mActionCut->plug( editMenu ); 2197 mActionCut->plug( editMenu );
2198 mActionCopy->plug( editMenu ); 2198 mActionCopy->plug( editMenu );
2199 mActionPaste->plug( editMenu ); 2199 mActionPaste->plug( editMenu );
2200 mActionDelete->plug( editMenu ); 2200 mActionDelete->plug( editMenu );
2201 editMenu->insertSeparator(); 2201 editMenu->insertSeparator();
2202 mActionSelectAll->plug( editMenu ); 2202 mActionSelectAll->plug( editMenu );
2203 2203
2204 mActionSetFormattedName->plug( changeMenu ); 2204 mActionSetFormattedName->plug( changeMenu );
2205 mActionRemoveVoice->plug( changeMenu ); 2205 mActionRemoveVoice->plug( changeMenu );
2206 // settings menu 2206 // settings menu
2207//US special menuentry to configure the addressbook resources. On KDE 2207//US special menuentry to configure the addressbook resources. On KDE
2208// you do that through the control center !!! 2208// you do that through the control center !!!
2209 mActionConfigResources->plug( settingsMenu ); 2209 mActionConfigResources->plug( settingsMenu );
2210 settingsMenu->insertSeparator(); 2210 settingsMenu->insertSeparator();
2211 2211
2212 mActionConfigKAddressbook->plug( settingsMenu ); 2212 mActionConfigKAddressbook->plug( settingsMenu );
2213 2213
2214 if ( mIsPart ) { 2214 if ( mIsPart ) {
2215 //US not implemented yet 2215 //US not implemented yet
2216 //mActionConfigShortcuts->plug( settingsMenu ); 2216 //mActionConfigShortcuts->plug( settingsMenu );
2217 //mActionConfigureToolbars->plug( settingsMenu ); 2217 //mActionConfigureToolbars->plug( settingsMenu );
2218 2218
2219 } else { 2219 } else {
2220 //US not implemented yet 2220 //US not implemented yet
2221 //mActionKeyBindings->plug( settingsMenu ); 2221 //mActionKeyBindings->plug( settingsMenu );
2222 } 2222 }
2223 2223
2224 settingsMenu->insertSeparator(); 2224 settingsMenu->insertSeparator();
2225 2225
2226 mActionJumpBar->plug( settingsMenu ); 2226 mActionJumpBar->plug( settingsMenu );
2227 mActionDetails->plug( settingsMenu ); 2227 mActionDetails->plug( settingsMenu );
2228 //if (!KABPrefs::instance()->mMultipleViewsAtOnce || KGlobal::getDesktopSize() == KGlobal::Desktop ) 2228 //if (!KABPrefs::instance()->mMultipleViewsAtOnce || KGlobal::getDesktopSize() == KGlobal::Desktop )
2229 mActionDetails->plug( tb ); 2229 mActionDetails->plug( tb );
2230 settingsMenu->insertSeparator(); 2230 settingsMenu->insertSeparator();
2231#ifndef DESKTOP_VERSION 2231#ifndef DESKTOP_VERSION
2232 if ( Ir::supported() ) mActionBR->plug(settingsMenu ); 2232 if ( Ir::supported() ) mActionBR->plug(settingsMenu );
2233 settingsMenu->insertSeparator(); 2233 settingsMenu->insertSeparator();
2234#endif 2234#endif
2235 2235
2236 mActionWhoAmI->plug( settingsMenu ); 2236 mActionWhoAmI->plug( settingsMenu );
2237 mActionEditCategories->plug( settingsMenu ); 2237 mActionEditCategories->plug( settingsMenu );
2238 mActionEditCategories->plug( changeMenu ); 2238 mActionEditCategories->plug( changeMenu );
2239 mActionCategories->plug( changeMenu ); 2239 mActionCategories->plug( changeMenu );
2240 mActionManageCategories->plug( changeMenu ); 2240 mActionManageCategories->plug( changeMenu );
2241 2241
2242 mActionCategories->plug( settingsMenu ); 2242 mActionCategories->plug( settingsMenu );
2243 mActionManageCategories->plug( settingsMenu ); 2243 mActionManageCategories->plug( settingsMenu );
2244 2244
2245 2245
2246 mActionWN->plug( helpMenu ); 2246 mActionWN->plug( helpMenu );
2247 mActionSyncHowto->plug( helpMenu ); 2247 mActionSyncHowto->plug( helpMenu );
2248 mActionKdeSyncHowto->plug( helpMenu ); 2248 mActionKdeSyncHowto->plug( helpMenu );
2249 mActionMultiSyncHowto->plug( helpMenu ); 2249 mActionMultiSyncHowto->plug( helpMenu );
2250 mActionFaq->plug( helpMenu ); 2250 mActionFaq->plug( helpMenu );
2251 mActionLicence->plug( helpMenu ); 2251 mActionLicence->plug( helpMenu );
2252 mActionAboutKAddressbook->plug( helpMenu ); 2252 mActionAboutKAddressbook->plug( helpMenu );
2253 2253
2254 if (KGlobal::getDesktopSize() > KGlobal::Small ) { 2254 if (KGlobal::getDesktopSize() > KGlobal::Small ) {
2255 2255
2256 mActionSave->plug( tb ); 2256 mActionSave->plug( tb );
2257 mViewManager->getFilterAction()->plug ( tb); 2257 mViewManager->getFilterAction()->plug ( tb);
2258 //LR hide filteraction on started in 480x640 2258 //LR hide filteraction on started in 480x640
2259 if (QApplication::desktop()->width() == 480 ) { 2259 if (QApplication::desktop()->width() == 480 ) {
2260 mViewManager->getFilterAction()->setComboWidth( 0 ); 2260 mViewManager->getFilterAction()->setComboWidth( 0 );
2261 } 2261 }
2262 mActionUndo->plug( tb ); 2262 mActionUndo->plug( tb );
2263 mActionDelete->plug( tb ); 2263 mActionDelete->plug( tb );
2264 mActionRedo->plug( tb ); 2264 mActionRedo->plug( tb );
2265 } else { 2265 } else {
2266 mActionSave->plug( tb ); 2266 mActionSave->plug( tb );
2267 tb->enableMoving(false); 2267 tb->enableMoving(false);
2268 } 2268 }
2269 //mActionQuit->plug ( tb ); 2269 //mActionQuit->plug ( tb );
2270 // tb->insertWidget(-1, 0, mIncSearchWidget, 6); 2270 // tb->insertWidget(-1, 0, mIncSearchWidget, 6);
2271 2271
2272 //US link the searchwidget first to this. 2272 //US link the searchwidget first to this.
2273 // The real linkage to the toolbar happens later. 2273 // The real linkage to the toolbar happens later.
2274//US mIncSearchWidget->reparent(tb, 0, QPoint(50,0), TRUE); 2274//US mIncSearchWidget->reparent(tb, 0, QPoint(50,0), TRUE);
2275//US tb->insertItem( mIncSearchWidget ); 2275//US tb->insertItem( mIncSearchWidget );
2276/*US 2276/*US
2277 mIncSearchWidget = new IncSearchWidget( tb ); 2277 mIncSearchWidget = new IncSearchWidget( tb );
2278 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ), 2278 connect( mIncSearchWidget, SIGNAL( doSearch( const QString& ) ),
2279 SLOT( incrementalSearch( const QString& ) ) ); 2279 SLOT( incrementalSearch( const QString& ) ) );
2280 2280
2281 mJumpButtonBar = new JumpButtonBar( this, this ); 2281 mJumpButtonBar = new JumpButtonBar( this, this );
2282 2282
2283//US topLayout->addWidget( mJumpButtonBar ); 2283//US topLayout->addWidget( mJumpButtonBar );
2284 this->layout()->add( mJumpButtonBar ); 2284 this->layout()->add( mJumpButtonBar );
2285*/ 2285*/
2286 2286
2287#endif //KAB_EMBEDDED 2287#endif //KAB_EMBEDDED
2288 2288
2289 mActionExport2phone->plug( ExportMenu ); 2289 mActionExport2phone->plug( ExportMenu );
2290 connect ( syncMenu, SIGNAL( activated ( int ) ), syncManager, SLOT (slotSyncMenu( int ) ) ); 2290 connect ( syncMenu, SIGNAL( activated ( int ) ), syncManager, SLOT (slotSyncMenu( int ) ) );
2291 syncManager->fillSyncMenu(); 2291 syncManager->fillSyncMenu();
2292 2292
2293} 2293}
2294void KABCore::showLicence() 2294void KABCore::showLicence()
2295{ 2295{
2296 KApplication::showLicence(); 2296 KApplication::showLicence();
2297} 2297}
2298 2298
2299void KABCore::manageCategories( ) 2299void KABCore::manageCategories( )
2300{ 2300{
2301 KABCatPrefs* cp = new KABCatPrefs(); 2301 KABCatPrefs* cp = new KABCatPrefs();
2302 cp->show(); 2302 cp->show();
2303 int w =cp->sizeHint().width() ; 2303 int w =cp->sizeHint().width() ;
2304 int h = cp->sizeHint().height() ; 2304 int h = cp->sizeHint().height() ;
2305 int dw = QApplication::desktop()->width(); 2305 int dw = QApplication::desktop()->width();
2306 int dh = QApplication::desktop()->height(); 2306 int dh = QApplication::desktop()->height();
2307 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2307 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2308 if ( !cp->exec() ) { 2308 if ( !cp->exec() ) {
2309 delete cp; 2309 delete cp;
2310 return; 2310 return;
2311 } 2311 }
2312 int count = 0; 2312 int count = 0;
2313 int cc = 0; 2313 int cc = 0;
2314 message( i18n("Please wait, processing categories...")); 2314 message( i18n("Please wait, processing categories..."));
2315 if ( cp->addCat() ) { 2315 if ( cp->addCat() ) {
2316 KABC::AddressBook::Iterator it; 2316 KABC::AddressBook::Iterator it;
2317 QStringList catList = KABPrefs::instance()->mCustomCategories; 2317 QStringList catList = KABPrefs::instance()->mCustomCategories;
2318 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { 2318 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) {
2319 ++cc; 2319 ++cc;
2320 if ( cc %10 == 0) 2320 if ( cc %10 == 0)
2321 message(i18n("Processing contact #%1").arg(cc)); 2321 message(i18n("Processing contact #%1").arg(cc));
2322 QStringList catIncList = (*it).categories(); 2322 QStringList catIncList = (*it).categories();
2323 int i; 2323 int i;
2324 for( i = 0; i< catIncList.count(); ++i ) { 2324 for( i = 0; i< catIncList.count(); ++i ) {
2325 if ( !catList.contains (catIncList[i])) { 2325 if ( !catList.contains (catIncList[i])) {
2326 catList.append( catIncList[i] ); 2326 catList.append( catIncList[i] );
2327 //qDebug("add cat %s ", catIncList[i].latin1()); 2327 //qDebug("add cat %s ", catIncList[i].latin1());
2328 ++count; 2328 ++count;
2329 } 2329 }
2330 } 2330 }
2331 } 2331 }
2332 catList.sort(); 2332 catList.sort();
2333 KABPrefs::instance()->mCustomCategories = catList; 2333 KABPrefs::instance()->mCustomCategories = catList;
2334 KABPrefs::instance()->writeConfig(); 2334 KABPrefs::instance()->writeConfig();
2335 message(QString::number( count )+ i18n(" categories added to list! ")); 2335 message(QString::number( count )+ i18n(" categories added to list! "));
2336 } else { 2336 } else {
2337 QStringList catList = KABPrefs::instance()->mCustomCategories; 2337 QStringList catList = KABPrefs::instance()->mCustomCategories;
2338 QStringList catIncList; 2338 QStringList catIncList;
2339 QStringList newCatList; 2339 QStringList newCatList;
2340 KABC::AddressBook::Iterator it; 2340 KABC::AddressBook::Iterator it;
2341 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { 2341 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) {
2342 ++cc; 2342 ++cc;
2343 if ( cc %10 == 0) 2343 if ( cc %10 == 0)
2344 message(i18n("Processing contact #%1").arg(cc)); 2344 message(i18n("Processing contact #%1").arg(cc));
2345 QStringList catIncList = (*it).categories(); 2345 QStringList catIncList = (*it).categories();
2346 int i; 2346 int i;
2347 if ( catIncList.count() ) { 2347 if ( catIncList.count() ) {
2348 newCatList.clear(); 2348 newCatList.clear();
2349 for( i = 0; i< catIncList.count(); ++i ) { 2349 for( i = 0; i< catIncList.count(); ++i ) {
2350 if ( catList.contains (catIncList[i])) { 2350 if ( catList.contains (catIncList[i])) {
2351 newCatList.append( catIncList[i] ); 2351 newCatList.append( catIncList[i] );
2352 } 2352 }
2353 } 2353 }
2354 newCatList.sort(); 2354 newCatList.sort();
2355 (*it).setCategories( newCatList ); 2355 (*it).setCategories( newCatList );
2356 mAddressBook->insertAddressee( (*it) ); 2356 mAddressBook->insertAddressee( (*it) );
2357 } 2357 }
2358 } 2358 }
2359 setModified( true ); 2359 setModified( true );
2360 mViewManager->refreshView(); 2360 mViewManager->refreshView();
2361 message( i18n("Removing categories done!")); 2361 message( i18n("Removing categories done!"));
2362 } 2362 }
2363 delete cp; 2363 delete cp;
2364} 2364}
2365void KABCore::removeVoice() 2365void KABCore::removeVoice()
2366{ 2366{
2367 if ( KMessageBox::questionYesNo( this, i18n("After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as \"other\".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?") ) == KMessageBox::No ) 2367 if ( KMessageBox::questionYesNo( this, i18n("After importing, phone numbers\nmay have two or more types.\n(E.g. work+voice)\nThese numbers are shown as \"other\".\nClick Yes to remove the voice type\nfrom numbers with more than one type.\n\nRemove voice type?") ) == KMessageBox::No )
2368 return; 2368 return;
2369 XXPortSelectDialog dlg( this, false, this ); 2369 XXPortSelectDialog dlg( this, false, this );
2370 if ( !dlg.exec() ) 2370 if ( !dlg.exec() )
2371 return; 2371 return;
2372 mAddressBook->setUntagged(); 2372 mAddressBook->setUntagged();
2373 dlg.tagSelected(); 2373 dlg.tagSelected();
2374 message(i18n("Removing voice..."), false ); 2374 message(i18n("Removing voice..."), false );
2375 KABC::AddressBook::Iterator it; 2375 KABC::AddressBook::Iterator it;
2376 for ( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { 2376 for ( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) {
2377 if ( (*it).tagged() ) { 2377 if ( (*it).tagged() ) {
2378 (*it).removeVoice(); 2378 (*it).removeVoice();
2379 } 2379 }
2380 } 2380 }
2381 message(i18n("Refreshing view...") ); 2381 message(i18n("Refreshing view...") );
2382 qApp->processEvents(); 2382 qApp->processEvents();
2383 mViewManager->refreshView( "" ); 2383 mViewManager->refreshView( "" );
2384 Addressee add; 2384 Addressee add;
2385 mDetails->setAddressee( add ); 2385 mDetails->setAddressee( add );
2386 message(i18n("Remove voice completed!") ); 2386 message(i18n("Remove voice completed!") );
2387 2387
2388 2388
2389 2389
2390} 2390}
2391 2391
2392void KABCore::setFormattedName() 2392void KABCore::setFormattedName()
2393{ 2393{
2394 KABFormatPrefs setpref; 2394 KABFormatPrefs setpref;
2395 if ( !setpref.exec() ) { 2395 if ( !setpref.exec() ) {
2396 return; 2396 return;
2397 } 2397 }
2398 XXPortSelectDialog dlg( this, false, this ); 2398 XXPortSelectDialog dlg( this, false, this );
2399 if ( !dlg.exec() ) 2399 if ( !dlg.exec() )
2400 return; 2400 return;
2401 mAddressBook->setUntagged(); 2401 mAddressBook->setUntagged();
2402 dlg.tagSelected(); 2402 dlg.tagSelected();
2403 int count = 0; 2403 int count = 0;
2404 KABC::AddressBook::Iterator it; 2404 KABC::AddressBook::Iterator it;
2405 for ( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { 2405 for ( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) {
2406 if ( (*it).tagged() ) { 2406 if ( (*it).tagged() ) {
2407 ++count; 2407 ++count;
2408 if ( count %10 == 0 ) 2408 if ( count %10 == 0 )
2409 message(i18n("Changing contact #%1").arg( count ) ); 2409 message(i18n("Changing contact #%1").arg( count ) );
2410 qApp->processEvents(); 2410 qApp->processEvents();
2411 QString fName; 2411 QString fName;
2412 if ( setpref.simple->isChecked() ) 2412 if ( setpref.simple->isChecked() )
2413 fName = NameEditDialog::formattedName( (*it), NameEditDialog::SimpleName ); 2413 fName = NameEditDialog::formattedName( (*it), NameEditDialog::SimpleName );
2414 else if ( setpref.full->isChecked() ) 2414 else if ( setpref.full->isChecked() )
2415 fName = NameEditDialog::formattedName( (*it), NameEditDialog::FullName ); 2415 fName = NameEditDialog::formattedName( (*it), NameEditDialog::FullName );
2416 else if ( setpref.reverse->isChecked() ) 2416 else if ( setpref.reverse->isChecked() )
2417 fName = NameEditDialog::formattedName( (*it), NameEditDialog::ReverseName ); 2417 fName = NameEditDialog::formattedName( (*it), NameEditDialog::ReverseName );
2418 else 2418 else
2419 fName = (*it).organization(); 2419 fName = (*it).organization();
2420 if ( setpref.setCompany->isChecked() ) 2420 if ( setpref.setCompany->isChecked() )
2421 if ( fName.isEmpty() || fName =="," ) 2421 if ( fName.isEmpty() || fName =="," )
2422 fName = (*it).organization(); 2422 fName = (*it).organization();
2423 (*it).setFormattedName( fName ); 2423 (*it).setFormattedName( fName );
2424 } 2424 }
2425 } 2425 }
2426 message(i18n("Refreshing view...") ); 2426 message(i18n("Refreshing view...") );
2427 qApp->processEvents(); 2427 qApp->processEvents();
2428 mViewManager->refreshView( "" ); 2428 mViewManager->refreshView( "" );
2429 Addressee add; 2429 Addressee add;
2430 mDetails->setAddressee( add ); 2430 mDetails->setAddressee( add );
2431 message(i18n("Setting formatted name completed!") ); 2431 message(i18n("Setting formatted name completed!") );
2432} 2432}
2433 2433
2434void KABCore::clipboardDataChanged() 2434void KABCore::clipboardDataChanged()
2435{ 2435{
2436 2436
2437 if ( mReadWrite ) 2437 if ( mReadWrite )
2438 mActionPaste->setEnabled( !QApplication::clipboard()->text().isEmpty() ); 2438 mActionPaste->setEnabled( !QApplication::clipboard()->text().isEmpty() );
2439 2439
2440} 2440}
2441 2441
2442void KABCore::updateActionMenu() 2442void KABCore::updateActionMenu()
2443{ 2443{
2444 UndoStack *undo = UndoStack::instance(); 2444 UndoStack *undo = UndoStack::instance();
2445 RedoStack *redo = RedoStack::instance(); 2445 RedoStack *redo = RedoStack::instance();
2446 2446
2447 if ( undo->isEmpty() ) 2447 if ( undo->isEmpty() )
2448 mActionUndo->setText( i18n( "Undo" ) ); 2448 mActionUndo->setText( i18n( "Undo" ) );
2449 else 2449 else
2450 mActionUndo->setText( i18n( "Undo %1" ).arg( undo->top()->name() ) ); 2450 mActionUndo->setText( i18n( "Undo %1" ).arg( undo->top()->name() ) );
2451 2451
2452 mActionUndo->setEnabled( !undo->isEmpty() ); 2452 mActionUndo->setEnabled( !undo->isEmpty() );
2453 2453
2454 if ( !redo->top() ) 2454 if ( !redo->top() )
2455 mActionRedo->setText( i18n( "Redo" ) ); 2455 mActionRedo->setText( i18n( "Redo" ) );
2456 else 2456 else
2457 mActionRedo->setText( i18n( "Redo %1" ).arg( redo->top()->name() ) ); 2457 mActionRedo->setText( i18n( "Redo %1" ).arg( redo->top()->name() ) );
2458 2458
2459 mActionRedo->setEnabled( !redo->isEmpty() ); 2459 mActionRedo->setEnabled( !redo->isEmpty() );
2460} 2460}
2461 2461
2462void KABCore::configureKeyBindings() 2462void KABCore::configureKeyBindings()
2463{ 2463{
2464#ifndef KAB_EMBEDDED 2464#ifndef KAB_EMBEDDED
2465 KKeyDialog::configure( actionCollection(), true ); 2465 KKeyDialog::configure( actionCollection(), true );
2466#else //KAB_EMBEDDED 2466#else //KAB_EMBEDDED
2467 qDebug("KABCore::configureKeyBindings() not implemented"); 2467 qDebug("KABCore::configureKeyBindings() not implemented");
2468#endif //KAB_EMBEDDED 2468#endif //KAB_EMBEDDED
2469} 2469}
2470 2470
2471#ifdef KAB_EMBEDDED 2471#ifdef KAB_EMBEDDED
2472void KABCore::configureResources() 2472void KABCore::configureResources()
2473{ 2473{
2474 KRES::KCMKResources dlg( this, "" , 0 ); 2474 KRES::KCMKResources dlg( this, "" , 0 );
2475 2475
2476 if ( !dlg.exec() ) 2476 if ( !dlg.exec() )
2477 return; 2477 return;
2478 KMessageBox::information( this, i18n("Please restart to get the \nchanged resources (re)loaded!\n") ); 2478 KMessageBox::information( this, i18n("Please restart to get the \nchanged resources (re)loaded!\n") );
2479} 2479}
2480#endif //KAB_EMBEDDED 2480#endif //KAB_EMBEDDED
2481 2481
2482 2482
2483/* this method will be called through the QCop interface from Ko/Pi to select addresses 2483/* this method will be called through the QCop interface from Ko/Pi to select addresses
2484 * for the attendees list of an event. 2484 * for the attendees list of an event.
2485 */ 2485 */
2486void KABCore::requestForNameEmailUidList(const QString& sourceChannel, const QString& uid) 2486void KABCore::requestForNameEmailUidList(const QString& sourceChannel, const QString& uid)
2487{ 2487{
2488 QStringList nameList; 2488 QStringList nameList;
2489 QStringList emailList; 2489 QStringList emailList;
2490 QStringList uidList; 2490 QStringList uidList;
2491 2491
2492 KABC::Addressee::List list = KABC::AddresseeDialog::getAddressees(this); 2492 KABC::Addressee::List list = KABC::AddresseeDialog::getAddressees(this);
2493 uint i=0; 2493 uint i=0;
2494 for (i=0; i < list.count(); i++) 2494 for (i=0; i < list.count(); i++)
2495 { 2495 {
2496 nameList.append(list[i].realName()); 2496 nameList.append(list[i].realName());
2497 emailList.append(list[i].preferredEmail()); 2497 emailList.append(list[i].preferredEmail());
2498 uidList.append(list[i].uid()); 2498 uidList.append(list[i].uid());
2499 } 2499 }
2500 2500 //qDebug("%s %s ", sourceChannel.latin1(), uid.latin1());
2501 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI(sourceChannel, uid, nameList, emailList, uidList); 2501 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI(sourceChannel, uid, nameList, emailList, uidList);
2502 2502
2503} 2503}
2504 2504
2505/* this method will be called through the QCop interface from Ko/Pi to select birthdays 2505/* this method will be called through the QCop interface from Ko/Pi to select birthdays
2506 * to put them into the calendar. 2506 * to put them into the calendar.
2507 */ 2507 */
2508void KABCore::requestForBirthdayList(const QString& sourceChannel, const QString& uid) 2508void KABCore::requestForBirthdayList(const QString& sourceChannel, const QString& uid)
2509{ 2509{
2510 // qDebug("KABCore::requestForBirthdayList"); 2510 // qDebug("KABCore::requestForBirthdayList");
2511 QStringList birthdayList; 2511 QStringList birthdayList;
2512 QStringList anniversaryList; 2512 QStringList anniversaryList;
2513 QStringList realNameList; 2513 QStringList realNameList;
2514 QStringList preferredEmailList; 2514 QStringList preferredEmailList;
2515 QStringList assembledNameList; 2515 QStringList assembledNameList;
2516 QStringList uidList; 2516 QStringList uidList;
2517 2517
2518 KABC::AddressBook::Iterator it; 2518 KABC::AddressBook::Iterator it;
2519 2519
2520 int count = 0; 2520 int count = 0;
2521 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { 2521 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) {
2522 ++count; 2522 ++count;
2523 } 2523 }
2524 QProgressBar bar(count,0 ); 2524 QProgressBar bar(count,0 );
2525 int w = 300; 2525 int w = 300;
2526 if ( QApplication::desktop()->width() < 320 ) 2526 if ( QApplication::desktop()->width() < 320 )
2527 w = 220; 2527 w = 220;
2528 int h = bar.sizeHint().height() ; 2528 int h = bar.sizeHint().height() ;
2529 int dw = QApplication::desktop()->width(); 2529 int dw = QApplication::desktop()->width();
2530 int dh = QApplication::desktop()->height(); 2530 int dh = QApplication::desktop()->height();
2531 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2531 bar.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2532 bar.show(); 2532 bar.show();
2533 bar.setCaption (i18n("Collecting birthdays - close to abort!") ); 2533 bar.setCaption (i18n("Collecting birthdays - close to abort!") );
2534 qApp->processEvents(); 2534 qApp->processEvents();
2535 2535
2536 QDate bday; 2536 QDate bday;
2537 QString anni; 2537 QString anni;
2538 QString formattedbday; 2538 QString formattedbday;
2539 2539
2540 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) 2540 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it )
2541 { 2541 {
2542 if ( ! bar.isVisible() ) 2542 if ( ! bar.isVisible() )
2543 return; 2543 return;
2544 bar.setProgress( count++ ); 2544 bar.setProgress( count++ );
2545 qApp->processEvents(); 2545 qApp->processEvents();
2546 bday = (*it).birthday().date(); 2546 bday = (*it).birthday().date();
2547 anni = (*it).custom("KADDRESSBOOK", "X-Anniversary" ); 2547 anni = (*it).custom("KADDRESSBOOK", "X-Anniversary" );
2548 2548
2549 if ( bday.isValid() || !anni.isEmpty()) 2549 if ( bday.isValid() || !anni.isEmpty())
2550 { 2550 {
2551 if (bday.isValid()) 2551 if (bday.isValid())
2552 formattedbday = KGlobal::locale()->formatDate(bday, true, KLocale::ISODate); 2552 formattedbday = KGlobal::locale()->formatDate(bday, true, KLocale::ISODate);
2553 else 2553 else
2554 formattedbday = "NOTVALID"; 2554 formattedbday = "NOTVALID";
2555 if (anni.isEmpty()) 2555 if (anni.isEmpty())
2556 anni = "INVALID"; 2556 anni = "INVALID";
2557 2557
2558 birthdayList.append(formattedbday); 2558 birthdayList.append(formattedbday);
2559 anniversaryList.append(anni); //should be ISODate 2559 anniversaryList.append(anni); //should be ISODate
2560 realNameList.append((*it).realName()); 2560 realNameList.append((*it).realName());
2561 preferredEmailList.append((*it).preferredEmail()); 2561 preferredEmailList.append((*it).preferredEmail());
2562 assembledNameList.append((*it).assembledName()); 2562 assembledNameList.append((*it).assembledName());
2563 uidList.append((*it).uid()); 2563 uidList.append((*it).uid());
2564 2564
2565 //qDebug("found birthday in KA/Pi: %s,%s,%s,%s: %s, %s", (*it).realName().latin1(), (*it).preferredEmail().latin1(), (*it).assembledName().latin1(), (*it).uid().latin1(), formattedbday.latin1(), anni.latin1() ); 2565 //qDebug("found birthday in KA/Pi: %s,%s,%s,%s: %s, %s", (*it).realName().latin1(), (*it).preferredEmail().latin1(), (*it).assembledName().latin1(), (*it).uid().latin1(), formattedbday.latin1(), anni.latin1() );
2566 } 2566 }
2567 } 2567 }
2568 2568
2569 bool res = ExternalAppHandler::instance()->returnBirthdayListFromKAPI(sourceChannel, uid, birthdayList, anniversaryList, realNameList, preferredEmailList, assembledNameList, uidList); 2569 bool res = ExternalAppHandler::instance()->returnBirthdayListFromKAPI(sourceChannel, uid, birthdayList, anniversaryList, realNameList, preferredEmailList, assembledNameList, uidList);
2570 2570
2571} 2571}
2572 2572
2573/* this method will be called through the QCop interface from other apps to show details of a contact. 2573/* this method will be called through the QCop interface from other apps to show details of a contact.
2574 */ 2574 */
2575void KABCore::requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid) 2575void KABCore::requestForDetails(const QString& sourceChannel, const QString& sessionuid, const QString& name, const QString& email, const QString& uid)
2576{ 2576{
2577 //qDebug("KABCore::requestForDetails %s %s %s %s %s", sourceChannel.latin1(), sessionuid.latin1(), name.latin1(), email.latin1(), uid.latin1()); 2577 //qDebug("KABCore::requestForDetails %s %s %s %s %s", sourceChannel.latin1(), sessionuid.latin1(), name.latin1(), email.latin1(), uid.latin1());
2578 2578
2579 QString foundUid = QString::null; 2579 QString foundUid = QString::null;
2580 if ( ! uid.isEmpty() ) { 2580 if ( ! uid.isEmpty() ) {
2581 Addressee adrr = mAddressBook->findByUid( uid ); 2581 Addressee adrr = mAddressBook->findByUid( uid );
2582 if ( !adrr.isEmpty() ) { 2582 if ( !adrr.isEmpty() ) {
2583 foundUid = uid; 2583 foundUid = uid;
2584 } 2584 }
2585 if ( email == "sendbacklist" ) { 2585 if ( email == "sendbacklist" ) {
2586 //qDebug("ssssssssssssssssssssssend "); 2586 //qDebug("ssssssssssssssssssssssend ");
2587 QStringList nameList; 2587 QStringList nameList;
2588 QStringList emailList; 2588 QStringList emailList;
2589 QStringList uidList; 2589 QStringList uidList;
2590 nameList.append(adrr.realName()); 2590 nameList.append(adrr.realName());
2591 emailList = adrr.emails(); 2591 emailList = adrr.emails();
2592 uidList.append( adrr.preferredEmail()); 2592 uidList.append( adrr.preferredEmail());
2593 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList); 2593 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList);
2594 return; 2594 return;
2595 } 2595 }
2596 2596
2597 } 2597 }
2598 2598
2599 if ( email == "sendbacklist" ) 2599 if ( email == "sendbacklist" )
2600 return; 2600 return;
2601 if (foundUid.isEmpty()) 2601 if (foundUid.isEmpty())
2602 { 2602 {
2603 //find the uid of the person first 2603 //find the uid of the person first
2604 Addressee::List namelist; 2604 Addressee::List namelist;
2605 Addressee::List emaillist; 2605 Addressee::List emaillist;
2606 2606
2607 if (!name.isEmpty()) 2607 if (!name.isEmpty())
2608 namelist = mAddressBook->findByName( name ); 2608 namelist = mAddressBook->findByName( name );
2609 2609
2610 if (!email.isEmpty()) 2610 if (!email.isEmpty())
2611 emaillist = mAddressBook->findByEmail( email ); 2611 emaillist = mAddressBook->findByEmail( email );
2612 //qDebug("count %d %d ", namelist.count(),emaillist.count() ); 2612 //qDebug("count %d %d ", namelist.count(),emaillist.count() );
2613 //check if we have a match in Namelist and Emaillist 2613 //check if we have a match in Namelist and Emaillist
2614 if ((namelist.count() == 0) && (emaillist.count() > 0)) { 2614 if ((namelist.count() == 0) && (emaillist.count() > 0)) {
2615 foundUid = emaillist[0].uid(); 2615 foundUid = emaillist[0].uid();
2616 } 2616 }
2617 else if ((namelist.count() > 0) && (emaillist.count() == 0)) 2617 else if ((namelist.count() > 0) && (emaillist.count() == 0))
2618 foundUid = namelist[0].uid(); 2618 foundUid = namelist[0].uid();
2619 else 2619 else
2620 { 2620 {
2621 for (int i = 0; i < namelist.count(); i++) 2621 for (int i = 0; i < namelist.count(); i++)
2622 { 2622 {
2623 for (int j = 0; j < emaillist.count(); j++) 2623 for (int j = 0; j < emaillist.count(); j++)
2624 { 2624 {
2625 if (namelist[i] == emaillist[j]) 2625 if (namelist[i] == emaillist[j])
2626 { 2626 {
2627 foundUid = namelist[i].uid(); 2627 foundUid = namelist[i].uid();
2628 } 2628 }
2629 } 2629 }
2630 } 2630 }
2631 } 2631 }
2632 } 2632 }
2633 else 2633 else
2634 { 2634 {
2635 foundUid = uid; 2635 foundUid = uid;
2636 } 2636 }
2637 2637
2638 if (!foundUid.isEmpty()) 2638 if (!foundUid.isEmpty())
2639 { 2639 {
2640 2640
2641 // raise Ka/Pi if it is in the background 2641 // raise Ka/Pi if it is in the background
2642#ifndef DESKTOP_VERSION 2642#ifndef DESKTOP_VERSION
2643#ifndef KORG_NODCOP 2643#ifndef KORG_NODCOP
2644 //QCopEnvelope e("QPE/Application/kapi", "raise()"); 2644 //QCopEnvelope e("QPE/Application/kapi", "raise()");
2645#endif 2645#endif
2646#endif 2646#endif
2647 2647
2648 mMainWindow->showMaximized(); 2648 mMainWindow->showMaximized();
2649 mMainWindow-> raise(); 2649 mMainWindow-> raise();
2650 2650
2651 mViewManager->setSelected( "", false); 2651 mViewManager->setSelected( "", false);
2652 mViewManager->refreshView( "" ); 2652 mViewManager->refreshView( "" );
2653 mViewManager->setSelected( foundUid, true ); 2653 mViewManager->setSelected( foundUid, true );
2654 mViewManager->refreshView( foundUid ); 2654 mViewManager->refreshView( foundUid );
2655 2655
2656 if ( !mMultipleViewsAtOnce ) 2656 if ( !mMultipleViewsAtOnce )
2657 { 2657 {
2658 setDetailsVisible( true ); 2658 setDetailsVisible( true );
2659 mActionDetails->setChecked(true); 2659 mActionDetails->setChecked(true);
2660 } 2660 }
2661 } 2661 }
2662} 2662}
2663 2663
2664void KABCore::whatsnew() 2664void KABCore::whatsnew()
2665{ 2665{
2666 KApplication::showFile( "KDE-Pim/Pi Version Info", "kdepim/WhatsNew.txt" ); 2666 KApplication::showFile( "KDE-Pim/Pi Version Info", "kdepim/WhatsNew.txt" );
2667} 2667}
2668void KABCore::synchowto() 2668void KABCore::synchowto()
2669{ 2669{
2670 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/SyncHowto.txt" ); 2670 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/SyncHowto.txt" );
2671} 2671}
2672void KABCore::kdesynchowto() 2672void KABCore::kdesynchowto()
2673{ 2673{
2674 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/Zaurus-KDE_syncHowTo.txt" ); 2674 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/Zaurus-KDE_syncHowTo.txt" );
2675} 2675}
2676void KABCore::multisynchowto() 2676void KABCore::multisynchowto()
2677{ 2677{
2678 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/MultiSyncHowTo.txt" ); 2678 KApplication::showFile( "KDE-Pim/Pi Synchronization HowTo", "kdepim/MultiSyncHowTo.txt" );
2679} 2679}
2680void KABCore::faq() 2680void KABCore::faq()
2681{ 2681{
2682 KApplication::showFile( "KA/Pi FAQ", "kdepim/kaddressbook/kapiFAQ.txt" ); 2682 KApplication::showFile( "KA/Pi FAQ", "kdepim/kaddressbook/kapiFAQ.txt" );
2683} 2683}
2684 2684
2685#include <libkcal/syncdefines.h> 2685#include <libkcal/syncdefines.h>
2686 2686
2687KABC::Addressee KABCore::getLastSyncAddressee() 2687KABC::Addressee KABCore::getLastSyncAddressee()
2688{ 2688{
2689 Addressee lse; 2689 Addressee lse;
2690 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice(); 2690 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
2691 2691
2692 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() ); 2692 //qDebug("CurrentSyncDevice %s ",mCurrentSyncDevice .latin1() );
2693 lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2693 lse = mAddressBook->findByUid( "last-syncAddressee-"+mCurrentSyncDevice );
2694 if (lse.isEmpty()) { 2694 if (lse.isEmpty()) {
2695 qDebug("KA: Creating new last-syncAddressee "); 2695 qDebug("KA: Creating new last-syncAddressee ");
2696 lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice ); 2696 lse.setUid( "last-syncAddressee-"+mCurrentSyncDevice );
2697 QString sum = ""; 2697 QString sum = "";
2698 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) 2698 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL )
2699 sum = "E: "; 2699 sum = "E: ";
2700 lse.setFamilyName("!"+sum+mCurrentSyncDevice + i18n(" - sync event")); 2700 lse.setFamilyName("!"+sum+mCurrentSyncDevice + i18n(" - sync event"));
2701 lse.setRevision( mLastAddressbookSync ); 2701 lse.setRevision( mLastAddressbookSync );
2702 lse.setCategories( i18n("SyncEvent") ); 2702 lse.setCategories( i18n("SyncEvent") );
2703 mAddressBook->insertAddressee( lse ); 2703 mAddressBook->insertAddressee( lse );
2704 } 2704 }
2705 return lse; 2705 return lse;
2706} 2706}
2707int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full ) 2707int KABCore::takeAddressee( KABC::Addressee* local, KABC::Addressee* remote, int mode , bool full )
2708{ 2708{
2709 2709
2710 //void setZaurusId(int id); 2710 //void setZaurusId(int id);
2711 // int zaurusId() const; 2711 // int zaurusId() const;
2712 // void setZaurusUid(int id); 2712 // void setZaurusUid(int id);
2713 // int zaurusUid() const; 2713 // int zaurusUid() const;
2714 // void setZaurusStat(int id); 2714 // void setZaurusStat(int id);
2715 // int zaurusStat() const; 2715 // int zaurusStat() const;
2716 // 0 equal 2716 // 0 equal
2717 // 1 take local 2717 // 1 take local
2718 // 2 take remote 2718 // 2 take remote
2719 // 3 cancel 2719 // 3 cancel
2720 QDateTime lastSync = mLastAddressbookSync; 2720 QDateTime lastSync = mLastAddressbookSync;
2721 QDateTime localMod = local->revision(); 2721 QDateTime localMod = local->revision();
2722 QDateTime remoteMod = remote->revision(); 2722 QDateTime remoteMod = remote->revision();
2723 2723
2724 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice(); 2724 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
2725 2725
2726 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2726 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2727 bool remCh, locCh; 2727 bool remCh, locCh;
2728 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) ); 2728 remCh = ( remote->getCsum(mCurrentSyncDevice) != local->getCsum(mCurrentSyncDevice) );
2729 //if ( remCh ) 2729 //if ( remCh )
2730 // qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() ); 2730 // qDebug("loc %s rem %s", local->getCsum(mCurrentSyncDevice).latin1(), remote->getCsum(mCurrentSyncDevice).latin1() );
2731 locCh = ( localMod > mLastAddressbookSync ); 2731 locCh = ( localMod > mLastAddressbookSync );
2732 //qDebug("cahnged rem %d loc %d",remCh, locCh ); 2732 //qDebug("cahnged rem %d loc %d",remCh, locCh );
2733 if ( !remCh && ! locCh ) { 2733 if ( !remCh && ! locCh ) {
2734 //qDebug("both not changed "); 2734 //qDebug("both not changed ");
2735 lastSync = localMod.addDays(1); 2735 lastSync = localMod.addDays(1);
2736 if ( mode <= SYNC_PREF_ASK ) 2736 if ( mode <= SYNC_PREF_ASK )
2737 return 0; 2737 return 0;
2738 } else { 2738 } else {
2739 if ( locCh ) { 2739 if ( locCh ) {
2740 //qDebug("loc changed %s %s", localMod.toString().latin1(), mLastAddressbookSync.toString().latin1()); 2740 //qDebug("loc changed %s %s", localMod.toString().latin1(), mLastAddressbookSync.toString().latin1());
2741 lastSync = localMod.addDays( -1 ); 2741 lastSync = localMod.addDays( -1 );
2742 if ( !remCh ) 2742 if ( !remCh )
2743 remoteMod =( lastSync.addDays( -1 ) ); 2743 remoteMod =( lastSync.addDays( -1 ) );
2744 } else { 2744 } else {
2745 //qDebug(" not loc changed "); 2745 //qDebug(" not loc changed ");
2746 lastSync = localMod.addDays( 1 ); 2746 lastSync = localMod.addDays( 1 );
2747 if ( remCh ) { 2747 if ( remCh ) {
2748 //qDebug("rem changed "); 2748 //qDebug("rem changed ");
2749 remoteMod =( lastSync.addDays( 1 ) ); 2749 remoteMod =( lastSync.addDays( 1 ) );
2750 } 2750 }
2751 2751
2752 } 2752 }
2753 } 2753 }
2754 full = true; 2754 full = true;
2755 if ( mode < SYNC_PREF_ASK ) 2755 if ( mode < SYNC_PREF_ASK )
2756 mode = SYNC_PREF_ASK; 2756 mode = SYNC_PREF_ASK;
2757 } else { 2757 } else {
2758 if ( localMod == remoteMod ) 2758 if ( localMod == remoteMod )
2759 return 0; 2759 return 0;
2760 2760
2761 } 2761 }
2762 //qDebug("%s %s --- %d %d", localMod.toString().latin1() , remoteMod.toString().latin1(), localMod.time().msec(), remoteMod.time().msec()); 2762 //qDebug("%s %s --- %d %d", localMod.toString().latin1() , remoteMod.toString().latin1(), localMod.time().msec(), remoteMod.time().msec());
2763 //qDebug("lastsync %s ", lastSync.toString().latin1() ); 2763 //qDebug("lastsync %s ", lastSync.toString().latin1() );
2764 //full = true; //debug only 2764 //full = true; //debug only
2765 if ( full ) { 2765 if ( full ) {
2766 bool equ = ( (*local) == (*remote) ); 2766 bool equ = ( (*local) == (*remote) );
2767 if ( equ ) { 2767 if ( equ ) {
2768 //qDebug("equal "); 2768 //qDebug("equal ");
2769 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2769 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2770 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) ); 2770 local->setCsum( mCurrentSyncDevice, remote->getCsum(mCurrentSyncDevice) );
2771 } 2771 }
2772 if ( mode < SYNC_PREF_FORCE_LOCAL ) 2772 if ( mode < SYNC_PREF_FORCE_LOCAL )
2773 return 0; 2773 return 0;
2774 2774
2775 }//else //debug only 2775 }//else //debug only
2776 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1()); 2776 //qDebug("not equal %s %s ", local->summary().latin1(), remote->summary().latin1());
2777 } 2777 }
2778 int result; 2778 int result;
2779 bool localIsNew; 2779 bool localIsNew;
2780 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , local->lastModified().toString().latin1() , remote->lastModified().toString().latin1() ); 2780 //qDebug("%s -- %s mLastCalendarSync %s lastsync %s --- local %s remote %s ",local->summary().latin1(), remote->summary().latin1(),mLastCalendarSync.toString().latin1() ,lastSync.toString().latin1() , local->lastModified().toString().latin1() , remote->lastModified().toString().latin1() );
2781 2781
2782 if ( full && mode < SYNC_PREF_NEWEST ) 2782 if ( full && mode < SYNC_PREF_NEWEST )
2783 mode = SYNC_PREF_ASK; 2783 mode = SYNC_PREF_ASK;
2784 2784
2785 switch( mode ) { 2785 switch( mode ) {
2786 case SYNC_PREF_LOCAL: 2786 case SYNC_PREF_LOCAL:
2787 if ( lastSync > remoteMod ) 2787 if ( lastSync > remoteMod )
2788 return 1; 2788 return 1;
2789 if ( lastSync > localMod ) 2789 if ( lastSync > localMod )
2790 return 2; 2790 return 2;
2791 return 1; 2791 return 1;
2792 break; 2792 break;
2793 case SYNC_PREF_REMOTE: 2793 case SYNC_PREF_REMOTE:
2794 if ( lastSync > remoteMod ) 2794 if ( lastSync > remoteMod )
2795 return 1; 2795 return 1;
2796 if ( lastSync > localMod ) 2796 if ( lastSync > localMod )
2797 return 2; 2797 return 2;
2798 return 2; 2798 return 2;
2799 break; 2799 break;
2800 case SYNC_PREF_NEWEST: 2800 case SYNC_PREF_NEWEST:
2801 if ( localMod > remoteMod ) 2801 if ( localMod > remoteMod )
2802 return 1; 2802 return 1;
2803 else 2803 else
2804 return 2; 2804 return 2;
2805 break; 2805 break;
2806 case SYNC_PREF_ASK: 2806 case SYNC_PREF_ASK:
2807 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() ); 2807 //qDebug("lsy %s --- lo %s --- re %s ", lastSync.toString().latin1(), localMod.toString().latin1(), remoteMod.toString().latin1() );
2808 if ( lastSync > remoteMod ) 2808 if ( lastSync > remoteMod )
2809 return 1; 2809 return 1;
2810 if ( lastSync > localMod ) { 2810 if ( lastSync > localMod ) {
2811 return 2; 2811 return 2;
2812 } 2812 }
2813 localIsNew = localMod >= remoteMod; 2813 localIsNew = localMod >= remoteMod;
2814 //qDebug("conflict! ************************************** "); 2814 //qDebug("conflict! ************************************** ");
2815 { 2815 {
2816 KABC::AddresseeChooser acd ( *local,*remote, localIsNew , this ); 2816 KABC::AddresseeChooser acd ( *local,*remote, localIsNew , this );
2817 result = acd.executeD(localIsNew); 2817 result = acd.executeD(localIsNew);
2818 return result; 2818 return result;
2819 } 2819 }
2820 break; 2820 break;
2821 case SYNC_PREF_FORCE_LOCAL: 2821 case SYNC_PREF_FORCE_LOCAL:
2822 return 1; 2822 return 1;
2823 break; 2823 break;
2824 case SYNC_PREF_FORCE_REMOTE: 2824 case SYNC_PREF_FORCE_REMOTE:
2825 return 2; 2825 return 2;
2826 break; 2826 break;
2827 2827
2828 default: 2828 default:
2829 // SYNC_PREF_TAKE_BOTH not implemented 2829 // SYNC_PREF_TAKE_BOTH not implemented
2830 break; 2830 break;
2831 } 2831 }
2832 return 0; 2832 return 0;
2833} 2833}
2834 2834
2835 2835
2836bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode) 2836bool KABCore::synchronizeAddressbooks( KABC::AddressBook* local, KABC::AddressBook* remote,int mode)
2837{ 2837{
2838 bool syncOK = true; 2838 bool syncOK = true;
2839 int addedAddressee = 0; 2839 int addedAddressee = 0;
2840 int addedAddresseeR = 0; 2840 int addedAddresseeR = 0;
2841 int deletedAddresseeR = 0; 2841 int deletedAddresseeR = 0;
2842 int deletedAddresseeL = 0; 2842 int deletedAddresseeL = 0;
2843 int changedLocal = 0; 2843 int changedLocal = 0;
2844 int changedRemote = 0; 2844 int changedRemote = 0;
2845 int filteredIN = 0; 2845 int filteredIN = 0;
2846 int filteredOUT = 0; 2846 int filteredOUT = 0;
2847 2847
2848 QString mCurrentSyncName = syncManager->getCurrentSyncName(); 2848 QString mCurrentSyncName = syncManager->getCurrentSyncName();
2849 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice(); 2849 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
2850 2850
2851 //QPtrList<Addressee> el = local->rawAddressees(); 2851 //QPtrList<Addressee> el = local->rawAddressees();
2852 Addressee addresseeR; 2852 Addressee addresseeR;
2853 QString uid; 2853 QString uid;
2854 int take; 2854 int take;
2855 Addressee addresseeL; 2855 Addressee addresseeL;
2856 Addressee addresseeRSync; 2856 Addressee addresseeRSync;
2857 Addressee addresseeLSync; 2857 Addressee addresseeLSync;
2858 // KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees(); 2858 // KABC::Addressee::List addresseeRSyncSharp = remote->getExternLastSyncAddressees();
2859 //KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees(); 2859 //KABC::Addressee::List addresseeLSyncSharp = local->getExternLastSyncAddressees();
2860 bool fullDateRange = false; 2860 bool fullDateRange = false;
2861 local->resetTempSyncStat(); 2861 local->resetTempSyncStat();
2862 mLastAddressbookSync = QDateTime::currentDateTime(); 2862 mLastAddressbookSync = QDateTime::currentDateTime();
2863 if ( syncManager->syncWithDesktop() ) { 2863 if ( syncManager->syncWithDesktop() ) {
2864 // remote->removeSyncInfo( QString());//remove all info 2864 // remote->removeSyncInfo( QString());//remove all info
2865 if ( KSyncManager::mRequestedSyncEvent.isValid() ) { 2865 if ( KSyncManager::mRequestedSyncEvent.isValid() ) {
2866 mLastAddressbookSync = KSyncManager::mRequestedSyncEvent; 2866 mLastAddressbookSync = KSyncManager::mRequestedSyncEvent;
2867 qDebug("KA: using extern time for calendar sync: %s ", mLastAddressbookSync.toString().latin1() ); 2867 qDebug("KA: using extern time for calendar sync: %s ", mLastAddressbookSync.toString().latin1() );
2868 } else { 2868 } else {
2869 qDebug("KA: KSyncManager::mRequestedSyncEvent has invalid datatime "); 2869 qDebug("KA: KSyncManager::mRequestedSyncEvent has invalid datatime ");
2870 } 2870 }
2871 } 2871 }
2872 QDateTime modifiedCalendar = mLastAddressbookSync; 2872 QDateTime modifiedCalendar = mLastAddressbookSync;
2873 addresseeLSync = getLastSyncAddressee(); 2873 addresseeLSync = getLastSyncAddressee();
2874 qDebug("KA: Last Sync %s ", addresseeLSync.revision().toString().latin1()); 2874 qDebug("KA: Last Sync %s ", addresseeLSync.revision().toString().latin1());
2875 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName ); 2875 addresseeR = remote->findByUid("last-syncAddressee-"+mCurrentSyncName );
2876 if ( !addresseeR.isEmpty() ) { 2876 if ( !addresseeR.isEmpty() ) {
2877 addresseeRSync = addresseeR; 2877 addresseeRSync = addresseeR;
2878 remote->removeAddressee(addresseeR ); 2878 remote->removeAddressee(addresseeR );
2879 2879
2880 } else { 2880 } else {
2881 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2881 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2882 addresseeRSync = addresseeLSync ; 2882 addresseeRSync = addresseeLSync ;
2883 } else { 2883 } else {
2884 //qDebug("FULLDATE 1"); 2884 //qDebug("FULLDATE 1");
2885 fullDateRange = true; 2885 fullDateRange = true;
2886 Addressee newAdd; 2886 Addressee newAdd;
2887 addresseeRSync = newAdd; 2887 addresseeRSync = newAdd;
2888 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee")); 2888 addresseeRSync.setFamilyName(mCurrentSyncName + i18n(" - sync addressee"));
2889 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName ); 2889 addresseeRSync.setUid("last-syncAddressee-"+mCurrentSyncName );
2890 addresseeRSync.setRevision( mLastAddressbookSync ); 2890 addresseeRSync.setRevision( mLastAddressbookSync );
2891 addresseeRSync.setCategories( i18n("SyncAddressee") ); 2891 addresseeRSync.setCategories( i18n("SyncAddressee") );
2892 } 2892 }
2893 } 2893 }
2894 if ( addresseeLSync.revision() == mLastAddressbookSync ) { 2894 if ( addresseeLSync.revision() == mLastAddressbookSync ) {
2895 // qDebug("FULLDATE 2"); 2895 // qDebug("FULLDATE 2");
2896 fullDateRange = true; 2896 fullDateRange = true;
2897 } 2897 }
2898 if ( ! fullDateRange ) { 2898 if ( ! fullDateRange ) {
2899 if ( addresseeLSync.revision() != addresseeRSync.revision() ) { 2899 if ( addresseeLSync.revision() != addresseeRSync.revision() ) {
2900 2900
2901 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() ); 2901 // qDebug("set fulldate to true %s %s" ,addresseeLSync->dtStart().toString().latin1(), addresseeRSync->dtStart().toString().latin1() );
2902 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec()); 2902 //qDebug("%d %d %d %d ", addresseeLSync->dtStart().time().second(), addresseeLSync->dtStart().time().msec() , addresseeRSync->dtStart().time().second(), addresseeRSync->dtStart().time().msec());
2903 fullDateRange = true; 2903 fullDateRange = true;
2904 //qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() ); 2904 //qDebug("FULLDATE 3 %s %s", addresseeLSync.revision().toString().latin1() , addresseeRSync.revision().toString().latin1() );
2905 } 2905 }
2906 } 2906 }
2907 // fullDateRange = true; // debug only! 2907 // fullDateRange = true; // debug only!
2908 if ( fullDateRange ) 2908 if ( fullDateRange )
2909 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365); 2909 mLastAddressbookSync = QDateTime::currentDateTime().addDays( -100*365);
2910 else 2910 else
2911 mLastAddressbookSync = addresseeLSync.revision(); 2911 mLastAddressbookSync = addresseeLSync.revision();
2912 // for resyncing if own file has changed 2912 // for resyncing if own file has changed
2913 // PENDING fixme later when implemented 2913 // PENDING fixme later when implemented
2914#if 0 2914#if 0
2915 if ( mCurrentSyncDevice == "deleteaftersync" ) { 2915 if ( mCurrentSyncDevice == "deleteaftersync" ) {
2916 mLastAddressbookSync = loadedFileVersion; 2916 mLastAddressbookSync = loadedFileVersion;
2917 qDebug("setting mLastAddressbookSync "); 2917 qDebug("setting mLastAddressbookSync ");
2918 } 2918 }
2919#endif 2919#endif
2920 2920
2921 2921
2922 // ********** setting filters **************** 2922 // ********** setting filters ****************
2923 Filter filterIN = mViewManager->getFilterByName( syncManager->mFilterInAB ); 2923 Filter filterIN = mViewManager->getFilterByName( syncManager->mFilterInAB );
2924 Filter filterOUT = mViewManager->getFilterByName( syncManager->mFilterOutAB ); 2924 Filter filterOUT = mViewManager->getFilterByName( syncManager->mFilterOutAB );
2925 2925
2926 //qDebug("*************************** "); 2926 //qDebug("*************************** ");
2927 // qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() ); 2927 // qDebug("mLastAddressbookSync %s ",mLastAddressbookSync.toString().latin1() );
2928 QStringList er = remote->uidList(); 2928 QStringList er = remote->uidList();
2929 Addressee inR ;//= er.first(); 2929 Addressee inR ;//= er.first();
2930 Addressee inL; 2930 Addressee inL;
2931 2931
2932 syncManager->showProgressBar(0, i18n("Syncing - close to abort!"), er.count()); 2932 syncManager->showProgressBar(0, i18n("Syncing - close to abort!"), er.count());
2933 2933
2934 int modulo = (er.count()/10)+1; 2934 int modulo = (er.count()/10)+1;
2935 int incCounter = 0; 2935 int incCounter = 0;
2936 while ( incCounter < er.count()) { 2936 while ( incCounter < er.count()) {
2937 if (syncManager->isProgressBarCanceled()) 2937 if (syncManager->isProgressBarCanceled())
2938 return false; 2938 return false;
2939 if ( incCounter % modulo == 0 ) 2939 if ( incCounter % modulo == 0 )
2940 syncManager->showProgressBar(incCounter); 2940 syncManager->showProgressBar(incCounter);
2941 2941
2942 uid = er[ incCounter ]; 2942 uid = er[ incCounter ];
2943 bool skipIncidence = false; 2943 bool skipIncidence = false;
2944 if ( uid.left(19) == QString("last-syncAddressee-") ) 2944 if ( uid.left(19) == QString("last-syncAddressee-") )
2945 skipIncidence = true; 2945 skipIncidence = true;
2946 QString idS,OidS; 2946 QString idS,OidS;
2947 qApp->processEvents(); 2947 qApp->processEvents();
2948 if ( !skipIncidence ) { 2948 if ( !skipIncidence ) {
2949 inL = local->findByUid( uid ); 2949 inL = local->findByUid( uid );
2950 inR = remote->findByUid( uid ); 2950 inR = remote->findByUid( uid );
2951 //inL.setResource( 0 ); 2951 //inL.setResource( 0 );
2952 //inR.setResource( 0 ); 2952 //inR.setResource( 0 );
2953 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars 2953 if ( !inL.isEmpty() ) { // maybe conflict - same uid in both calendars
2954 if ( !inL.resource() || inL.resource()->includeInSync() ) { 2954 if ( !inL.resource() || inL.resource()->includeInSync() ) {
2955 if ( (take = takeAddressee( &inL, &inR, mode, fullDateRange )) ) { 2955 if ( (take = takeAddressee( &inL, &inR, mode, fullDateRange )) ) {
2956 //qDebug("take %d %s ", take, inL.summary().latin1()); 2956 //qDebug("take %d %s ", take, inL.summary().latin1());
2957 if ( take == 3 ) 2957 if ( take == 3 )
2958 return false; 2958 return false;
2959 if ( take == 1 ) {// take local ********************** 2959 if ( take == 1 ) {// take local **********************
2960 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2960 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2961 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2961 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2962 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); 2962 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2963 local->insertAddressee( inL, false ); 2963 local->insertAddressee( inL, false );
2964 idS = inR.externalUID(); 2964 idS = inR.externalUID();
2965 OidS = inR.originalExternalUID(); 2965 OidS = inR.originalExternalUID();
2966 } 2966 }
2967 else 2967 else
2968 idS = inR.IDStr(); 2968 idS = inR.IDStr();
2969 remote->removeAddressee( inR ); 2969 remote->removeAddressee( inR );
2970 inR = inL; 2970 inR = inL;
2971 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL ); 2971 inR.setTempSyncStat( SYNC_TEMPSTATE_INITIAL );
2972 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2972 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2973 inR.setOriginalExternalUID( OidS ); 2973 inR.setOriginalExternalUID( OidS );
2974 inR.setExternalUID( idS ); 2974 inR.setExternalUID( idS );
2975 if ( syncManager->syncWithDesktop() ) { 2975 if ( syncManager->syncWithDesktop() ) {
2976 inR.setIDStr("changed" ); 2976 inR.setIDStr("changed" );
2977 } 2977 }
2978 //inR.insertCustom( "KADDRESSBOOK", "X-KDESYNC","changed" ); 2978 //inR.insertCustom( "KADDRESSBOOK", "X-KDESYNC","changed" );
2979 } else { 2979 } else {
2980 inR.setIDStr( idS ); 2980 inR.setIDStr( idS );
2981 } 2981 }
2982 inR.setResource( 0 ); 2982 inR.setResource( 0 );
2983 remote->insertAddressee( inR , false); 2983 remote->insertAddressee( inR , false);
2984 ++changedRemote; 2984 ++changedRemote;
2985 } else { // take == 2 take remote ********************** 2985 } else { // take == 2 take remote **********************
2986 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2986 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2987 if ( inR.revision().date().year() < 2004 ) 2987 if ( inR.revision().date().year() < 2004 )
2988 inR.setRevision( modifiedCalendar ); 2988 inR.setRevision( modifiedCalendar );
2989 } 2989 }
2990 idS = inL.IDStr(); 2990 idS = inL.IDStr();
2991 local->removeAddressee( inL ); 2991 local->removeAddressee( inL );
2992 inL = inR; 2992 inL = inR;
2993 inL.setIDStr( idS ); 2993 inL.setIDStr( idS );
2994 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 2994 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
2995 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 2995 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
2996 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); 2996 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
2997 } 2997 }
2998 inL.setResource( 0 ); 2998 inL.setResource( 0 );
2999 local->insertAddressee( inL , false ); 2999 local->insertAddressee( inL , false );
3000 ++changedLocal; 3000 ++changedLocal;
3001 } 3001 }
3002 } 3002 }
3003 } 3003 }
3004 } else { // no conflict ********** add or delete remote 3004 } else { // no conflict ********** add or delete remote
3005 if ( filterIN.name().isEmpty() || filterIN.filterAddressee( inR ) ) { 3005 if ( filterIN.name().isEmpty() || filterIN.filterAddressee( inR ) ) {
3006 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 3006 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
3007 QString des = addresseeLSync.note(); 3007 QString des = addresseeLSync.note();
3008 if ( des.find( inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it 3008 if ( des.find( inR.getID(mCurrentSyncDevice) +"," ) >= 0 && mode != 5) { // delete it
3009 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE ); 3009 inR.setTempSyncStat( SYNC_TEMPSTATE_DELETE );
3010 remote->insertAddressee( inR, false ); 3010 remote->insertAddressee( inR, false );
3011 ++deletedAddresseeR; 3011 ++deletedAddresseeR;
3012 } else { 3012 } else {
3013 inR.setRevision( modifiedCalendar ); 3013 inR.setRevision( modifiedCalendar );
3014 remote->insertAddressee( inR, false ); 3014 remote->insertAddressee( inR, false );
3015 inL = inR; 3015 inL = inR;
3016 inL.setIDStr( ":" ); 3016 inL.setIDStr( ":" );
3017 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) ); 3017 inL.setCsum( mCurrentSyncDevice, inR.getCsum(mCurrentSyncDevice) );
3018 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) ); 3018 inL.setID( mCurrentSyncDevice, inR.getID(mCurrentSyncDevice) );
3019 inL.setResource( 0 ); 3019 inL.setResource( 0 );
3020 local->insertAddressee( inL , false); 3020 local->insertAddressee( inL , false);
3021 ++addedAddressee; 3021 ++addedAddressee;
3022 } 3022 }
3023 } else { 3023 } else {
3024 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) { 3024 if ( inR.revision() > mLastAddressbookSync || mode == 5 ) {
3025 inR.setRevision( modifiedCalendar ); 3025 inR.setRevision( modifiedCalendar );
3026 remote->insertAddressee( inR, false ); 3026 remote->insertAddressee( inR, false );
3027 inR.setResource( 0 ); 3027 inR.setResource( 0 );
3028 local->insertAddressee( inR, false ); 3028 local->insertAddressee( inR, false );
3029 ++addedAddressee; 3029 ++addedAddressee;
3030 } else { 3030 } else {
3031 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR); 3031 // pending checkExternSyncAddressee(addresseeRSyncSharp, inR);
3032 remote->removeAddressee( inR ); 3032 remote->removeAddressee( inR );
3033 ++deletedAddresseeR; 3033 ++deletedAddresseeR;
3034 } 3034 }
3035 } 3035 }
3036 } else { 3036 } else {
3037 ++filteredIN; 3037 ++filteredIN;
3038 } 3038 }
3039 } 3039 }
3040 } 3040 }
3041 ++incCounter; 3041 ++incCounter;
3042 } 3042 }
3043 er.clear(); 3043 er.clear();
3044 QStringList el = local->uidList(); 3044 QStringList el = local->uidList();
3045 modulo = (el.count()/10)+1; 3045 modulo = (el.count()/10)+1;
3046 3046
3047 syncManager->showProgressBar(0, i18n("Add / remove addressees"), el.count()); 3047 syncManager->showProgressBar(0, i18n("Add / remove addressees"), el.count());
3048 incCounter = 0; 3048 incCounter = 0;
3049 while ( incCounter < el.count()) { 3049 while ( incCounter < el.count()) {
3050 qApp->processEvents(); 3050 qApp->processEvents();
3051 if (syncManager->isProgressBarCanceled()) 3051 if (syncManager->isProgressBarCanceled())
3052 return false; 3052 return false;
3053 if ( incCounter % modulo == 0 ) 3053 if ( incCounter % modulo == 0 )
3054 syncManager->showProgressBar(incCounter); 3054 syncManager->showProgressBar(incCounter);
3055 uid = el[ incCounter ]; 3055 uid = el[ incCounter ];
3056 bool skipIncidence = false; 3056 bool skipIncidence = false;
3057 if ( uid.left(19) == QString("last-syncAddressee-") ) 3057 if ( uid.left(19) == QString("last-syncAddressee-") )
3058 skipIncidence = true; 3058 skipIncidence = true;
3059 if ( !skipIncidence ) { 3059 if ( !skipIncidence ) {
3060 inL = local->findByUid( uid ); 3060 inL = local->findByUid( uid );
3061 if ( !inL.resource() || inL.resource()->includeInSync() ) { 3061 if ( !inL.resource() || inL.resource()->includeInSync() ) {
3062 inR = remote->findByUid( uid ); 3062 inR = remote->findByUid( uid );
3063 if ( inR.isEmpty() ){ 3063 if ( inR.isEmpty() ){
3064 if ( filterOUT.name().isEmpty() || filterOUT.filterAddressee( inL ) ) { 3064 if ( filterOUT.name().isEmpty() || filterOUT.filterAddressee( inL ) ) {
3065 // no conflict ********** add or delete local 3065 // no conflict ********** add or delete local
3066 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) { 3066 if ( mGlobalSyncMode == SYNC_MODE_EXTERNAL ) {
3067 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) { 3067 if ( !inL.getID(mCurrentSyncDevice).isEmpty() && mode != 4 ) {
3068 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 3068 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
3069 local->removeAddressee( inL ); 3069 local->removeAddressee( inL );
3070 ++deletedAddresseeL; 3070 ++deletedAddresseeL;
3071 } else { 3071 } else {
3072 if ( ! syncManager->mWriteBackExistingOnly ) { 3072 if ( ! syncManager->mWriteBackExistingOnly ) {
3073 inL.removeID(mCurrentSyncDevice ); 3073 inL.removeID(mCurrentSyncDevice );
3074 ++addedAddresseeR; 3074 ++addedAddresseeR;
3075 inL.setRevision( modifiedCalendar ); 3075 inL.setRevision( modifiedCalendar );
3076 local->insertAddressee( inL, false ); 3076 local->insertAddressee( inL, false );
3077 inR = inL; 3077 inR = inL;
3078 inR.setTempSyncStat( SYNC_TEMPSTATE_ADDED_EXTERNAL ); 3078 inR.setTempSyncStat( SYNC_TEMPSTATE_ADDED_EXTERNAL );
3079 inR.setResource( 0 ); 3079 inR.setResource( 0 );
3080 remote->insertAddressee( inR, false ); 3080 remote->insertAddressee( inR, false );
3081 } 3081 }
3082 } 3082 }
3083 } else { 3083 } else {
3084 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) { 3084 if ( inL.revision() < mLastAddressbookSync && mode != 4 ) {
3085 //qDebug("data %s ", inL.revision().toString().latin1()); 3085 //qDebug("data %s ", inL.revision().toString().latin1());
3086 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL); 3086 // pending checkExternSyncAddressee(addresseeLSyncSharp, inL);
3087 local->removeAddressee( inL ); 3087 local->removeAddressee( inL );
3088 ++deletedAddresseeL; 3088 ++deletedAddresseeL;
3089 } else { 3089 } else {
3090 if ( ! syncManager->mWriteBackExistingOnly ) { 3090 if ( ! syncManager->mWriteBackExistingOnly ) {
3091 ++addedAddresseeR; 3091 ++addedAddresseeR;
3092 inL.setRevision( modifiedCalendar ); 3092 inL.setRevision( modifiedCalendar );
3093 local->insertAddressee( inL, false ); 3093 local->insertAddressee( inL, false );
3094 inR = inL; 3094 inR = inL;
3095 inR.setIDStr( ":" ); 3095 inR.setIDStr( ":" );
3096 inR.setResource( 0 ); 3096 inR.setResource( 0 );
3097 remote->insertAddressee( inR, false ); 3097 remote->insertAddressee( inR, false );
3098 } 3098 }
3099 } 3099 }
3100 } 3100 }
3101 } else { 3101 } else {
3102 ++filteredOUT; 3102 ++filteredOUT;
3103 } 3103 }
3104 } 3104 }
3105 } 3105 }
3106 } 3106 }
3107 ++incCounter; 3107 ++incCounter;
3108 } 3108 }
3109 el.clear(); 3109 el.clear();
3110 syncManager->hideProgressBar(); 3110 syncManager->hideProgressBar();
3111 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 ); 3111 mLastAddressbookSync = QDateTime::currentDateTime().addSecs( 1 );
3112 // get rid of micro seconds 3112 // get rid of micro seconds
3113 QTime t = mLastAddressbookSync.time(); 3113 QTime t = mLastAddressbookSync.time();
3114 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) ); 3114 mLastAddressbookSync.setTime( QTime (t.hour (), t.minute (), t.second () ) );
3115 addresseeLSync.setRevision( mLastAddressbookSync ); 3115 addresseeLSync.setRevision( mLastAddressbookSync );
3116 addresseeRSync.setRevision( mLastAddressbookSync ); 3116 addresseeRSync.setRevision( mLastAddressbookSync );
3117 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ; 3117 addresseeRSync.setRole( i18n("!Remote from: ")+mCurrentSyncName ) ;
3118 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName ); 3118 addresseeLSync.setRole(i18n("!Local from: ") + mCurrentSyncName );
3119 addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ; 3119 addresseeRSync.setGivenName( i18n("!DO NOT EDIT!") ) ;
3120 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") ); 3120 addresseeLSync.setGivenName(i18n("!DO NOT EDIT!") );
3121 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ; 3121 addresseeRSync.setOrganization( "!"+mLastAddressbookSync.toString() ) ;
3122 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() ); 3122 addresseeLSync.setOrganization("!"+ mLastAddressbookSync.toString() );
3123 addresseeRSync.setNote( "" ) ; 3123 addresseeRSync.setNote( "" ) ;
3124 addresseeLSync.setNote( "" ); 3124 addresseeLSync.setNote( "" );
3125 3125
3126 if ( mGlobalSyncMode == SYNC_MODE_NORMAL) 3126 if ( mGlobalSyncMode == SYNC_MODE_NORMAL)
3127 remote->insertAddressee( addresseeRSync, false ); 3127 remote->insertAddressee( addresseeRSync, false );
3128 local->insertAddressee( addresseeLSync, false ); 3128 local->insertAddressee( addresseeLSync, false );
3129 QString mes; 3129 QString mes;
3130 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"),addedAddressee, addedAddresseeR, changedLocal, changedRemote, deletedAddresseeL, deletedAddresseeR, filteredIN, filteredOUT ); 3130 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"),addedAddressee, addedAddresseeR, changedLocal, changedRemote, deletedAddresseeL, deletedAddresseeR, filteredIN, filteredOUT );
3131 qDebug( mes ); 3131 qDebug( mes );
3132 mes = i18n("Local addressbook changed!\n") +mes; 3132 mes = i18n("Local addressbook changed!\n") +mes;
3133 if ( syncManager->mShowSyncSummary ) { 3133 if ( syncManager->mShowSyncSummary ) {
3134 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes, 3134 if ( KMessageBox::Cancel == KMessageBox::warningContinueCancel(this, mes,
3135 i18n("KA/Pi Synchronization"),i18n("Write back"))) { 3135 i18n("KA/Pi Synchronization"),i18n("Write back"))) {
3136 qDebug("KA: WB cancelled "); 3136 qDebug("KA: WB cancelled ");
3137 return false; 3137 return false;
3138 } 3138 }
3139 } 3139 }
3140 return syncOK; 3140 return syncOK;
3141} 3141}
3142 3142
3143 3143
3144//this is a overwritten callbackmethods from the syncinterface 3144//this is a overwritten callbackmethods from the syncinterface
3145bool KABCore::sync(KSyncManager* manager, QString filename, int mode) 3145bool KABCore::sync(KSyncManager* manager, QString filename, int mode)
3146{ 3146{
3147 3147
3148 //pending prepare addresseeview for output 3148 //pending prepare addresseeview for output
3149 //pending detect, if remote file has REV field. if not switch to external sync 3149 //pending detect, if remote file has REV field. if not switch to external sync
3150 mGlobalSyncMode = SYNC_MODE_NORMAL; 3150 mGlobalSyncMode = SYNC_MODE_NORMAL;
3151 if ( manager != syncManager ) 3151 if ( manager != syncManager )
3152 qDebug("KABCore::sync:: ERROR! :: manager != syncManager "); 3152 qDebug("KABCore::sync:: ERROR! :: manager != syncManager ");
3153 QString mCurrentSyncDevice = manager->getCurrentSyncDevice(); 3153 QString mCurrentSyncDevice = manager->getCurrentSyncDevice();
3154 3154
3155 AddressBook abLocal(filename,"syncContact"); 3155 AddressBook abLocal(filename,"syncContact");
3156 bool syncOK = false; 3156 bool syncOK = false;
3157 if ( abLocal.load() ) { 3157 if ( abLocal.load() ) {
3158 qDebug("KA: Sync::AB loaded %s,sync mode %d",filename.latin1(), mode ); 3158 qDebug("KA: Sync::AB loaded %s,sync mode %d",filename.latin1(), mode );
3159 bool external = false; 3159 bool external = false;
3160 bool isXML = false; 3160 bool isXML = false;
3161 if ( filename.right(4) == ".xml") { 3161 if ( filename.right(4) == ".xml") {
3162 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 3162 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
3163 isXML = true; 3163 isXML = true;
3164 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, true ); 3164 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, true );
3165 } else { 3165 } else {
3166 external = !manager->mIsKapiFile; 3166 external = !manager->mIsKapiFile;
3167 if ( external ) { 3167 if ( external ) {
3168 qDebug("KA: Sync::Setting vcf mode to external "); 3168 qDebug("KA: Sync::Setting vcf mode to external ");
3169 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 3169 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
3170 AddressBook::Iterator it; 3170 AddressBook::Iterator it;
3171 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 3171 for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
3172 (*it).setID( mCurrentSyncDevice, (*it).uid() ); 3172 (*it).setID( mCurrentSyncDevice, (*it).uid() );
3173 (*it).computeCsum( mCurrentSyncDevice ); 3173 (*it).computeCsum( mCurrentSyncDevice );
3174 } 3174 }
3175 } 3175 }
3176 } 3176 }
3177 //AddressBook::Iterator it; 3177 //AddressBook::Iterator it;
3178 //QStringList vcards; 3178 //QStringList vcards;
3179 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) { 3179 //for ( it = abLocal.begin(); it != abLocal.end(); ++it ) {
3180 // qDebug("Name %s ", (*it).familyName().latin1()); 3180 // qDebug("Name %s ", (*it).familyName().latin1());
3181 //} 3181 //}
3182 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode ); 3182 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, mode );
3183 if ( syncOK ) { 3183 if ( syncOK ) {
3184 if ( syncManager->mWriteBackFile ) 3184 if ( syncManager->mWriteBackFile )
3185 { 3185 {
3186 if ( external ) 3186 if ( external )
3187 abLocal.removeSyncAddressees( !isXML); 3187 abLocal.removeSyncAddressees( !isXML);
3188 qDebug("KA: Sync::Saving remote AB "); 3188 qDebug("KA: Sync::Saving remote AB ");
3189 if ( ! abLocal.saveAB()) 3189 if ( ! abLocal.saveAB())
3190 qDebug("KA: sync::Error writing back AB to file "); 3190 qDebug("KA: sync::Error writing back AB to file ");
3191 if ( external ) { 3191 if ( external ) {
3192 // afterwrite processing 3192 // afterwrite processing
3193 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice ,isXML); 3193 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice ,isXML);
3194 } 3194 }
3195 } 3195 }
3196 } 3196 }
3197 setModified(); 3197 setModified();
3198 3198
3199 } 3199 }
3200 abLocal.removeResources(); 3200 abLocal.removeResources();
3201 if ( syncOK ) 3201 if ( syncOK )
3202 mViewManager->refreshView(); 3202 mViewManager->refreshView();
3203 return syncOK; 3203 return syncOK;
3204 3204
3205} 3205}
3206void KABCore::removeSyncInfo( QString syncProfile) 3206void KABCore::removeSyncInfo( QString syncProfile)
3207{ 3207{
3208 qDebug("KA: AB:removeSyncInfo for profile %s ", syncProfile.latin1()); 3208 qDebug("KA: AB:removeSyncInfo for profile %s ", syncProfile.latin1());
3209 mAddressBook->removeSyncInfo( syncProfile ); 3209 mAddressBook->removeSyncInfo( syncProfile );
3210 setModified(); 3210 setModified();
3211} 3211}
3212 3212
3213 3213
3214//this is a overwritten callbackmethods from the syncinterface 3214//this is a overwritten callbackmethods from the syncinterface
3215bool KABCore::syncExternal(KSyncManager* manager, QString resource) 3215bool KABCore::syncExternal(KSyncManager* manager, QString resource)
3216{ 3216{
3217 if ( resource == "phone" ) 3217 if ( resource == "phone" )
3218 return syncPhone(); 3218 return syncPhone();
3219 disableBR( true ); 3219 disableBR( true );
3220 if ( manager != syncManager ) 3220 if ( manager != syncManager )
3221 qDebug("KABCore::syncExternal:: ERROR! :: manager != syncManager "); 3221 qDebug("KABCore::syncExternal:: ERROR! :: manager != syncManager ");
3222 QString mCurrentSyncDevice = manager->getCurrentSyncDevice(); 3222 QString mCurrentSyncDevice = manager->getCurrentSyncDevice();
3223 3223
3224 AddressBook abLocal( resource,"syncContact"); 3224 AddressBook abLocal( resource,"syncContact");
3225 bool syncOK = false; 3225 bool syncOK = false;
3226 message(i18n("Loading DTM address data..."), false); 3226 message(i18n("Loading DTM address data..."), false);
3227 if ( abLocal.load() ) { 3227 if ( abLocal.load() ) {
3228 qDebug("KA: AB sharp loaded ,sync device %s",mCurrentSyncDevice.latin1()); 3228 qDebug("KA: AB sharp loaded ,sync device %s",mCurrentSyncDevice.latin1());
3229 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 3229 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
3230 message(i18n("Sync preprocessing..."),false); 3230 message(i18n("Sync preprocessing..."),false);
3231 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, false ); 3231 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, false );
3232 message(i18n("Synchronizing..."),false); 3232 message(i18n("Synchronizing..."),false);
3233 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, syncManager->mSyncAlgoPrefs ); 3233 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, syncManager->mSyncAlgoPrefs );
3234 if ( syncOK ) { 3234 if ( syncOK ) {
3235 if ( syncManager->mWriteBackFile ) { 3235 if ( syncManager->mWriteBackFile ) {
3236 abLocal.removeSyncAddressees( false ); 3236 abLocal.removeSyncAddressees( false );
3237 message(i18n("Saving DTM address data..."),false); 3237 message(i18n("Saving DTM address data..."),false);
3238 abLocal.saveAB(); 3238 abLocal.saveAB();
3239 message(i18n("Sync postprocessing..."),false); 3239 message(i18n("Sync postprocessing..."),false);
3240 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice, true ); 3240 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice, true );
3241 } 3241 }
3242 } else 3242 } else
3243 message( i18n("Sync cancelled or failed.") ); 3243 message( i18n("Sync cancelled or failed.") );
3244 setModified(); 3244 setModified();
3245 } 3245 }
3246 abLocal.removeResources(); 3246 abLocal.removeResources();
3247 if ( syncOK ) { 3247 if ( syncOK ) {
3248 mViewManager->refreshView(); 3248 mViewManager->refreshView();
3249 message(i18n("DTM syncing finished.")); 3249 message(i18n("DTM syncing finished."));
3250 } 3250 }
3251 disableBR( false ); 3251 disableBR( false );
3252 return syncOK; 3252 return syncOK;
3253 3253
3254} 3254}
3255void KABCore::message( QString m, bool startTimer) 3255void KABCore::message( QString m, bool startTimer)
3256{ 3256{
3257 topLevelWidget()->setCaption( m ); 3257 topLevelWidget()->setCaption( m );
3258 qApp->processEvents(); 3258 qApp->processEvents();
3259 if ( startTimer ) 3259 if ( startTimer )
3260 mMessageTimer->start( 15000, true ); 3260 mMessageTimer->start( 15000, true );
3261 else 3261 else
3262 mMessageTimer->stop(); 3262 mMessageTimer->stop();
3263} 3263}
3264bool KABCore::syncPhone() 3264bool KABCore::syncPhone()
3265{ 3265{
3266 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice(); 3266 QString mCurrentSyncDevice = syncManager->getCurrentSyncDevice();
3267 QString fileName = getPhoneFile(); 3267 QString fileName = getPhoneFile();
3268 if ( !PhoneAccess::readFromPhone( fileName) ) { 3268 if ( !PhoneAccess::readFromPhone( fileName) ) {
3269 message(i18n("Phone access failed!")); 3269 message(i18n("Phone access failed!"));
3270 return false; 3270 return false;
3271 } 3271 }
3272 AddressBook abLocal( fileName,"syncContact"); 3272 AddressBook abLocal( fileName,"syncContact");
3273 bool syncOK = false; 3273 bool syncOK = false;
3274 { 3274 {
3275 abLocal.importFromFile( fileName ); 3275 abLocal.importFromFile( fileName );
3276 qDebug("KA: AB phone loaded ,sync device %s",mCurrentSyncDevice.latin1()); 3276 qDebug("KA: AB phone loaded ,sync device %s",mCurrentSyncDevice.latin1());
3277 mGlobalSyncMode = SYNC_MODE_EXTERNAL; 3277 mGlobalSyncMode = SYNC_MODE_EXTERNAL;
3278 abLocal.preparePhoneSync( mCurrentSyncDevice, true ); 3278 abLocal.preparePhoneSync( mCurrentSyncDevice, true );
3279 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, true ); 3279 abLocal.preExternSync( mAddressBook ,mCurrentSyncDevice, true );
3280 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, syncManager->mSyncAlgoPrefs ); 3280 syncOK = synchronizeAddressbooks( mAddressBook, &abLocal, syncManager->mSyncAlgoPrefs );
3281 if ( syncOK ) { 3281 if ( syncOK ) {
3282 if ( syncManager->mWriteBackFile ) { 3282 if ( syncManager->mWriteBackFile ) {
3283 abLocal.removeSyncAddressees( true ); 3283 abLocal.removeSyncAddressees( true );
3284 abLocal.saveABphone( fileName ); 3284 abLocal.saveABphone( fileName );
3285 abLocal.findNewExtIds( fileName, mCurrentSyncDevice ); 3285 abLocal.findNewExtIds( fileName, mCurrentSyncDevice );
3286 //abLocal.preparePhoneSync( mCurrentSyncDevice, false ); 3286 //abLocal.preparePhoneSync( mCurrentSyncDevice, false );
3287 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice, true ); 3287 abLocal.postExternSync( mAddressBook,mCurrentSyncDevice, true );
3288 } 3288 }
3289 } 3289 }
3290 setModified(); 3290 setModified();
3291 } 3291 }
3292 abLocal.removeResources(); 3292 abLocal.removeResources();
3293 if ( syncOK ) 3293 if ( syncOK )
3294 mViewManager->refreshView(); 3294 mViewManager->refreshView();
3295 return syncOK; 3295 return syncOK;
3296} 3296}
3297void KABCore::getFile( bool success ) 3297void KABCore::getFile( bool success )
3298{ 3298{
3299 if ( ! success ) { 3299 if ( ! success ) {
3300 message( i18n("Error receiving file. Nothing changed!") ); 3300 message( i18n("Error receiving file. Nothing changed!") );
3301 return; 3301 return;
3302 } 3302 }
3303 int count = mAddressBook->importFromFile( sentSyncFile() , false, true ); 3303 int count = mAddressBook->importFromFile( sentSyncFile() , false, true );
3304 if ( count ) 3304 if ( count )
3305 setModified( true ); 3305 setModified( true );
3306 message( i18n("Pi-Sync successful!") ); 3306 message( i18n("Pi-Sync successful!") );
3307 mViewManager->refreshView(); 3307 mViewManager->refreshView();
3308} 3308}
3309void KABCore::syncFileRequest() 3309void KABCore::syncFileRequest()
3310{ 3310{
3311 if ( KABPrefs::instance()->mPassiveSyncWithDesktop ) { 3311 if ( KABPrefs::instance()->mPassiveSyncWithDesktop ) {
3312 syncManager->slotSyncMenu( 999 ); 3312 syncManager->slotSyncMenu( 999 );
3313 } 3313 }
3314 mAddressBook->export2File( sentSyncFile() ); 3314 mAddressBook->export2File( sentSyncFile() );
3315} 3315}
3316QString KABCore::sentSyncFile() 3316QString KABCore::sentSyncFile()
3317{ 3317{
3318#ifdef DESKTOP_VERSION 3318#ifdef DESKTOP_VERSION
3319 return locateLocal( "tmp", "copysyncab.vcf" ); 3319 return locateLocal( "tmp", "copysyncab.vcf" );
3320#else 3320#else
3321 return QString( "/tmp/copysyncab.vcf" ); 3321 return QString( "/tmp/copysyncab.vcf" );
3322#endif 3322#endif
3323} 3323}
3324 3324
3325void KABCore::setCaptionBack() 3325void KABCore::setCaptionBack()
3326{ 3326{
3327 mMessageTimer->stop(); 3327 mMessageTimer->stop();
3328 topLevelWidget()->setCaption( i18n("KAddressbook/Pi") ); 3328 topLevelWidget()->setCaption( i18n("KAddressbook/Pi") );
3329} 3329}
diff --git a/kmicromail/composemail.cpp b/kmicromail/composemail.cpp
index ed8a2ee..3231b45 100644
--- a/kmicromail/composemail.cpp
+++ b/kmicromail/composemail.cpp
@@ -1,530 +1,538 @@
1// CHANGED 2004-08-06 Lutz Rogowski 1// CHANGED 2004-08-06 Lutz Rogowski
2 2
3 3
4#ifdef DESKTOP_VERSION 4#ifdef DESKTOP_VERSION
5#include <qapplication.h> 5#include <qapplication.h>
6#include <kabc/addresseedialog.h> 6#include <kabc/addresseedialog.h>
7#include <kabc/stdaddressbook.h> 7#include <kabc/stdaddressbook.h>
8#include <kabc/addressee.h> 8#include <kabc/addressee.h>
9#else 9#else
10#include <qpe/qpeapplication.h> 10#include <qpe/qpeapplication.h>
11#endif //DESKTOP_VERSION 11#endif //DESKTOP_VERSION
12#include <libkdepim/externalapphandler.h> 12#include <libkdepim/externalapphandler.h>
13 13
14#include "koprefs.h" 14#include "koprefs.h"
15#include <klocale.h> 15#include <klocale.h>
16#include <kglobal.h> 16#include <kglobal.h>
17 17
18#ifdef MINIKDE_KDIALOG_H 18#ifdef MINIKDE_KDIALOG_H
19#undef MINIKDE_KDIALOG_H 19#undef MINIKDE_KDIALOG_H
20#endif 20#endif
21 21
22 22
23#include "composemail.h" 23#include "composemail.h"
24 24
25#include <libmailwrapper/smtpwrapper.h> 25#include <libmailwrapper/smtpwrapper.h>
26#include <libmailwrapper/storemail.h> 26#include <libmailwrapper/storemail.h>
27#include <libmailwrapper/abstractmail.h> 27#include <libmailwrapper/abstractmail.h>
28#include <libmailwrapper/mailtypes.h> 28#include <libmailwrapper/mailtypes.h>
29 29
30/* OPIE */ 30/* OPIE */
31//#include <opie2/ofiledialog.h> 31//#include <opie2/ofiledialog.h>
32//#include <opie2/odebug.h> 32//#include <opie2/odebug.h>
33#include <kfiledialog.h> 33#include <kfiledialog.h>
34//#include <qpe/resource.h> 34//#include <qpe/resource.h>
35#include <qpe/global.h> 35#include <qpe/global.h>
36//#include <qpe/contact.h> 36//#include <qpe/contact.h>
37 37
38 38
39#include <qcombobox.h> 39#include <qcombobox.h>
40#include <qcheckbox.h> 40#include <qcheckbox.h>
41#include <qiconset.h> 41#include <qiconset.h>
42#include <qtimer.h> 42#include <qtimer.h>
43#include <qmessagebox.h> 43#include <qmessagebox.h>
44#include <qpushbutton.h> 44#include <qpushbutton.h>
45#include <qmultilineedit.h> 45#include <qmultilineedit.h>
46#include <qlabel.h> 46#include <qlabel.h>
47#include <qtabwidget.h> 47#include <qtabwidget.h>
48#include <qlistview.h> 48#include <qlistview.h>
49 49
50//using namespace Opie::Core; 50//using namespace Opie::Core;
51//using namespace Opie::Ui; 51//using namespace Opie::Ui;
52ComposeMail::ComposeMail( Settings *sett, QWidget *parent, const char *name, bool modal ) 52ComposeMail::ComposeMail( Settings *sett, QWidget *parent, const char *name, bool modal )
53 : ComposeMailUI( parent, name, modal ) 53 : ComposeMailUI( parent, name, modal )
54{ 54{
55 55
56 mPickLineEdit = 0; 56 mPickLineEdit = 0;
57 mEncoding = KOPrefs::instance()->mCurrentCodeName; 57 mEncoding = KOPrefs::instance()->mCurrentCodeName;
58 connect(ExternalAppHandler::instance(), SIGNAL(receivedNameEmailUidListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&)), 58 //managed from opiemail now
59 this, SLOT(insertAttendees(const QString&, const QStringList&, const QStringList&, const QStringList&))); 59 //connect(ExternalAppHandler::instance(), SIGNAL(receivedNameEmailUidListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&)),
60 // this, SLOT(insertAttendees(const QString&, const QStringList&, const QStringList&, const QStringList&)));
60 settings = sett; 61 settings = sett;
61 m_replyid = ""; 62 m_replyid = "";
62 if ( KOPrefs::instance()->mUseKapi) { 63 if ( KOPrefs::instance()->mUseKapi) {
63 KConfig config( locateLocal("config", "kabcrc") ); 64 KConfig config( locateLocal("config", "kabcrc") );
64 config.setGroup( "General" ); 65 config.setGroup( "General" );
65 QString whoami_uid = config.readEntry( "WhoAmI" ); 66 QString whoami_uid = config.readEntry( "WhoAmI" );
66 67
67 if ( whoami_uid.isEmpty() ) { 68 if ( whoami_uid.isEmpty() ) {
68 QMessageBox::information( 0, i18n( "Hint" ), 69 QMessageBox::information( 0, i18n( "Hint" ),
69 i18n( "Please apply\n\"Set Who Am I\"\nin KA/Pi to get the from\nfield automatically filled out!\n" ), 70 i18n( "Please apply\n\"Set Who Am I\"\nin KA/Pi to get the from\nfield automatically filled out!\n" ),
70 i18n( "Ok" ) ); 71 i18n( "Ok" ) );
71 72
72 73
73 fillSettings(); 74 fillSettings();
74 } else 75 } else
75 ExternalAppHandler::instance()->requestDetailsFromKAPI("", "sendbacklist", whoami_uid); 76 ExternalAppHandler::instance()->requestDetailsFromKAPI("", "sendbacklist", whoami_uid);
76 77
77 78
78#ifdef DESKTOP_VERSION 79#ifdef DESKTOP_VERSION
79 KABC::Addressee con = KABC::StdAddressBook::self()->whoAmI( ); 80 KABC::Addressee con = KABC::StdAddressBook::self()->whoAmI( );
80 QStringList mails = con.emails(); 81 QStringList mails = con.emails();
81 QString defmail = con.preferredEmail(); 82 QString defmail = con.preferredEmail();
82 if ( mails.count() == 0) 83 if ( mails.count() == 0)
83 QMessageBox::information( 0, i18n( "Hint" ), 84 QMessageBox::information( 0, i18n( "Hint" ),
84 i18n( "Please apply\n\"Set Who Am I\"\nin KA/Pi to get the from\nfield automatically filled out!\n" ), 85 i18n( "Please apply\n\"Set Who Am I\"\nin KA/Pi to get the from\nfield automatically filled out!\n" ),
85 i18n( "Ok" ) ); 86 i18n( "Ok" ) );
86 if (defmail.length()!=0) { 87 if (defmail.length()!=0) {
87 fromBox->insertItem(defmail); 88 fromBox->insertItem(defmail);
88 } 89 }
89 QStringList::ConstIterator sit = mails.begin(); 90 QStringList::ConstIterator sit = mails.begin();
90 for (;sit!=mails.end();++sit) { 91 for (;sit!=mails.end();++sit) {
91 if ( (*sit)==defmail) 92 if ( (*sit)==defmail)
92 continue; 93 continue;
93 fromBox->insertItem((*sit)); 94 fromBox->insertItem((*sit));
94 } 95 }
95 senderNameEdit->setText(con.formattedName()); 96 senderNameEdit->setText(con.formattedName());
96#endif 97#endif
97 98
98 } else { 99 } else {
99 fillSettings(); 100 fillSettings();
100 } 101 }
101 checkBoxLater->setChecked( KOPrefs::instance()->mSendLater ); 102 checkBoxLater->setChecked( KOPrefs::instance()->mSendLater );
102 103
103 attList->addColumn( i18n( "Name" ) ); 104 attList->addColumn( i18n( "Name" ) );
104 attList->addColumn( i18n( "Size" ) ); 105 attList->addColumn( i18n( "Size" ) );
105 QList<Account> accounts = settings->getAccounts(); 106 QList<Account> accounts = settings->getAccounts();
106 107
107 if ( QApplication::desktop()->width() < 320 ) 108 if ( QApplication::desktop()->width() < 320 )
108 smtpAccountBox->setMaximumWidth( 80 ); 109 smtpAccountBox->setMaximumWidth( 80 );
109 Account *it; 110 Account *it;
110 for ( it = accounts.first(); it; it = accounts.next() ) { 111 for ( it = accounts.first(); it; it = accounts.next() ) {
111 if ( it->getType()==MAILLIB::A_SMTP ) { 112 if ( it->getType()==MAILLIB::A_SMTP ) {
112 SMTPaccount *smtp = static_cast<SMTPaccount *>(it); 113 SMTPaccount *smtp = static_cast<SMTPaccount *>(it);
113 smtpAccountBox->insertItem( smtp->getAccountName() ); 114 smtpAccountBox->insertItem( smtp->getAccountName() );
114 smtpAccounts.append( smtp ); 115 smtpAccounts.append( smtp );
115 } 116 }
116 } 117 }
117 connect( toButton, SIGNAL( clicked() ), SLOT( pickAddressTo() ) ); 118 connect( toButton, SIGNAL( clicked() ), SLOT( pickAddressTo() ) );
118 connect( ccButton, SIGNAL( clicked() ), SLOT( pickAddressCC() ) ); 119 connect( ccButton, SIGNAL( clicked() ), SLOT( pickAddressCC() ) );
119 connect( bccButton, SIGNAL( clicked() ), SLOT( pickAddressBCC() ) ); 120 connect( bccButton, SIGNAL( clicked() ), SLOT( pickAddressBCC() ) );
120 connect( replyButton, SIGNAL( clicked() ), SLOT( pickAddressReply() ) ); 121 connect( replyButton, SIGNAL( clicked() ), SLOT( pickAddressReply() ) );
121 connect( addButton, SIGNAL( clicked() ), SLOT( addAttachment() ) ); 122 connect( addButton, SIGNAL( clicked() ), SLOT( addAttachment() ) );
122 connect( deleteButton, SIGNAL( clicked() ), SLOT( removeAttachment() ) ); 123 connect( deleteButton, SIGNAL( clicked() ), SLOT( removeAttachment() ) );
123 connect( SaveButton, SIGNAL( clicked() ), SLOT( saveAsDraft()) ); 124 connect( SaveButton, SIGNAL( clicked() ), SLOT( saveAsDraft()) );
124 mMail = 0; 125 mMail = 0;
125 warnAttach = true; 126 warnAttach = true;
126 QIconSet icon; 127 QIconSet icon;
127 //icon = SmallIcon("fileexport"); 128 //icon = SmallIcon("fileexport");
128 icon = SmallIcon("filesave"); 129 icon = SmallIcon("filesave");
129 SaveButton->setIconSet (icon ) ; 130 SaveButton->setIconSet (icon ) ;
130 if ( QApplication::desktop()->width() < 320 ) { 131 if ( QApplication::desktop()->width() < 320 ) {
131 SaveButton->setText ("") ; 132 SaveButton->setText ("") ;
132 SaveButton->setMaximumSize ( SaveButton->sizeHint().height(),SaveButton->sizeHint().height()) ; 133 SaveButton->setMaximumSize ( SaveButton->sizeHint().height(),SaveButton->sizeHint().height()) ;
133 } 134 }
134 else 135 else
135 SaveButton->setText (i18n("Save")); 136 SaveButton->setText (i18n("Save"));
136#ifndef DESKTOP_VERSION 137#ifndef DESKTOP_VERSION
137 QPEApplication::setStylusOperation( message, QPEApplication::RightOnHold ); 138 QPEApplication::setStylusOperation( message, QPEApplication::RightOnHold );
138 QPEApplication::setStylusOperation( senderNameEdit, QPEApplication::RightOnHold ); 139 QPEApplication::setStylusOperation( senderNameEdit, QPEApplication::RightOnHold );
139 QPEApplication::setStylusOperation( subjectLine, QPEApplication::RightOnHold ); 140 QPEApplication::setStylusOperation( subjectLine, QPEApplication::RightOnHold );
140#endif 141#endif
141 message->setFont ( KOPrefs::instance()->mComposeFont ); 142 message->setFont ( KOPrefs::instance()->mComposeFont );
142 message->setWordWrap (QMultiLineEdit::WidgetWidth); 143 message->setWordWrap (QMultiLineEdit::WidgetWidth);
143 if ( smtpAccounts.count() > 0 ) { 144 if ( smtpAccounts.count() > 0 ) {
144 fillValues( smtpAccountBox->currentItem() ); 145 fillValues( smtpAccountBox->currentItem() );
145 } else { 146 } else {
146 QMessageBox::information( 0, i18n( "Problem" ), 147 QMessageBox::information( 0, i18n( "Problem" ),
147 i18n( "Please create an\nSMTP account first.\nThe SMTP is needed\nfor sending mail.\n" ), 148 i18n( "Please create an\nSMTP account first.\nThe SMTP is needed\nfor sending mail.\n" ),
148 i18n( "Ok" ) ); 149 i18n( "Ok" ) );
149 return; 150 return;
150 } 151 }
151 connect( smtpAccountBox, SIGNAL( activated(int) ), SLOT( fillValues(int) ) ); 152 connect( smtpAccountBox, SIGNAL( activated(int) ), SLOT( fillValues(int) ) );
152 connect( SaveSigButton, SIGNAL( clicked() ), SLOT( saveSig()) ); 153 connect( SaveSigButton, SIGNAL( clicked() ), SLOT( saveSig()) );
153 if ( smtpAccountBox->count()) 154 if ( smtpAccountBox->count())
154 fillValues(0); 155 fillValues(0);
155 156
156} 157}
157 158
158void ComposeMail::fillSettings() 159void ComposeMail::fillSettings()
159{ 160{
160 if ( QApplication::desktop()->width() < 320 ) 161 if ( QApplication::desktop()->width() < 320 )
161 fromBox->setMaximumWidth( 100 ); 162 fromBox->setMaximumWidth( 100 );
162 QStringList mailList = QStringList::split(";",KOPrefs::instance()->mEmail); 163 QStringList mailList = QStringList::split(";",KOPrefs::instance()->mEmail);
163 QStringList::ConstIterator sit = mailList.begin(); 164 QStringList::ConstIterator sit = mailList.begin();
164 int pref = 0; 165 int pref = 0;
165 for (;sit!=mailList.end();++sit) { 166 for (;sit!=mailList.end();++sit) {
166 fromBox->insertItem((*sit)); 167 fromBox->insertItem((*sit));
167 } 168 }
168 senderNameEdit->setText(KOPrefs::instance()->mName); 169 senderNameEdit->setText(KOPrefs::instance()->mName);
169} 170}
170void ComposeMail::saveSig() 171void ComposeMail::saveSig()
171{ 172{
172 if ( smtpAccountBox->count()) { 173 if ( smtpAccountBox->count()) {
173 int cur = smtpAccountBox->currentItem (); 174 int cur = smtpAccountBox->currentItem ();
174 SMTPaccount *smtp = smtpAccounts.at( cur ); 175 SMTPaccount *smtp = smtpAccounts.at( cur );
175 if ( smtp ) 176 if ( smtp )
176 smtp->setSignature( sigMultiLine->text()); 177 smtp->setSignature( sigMultiLine->text());
177 } 178 }
178} 179}
179void ComposeMail::saveAsDraft() 180void ComposeMail::saveAsDraft()
180{ 181{
181 182
182 Opie::Core::OSmartPointer<Mail> mail= new Mail(); 183 Opie::Core::OSmartPointer<Mail> mail= new Mail();
183 mail->setMail(fromBox->currentText()); 184 mail->setMail(fromBox->currentText());
184 mail->setTo( toLine->text() ); 185 mail->setTo( toLine->text() );
185 mail->setName(senderNameEdit->text()); 186 mail->setName(senderNameEdit->text());
186 mail->setCC( ccLine->text() ); 187 mail->setCC( ccLine->text() );
187 mail->setBCC( bccLine->text() ); 188 mail->setBCC( bccLine->text() );
188 mail->setReply( replyLine->text() ); 189 mail->setReply( replyLine->text() );
189 mail->setSubject( subjectLine->text() ); 190 mail->setSubject( subjectLine->text() );
190 if (!m_replyid.isEmpty()) { 191 if (!m_replyid.isEmpty()) {
191 QStringList ids; 192 QStringList ids;
192 ids.append(m_replyid); 193 ids.append(m_replyid);
193 mail->setInreply(ids); 194 mail->setInreply(ids);
194 } 195 }
195 QString txt = message->text(); 196 QString txt = message->text();
196 if ( !sigMultiLine->text().isEmpty() ) { 197 if ( !sigMultiLine->text().isEmpty() ) {
197 txt.append( "\n--\n" ); 198 txt.append( "\n--\n" );
198 txt.append( sigMultiLine->text() ); 199 txt.append( sigMultiLine->text() );
199 } 200 }
200 mail->setMessage( txt ); 201 mail->setMessage( txt );
201 mail->setCharset (mEncoding); 202 mail->setCharset (mEncoding);
202 /* only use the default drafts folder name! */ 203 /* only use the default drafts folder name! */
203 Storemail wrapper(AbstractMail::draftFolder()); 204 Storemail wrapper(AbstractMail::draftFolder());
204 wrapper.storeMail(mail); 205 wrapper.storeMail(mail);
205 206
206 AttachViewItem *it = (AttachViewItem *) attList->firstChild(); 207 AttachViewItem *it = (AttachViewItem *) attList->firstChild();
207 /* attachments we will ignore! */ 208 /* attachments we will ignore! */
208 if ( it != 0 ) { 209 if ( it != 0 ) {
209 if ( warnAttach ) 210 if ( warnAttach )
210 QMessageBox::warning(0,i18n("Store message"), 211 QMessageBox::warning(0,i18n("Store message"),
211 i18n("<center>Attachments will not be stored in \"Draft\" folder</center>")); 212 i18n("<center>Attachments will not be stored in \"Draft\" folder</center>"));
212 warnAttach = false; 213 warnAttach = false;
213 } 214 }
214 setStatus( i18n("Mail saved as draft!") ); 215 setStatus( i18n("Mail saved as draft!") );
215} 216}
216void ComposeMail::clearStatus() 217void ComposeMail::clearStatus()
217{ 218{
218 topLevelWidget()->setCaption( i18n("Compose mail") ); 219 topLevelWidget()->setCaption( i18n("Compose mail") );
219} 220}
220void ComposeMail::setStatus( QString status ) 221void ComposeMail::setStatus( QString status )
221{ 222{
222 topLevelWidget()->setCaption( status ); 223 topLevelWidget()->setCaption( status );
223 QTimer::singleShot ( 10000, this, SLOT( clearStatus() ) ) ; 224 QTimer::singleShot ( 10000, this, SLOT( clearStatus() ) ) ;
224} 225}
225void ComposeMail::pickAddress( ) 226void ComposeMail::pickAddress( )
226{ 227{
227 228
228 QLineEdit *line = mPickLineEdit; 229 QLineEdit *line = mPickLineEdit;
229 if ( line == 0 ) 230 if ( line == 0 )
230 return; 231 return;
231#ifdef DESKTOP_VERSION 232#ifdef DESKTOP_VERSION
232 //qDebug(" ComposeMail::pickAddress "); 233 //qDebug(" ComposeMail::pickAddress ");
233 QString names ;//= AddressPicker::getNames(); 234 QString names ;//= AddressPicker::getNames();
234 235
235 KABC::Addressee::List list = KABC::AddresseeDialog::getAddressees(this); 236 KABC::Addressee::List list = KABC::AddresseeDialog::getAddressees(this);
236 uint i=0; 237 uint i=0;
237 for (i=0; i < list.count(); i++) { 238 for (i=0; i < list.count(); i++) {
238 if ( !list[i].preferredEmail().isEmpty()) { 239 if ( !list[i].preferredEmail().isEmpty()) {
239 if ( ! names.isEmpty() ) 240 if ( ! names.isEmpty() )
240 names+= ","; 241 names+= ",";
241 names+= "\""+list[i].realName() +"\"<" +list[i].preferredEmail() +">"; 242 names+= "\""+list[i].realName() +"\"<" +list[i].preferredEmail() +">";
242 243
243 } 244 }
244 } 245 }
245 246
246 247
247 if ( line->text().isEmpty() ) { 248 if ( line->text().isEmpty() ) {
248 line->setText( names ); 249 line->setText( names );
249 } else if ( !names.isEmpty() ) { 250 } else if ( !names.isEmpty() ) {
250 line->setText( line->text() + ", " + names ); 251 line->setText( line->text() + ", " + names );
251 } 252 }
252#else 253#else
253 bool res = ExternalAppHandler::instance()->requestNameEmailUidListFromKAPI("QPE/Application/ompi", this->name() /* name is here the unique uid*/); 254 bool res = ExternalAppHandler::instance()->requestNameEmailUidListFromKAPI("QPE/Application/ompi", this->name() /* name is here the unique uid*/);
254 // the result should now arrive through method insertAttendees 255 // the result should now arrive through method insertAttendees
255#endif 256#endif
256} 257}
257//the map includes name/email pairs, that comes from Ka/Pi 258//the map includes name/email pairs, that comes from Ka/Pi
258void ComposeMail::insertAttendees(const QString& uid,const QStringList& nameList,const QStringList& emailList,const QStringList& uidList) 259void ComposeMail::insertAttendees(const QString& uid,const QStringList& nameList,const QStringList& emailList,const QStringList& uidList)
259{ 260{
260 //qDebug("ComposeMail::insertAttendees "); 261 //qDebug("ComposeMail::insertAttendees ");
261 raise(); 262 raise();
262 263
264 QString UID = uid;
265 if ( uid.left( 18 ) == (this->name() +QString("pick2")) ) {
266 mPickLineEdit = toLine;
267 UID = this->name();
268 subjectLine->setText( uid.mid( 18 ) );
269 }
270 //qDebug("ccc %s %s ", uid.latin1(), this->name());
263 if ( mPickLineEdit == 0 ) { //whoami received 271 if ( mPickLineEdit == 0 ) { //whoami received
264 QString defmail = uidList[0]; 272 QString defmail = uidList[0];
265 if ( emailList.count() == 0 ) 273 if ( emailList.count() == 0 )
266 QMessageBox::information( 0, i18n( "Hint" ), 274 QMessageBox::information( 0, i18n( "Hint" ),
267 i18n( "Please apply\n\"Set Who Am I\"\nin KA/Pi to get the from\nfield automatically filled out!\n" ), 275 i18n( "Please apply\n\"Set Who Am I\"\nin KA/Pi to get the from\nfield automatically filled out!\n" ),
268 i18n( "Ok" ) ); 276 i18n( "Ok" ) );
269 if (defmail.length()!=0) { 277 if (defmail.length()!=0) {
270 fromBox->insertItem(defmail); 278 fromBox->insertItem(defmail);
271 } 279 }
272 QStringList::ConstIterator sit = emailList.begin(); 280 QStringList::ConstIterator sit = emailList.begin();
273 int pref = 0; 281 int pref = 0;
274 for (;sit!=emailList.end();++sit) { 282 for (;sit!=emailList.end();++sit) {
275 if ( (*sit)==defmail) 283 if ( (*sit)==defmail)
276 continue; 284 continue;
277 fromBox->insertItem((*sit)); 285 fromBox->insertItem((*sit));
278 } 286 }
279 senderNameEdit->setText(nameList[0]); 287 senderNameEdit->setText(nameList[0]);
280 return; 288 return;
281 } 289 }
282 QString names ; 290 QString names ;
283 QLineEdit *line = mPickLineEdit; 291 QLineEdit *line = mPickLineEdit;
284 if (uid == this->name()) 292 if (UID == this->name())
285 { 293 {
286 for ( int i = 0; i < nameList.count(); i++) 294 for ( int i = 0; i < nameList.count(); i++)
287 { 295 {
288 QString _name = nameList[i]; 296 QString _name = nameList[i];
289 QString _email = emailList[i]; 297 QString _email = emailList[i];
290 QString _uid = uidList[i]; 298 QString _uid = uidList[i];
291 if ( ! _email.isEmpty() ) { 299 if ( ! _email.isEmpty() ) {
292 if ( ! names.isEmpty() ) 300 if ( ! names.isEmpty() )
293 names+= ","; 301 names+= ",";
294 names+= "\""+_name +"\"<" +_email +">"; 302 names+= "\""+_name +"\"<" +_email +">";
295 } 303 }
296 } 304 }
297 } 305 }
298 if ( line->text().isEmpty() ) { 306 if ( line->text().isEmpty() ) {
299 line->setText( names ); 307 line->setText( names );
300 } else if ( !names.isEmpty() ) { 308 } else if ( !names.isEmpty() ) {
301 line->setText( line->text() + ", " + names ); 309 line->setText( line->text() + ", " + names );
302 } 310 }
303} 311}
304 312
305void ComposeMail::setTo( const QString & to ) 313void ComposeMail::setTo( const QString & to )
306{ 314{
307 toLine->setText( to ); 315 toLine->setText( to );
308} 316}
309 317
310void ComposeMail::setSubject( const QString & subject ) 318void ComposeMail::setSubject( const QString & subject )
311{ 319{
312 subjectLine->setText( subject ); 320 subjectLine->setText( subject );
313} 321}
314 322
315void ComposeMail::setInReplyTo( const QString & messageId ) 323void ComposeMail::setInReplyTo( const QString & messageId )
316{ 324{
317 m_replyid = messageId; 325 m_replyid = messageId;
318} 326}
319 327
320void ComposeMail::setMessage( const QString & text ) 328void ComposeMail::setMessage( const QString & text )
321{ 329{
322 message->setText( text ); 330 message->setText( text );
323} 331}
324 332
325 333
326void ComposeMail::pickAddressTo() 334void ComposeMail::pickAddressTo()
327{ 335{
328 mPickLineEdit = toLine; 336 mPickLineEdit = toLine;
329 pickAddress( ); 337 pickAddress( );
330} 338}
331 339
332void ComposeMail::pickAddressCC() 340void ComposeMail::pickAddressCC()
333{ 341{
334 mPickLineEdit = ccLine; 342 mPickLineEdit = ccLine;
335 pickAddress( ); 343 pickAddress( );
336} 344}
337 345
338void ComposeMail::pickAddressBCC() 346void ComposeMail::pickAddressBCC()
339{ 347{
340 mPickLineEdit = bccLine; 348 mPickLineEdit = bccLine;
341 pickAddress( ); 349 pickAddress( );
342} 350}
343 351
344void ComposeMail::pickAddressReply() 352void ComposeMail::pickAddressReply()
345{ 353{
346 mPickLineEdit = replyLine; 354 mPickLineEdit = replyLine;
347 pickAddress( ); 355 pickAddress( );
348} 356}
349 357
350void ComposeMail::fillValues( int current ) 358void ComposeMail::fillValues( int current )
351{ 359{
352#if 0 360#if 0
353 SMTPaccount *smtp = smtpAccounts.at( current ); 361 SMTPaccount *smtp = smtpAccounts.at( current );
354 ccLine->clear(); 362 ccLine->clear();
355 if ( smtp->getUseCC() ) { 363 if ( smtp->getUseCC() ) {
356 ccLine->setText( smtp->getCC() ); 364 ccLine->setText( smtp->getCC() );
357 } 365 }
358 bccLine->clear(); 366 bccLine->clear();
359 if ( smtp->getUseBCC() ) { 367 if ( smtp->getUseBCC() ) {
360 bccLine->setText( smtp->getBCC() ); 368 bccLine->setText( smtp->getBCC() );
361 } 369 }
362 replyLine->clear(); 370 replyLine->clear();
363 if ( smtp->getUseReply() ) { 371 if ( smtp->getUseReply() ) {
364 replyLine->setText( smtp->getReply() ); 372 replyLine->setText( smtp->getReply() );
365 } 373 }
366#endif 374#endif
367 SMTPaccount *smtp = smtpAccounts.at( current ); 375 SMTPaccount *smtp = smtpAccounts.at( current );
368 if ( smtp ) 376 if ( smtp )
369 sigMultiLine->setText( smtp->getSignature() ); 377 sigMultiLine->setText( smtp->getSignature() );
370} 378}
371 379
372void ComposeMail::slotAdjustColumns() 380void ComposeMail::slotAdjustColumns()
373{ 381{
374 int currPage = tabWidget->currentPageIndex(); 382 int currPage = tabWidget->currentPageIndex();
375 383
376 tabWidget->showPage( attachTab ); 384 tabWidget->showPage( attachTab );
377 attList->setColumnWidth( 0, attList->visibleWidth() - 80 ); 385 attList->setColumnWidth( 0, attList->visibleWidth() - 80 );
378 attList->setColumnWidth( 1, 80 ); 386 attList->setColumnWidth( 1, 80 );
379 387
380 tabWidget->setCurrentPage( currPage ); 388 tabWidget->setCurrentPage( currPage );
381} 389}
382 390
383void ComposeMail::addAttachment() 391void ComposeMail::addAttachment()
384{ 392{
385 QString lnk = KFileDialog::getOpenFileName( "", "Add Attachment", this ); 393 QString lnk = KFileDialog::getOpenFileName( "", "Add Attachment", this );
386 if ( !lnk.isEmpty() ) { 394 if ( !lnk.isEmpty() ) {
387 Attachment *att = new Attachment( lnk ); 395 Attachment *att = new Attachment( lnk );
388 (void) new AttachViewItem( attList, att ); 396 (void) new AttachViewItem( attList, att );
389 } 397 }
390} 398}
391 399
392void ComposeMail::removeAttachment() 400void ComposeMail::removeAttachment()
393{ 401{
394 if ( !attList->currentItem() ) { 402 if ( !attList->currentItem() ) {
395 QMessageBox::information( this, i18n( "Error" ), 403 QMessageBox::information( this, i18n( "Error" ),
396 i18n( "<p>Please select a File.</p>" ), 404 i18n( "<p>Please select a File.</p>" ),
397 i18n( "Ok" ) ); 405 i18n( "Ok" ) );
398 } else { 406 } else {
399 attList->takeItem( attList->currentItem() ); 407 attList->takeItem( attList->currentItem() );
400 } 408 }
401} 409}
402 410
403void ComposeMail::accept() 411void ComposeMail::accept()
404{ 412{
405 if ( smtpAccountBox->count() == 0 ) { 413 if ( smtpAccountBox->count() == 0 ) {
406 414
407 reject(); 415 reject();
408 return; 416 return;
409 } 417 }
410 418
411 if (! checkBoxLater->isChecked() ) { 419 if (! checkBoxLater->isChecked() ) {
412 int yesno = QMessageBox::warning(0,i18n("Stop editing message"), 420 int yesno = QMessageBox::warning(0,i18n("Stop editing message"),
413 i18n("Send this message?"), 421 i18n("Send this message?"),
414 i18n("Yes"), 422 i18n("Yes"),
415 i18n("Cancel")); 423 i18n("Cancel"));
416 424
417 if (yesno == 1) { 425 if (yesno == 1) {
418 return; 426 return;
419 } 427 }
420 } 428 }
421#if 0 429#if 0
422 odebug << "Sending Mail with " 430 odebug << "Sending Mail with "
423 << smtpAccounts.at( smtpAccountBox->currentItem() )->getAccountName() << oendl; 431 << smtpAccounts.at( smtpAccountBox->currentItem() )->getAccountName() << oendl;
424#endif 432#endif
425 Opie::Core::OSmartPointer<Mail> mail=new Mail; 433 Opie::Core::OSmartPointer<Mail> mail=new Mail;
426 434
427 SMTPaccount *smtp = smtpAccounts.at( smtpAccountBox->currentItem() ); 435 SMTPaccount *smtp = smtpAccounts.at( smtpAccountBox->currentItem() );
428 mail->setMail(fromBox->currentText()); 436 mail->setMail(fromBox->currentText());
429 437
430 if ( !toLine->text().isEmpty() ) { 438 if ( !toLine->text().isEmpty() ) {
431 mail->setTo( toLine->text() ); 439 mail->setTo( toLine->text() );
432 } else { 440 } else {
433 QMessageBox::warning(0,i18n("Sending mail"), 441 QMessageBox::warning(0,i18n("Sending mail"),
434 i18n("No Receiver spezified" ) ); 442 i18n("No Receiver spezified" ) );
435 return; 443 return;
436 } 444 }
437 445
438 mail->setName(senderNameEdit->text()); 446 mail->setName(senderNameEdit->text());
439 mail->setCC( ccLine->text() ); 447 mail->setCC( ccLine->text() );
440 mail->setBCC( bccLine->text() ); 448 mail->setBCC( bccLine->text() );
441 mail->setReply( replyLine->text() ); 449 mail->setReply( replyLine->text() );
442 mail->setSubject( subjectLine->text() ); 450 mail->setSubject( subjectLine->text() );
443 if (!m_replyid.isEmpty()) { 451 if (!m_replyid.isEmpty()) {
444 QStringList ids; 452 QStringList ids;
445 ids.append(m_replyid); 453 ids.append(m_replyid);
446 mail->setInreply(ids); 454 mail->setInreply(ids);
447 } 455 }
448 QString txt = message->text(); 456 QString txt = message->text();
449 if ( !sigMultiLine->text().isEmpty() ) { 457 if ( !sigMultiLine->text().isEmpty() ) {
450 txt.append( "\n--\n" ); 458 txt.append( "\n--\n" );
451 txt.append( sigMultiLine->text() ); 459 txt.append( sigMultiLine->text() );
452 } 460 }
453 mail->setMessage( txt ); 461 mail->setMessage( txt );
454 mail->setCharset (mEncoding); 462 mail->setCharset (mEncoding);
455 AttachViewItem *it = (AttachViewItem *) attList->firstChild(); 463 AttachViewItem *it = (AttachViewItem *) attList->firstChild();
456 while ( it != 0 ) { 464 while ( it != 0 ) {
457 mail->addAttachment( it->getAttachment() ); 465 mail->addAttachment( it->getAttachment() );
458 it = (AttachViewItem *) it->nextSibling(); 466 it = (AttachViewItem *) it->nextSibling();
459 } 467 }
460 468
461 SMTPwrapper wrapper( smtp ); 469 SMTPwrapper wrapper( smtp );
462 if ( wrapper.sendMail( mail,checkBoxLater->isChecked() ) ) 470 if ( wrapper.sendMail( mail,checkBoxLater->isChecked() ) )
463 setStatus( tr ("Mail sent")); 471 setStatus( tr ("Mail sent"));
464 else { 472 else {
465 setStatus( tr ("Error: Something went wrong. Nothing sent")); 473 setStatus( tr ("Error: Something went wrong. Nothing sent"));
466 return; 474 return;
467 } 475 }
468 476
469 477
470 QDialog::accept(); 478 QDialog::accept();
471} 479}
472 480
473void ComposeMail::reject() 481void ComposeMail::reject()
474{ 482{
475 //qDebug("ComposeMail::reject() "); 483 //qDebug("ComposeMail::reject() ");
476 int yesno = QMessageBox::warning(0,i18n("Store message?"), 484 int yesno = QMessageBox::warning(0,i18n("Store message?"),
477 i18n("Store message into drafts?\n"), 485 i18n("Store message into drafts?\n"),
478 i18n("Yes"), 486 i18n("Yes"),
479 i18n("No")); 487 i18n("No"));
480 488
481 //qDebug("button %d ", yesno); 489 //qDebug("button %d ", yesno);
482 if (yesno == 0) { 490 if (yesno == 0) {
483 if ( toLine->text().isEmpty() ) { 491 if ( toLine->text().isEmpty() ) {
484 QMessageBox::warning(0,i18n("Sending mail"), 492 QMessageBox::warning(0,i18n("Sending mail"),
485 i18n("No Receiver spezified" ) ); 493 i18n("No Receiver spezified" ) );
486 return; 494 return;
487 } 495 }
488 saveAsDraft(); 496 saveAsDraft();
489 } 497 }
490 if (yesno == 2) { 498 if (yesno == 2) {
491 qDebug("return "); 499 qDebug("return ");
492 return; 500 return;
493 } 501 }
494 QDialog::reject(); 502 QDialog::reject();
495} 503}
496 504
497void ComposeMail::setCharset(const QString& charset) 505void ComposeMail::setCharset(const QString& charset)
498{ 506{
499 if ( !charset.isEmpty() ) 507 if ( !charset.isEmpty() )
500 mEncoding = charset; 508 mEncoding = charset;
501 qDebug("ComposeMail::setCharset %s ", mEncoding.latin1()); 509 qDebug("ComposeMail::setCharset %s ", mEncoding.latin1());
502} 510}
503ComposeMail::~ComposeMail() 511ComposeMail::~ComposeMail()
504{ 512{
505} 513}
506 514
507void ComposeMail::reEditMail(const RecMailP&current) 515void ComposeMail::reEditMail(const RecMailP&current)
508{ 516{
509 RecMailP data = current; 517 RecMailP data = current;
510 RecBodyP body = data->Wrapper()->fetchBody(current); 518 RecBodyP body = data->Wrapper()->fetchBody(current);
511 519
512 message->setText(body->Bodytext()); 520 message->setText(body->Bodytext());
513 subjectLine->setText( data->getSubject()); 521 subjectLine->setText( data->getSubject());
514 toLine->setText(data->To().join(",")); 522 toLine->setText(data->To().join(","));
515 ccLine->setText(data->CC().join(",")); 523 ccLine->setText(data->CC().join(","));
516 bccLine->setText(data->Bcc().join(",")); 524 bccLine->setText(data->Bcc().join(","));
517 replyLine->setText(data->Replyto()); 525 replyLine->setText(data->Replyto());
518 setCharset(body->getCharset()); 526 setCharset(body->getCharset());
519} 527}
520 528
521AttachViewItem::AttachViewItem( QListView *parent, Attachment *att ) 529AttachViewItem::AttachViewItem( QListView *parent, Attachment *att )
522 : QListViewItem( parent ) 530 : QListViewItem( parent )
523{ 531{
524 attachment = att; 532 attachment = att;
525 if ( !attachment->getPixmap().isNull() ) 533 if ( !attachment->getPixmap().isNull() )
526 setPixmap( 0,attachment->getPixmap() ); 534 setPixmap( 0,attachment->getPixmap() );
527 setText( 0, att->getName().isEmpty() ? att->getFileName() : att->getName() ); 535 setText( 0, att->getName().isEmpty() ? att->getFileName() : att->getName() );
528 setText( 1, QString::number( att->getSize() ) ); 536 setText( 1, QString::number( att->getSize() ) );
529} 537}
530 538
diff --git a/kmicromail/opiemail.cpp b/kmicromail/opiemail.cpp
index f56711d..e159b73 100644
--- a/kmicromail/opiemail.cpp
+++ b/kmicromail/opiemail.cpp
@@ -1,641 +1,672 @@
1// CHANGED 2004-09-31 Lutz Rogowski 1// CHANGED 2004-09-31 Lutz Rogowski
2// CHANGED 2004-08-06 Lutz Rogowski 2// CHANGED 2004-08-06 Lutz Rogowski
3 3
4 4
5#define protected public 5#define protected public
6#include <qwidget.h> 6#include <qwidget.h>
7#undef protected 7#undef protected
8#include "koprefsdialog.h" 8#include "koprefsdialog.h"
9#include <kapplication.h> 9#include <kapplication.h>
10#include <libkdepim/externalapphandler.h> 10#include <libkdepim/externalapphandler.h>
11#include <libkdepim/kpimglobalprefs.h> 11#include <libkdepim/kpimglobalprefs.h>
12#ifdef MINIKDE_KDIALOG_H 12#ifdef MINIKDE_KDIALOG_H
13#undef MINIKDE_KDIALOG_H 13#undef MINIKDE_KDIALOG_H
14#endif 14#endif
15#include "settingsdialog.h" 15#include "settingsdialog.h"
16#include "opiemail.h" 16#include "opiemail.h"
17#include "editaccounts.h" 17#include "editaccounts.h"
18#include "composemail.h" 18#include "composemail.h"
19#include "mailistviewitem.h" 19#include "mailistviewitem.h"
20#include "viewmail.h" 20#include "viewmail.h"
21#include "selectstore.h" 21#include "selectstore.h"
22#include "selectsmtp.h" 22#include "selectsmtp.h"
23#include "accountitem.h" 23#include "accountitem.h"
24#include "accountview.h" 24#include "accountview.h"
25#include "klocale.h" 25#include "klocale.h"
26 26
27#include <qmessagebox.h> 27#include <qmessagebox.h>
28#include <qtimer.h> 28#include <qtimer.h>
29#include <qcursor.h> 29#include <qcursor.h>
30#include <qtextbrowser.h> 30#include <qtextbrowser.h>
31#include <qregexp.h> 31#include <qregexp.h>
32#include <qpe/global.h> 32#include <qpe/global.h>
33 33
34#ifdef DESKTOP_VERSION 34#ifdef DESKTOP_VERSION
35#include <qapplication.h> 35#include <qapplication.h>
36#else 36#else
37#include <qpe/qpeapplication.h> 37#include <qpe/qpeapplication.h>
38#endif 38#endif
39#include <libmailwrapper/smtpwrapper.h> 39#include <libmailwrapper/smtpwrapper.h>
40#include <libmailwrapper/mailtypes.h> 40#include <libmailwrapper/mailtypes.h>
41#include <libmailwrapper/abstractmail.h> 41#include <libmailwrapper/abstractmail.h>
42#include "koprefs.h" 42#include "koprefs.h"
43 43
44//using namespace Opie::Core; 44//using namespace Opie::Core;
45 45
46OpieMail::OpieMail( QWidget *parent, const char *name ) 46OpieMail::OpieMail( QWidget *parent, const char *name )
47 : MainWindow( parent, name) //, WStyle_ContextHelp ) 47 : MainWindow( parent, name) //, WStyle_ContextHelp )
48{ 48{
49 mCurrentComposer = 0;
49 settings = new Settings(); 50 settings = new Settings();
50 tb = 0; 51 tb = 0;
51 setIcon(SmallIcon( "kmicromail" ) ); 52 setIcon(SmallIcon( "kmicromail" ) );
52 folderView->populate( settings->getAccounts() ); 53 folderView->populate( settings->getAccounts() );
53 54 connect(ExternalAppHandler::instance(), SIGNAL(receivedNameEmailUidListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&)),
55 this, SLOT(insertAttendees(const QString&, const QStringList&, const QStringList&, const QStringList&)));
54} 56}
55 57
56OpieMail::~OpieMail() 58OpieMail::~OpieMail()
57{ 59{
58 if (settings) delete settings; 60 if (settings) delete settings;
59 if ( tb ) 61 if ( tb )
60 delete tb; 62 delete tb;
61} 63}
62 64
63void OpieMail::appMessage(const QCString &msg, const QByteArray &data) 65void OpieMail::appMessage(const QCString &msg, const QByteArray &data)
64{ 66{
65 67
66} 68}
67#include <stdlib.h> 69#include <stdlib.h>
68void OpieMail::message(const QCString &msg, const QByteArray &data) 70void OpieMail::message(const QCString &msg, const QByteArray &data)
69{ 71{
70 // copied from old mail2 72 // copied from old mail2
71 static int ii = 0; 73 static int ii = 0;
72 //qDebug("QCOP CALL ############################# %d ", ii); 74 //qDebug("QCOP CALL ############################# %d ", ii);
73 //QString mess ( msg ); 75 //QString mess ( msg );
74 //qDebug("Message = %s ",mess.latin1()); 76 //qDebug("Message = %s ",mess.latin1());
75 ++ii; 77 ++ii;
76 //qDebug("KM:appMessage %d *%s* %x", ii, msg.data(), this); 78 //qDebug("KM:appMessage %d *%s* %x", ii, msg.data(), this);
77 79
78 mPendingEmail = QString::null; 80 mPendingEmail = QString::null;
79 mPendingName = QString::null; 81 mPendingName = QString::null;
80 if (msg == "writeMail(QString,QString)") 82 if (msg == "writeMail(QString,QString)")
81 { 83 {
82 //qDebug("writeMail(QString,QString) "); 84 //qDebug("writeMail(QString,QString) ");
83 QDataStream stream(data,IO_ReadOnly); 85 QDataStream stream(data,IO_ReadOnly);
84 stream >> mPendingName >> mPendingEmail; 86 stream >> mPendingName >> mPendingEmail;
85 // removing the whitespaces at beginning and end is needed! 87 // removing the whitespaces at beginning and end is needed!
86 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) ); 88 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) );
87 } 89 }
88 else if (msg == "newMail()") 90 else if (msg == "newMail()")
89 { 91 {
90 //qDebug("slotComposeMail() "); 92 //qDebug("slotComposeMail() ");
91 // we cannot call slotComposeMail(); directly, because may be executing a QCOP call 93 // we cannot call slotComposeMail(); directly, because may be executing a QCOP call
92 // and a QCOP call does not like a processevents in his execution 94 // and a QCOP call does not like a processevents in his execution
93 // with the Qtimer we call slotComposeMail() after we reached the main event loop 95 // with the Qtimer we call slotComposeMail() after we reached the main event loop
94 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) ); 96 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) );
95 // slotComposeMail(); 97 // slotComposeMail();
96 } 98 }
97 else if (msg == "newMail(QString)") 99 else if (msg == "newMail(QString)")
98 { 100 {
99 //qDebug(" newMail(QString)"); 101 //qDebug(" newMail(QString)");
100 QDataStream stream(data,IO_ReadOnly); 102 QDataStream stream(data,IO_ReadOnly);
101 stream >> mPendingName; 103 stream >> mPendingName;
102 // the format is 104 // the format is
103 // NAME <EMAIL>:SUBJECT 105 // NAME <EMAIL>:SUBJECT
104 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) ); 106 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) );
105 } else { 107 } else {
106 mPendingData = data; 108 mPendingData = data;
107 mPendingMessage = msg; 109 mPendingMessage = msg;
108 QTimer::singleShot ( 50, this, SLOT(slotExtAppHandler() ) ); 110 QTimer::singleShot ( 50, this, SLOT(slotExtAppHandler() ) );
109 } 111 }
110 112
111 //qDebug("END OpieMail::message "); 113 //qDebug("END OpieMail::message ");
112} 114}
113void OpieMail::slotExtAppHandler() 115void OpieMail::slotExtAppHandler()
114{ 116{
115 ExternalAppHandler::instance()->appMessage ( mPendingMessage, mPendingData ); 117 ExternalAppHandler::instance()->appMessage ( mPendingMessage, mPendingData );
116} 118}
117void OpieMail::slotwriteMail2(const QString& namemail ) 119void OpieMail::slotwriteMail2(const QString& namemail )
118{ 120{
119 //qDebug("OpieMail::slotwriteMail2 "); 121 //qDebug("OpieMail::slotwriteMail2 ");
120 //qApp->processEvents(); 122 //qApp->processEvents();
121 ComposeMail compose( settings, this, 0, true ); 123 ComposeMail compose( settings, this, 0, true );
122 if ( !namemail.isEmpty() ) { 124 if ( !namemail.isEmpty() ) {
123 QString to = namemail; 125 QString to = namemail;
124 if ( namemail.find( " <") > 1 ) { 126 if ( namemail.find( " <") > 1 ) {
125 to = "\"" +to.replace( QRegExp( " <"), "\" <") ; 127 to = "\"" +to.replace( QRegExp( " <"), "\" <") ;
126 } else 128 } else
127 if ( namemail.find( "<") > 1 ) { 129 if ( namemail.find( "<") > 1 ) {
128 to = "\"" +to.replace( QRegExp( "<"), "\" <") ; 130 to = "\"" +to.replace( QRegExp( "<"), "\" <") ;
129 } 131 }
130 int sub = to.find( ">:"); 132 int sub = to.find( ">:");
131 if ( sub > 0 ) { 133 if ( sub > 0 ) {
132 compose.setTo( to.left(sub+1) ); 134 compose.setTo( to.left(sub+1) );
133 compose.setSubject( to.mid(sub+2) ); 135 compose.setSubject( to.mid(sub+2) );
134 } else 136 } else
135 compose.setTo( to ); 137 compose.setTo( to );
136 } 138 }
137 compose.slotAdjustColumns(); 139 compose.slotAdjustColumns();
138#ifndef DESKTOP_VERSION 140#ifndef DESKTOP_VERSION
139 compose.showMaximized(); 141 compose.showMaximized();
140#endif 142#endif
143 mCurrentComposer = &compose;
141 compose.exec(); 144 compose.exec();
145 mCurrentComposer = 0;
142 raise(); 146 raise();
143 //qDebug("retttich "); 147 //qDebug("retttich ");
144} 148}
145void OpieMail::slotwriteMail(const QString&name,const QString&email) 149void OpieMail::slotwriteMail(const QString&name,const QString&email)
146{ 150{
147 // qDebug("OpieMail::slotwriteMail "); 151 // qDebug("OpieMail::slotwriteMail ");
148 ComposeMail compose( settings, this, 0, true ); 152 ComposeMail compose( settings, this, 0, true );
149 if (!email.isEmpty()) 153 if (!email.isEmpty())
150 { 154 {
151 if (!name.isEmpty()) 155 if (!name.isEmpty())
152 { 156 {
153 compose.setTo("\"" + name + "\"" + " " + "<"+ email + ">"); 157 compose.setTo("\"" + name + "\"" + " " + "<"+ email + ">");
154 } 158 }
155 else 159 else
156 { 160 {
157 compose.setTo(email); 161 compose.setTo(email);
158 } 162 }
159 } 163 }
160 compose.slotAdjustColumns(); 164 compose.slotAdjustColumns();
161#ifndef DESKTOP_VERSION 165#ifndef DESKTOP_VERSION
162 compose.showMaximized(); 166 compose.showMaximized();
163#endif 167#endif
168
169 mCurrentComposer = &compose;
164 compose.exec(); 170 compose.exec();
171 mCurrentComposer = 0;
165 raise(); 172 raise();
166} 173}
167 174
168void OpieMail::slotComposeMail() 175void OpieMail::slotComposeMail()
169{ 176{
170 if ( mPendingEmail == QString::null && mPendingName == QString::null) 177 if ( mPendingEmail == QString::null && mPendingName == QString::null)
171 slotwriteMail2( QString () ); 178 slotwriteMail2( QString () );
172 else { 179 else {
173 if ( mPendingEmail == QString::null ) 180 if ( mPendingEmail == QString::null )
174 slotwriteMail2( mPendingName ); 181 slotwriteMail2( mPendingName );
175 else 182 else
176 slotwriteMail( mPendingName, mPendingEmail ); 183 slotwriteMail( mPendingName, mPendingEmail );
177 } 184 }
178 //slotwriteMail(0l,0l); 185 //slotwriteMail(0l,0l);
179} 186}
180 187
181void OpieMail::slotSendQueued() 188void OpieMail::slotSendQueued()
182{ 189{
183 SMTPaccount *smtp = 0; 190 SMTPaccount *smtp = 0;
184 191
185 QList<Account> list = settings->getAccounts(); 192 QList<Account> list = settings->getAccounts();
186 QList<SMTPaccount> smtpList; 193 QList<SMTPaccount> smtpList;
187 smtpList.setAutoDelete(false); 194 smtpList.setAutoDelete(false);
188 Account *it; 195 Account *it;
189 for ( it = list.first(); it; it = list.next() ) 196 for ( it = list.first(); it; it = list.next() )
190 { 197 {
191 if ( it->getType() == MAILLIB::A_SMTP ) 198 if ( it->getType() == MAILLIB::A_SMTP )
192 { 199 {
193 smtp = static_cast<SMTPaccount *>(it); 200 smtp = static_cast<SMTPaccount *>(it);
194 smtpList.append(smtp); 201 smtpList.append(smtp);
195 } 202 }
196 } 203 }
197 if (smtpList.count()==0) 204 if (smtpList.count()==0)
198 { 205 {
199 QMessageBox::information(0,i18n("Info"),i18n("Define a smtp account first!\n")); 206 QMessageBox::information(0,i18n("Info"),i18n("Define a smtp account first!\n"));
200 return; 207 return;
201 } 208 }
202 if ( QMessageBox::warning(this, i18n("Sending all mails"), i18n("Do you really want to send\nall queued mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::No ) 209 if ( QMessageBox::warning(this, i18n("Sending all mails"), i18n("Do you really want to send\nall queued mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::No )
203 return; 210 return;
204 if (smtpList.count()==1) 211 if (smtpList.count()==1)
205 { 212 {
206 smtp = smtpList.at(0); 213 smtp = smtpList.at(0);
207 } 214 }
208 else 215 else
209 { 216 {
210 smtp = 0; 217 smtp = 0;
211 selectsmtp selsmtp; 218 selectsmtp selsmtp;
212 selsmtp.setSelectionlist(&smtpList); 219 selsmtp.setSelectionlist(&smtpList);
213#ifndef DESKTOP_VERSION 220#ifndef DESKTOP_VERSION
214 selsmtp.showMaximized(); 221 selsmtp.showMaximized();
215#endif 222#endif
216 if ( selsmtp.exec() == QDialog::Accepted ) 223 if ( selsmtp.exec() == QDialog::Accepted )
217 { 224 {
218 smtp = selsmtp.selected_smtp(); 225 smtp = selsmtp.selected_smtp();
219 } 226 }
220 } 227 }
221 if (smtp) 228 if (smtp)
222 { 229 {
223 230
224 Global::statusMessage("Sending mails...!"); 231 Global::statusMessage("Sending mails...!");
225 SMTPwrapper * wrap = new SMTPwrapper(smtp); 232 SMTPwrapper * wrap = new SMTPwrapper(smtp);
226 if ( wrap->flushOutbox() ) 233 if ( wrap->flushOutbox() )
227 { 234 {
228 Global::statusMessage("Mails sent!"); 235 Global::statusMessage("Mails sent!");
229 } 236 }
230 delete wrap; 237 delete wrap;
231 } 238 }
232 // pending refresh list view, if outgoing is displayed 239 // pending refresh list view, if outgoing is displayed
233} 240}
234 241
235void OpieMail::slotSearchMails() 242void OpieMail::slotSearchMails()
236{ 243{
237 qDebug("OpieMail::slotSearchMails():not implemented "); 244 qDebug("OpieMail::slotSearchMails():not implemented ");
238} 245}
239 246
240void OpieMail::slotEditSettings() 247void OpieMail::slotEditSettings()
241{ 248{
242 249
243 KOPrefsDialog settingsDialog( this, "koprefs", true ); 250 KOPrefsDialog settingsDialog( this, "koprefs", true );
244#ifndef DESKTOP_VERSION 251#ifndef DESKTOP_VERSION
245 settingsDialog.showMaximized(); 252 settingsDialog.showMaximized();
246#endif 253#endif
247 settingsDialog.exec(); 254 settingsDialog.exec();
248 255
249 slotSetCodec( KOPrefs::instance()->mCurrentCodec ); 256 slotSetCodec( KOPrefs::instance()->mCurrentCodec );
250 // KApplication::execDialog(settingsDialog); 257 // KApplication::execDialog(settingsDialog);
251} 258}
252 259
253void OpieMail::slotEditAccounts() 260void OpieMail::slotEditAccounts()
254{ 261{
255 EditAccounts eaDialog( settings, this, 0, true ); 262 EditAccounts eaDialog( settings, this, 0, true );
256 eaDialog.slotAdjustColumns(); 263 eaDialog.slotAdjustColumns();
257#ifndef DESKTOP_VERSION 264#ifndef DESKTOP_VERSION
258 eaDialog.showMaximized(); 265 eaDialog.showMaximized();
259#endif 266#endif
260 eaDialog.exec(); 267 eaDialog.exec();
261 if ( settings ) delete settings; 268 if ( settings ) delete settings;
262 settings = new Settings(); 269 settings = new Settings();
263 270
264 folderView->populate( settings->getAccounts() ); 271 folderView->populate( settings->getAccounts() );
265} 272}
266void OpieMail::replyMail() 273void OpieMail::replyMail()
267{ 274{
268 275
269 QListViewItem*item = mailView->currentItem(); 276 QListViewItem*item = mailView->currentItem();
270 if (!item) return; 277 if (!item) return;
271 RecMailP mail = ((MailListViewItem*)item)->data(); 278 RecMailP mail = ((MailListViewItem*)item)->data();
272 RecBodyP body = folderView->fetchBody(mail); 279 RecBodyP body = folderView->fetchBody(mail);
273 280
274 QString rtext; 281 QString rtext;
275 rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose 282 rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose
276 .arg( mail->getFrom()) 283 .arg( mail->getFrom())
277 .arg( mail->getDate()); 284 .arg( mail->getDate());
278 285
279 QString text = body->Bodytext(); 286 QString text = body->Bodytext();
280 QStringList lines = QStringList::split(QRegExp("\\n"), text); 287 QStringList lines = QStringList::split(QRegExp("\\n"), text);
281 QStringList::Iterator it; 288 QStringList::Iterator it;
282 for (it = lines.begin(); it != lines.end(); it++) 289 for (it = lines.begin(); it != lines.end(); it++)
283 { 290 {
284 rtext += "> " + *it + "\n"; 291 rtext += "> " + *it + "\n";
285 } 292 }
286 rtext += "\n"; 293 rtext += "\n";
287 294
288 QString prefix; 295 QString prefix;
289 if ( mail->getSubject().find(QRegExp("^Re: .*$")) != -1) prefix = ""; 296 if ( mail->getSubject().find(QRegExp("^Re: .*$")) != -1) prefix = "";
290 else prefix = "Re: "; // no i18n on purpose 297 else prefix = "Re: "; // no i18n on purpose
291 298
292 Settings *settings = new Settings(); 299 Settings *settings = new Settings();
293 ComposeMail composer( settings ,this, 0, true); 300 ComposeMail composer( settings ,this, 0, true);
294 if (mail->Replyto().isEmpty()) { 301 if (mail->Replyto().isEmpty()) {
295 composer.setTo( mail->getFrom()); 302 composer.setTo( mail->getFrom());
296 } else { 303 } else {
297 composer.setTo( mail->Replyto()); 304 composer.setTo( mail->Replyto());
298 } 305 }
299 composer.setSubject( prefix + mail->getSubject()); 306 composer.setSubject( prefix + mail->getSubject());
300 composer.setMessage( rtext ); 307 composer.setMessage( rtext );
301 composer.setInReplyTo( mail->Msgid()); 308 composer.setInReplyTo( mail->Msgid());
302 composer.setCharset( body->getCharset() ); 309 composer.setCharset( body->getCharset() );
310
311 mCurrentComposer = &composer;
303 if ( QDialog::Accepted == KApplication::execDialog( &composer ) ) 312 if ( QDialog::Accepted == KApplication::execDialog( &composer ) )
304 { 313 {
305 mail->Wrapper()->answeredMail(mail); 314 mail->Wrapper()->answeredMail(mail);
306 } 315 }
316 mCurrentComposer = 0;
307 delete settings; 317 delete settings;
308 318
309} 319}
310void OpieMail::closeViewMail(ViewMail * vm) 320void OpieMail::closeViewMail(ViewMail * vm)
311{ 321{
312 vm->hide(); 322 vm->hide();
313} 323}
314 324
315void OpieMail::slotDownloadMail( ) 325void OpieMail::slotDownloadMail( )
316{ 326{
317 QListViewItem*item = mailView->currentItem(); 327 QListViewItem*item = mailView->currentItem();
318 if (!item ) { 328 if (!item ) {
319 Global::statusMessage("Error: No item slected!"); 329 Global::statusMessage("Error: No item slected!");
320 return; 330 return;
321 } 331 }
322 RecMailP mail = ((MailListViewItem*)item)->data(); 332 RecMailP mail = ((MailListViewItem*)item)->data();
323 Account * acc = mail->Wrapper()->getAccount(); 333 Account * acc = mail->Wrapper()->getAccount();
324 if ( !acc ) { 334 if ( !acc ) {
325 Global::statusMessage("Mail is already stored locally!"); 335 Global::statusMessage("Mail is already stored locally!");
326 return; 336 return;
327 } 337 }
328 QString lfName = acc->getLocalFolder(); 338 QString lfName = acc->getLocalFolder();
329 //qDebug("local folder " + lfName ); 339 //qDebug("local folder " + lfName );
330 if ( lfName.isEmpty() ) 340 if ( lfName.isEmpty() )
331 lfName = acc->getAccountName(); 341 lfName = acc->getAccountName();
332 AbstractMail* targetMail = folderView->allAccounts()[0]->getWrapper(); 342 AbstractMail* targetMail = folderView->allAccounts()[0]->getWrapper();
333 //qDebug("target %d %d ",targetMail,mail->Wrapper() ); 343 //qDebug("target %d %d ",targetMail,mail->Wrapper() );
334 if ( targetMail == mail->Wrapper() ) { 344 if ( targetMail == mail->Wrapper() ) {
335 Global::statusMessage("Mail is already locally stored!"); 345 Global::statusMessage("Mail is already locally stored!");
336 return; 346 return;
337 } 347 }
338 if ( !targetMail->createMbox(lfName)) { 348 if ( !targetMail->createMbox(lfName)) {
339 Global::statusMessage("Error creating folder!"); 349 Global::statusMessage("Error creating folder!");
340 return; 350 return;
341 } 351 }
342 Global::statusMessage("Fetching mail...please wait!"); 352 Global::statusMessage("Fetching mail...please wait!");
343 qApp->processEvents(); 353 qApp->processEvents();
344 encodedString*st = 0; 354 encodedString*st = 0;
345 st = mail->Wrapper()->fetchRawBody(mail); 355 st = mail->Wrapper()->fetchRawBody(mail);
346 if ( st ) { 356 if ( st ) {
347 targetMail->storeMessage(st->Content(),st->Length(),lfName); 357 targetMail->storeMessage(st->Content(),st->Length(),lfName);
348 Global::statusMessage("Mail stored in "+ lfName); 358 Global::statusMessage("Mail stored in "+ lfName);
349 delete st; 359 delete st;
350 } else { 360 } else {
351 Global::statusMessage("Error: Cannot fetch mail!"); 361 Global::statusMessage("Error: Cannot fetch mail!");
352 } 362 }
353} 363}
354 364
355 365
356void OpieMail::deleteAndDisplayNextMail(ViewMail * vm) 366void OpieMail::deleteAndDisplayNextMail(ViewMail * vm)
357{ 367{
358 QListViewItem*item = mailView->currentItem(); 368 QListViewItem*item = mailView->currentItem();
359 if (!item ) { 369 if (!item ) {
360 closeViewMail(vm); 370 closeViewMail(vm);
361 return; 371 return;
362 } 372 }
363 RecMailP mail = ((MailListViewItem*)item)->data(); 373 RecMailP mail = ((MailListViewItem*)item)->data();
364 mail->Wrapper()->deleteMail( mail ); 374 mail->Wrapper()->deleteMail( mail );
365 item = item->itemBelow(); 375 item = item->itemBelow();
366 if (!item ) { 376 if (!item ) {
367 closeViewMail(vm); 377 closeViewMail(vm);
368 return; 378 return;
369 } 379 }
370 mailView->setCurrentItem(item); 380 mailView->setCurrentItem(item);
371 mail = ((MailListViewItem*)item)->data(); 381 mail = ((MailListViewItem*)item)->data();
372 RecBodyP body = folderView->fetchBody(mail); 382 RecBodyP body = folderView->fetchBody(mail);
373 vm->setBody( body ); 383 vm->setBody( body );
374 vm->setMail( mail ); 384 vm->setMail( mail );
375} 385}
376void OpieMail::displayNextMail(ViewMail * vm) 386void OpieMail::displayNextMail(ViewMail * vm)
377{ 387{
378 QListViewItem*item = mailView->currentItem(); 388 QListViewItem*item = mailView->currentItem();
379 if (!item) return; 389 if (!item) return;
380 ( (MailListViewItem*)item )->setPixmap( 0, QPixmap() ); 390 ( (MailListViewItem*)item )->setPixmap( 0, QPixmap() );
381 item = item->itemBelow(); 391 item = item->itemBelow();
382 if (!item) { 392 if (!item) {
383 vm->setCaption(i18n("End of List" )); 393 vm->setCaption(i18n("End of List" ));
384 return; 394 return;
385 } 395 }
386 mailView->setCurrentItem(item); 396 mailView->setCurrentItem(item);
387 RecMailP mail = ((MailListViewItem*)item)->data(); 397 RecMailP mail = ((MailListViewItem*)item)->data();
388 RecBodyP body = folderView->fetchBody(mail); 398 RecBodyP body = folderView->fetchBody(mail);
389 vm->setBody( body ); 399 vm->setBody( body );
390 vm->setMail( mail ); 400 vm->setMail( mail );
391} 401}
392void OpieMail::displayMail() 402void OpieMail::displayMail()
393{ 403{
394 QListViewItem*item = mailView->currentItem(); 404 QListViewItem*item = mailView->currentItem();
395 if (!item) return; 405 if (!item) return;
396 RecMailP mail = ((MailListViewItem*)item)->data(); 406 RecMailP mail = ((MailListViewItem*)item)->data();
397 RecBodyP body = folderView->fetchBody(mail); 407 RecBodyP body = folderView->fetchBody(mail);
398 ViewMail readMail( this,"", Qt::WType_Modal ); 408 ViewMail readMail( this,"", Qt::WType_Modal );
399 readMail.setBody( body ); 409 readMail.setBody( body );
400 readMail.setMail( mail ); 410 readMail.setMail( mail );
401#ifndef DESKTOP_VERSION 411#ifndef DESKTOP_VERSION
402 readMail.showMaximized(); 412 readMail.showMaximized();
403#else 413#else
404 readMail.resize( 640, 480); 414 readMail.resize( 640, 480);
405#endif 415#endif
406 connect( &readMail,SIGNAL( showNextMail(ViewMail *) ), this, SLOT( displayNextMail(ViewMail *) ) ); 416 connect( &readMail,SIGNAL( showNextMail(ViewMail *) ), this, SLOT( displayNextMail(ViewMail *) ) );
407 connect( &readMail,SIGNAL( deleteAndDisplayNextMail(ViewMail *) ), this, SLOT(deleteAndDisplayNextMail(ViewMail *) ) ); 417 connect( &readMail,SIGNAL( deleteAndDisplayNextMail(ViewMail *) ), this, SLOT(deleteAndDisplayNextMail(ViewMail *) ) );
408 connect( &readMail,SIGNAL( signalDownloadMail() ), this, SLOT( slotDownloadMail() ) ); 418 connect( &readMail,SIGNAL( signalDownloadMail() ), this, SLOT( slotDownloadMail() ) );
409 419
410 readMail.exec(); 420 readMail.exec();
411 421
412 if ( readMail.deleted ) 422 if ( readMail.deleted )
413 { 423 {
414 folderView->refreshCurrent(); 424 folderView->refreshCurrent();
415 } 425 }
416 else 426 else
417 { 427 {
418 QListViewItem*item = mailView->currentItem(); 428 QListViewItem*item = mailView->currentItem();
419 if (item) 429 if (item)
420 ( (MailListViewItem*)item )->setPixmap( 0, QPixmap() ); 430 ( (MailListViewItem*)item )->setPixmap( 0, QPixmap() );
421 } 431 }
422} 432}
423void OpieMail::slotGetAllMail() 433void OpieMail::slotGetAllMail()
424{ 434{
425 QListViewItem * item = folderView->firstChild(); 435 QListViewItem * item = folderView->firstChild();
426 while ( item ){ 436 while ( item ){
427 ((AccountViewItem *)item)->contextMenuSelected( 101 ); 437 ((AccountViewItem *)item)->contextMenuSelected( 101 );
428 item = item->nextSibling (); 438 item = item->nextSibling ();
429 } 439 }
430} 440}
431void OpieMail::slotGetMail() 441void OpieMail::slotGetMail()
432{ 442{
433 QListViewItem * item = folderView->currentItem(); 443 QListViewItem * item = folderView->currentItem();
434 if ( ! item ) return; 444 if ( ! item ) return;
435 ((AccountViewItem *)item)->contextMenuSelected( 101 ); 445 ((AccountViewItem *)item)->contextMenuSelected( 101 );
436} 446}
437void OpieMail::slotDeleteMail() 447void OpieMail::slotDeleteMail()
438{ 448{
439 if (!mailView->currentItem()) return; 449 if (!mailView->currentItem()) return;
440 RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data(); 450 RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data();
441 if ( QMessageBox::warning(this, i18n("Delete Mail"), QString( i18n("<p>Do you really want to delete this mail? <br><br>" ) + mail->getFrom() + " - " + mail->getSubject() ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) 451 if ( QMessageBox::warning(this, i18n("Delete Mail"), QString( i18n("<p>Do you really want to delete this mail? <br><br>" ) + mail->getFrom() + " - " + mail->getSubject() ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes )
442 { 452 {
443 mail->Wrapper()->deleteMail( mail ); 453 mail->Wrapper()->deleteMail( mail );
444 folderView->refreshCurrent(); 454 folderView->refreshCurrent();
445 } 455 }
446} 456}
447void OpieMail::slotDeleteAllMail() 457void OpieMail::slotDeleteAllMail()
448{ 458{
449 459
450 QValueList<RecMailP> t; 460 QValueList<RecMailP> t;
451 if ( QMessageBox::warning(this, i18n("Delete All Mails"), i18n("Do you really want to delete\nall selected mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) 461 if ( QMessageBox::warning(this, i18n("Delete All Mails"), i18n("Do you really want to delete\nall selected mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes )
452 { 462 {
453 MailListViewItem* item = (MailListViewItem*)mailView->firstChild (); 463 MailListViewItem* item = (MailListViewItem*)mailView->firstChild ();
454 while ( item ) { 464 while ( item ) {
455 if ( item->isSelected() ) { 465 if ( item->isSelected() ) {
456 t.append( item->data() ); 466 t.append( item->data() );
457 } 467 }
458 item = (MailListViewItem*)item->nextSibling(); 468 item = (MailListViewItem*)item->nextSibling();
459 } 469 }
460 } 470 }
461 else 471 else
462 return; 472 return;
463 if ( t.count() == 0 ) 473 if ( t.count() == 0 )
464 return; 474 return;
465 RecMailP mail = t.first(); 475 RecMailP mail = t.first();
466 mail->Wrapper()->deleteMailList(t); 476 mail->Wrapper()->deleteMailList(t);
467 folderView->refreshCurrent(); 477 folderView->refreshCurrent();
468 478
469 479
470} 480}
471void OpieMail::clearSelection() 481void OpieMail::clearSelection()
472{ 482{
473 mailView->clearSelection(); 483 mailView->clearSelection();
474 484
475} 485}
476 486
477void OpieMail::mailHold(int button, QListViewItem *item,const QPoint&,int ) 487void OpieMail::mailHold(int button, QListViewItem *item,const QPoint&,int )
478{ 488{
479 if (!mailView->currentItem()) return; 489 if (!mailView->currentItem()) return;
480 MAILLIB::ATYPE mailtype = ((MailListViewItem*)mailView->currentItem() )->wrapperType(); 490 MAILLIB::ATYPE mailtype = ((MailListViewItem*)mailView->currentItem() )->wrapperType();
481 /* just the RIGHT button - or hold on pda */ 491 /* just the RIGHT button - or hold on pda */
482 if (button!=2) {return;} 492 if (button!=2) {return;}
483 if (!item) return; 493 if (!item) return;
484 QPopupMenu *m = new QPopupMenu(0); 494 QPopupMenu *m = new QPopupMenu(0);
485 if (m) 495 if (m)
486 { 496 {
487 if (mailtype==MAILLIB::A_NNTP) { 497 if (mailtype==MAILLIB::A_NNTP) {
488 m->insertItem(i18n("Read this posting"),this,SLOT(displayMail())); 498 m->insertItem(i18n("Read this posting"),this,SLOT(displayMail()));
489 m->insertItem(i18n("Copy this posting"),this,SLOT(slotMoveCopyMail())); 499 m->insertItem(i18n("Copy this posting"),this,SLOT(slotMoveCopyMail()));
490 m->insertSeparator(); 500 m->insertSeparator();
491 m->insertItem(i18n("Copy all selected postings"),this,SLOT(slotMoveCopyAllMail())); 501 m->insertItem(i18n("Copy all selected postings"),this,SLOT(slotMoveCopyAllMail()));
492 m->insertItem(i18n("Clear selection"),this,SLOT(clearSelection())); 502 m->insertItem(i18n("Clear selection"),this,SLOT(clearSelection()));
493 } else { 503 } else {
494 if (folderView->currentisDraft()) { 504 if (folderView->currentisDraft()) {
495 m->insertItem(i18n("Edit this mail"),this,SLOT(reEditMail())); 505 m->insertItem(i18n("Edit this mail"),this,SLOT(reEditMail()));
496 } 506 }
497 m->insertItem(i18n("Reply to this mail"),this,SLOT(replyMail())); 507 m->insertItem(i18n("Reply to this mail"),this,SLOT(replyMail()));
498 m->insertItem(i18n("Read this mail"),this,SLOT(displayMail())); 508 m->insertItem(i18n("Read this mail"),this,SLOT(displayMail()));
499 m->insertSeparator(); 509 m->insertSeparator();
500 m->insertItem(i18n("Move/Copy this mail"),this,SLOT(slotMoveCopyMail())); 510 m->insertItem(i18n("Move/Copy this mail"),this,SLOT(slotMoveCopyMail()));
501 m->insertItem(i18n("Delete this mail"),this,SLOT(slotDeleteMail())); 511 m->insertItem(i18n("Delete this mail"),this,SLOT(slotDeleteMail()));
502 m->insertSeparator(); 512 m->insertSeparator();
503 m->insertItem(i18n("Move/Copy all selected mail"),this,SLOT(slotMoveCopyAllMail())); 513 m->insertItem(i18n("Move/Copy all selected mail"),this,SLOT(slotMoveCopyAllMail()));
504 m->insertItem(i18n("Delete all selected mails"),this,SLOT(slotDeleteAllMail())); 514 m->insertItem(i18n("Delete all selected mails"),this,SLOT(slotDeleteAllMail()));
505 m->insertSeparator(); 515 m->insertSeparator();
506 m->insertItem(i18n("Clear selection"),this,SLOT(clearSelection())); 516 m->insertItem(i18n("Clear selection"),this,SLOT(clearSelection()));
507 } 517 }
508 m->setFocus(); 518 m->setFocus();
509 m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) ); 519 m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) );
510 delete m; 520 delete m;
511 } 521 }
512} 522}
513 523
514void OpieMail::slotShowFolders( bool show ) 524void OpieMail::slotShowFolders( bool show )
515{ 525{
516 if ( show && folderView->isHidden() ) 526 if ( show && folderView->isHidden() )
517 { 527 {
518 folderView->show(); 528 folderView->show();
519 } 529 }
520 else if ( !show && !folderView->isHidden() ) 530 else if ( !show && !folderView->isHidden() )
521 { 531 {
522 folderView->hide(); 532 folderView->hide();
523 } 533 }
524} 534}
525 535
526void OpieMail::refreshMailView(const QValueList<RecMailP>&list) 536void OpieMail::refreshMailView(const QValueList<RecMailP>&list)
527{ 537{
528 MailListViewItem*item = 0; 538 MailListViewItem*item = 0;
529 mailView->clear(); 539 mailView->clear();
530 540
531 QValueList<RecMailP>::ConstIterator it; 541 QValueList<RecMailP>::ConstIterator it;
532 for (it = list.begin(); it != list.end();++it) 542 for (it = list.begin(); it != list.end();++it)
533 { 543 {
534 item = new MailListViewItem(mailView,item); 544 item = new MailListViewItem(mailView,item);
535 item->storeData((*it)); 545 item->storeData((*it));
536 item->showEntry(); 546 item->showEntry();
537 } 547 }
538 mailView->setSorting ( 4, false ); 548 mailView->setSorting ( 4, false );
539} 549}
540 550
541void OpieMail::mailLeftClicked( QListViewItem *item ) 551void OpieMail::mailLeftClicked( QListViewItem *item )
542{ 552{
543 mailView->clearSelection(); 553 mailView->clearSelection();
544 /* just LEFT button - or tap with stylus on pda */ 554 /* just LEFT button - or tap with stylus on pda */
545 //if (button!=1) return; 555 //if (button!=1) return;
546 if (!item) return; 556 if (!item) return;
547 if (folderView->currentisDraft()) { 557 if (folderView->currentisDraft()) {
548 reEditMail(); 558 reEditMail();
549 } else { 559 } else {
550 displayMail(); 560 displayMail();
551 } 561 }
552} 562}
553 563
554void OpieMail::slotMoveCopyMail() 564void OpieMail::slotMoveCopyMail()
555{ 565{
556 if (!mailView->currentItem()) return; 566 if (!mailView->currentItem()) return;
557 RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data(); 567 RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data();
558 AbstractMail*targetMail = 0; 568 AbstractMail*targetMail = 0;
559 QString targetFolder = ""; 569 QString targetFolder = "";
560 Selectstore sels; 570 Selectstore sels;
561 folderView->setupFolderselect(&sels); 571 folderView->setupFolderselect(&sels);
562 if (!sels.exec()) return; 572 if (!sels.exec()) return;
563 targetMail = sels.currentMail(); 573 targetMail = sels.currentMail();
564 targetFolder = sels.currentFolder(); 574 targetFolder = sels.currentFolder();
565 if ( (mail->Wrapper()==targetMail && mail->getMbox()==targetFolder) || 575 if ( (mail->Wrapper()==targetMail && mail->getMbox()==targetFolder) ||
566 targetFolder.isEmpty()) 576 targetFolder.isEmpty())
567 { 577 {
568 return; 578 return;
569 } 579 }
570 if (sels.newFolder() && !targetMail->createMbox(targetFolder)) 580 if (sels.newFolder() && !targetMail->createMbox(targetFolder))
571 { 581 {
572 QMessageBox::critical(0,i18n("Error creating new Folder"), 582 QMessageBox::critical(0,i18n("Error creating new Folder"),
573 i18n("<center>Error while creating<br>new folder - breaking.</center>")); 583 i18n("<center>Error while creating<br>new folder - breaking.</center>"));
574 return; 584 return;
575 } 585 }
576 sels.hide(); 586 sels.hide();
577 qApp->processEvents(); 587 qApp->processEvents();
578 // qDebug("hiding sels "); 588 // qDebug("hiding sels ");
579 mail->Wrapper()->mvcpMail(mail,targetFolder,targetMail,sels.moveMails()); 589 mail->Wrapper()->mvcpMail(mail,targetFolder,targetMail,sels.moveMails());
580 folderView->refreshCurrent(); 590 folderView->refreshCurrent();
581} 591}
582 592
583void OpieMail::slotMoveCopyAllMail() 593void OpieMail::slotMoveCopyAllMail()
584{ 594{
585 595
586 if (!mailView->currentItem()) return; 596 if (!mailView->currentItem()) return;
587 QValueList<RecMailP> t; 597 QValueList<RecMailP> t;
588 // if ( QMessageBox::warning(this, i18n("Move/Copy all selected mails"), i18n("Do you really want to copy/move\nall selected mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) 598 // if ( QMessageBox::warning(this, i18n("Move/Copy all selected mails"), i18n("Do you really want to copy/move\nall selected mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes )
589 { 599 {
590 MailListViewItem* item = (MailListViewItem*)mailView->firstChild (); 600 MailListViewItem* item = (MailListViewItem*)mailView->firstChild ();
591 while ( item ) { 601 while ( item ) {
592 if ( item->isSelected() ) { 602 if ( item->isSelected() ) {
593 t.append( item->data() ); 603 t.append( item->data() );
594 } 604 }
595 item = (MailListViewItem*)item->nextSibling(); 605 item = (MailListViewItem*)item->nextSibling();
596 } 606 }
597 } 607 }
598 // else 608 // else
599 // return; 609 // return;
600 if ( t.count() == 0 ) 610 if ( t.count() == 0 )
601 return; 611 return;
602 RecMailP mail = t.first(); 612 RecMailP mail = t.first();
603 AbstractMail*targetMail = 0; 613 AbstractMail*targetMail = 0;
604 QString targetFolder = ""; 614 QString targetFolder = "";
605 Selectstore sels; 615 Selectstore sels;
606 folderView->setupFolderselect(&sels); 616 folderView->setupFolderselect(&sels);
607 if (!sels.exec()) return; 617 if (!sels.exec()) return;
608 targetMail = sels.currentMail(); 618 targetMail = sels.currentMail();
609 targetFolder = sels.currentFolder(); 619 targetFolder = sels.currentFolder();
610 if ( (mail->Wrapper()==targetMail && mail->getMbox()==targetFolder) || 620 if ( (mail->Wrapper()==targetMail && mail->getMbox()==targetFolder) ||
611 targetFolder.isEmpty()) 621 targetFolder.isEmpty())
612 { 622 {
613 return; 623 return;
614 } 624 }
615 if (sels.newFolder() && !targetMail->createMbox(targetFolder)) 625 if (sels.newFolder() && !targetMail->createMbox(targetFolder))
616 { 626 {
617 QMessageBox::critical(0,i18n("Error creating new Folder"), 627 QMessageBox::critical(0,i18n("Error creating new Folder"),
618 i18n("<center>Error while creating<br>new folder - breaking.</center>")); 628 i18n("<center>Error while creating<br>new folder - breaking.</center>"));
619 return; 629 return;
620 } 630 }
621 sels.hide(); 631 sels.hide();
622 qApp->processEvents(); 632 qApp->processEvents();
623 //qDebug("hiding sels "); 633 //qDebug("hiding sels ");
624 mail->Wrapper()->mvcpMailList(t,targetFolder,targetMail,sels.moveMails()); 634 mail->Wrapper()->mvcpMailList(t,targetFolder,targetMail,sels.moveMails());
625 folderView->refreshCurrent(); 635 folderView->refreshCurrent();
626} 636}
627 637
628void OpieMail::reEditMail() 638void OpieMail::reEditMail()
629{ 639{
630 if (!mailView->currentItem()) return; 640 if (!mailView->currentItem()) return;
631 641
632 ComposeMail compose( settings, this, 0, true ); 642 ComposeMail compose( settings, this, 0, true );
633 compose.reEditMail(((MailListViewItem*)mailView->currentItem() )->data()); 643 compose.reEditMail(((MailListViewItem*)mailView->currentItem() )->data());
634 compose.slotAdjustColumns(); 644 compose.slotAdjustColumns();
635#ifndef DESKTOP_VERSION 645#ifndef DESKTOP_VERSION
636 compose.showMaximized(); 646 compose.showMaximized();
637#else 647#else
638 compose.resize(640,480); 648 compose.resize(640,480);
639#endif 649#endif
650 mCurrentComposer = &compose;
640 compose.exec(); 651 compose.exec();
652 mCurrentComposer = 0;
653}
654
655void OpieMail::insertAttendees(const QString& uid,const QStringList& nameList,const QStringList& emailList,const QStringList& uidList)
656{
657
658 if ( mCurrentComposer ) {
659 mCurrentComposer->insertAttendees(uid,nameList,emailList,uidList);
660 } else {
661 ComposeMail compose( settings, this, 0, true );
662 compose.slotAdjustColumns();
663#ifndef DESKTOP_VERSION
664 compose.showMaximized();
665#endif
666 mCurrentComposer = &compose;
667 mCurrentComposer->insertAttendees(uid,nameList,emailList,uidList);
668 compose.exec();
669 mCurrentComposer = 0;
670 raise();
671 }
641} 672}
diff --git a/kmicromail/opiemail.h b/kmicromail/opiemail.h
index b8a527f..4f75b3f 100644
--- a/kmicromail/opiemail.h
+++ b/kmicromail/opiemail.h
@@ -1,61 +1,66 @@
1// CHANGED 2004-09-31 Lutz Rogowski 1// CHANGED 2004-09-31 Lutz Rogowski
2#ifndef OPIEMAIL_H 2#ifndef OPIEMAIL_H
3#define OPIEMAIL_H 3#define OPIEMAIL_H
4 4
5#include "mainwindow.h" 5#include "mainwindow.h"
6#include <libmailwrapper/settings.h> 6#include <libmailwrapper/settings.h>
7 7
8#include <opie2/osmartpointer.h> 8#include <opie2/osmartpointer.h>
9#include <libmailwrapper/mailtypes.h> 9#include <libmailwrapper/mailtypes.h>
10#include <viewmail.h> 10#include <viewmail.h>
11#include <qstringlist.h>
12
13class ComposeMail;
11 14
12class OpieMail : public MainWindow 15class OpieMail : public MainWindow
13{ 16{
14 Q_OBJECT 17 Q_OBJECT
15 18
16public: 19public:
17 OpieMail( QWidget *parent = 0, const char *name = 0 ); 20 OpieMail( QWidget *parent = 0, const char *name = 0 );
18 virtual ~OpieMail(); 21 virtual ~OpieMail();
19 static QString appName() { return QString::fromLatin1("kopiemail"); } 22 static QString appName() { return QString::fromLatin1("kopiemail"); }
20 23
21public slots: 24public slots:
22 virtual void slotwriteMail(const QString&name,const QString&email); 25 virtual void slotwriteMail(const QString&name,const QString&email);
23 virtual void slotwriteMail2(const QString&nameemail); 26 virtual void slotwriteMail2(const QString&nameemail);
24 virtual void slotComposeMail(); 27 virtual void slotComposeMail();
25 virtual void slotExtAppHandler(); 28 virtual void slotExtAppHandler();
26 virtual void appMessage(const QCString &msg, const QByteArray &data); 29 virtual void appMessage(const QCString &msg, const QByteArray &data);
27 virtual void message(const QCString &msg, const QByteArray &data); 30 virtual void message(const QCString &msg, const QByteArray &data);
31 void insertAttendees(const QString&, const QStringList& namelist, const QStringList& emaillist, const QStringList& uidlist);
28protected slots: 32protected slots:
29 virtual void deleteAndDisplayNextMail(ViewMail * vm); 33 virtual void deleteAndDisplayNextMail(ViewMail * vm);
30 virtual void displayNextMail(ViewMail * vm); 34 virtual void displayNextMail(ViewMail * vm);
31 virtual void slotSendQueued(); 35 virtual void slotSendQueued();
32 virtual void slotSearchMails(); 36 virtual void slotSearchMails();
33 virtual void slotEditSettings(); 37 virtual void slotEditSettings();
34 virtual void slotEditAccounts(); 38 virtual void slotEditAccounts();
35 virtual void displayMail(); 39 virtual void displayMail();
36 virtual void replyMail(); 40 virtual void replyMail();
37 virtual void slotDeleteMail(); 41 virtual void slotDeleteMail();
38 virtual void slotGetMail(); 42 virtual void slotGetMail();
39 virtual void slotGetAllMail(); 43 virtual void slotGetAllMail();
40 virtual void slotDeleteAllMail(); 44 virtual void slotDeleteAllMail();
41 virtual void mailHold(int, QListViewItem *,const QPoint&,int); 45 virtual void mailHold(int, QListViewItem *,const QPoint&,int);
42 virtual void slotShowFolders( bool show ); 46 virtual void slotShowFolders( bool show );
43 virtual void refreshMailView(const QValueList<RecMailP>&); 47 virtual void refreshMailView(const QValueList<RecMailP>&);
44 virtual void mailLeftClicked( QListViewItem * ); 48 virtual void mailLeftClicked( QListViewItem * );
45 virtual void slotMoveCopyMail(); 49 virtual void slotMoveCopyMail();
46 virtual void slotMoveCopyAllMail(); 50 virtual void slotMoveCopyAllMail();
47 virtual void reEditMail(); 51 virtual void reEditMail();
48 void clearSelection(); 52 void clearSelection();
49 void slotDownloadMail(); 53 void slotDownloadMail();
50private: 54private:
55 ComposeMail* mCurrentComposer;
51 void closeViewMail(ViewMail * vm); 56 void closeViewMail(ViewMail * vm);
52 QString mPendingEmail; 57 QString mPendingEmail;
53 QString mPendingName; 58 QString mPendingName;
54 QByteArray mPendingData; 59 QByteArray mPendingData;
55 QCString mPendingMessage; 60 QCString mPendingMessage;
56 Settings *settings; 61 Settings *settings;
57 QTextBrowser * tb; 62 QTextBrowser * tb;
58 63
59}; 64};
60 65
61#endif 66#endif
diff --git a/korganizer/koeventviewer.cpp b/korganizer/koeventviewer.cpp
index 7dc1880..bf41edb 100644
--- a/korganizer/koeventviewer.cpp
+++ b/korganizer/koeventviewer.cpp
@@ -1,606 +1,658 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18*/ 18*/
19 19
20#include <qcstring.h> 20#include <qcstring.h>
21#include <qwhatsthis.h> 21#include <qwhatsthis.h>
22#include <qdialog.h> 22#include <qdialog.h>
23#include <qapplication.h> 23#include <qapplication.h>
24#include <qlabel.h> 24#include <qlabel.h>
25#include <qlayout.h> 25#include <qlayout.h>
26 26
27#include <klocale.h> 27#include <klocale.h>
28#include <kapplication.h> 28#include <kapplication.h>
29#include <libkcal/event.h> 29#include <libkcal/event.h>
30#include <libkcal/todo.h> 30#include <libkcal/todo.h>
31#include <kdebug.h> 31#include <kdebug.h>
32#include <kiconloader.h> 32#include <kiconloader.h>
33#include <krun.h> 33#include <krun.h>
34#include <kglobal.h> 34#include <kglobal.h>
35#include <kprocess.h> 35#include <kprocess.h>
36#include "koprefs.h" 36#include "koprefs.h"
37 37
38#include <kabc/stdaddressbook.h> 38#include <kabc/stdaddressbook.h>
39 39
40#ifndef KORG_NODCOP 40#ifndef KORG_NODCOP
41#include <dcopclient.h> 41#include <dcopclient.h>
42#include "korganizer.h" 42#include "korganizer.h"
43#include "koprefs.h" 43#include "koprefs.h"
44#include "actionmanager.h" 44#include "actionmanager.h"
45#endif 45#endif
46 46
47#include "koeventviewer.h" 47#include "koeventviewer.h"
48//#ifndef KORG_NOKABC 48//#ifndef KORG_NOKABC
49//#include <kabc/stdaddressbook.h> 49//#include <kabc/stdaddressbook.h>
50//#define size count 50//#define size count
51//#endif 51//#endif
52 52
53#ifdef DESKTOP_VERSION 53#ifdef DESKTOP_VERSION
54#include <kabc/addresseedialog.h> 54#include <kabc/addresseedialog.h>
55#include <kabc/addresseeview.h> 55#include <kabc/addresseeview.h>
56#else //DESKTOP_VERSION 56#else //DESKTOP_VERSION
57#include <externalapphandler.h> 57#include <externalapphandler.h>
58#include <qtopia/qcopenvelope_qws.h> 58#include <qtopia/qcopenvelope_qws.h>
59#endif //DESKTOP_VERSION 59#endif //DESKTOP_VERSION
60 60
61KOEventViewer::KOEventViewer(QWidget *parent,const char *name) 61KOEventViewer::KOEventViewer(QWidget *parent,const char *name)
62 : QTextBrowser(parent,name) 62 : QTextBrowser(parent,name)
63{ 63{
64 mSyncMode = false; 64 mSyncMode = false;
65 mColorMode = 0; 65 mColorMode = 0;
66} 66}
67 67
68KOEventViewer::~KOEventViewer() 68KOEventViewer::~KOEventViewer()
69{ 69{
70} 70}
71 71
72void KOEventViewer::setSource(const QString& n) 72void KOEventViewer::setSource(const QString& n)
73{ 73{
74 74
75 if ( n.left(3) == "uid" ) 75 if ( n.left(3) == "uid" )
76#ifdef DESKTOP_VERSION 76#ifdef DESKTOP_VERSION
77 { 77 {
78 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true ); 78 KABC::StdAddressBook* AddressBook = KABC::StdAddressBook::self( true );
79 KABC::AddressBook::Iterator it; 79 KABC::AddressBook::Iterator it;
80 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) { 80 for( it = AddressBook->begin(); it != AddressBook->end(); ++it ) {
81 // LR I do not understand, why the uid string is different on zaurus and desktop 81 // LR I do not understand, why the uid string is different on zaurus and desktop
82 QString uid = "uid://"+(*it).uid(); 82 QString uid = "uid://"+(*it).uid();
83 83
84 //qDebug("for *%s* +%s+ ", n.latin1(), uid.latin1()); 84 //qDebug("for *%s* +%s+ ", n.latin1(), uid.latin1());
85 if (n == uid ) { 85 if (n == uid ) {
86 //qDebug("found %s ",(*it).mobileHomePhone().latin1() ); 86 //qDebug("found %s ",(*it).mobileHomePhone().latin1() );
87 QDialog dia( this,"dia123", true ); 87 QDialog dia( this,"dia123", true );
88 dia.setCaption( i18n("Details of attendee") ); 88 dia.setCaption( i18n("Details of attendee") );
89 QVBoxLayout lay ( &dia ); 89 QVBoxLayout lay ( &dia );
90 KABC::AddresseeView av ( &dia ); 90 KABC::AddresseeView av ( &dia );
91 av.setAddressee( (*it) ); 91 av.setAddressee( (*it) );
92 lay.addWidget( &av ); 92 lay.addWidget( &av );
93 if ( QApplication::desktop()->width() < 480 ) 93 if ( QApplication::desktop()->width() < 480 )
94 dia.resize( 220, 240); 94 dia.resize( 220, 240);
95 else { 95 else {
96 dia.resize( 400,400); 96 dia.resize( 400,400);
97 } 97 }
98 dia.exec(); 98 dia.exec();
99 break; 99 break;
100 } 100 }
101 } 101 }
102 return; 102 return;
103 } 103 }
104#else 104#else
105 { 105 {
106 if ( "uid:organizer" == n ) { 106 if ( "uid:organizer" == n ) {
107 ExternalAppHandler::instance()->requestDetailsFromKAPI("", mCurrentIncidence->organizer(),""); 107 ExternalAppHandler::instance()->requestDetailsFromKAPI("", mCurrentIncidence->organizer(),"");
108 return; 108 return;
109 } 109 }
110 QPtrList<Attendee> attendees = mCurrentIncidence->attendees(); 110 QPtrList<Attendee> attendees = mCurrentIncidence->attendees();
111 if (attendees.count()) { 111 if (attendees.count()) {
112 Attendee *a; 112 Attendee *a;
113 for(a=attendees.first();a;a=attendees.next()) { 113 for(a=attendees.first();a;a=attendees.next()) {
114 if ( "uid:"+a->uid() == n ) { 114 if ( "uid:"+a->uid() == n ) {
115 bool res = ExternalAppHandler::instance()->requestDetailsFromKAPI(a->name(), a->email(), a->uid()); 115 bool res = ExternalAppHandler::instance()->requestDetailsFromKAPI(a->name(), a->email(), a->uid());
116 return; 116 return;
117 } 117 }
118 } 118 }
119 } 119 }
120 return; 120 return;
121 } 121 }
122 //requestNameEmailUidListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/); 122 //requestNameEmailUidListFromKAPI("QPE/Application/kopi", this->name() /* name is here the unique uid*/);
123 // the result should now arrive through method insertAttendees 123 // the result should now arrive through method insertAttendees
124 //QString uid = "uid:"+(*it).uid(); 124 //QString uid = "uid:"+(*it).uid();
125#endif 125#endif
126 if ( n.left(6) == "mailto" ) { 126 if ( n.left(6) == "mailto" ) {
127 // qDebug("KOEventViewer::setSource %s ", n.mid(7).latin1()); 127 // qDebug("KOEventViewer::setSource %s ", n.mid(7).latin1());
128#ifndef DESKTOP_VERSION 128#ifndef DESKTOP_VERSION
129 if ( n.mid(7,3) == "ALL" ) {
130 qDebug("all ");
131 mailToAttendees( true );
132 } else if ( n.mid(7,4) == "RSVP" ) {
133 mailToAttendees( false );
134 qDebug("rsvp ");
135 } else {
129 QCopEnvelope e("QPE/Application/ompi", "newMail(QString)" ); 136 QCopEnvelope e("QPE/Application/ompi", "newMail(QString)" );
130 e << n.mid(7); 137 e << n.mid(7);
138 }
131#endif 139#endif
132 140
133 } 141 }
134 142
135 143
136#ifndef KORG_NODCOP 144#ifndef KORG_NODCOP
137 kdDebug() << "KOEventViewer::setSource(): " << n << endl; 145 kdDebug() << "KOEventViewer::setSource(): " << n << endl;
138 QString tmpStr; 146 QString tmpStr;
139 if (n.startsWith("mailto:")) { 147 if (n.startsWith("mailto:")) {
140 KApplication::kApplication()->invokeMailer(n.mid(7),QString::null); 148 KApplication::kApplication()->invokeMailer(n.mid(7),QString::null);
141 //emit showIncidence(n); 149 //emit showIncidence(n);
142 return; 150 return;
143 } else if (n.startsWith("uid:")) { 151 } else if (n.startsWith("uid:")) {
144 DCOPClient *client = KApplication::kApplication()->dcopClient(); 152 DCOPClient *client = KApplication::kApplication()->dcopClient();
145 const QByteArray noParamData; 153 const QByteArray noParamData;
146 const QByteArray paramData; 154 const QByteArray paramData;
147 QByteArray replyData; 155 QByteArray replyData;
148 QCString replyTypeStr; 156 QCString replyTypeStr;
149#define PING_ABBROWSER (client->call("kaddressbook", "KAddressBookIface", "interfaces()", noParamData, replyTypeStr, replyData)) 157#define PING_ABBROWSER (client->call("kaddressbook", "KAddressBookIface", "interfaces()", noParamData, replyTypeStr, replyData))
150 bool foundAbbrowser = PING_ABBROWSER; 158 bool foundAbbrowser = PING_ABBROWSER;
151 159
152 if (foundAbbrowser) { 160 if (foundAbbrowser) {
153 //KAddressbook is already running, so just DCOP to it to bring up the contact editor 161 //KAddressbook is already running, so just DCOP to it to bring up the contact editor
154 //client->send("kaddressbook","KAddressBookIface", 162 //client->send("kaddressbook","KAddressBookIface",
155 QDataStream arg(paramData, IO_WriteOnly); 163 QDataStream arg(paramData, IO_WriteOnly);
156 arg << n.mid(6); 164 arg << n.mid(6);
157 client->send("kaddressbook", "KAddressBookIface", "showContactEditor( QString )", paramData); 165 client->send("kaddressbook", "KAddressBookIface", "showContactEditor( QString )", paramData);
158 return; 166 return;
159 } else { 167 } else {
160 /* 168 /*
161 KaddressBook is not already running. Pass it the UID of the contact via the command line while starting it - its neater. 169 KaddressBook is not already running. Pass it the UID of the contact via the command line while starting it - its neater.
162 We start it without its main interface 170 We start it without its main interface
163 */ 171 */
164 KIconLoader* iconLoader = new KIconLoader(); 172 KIconLoader* iconLoader = new KIconLoader();
165 QString iconPath = iconLoader->iconPath("go",KIcon::Small); 173 QString iconPath = iconLoader->iconPath("go",KIcon::Small);
166 ActionManager::setStartedKAddressBook(true); 174 ActionManager::setStartedKAddressBook(true);
167 tmpStr = "kaddressbook --editor-only --uid "; 175 tmpStr = "kaddressbook --editor-only --uid ";
168 tmpStr += KProcess::quote(n.mid(6)); 176 tmpStr += KProcess::quote(n.mid(6));
169 KRun::runCommand(tmpStr,"KAddressBook",iconPath); 177 KRun::runCommand(tmpStr,"KAddressBook",iconPath);
170 return; 178 return;
171 } 179 }
172 } else { 180 } else {
173 //QTextBrowser::setSource(n); 181 //QTextBrowser::setSource(n);
174 } 182 }
175#endif 183#endif
176} 184}
185void KOEventViewer::mailToAttendees( bool all )
186{
187 QPtrList<Attendee> attendees = mCurrentIncidence->attendees();
188 if (attendees.count() == 0) return;
189 QStringList nameList;
190 QStringList emailList;
191 QStringList uidList;
192 Attendee* a;
193 for(a=attendees.first();a;a=attendees.next()) {
194 if ( !all && !a->RSVP() ) continue;
195 if (!a->email().isEmpty()) {
196 nameList.append (a->name() );
197 emailList.append (a->email() );
198 uidList.append (a->uid() );
199 }
200 }
201 QString uid = "ComposeMailUIpick2"+mMailSubject;
202 bool res = ExternalAppHandler::instance()->returnNameEmailUidListFromKAPI("QPE/Application/ompi", uid, nameList, emailList, uidList);
177 203
204}
178void KOEventViewer::addTag(const QString & tag,const QString & text) 205void KOEventViewer::addTag(const QString & tag,const QString & text)
179{ 206{
180 int number=text.contains("\n"); 207 int number=text.contains("\n");
181 QString str = "<" + tag + ">"; 208 QString str = "<" + tag + ">";
182 QString tmpText=text; 209 QString tmpText=text;
183 QString tmpStr=str; 210 QString tmpStr=str;
184 if(number !=-1) 211 if(number !=-1)
185 { 212 {
186 if (number > 0) { 213 if (number > 0) {
187 int pos=0; 214 int pos=0;
188 QString tmp; 215 QString tmp;
189 for(int i=0;i<=number;i++) { 216 for(int i=0;i<=number;i++) {
190 pos=tmpText.find("\n"); 217 pos=tmpText.find("\n");
191 tmp=tmpText.left(pos); 218 tmp=tmpText.left(pos);
192 tmpText=tmpText.right(tmpText.length()-pos-1); 219 tmpText=tmpText.right(tmpText.length()-pos-1);
193 tmpStr+=tmp+"<br>"; 220 tmpStr+=tmp+"<br>";
194 } 221 }
195 } 222 }
196 else tmpStr += tmpText; 223 else tmpStr += tmpText;
197 tmpStr+="</" + tag + ">"; 224 tmpStr+="</" + tag + ">";
198 mText.append(tmpStr); 225 mText.append(tmpStr);
199 } 226 }
200 else 227 else
201 { 228 {
202 str += text + "</" + tag + ">"; 229 str += text + "</" + tag + ">";
203 mText.append(str); 230 mText.append(str);
204 } 231 }
205} 232}
206 233
207void KOEventViewer::setColorMode( int m ) 234void KOEventViewer::setColorMode( int m )
208{ 235{
209 mColorMode = m; 236 mColorMode = m;
210} 237}
211void KOEventViewer::appendEvent(Event *event, int mode ) 238void KOEventViewer::appendEvent(Event *event, int mode )
212{ 239{
213 mMailSubject = ""; 240 mMailSubject = "";
214 mCurrentIncidence = event; 241 mCurrentIncidence = event;
215 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 242 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
216 topLevelWidget()->setCaption(i18n("Event Viewer")); 243 topLevelWidget()->setCaption(i18n("Event Viewer"));
217 if ( mode == 0 ) { 244 if ( mode == 0 ) {
218 addTag("h2",event->summary()); 245 addTag("h2",event->summary());
219 } 246 }
220 else { 247 else {
221 if ( mColorMode == 1 ) { 248 if ( mColorMode == 1 ) {
222 mText +="<font color=\"#00A000\">"; 249 mText +="<font color=\"#00A000\">";
223 } 250 }
224 if ( mColorMode == 2 ) { 251 if ( mColorMode == 2 ) {
225 mText +="<font color=\"#C00000\">"; 252 mText +="<font color=\"#C00000\">";
226 } 253 }
227 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>"; 254 // mText +="<font color=\"#F00000\">" + i18n("O-due!") + "</font>";
228 if ( mode == 1 ) { 255 if ( mode == 1 ) {
229 addTag("h2",i18n( "Local: " ) +event->summary()); 256 addTag("h2",i18n( "Local: " ) +event->summary());
230 } else { 257 } else {
231 addTag("h2",i18n( "Remote: " ) +event->summary()); 258 addTag("h2",i18n( "Remote: " ) +event->summary());
232 } 259 }
233 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 260 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
234 if ( mColorMode ) 261 if ( mColorMode )
235 mText += "</font>"; 262 mText += "</font>";
236 } 263 }
237 mMailSubject += i18n( "Meeting " )+ event->summary(); 264 mMailSubject += i18n( "Meeting " )+ event->summary();
238 if (event->cancelled ()) { 265 if (event->cancelled ()) {
239 mText +="<font color=\"#B00000\">"; 266 mText +="<font color=\"#B00000\">";
240 addTag("i",i18n("This event has been cancelled!")); 267 addTag("i",i18n("This event has been cancelled!"));
241 mText.append("<br>"); 268 mText.append("<br>");
242 mText += "</font>"; 269 mText += "</font>";
243 mMailSubject += i18n("(cancelled)"); 270 mMailSubject += i18n("(cancelled)");
244 } 271 }
245 if (!event->location().isEmpty()) { 272 if (!event->location().isEmpty()) {
246 addTag("b",i18n("Location: ")); 273 addTag("b",i18n("Location: "));
247 mText.append(event->location()+"<br>"); 274 mText.append(event->location()+"<br>");
248 mMailSubject += i18n(" at ") + event->location(); 275 mMailSubject += i18n(" at ") + event->location();
249 } 276 }
250 if (event->doesFloat()) { 277 if (event->doesFloat()) {
251 if (event->isMultiDay()) { 278 if (event->isMultiDay()) {
252 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>") 279 mText.append(i18n("<p><b>From:</b> %1 </p><p><b>To:</b> %2</p>")
253 .arg(event->dtStartDateStr(shortDate)) 280 .arg(event->dtStartDateStr(shortDate))
254 .arg(event->dtEndDateStr(shortDate))); 281 .arg(event->dtEndDateStr(shortDate)));
255 } else { 282 } else {
256 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate ))); 283 mText.append(i18n("<p><b>On:</b> %1</p>").arg(event->dtStartDateStr( shortDate )));
257 } 284 }
258 } else { 285 } else {
259 if (event->isMultiDay()) { 286 if (event->isMultiDay()) {
260 mText.append(i18n("<p><b>From:</b> %1</p> ") 287 mText.append(i18n("<p><b>From:</b> %1</p> ")
261 .arg(event->dtStartStr( shortDate))); 288 .arg(event->dtStartStr( shortDate)));
262 mText.append(i18n("<p><b>To:</b> %1</p>") 289 mText.append(i18n("<p><b>To:</b> %1</p>")
263 .arg(event->dtEndStr(shortDate))); 290 .arg(event->dtEndStr(shortDate)));
264 } else { 291 } else {
265 mText.append(i18n("<p><b>On:</b> %1</p> ") 292 mText.append(i18n("<p><b>On:</b> %1</p> ")
266 .arg(event->dtStartDateStr( shortDate ))); 293 .arg(event->dtStartDateStr( shortDate )));
267 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>") 294 mText.append(i18n("<p><b>From:</b> %1 <b>To:</b> %2</p>")
268 .arg(event->dtStartTimeStr()) 295 .arg(event->dtStartTimeStr())
269 .arg(event->dtEndTimeStr())); 296 .arg(event->dtEndTimeStr()));
270 } 297 }
271 } 298 }
272 299
273 if (event->recurrence()->doesRecur()) { 300 if (event->recurrence()->doesRecur()) {
274 301
275 QString recurText = event->recurrence()->recurrenceText(); 302 QString recurText = event->recurrence()->recurrenceText();
276 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>"); 303 addTag("p","<em>" + i18n("This is a %1 recurring event.").arg(recurText ) + "</em>");
277 bool last; 304 bool last;
278 QDate start = QDate::currentDate(); 305 QDate start = QDate::currentDate();
279 QDate next; 306 QDate next;
280 next = event->recurrence()->getPreviousDate( start , &last ); 307 next = event->recurrence()->getPreviousDate( start , &last );
281 if ( !last ) { 308 if ( !last ) {
282 next = event->recurrence()->getNextDate( start.addDays( - 1 ) ); 309 next = event->recurrence()->getNextDate( start.addDays( - 1 ) );
283 addTag("p",i18n("<b>Next recurrence is on:</b>") ); 310 addTag("p",i18n("<b>Next recurrence is on:</b>") );
284 addTag("p", KGlobal::locale()->formatDate( next, shortDate )); 311 addTag("p", KGlobal::locale()->formatDate( next, shortDate ));
285 QDateTime nextdt = QDateTime( next, event->dtStart().time()); 312 QDateTime nextdt = QDateTime( next, event->dtStart().time());
286 mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( nextdt, true ); 313 mMailSubject += i18n(" - " )+ KGlobal::locale()->formatDateTime( nextdt, true );
287 314
288 } else { 315 } else {
289 addTag("p",i18n("<b>Last recurrence was on:</b>") ); 316 addTag("p",i18n("<b>Last recurrence was on:</b>") );
290 addTag("p", KGlobal::locale()->formatDate( next, shortDate )); 317 addTag("p", KGlobal::locale()->formatDate( next, shortDate ));
291 } 318 }
292 } else { 319 } else {
293 mMailSubject += i18n(" - " )+event->dtStartStr( true ); 320 mMailSubject += i18n(" - " )+event->dtStartStr( true );
294 321
295 } 322 }
296 323
297 324
298 if (event->isAlarmEnabled()) { 325 if (event->isAlarmEnabled()) {
299 Alarm *alarm =event->alarms().first() ; 326 Alarm *alarm =event->alarms().first() ;
300 QDateTime t = alarm->time(); 327 QDateTime t = alarm->time();
301 int min = t.secsTo( event->dtStart() )/60; 328 int min = t.secsTo( event->dtStart() )/60;
302 QString s =i18n("( %1 min before )").arg( min ); 329 QString s =i18n("( %1 min before )").arg( min );
303 addTag("p",i18n("<b>Alarm on: ") + s +" </b>"); 330 addTag("p",i18n("<b>Alarm on: ") + s +" </b>");
304 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate )); 331 addTag("p", KGlobal::locale()->formatDateTime( t, shortDate ));
305 //addTag("p",s); 332 //addTag("p",s);
306 } 333 }
307 334
308 addTag("b",i18n("Access: ")); 335 addTag("b",i18n("Access: "));
309 mText.append(event->secrecyStr()+"<br>"); 336 mText.append(event->secrecyStr()+"<br>");
310 if (!event->description().isEmpty()) { 337 if (!event->description().isEmpty()) {
311 addTag("p",i18n("<b>Details: </b>")); 338 addTag("p",i18n("<b>Details: </b>"));
312 addTag("p",event->description()); 339 addTag("p",event->description());
313 } 340 }
314 341
315 formatCategories(event); 342 formatCategories(event);
316 343
317 formatReadOnly(event); 344 formatReadOnly(event);
318 formatAttendees(event); 345 formatAttendees(event);
319 346
320 setText(mText); 347 setText(mText);
321 //QWhatsThis::add(this,mText); 348 //QWhatsThis::add(this,mText);
322 349
323} 350}
324 351
325void KOEventViewer::appendTodo(Todo *event, int mode ) 352void KOEventViewer::appendTodo(Todo *event, int mode )
326{ 353{
327 mMailSubject = ""; 354 mMailSubject = "";
328 mCurrentIncidence = event; 355 mCurrentIncidence = event;
329 topLevelWidget()->setCaption(i18n("Todo Viewer")); 356 topLevelWidget()->setCaption(i18n("Todo Viewer"));
330 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 357 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
331 if (mode == 0 ) 358 if (mode == 0 )
332 addTag("h2",event->summary()); 359 addTag("h2",event->summary());
333 else { 360 else {
334 if ( mColorMode == 1 ) { 361 if ( mColorMode == 1 ) {
335 mText +="<font color=\"#00A000\">"; 362 mText +="<font color=\"#00A000\">";
336 } 363 }
337 if ( mColorMode == 2 ) { 364 if ( mColorMode == 2 ) {
338 mText +="<font color=\"#B00000\">"; 365 mText +="<font color=\"#B00000\">";
339 } 366 }
340 if ( mode == 1 ) { 367 if ( mode == 1 ) {
341 addTag("h2",i18n( "Local: " ) +event->summary()); 368 addTag("h2",i18n( "Local: " ) +event->summary());
342 } else { 369 } else {
343 addTag("h2",i18n( "Remote: " ) +event->summary()); 370 addTag("h2",i18n( "Remote: " ) +event->summary());
344 } 371 }
345 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) ); 372 addTag("h3",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(event->lastModified(),shortDate, true ) );
346 if ( mColorMode ) 373 if ( mColorMode )
347 mText += "</font>"; 374 mText += "</font>";
348 } 375 }
349 mMailSubject += i18n( "Todo " )+ event->summary(); 376 mMailSubject += i18n( "Todo " )+ event->summary();
350 377
351 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) { 378 if ( event->percentComplete() == 100 && event->hasCompletedDate() ) {
352 mText +="<font color=\"#B00000\">"; 379 mText +="<font color=\"#B00000\">";
353 addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(KOPrefs::instance()->mShortDateInViewer) ) ); 380 addTag("i", i18n("<p><i>Completed on %1</i></p>").arg( event->completedStr(KOPrefs::instance()->mShortDateInViewer) ) );
354 mText += "</font>"; 381 mText += "</font>";
355 } else { 382 } else {
356 mText.append(i18n("<p><i>%1 % completed</i></p>") 383 mText.append(i18n("<p><i>%1 % completed</i></p>")
357 .arg(event->percentComplete())); 384 .arg(event->percentComplete()));
358 } 385 }
359 386
360 if (event->cancelled ()) { 387 if (event->cancelled ()) {
361 mText +="<font color=\"#B00000\">"; 388 mText +="<font color=\"#B00000\">";
362 addTag("i",i18n("This todo has been cancelled!")); 389 addTag("i",i18n("This todo has been cancelled!"));
363 mText.append("<br>"); 390 mText.append("<br>");
364 mText += "</font>"; 391 mText += "</font>";
365 mMailSubject += i18n("(cancelled)"); 392 mMailSubject += i18n("(cancelled)");
366 } 393 }
367 394
368 if (!event->location().isEmpty()) { 395 if (!event->location().isEmpty()) {
369 addTag("b",i18n("Location: ")); 396 addTag("b",i18n("Location: "));
370 mText.append(event->location()+"<br>"); 397 mText.append(event->location()+"<br>");
371 mMailSubject += i18n(" at ") + event->location(); 398 mMailSubject += i18n(" at ") + event->location();
372 } 399 }
373 if (event->hasStartDate()) { 400 if (event->hasStartDate()) {
374 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer))); 401 mText.append(i18n("<p><b>Start on:</b> %1</p>").arg(event->dtStartStr(KOPrefs::instance()->mShortDateInViewer)));
375 } 402 }
376 if (event->hasDueDate()) { 403 if (event->hasDueDate()) {
377 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer))); 404 mText.append(i18n("<p><b>Due on:</b> %1</p>").arg(event->dtDueStr(KOPrefs::instance()->mShortDateInViewer)));
378 mMailSubject += i18n(" - " )+event->dtDueStr( true ); 405 mMailSubject += i18n(" - " )+event->dtDueStr( true );
379 } 406 }
380 addTag("b",i18n("Access: ")); 407 addTag("b",i18n("Access: "));
381 mText.append(event->secrecyStr()+"<br>"); 408 mText.append(event->secrecyStr()+"<br>");
382 if (!event->description().isEmpty()) { 409 if (!event->description().isEmpty()) {
383 addTag("p",i18n("<b>Details: </b>")); 410 addTag("p",i18n("<b>Details: </b>"));
384 addTag("p",event->description()); 411 addTag("p",event->description());
385 } 412 }
386 413
387 formatCategories(event); 414 formatCategories(event);
388 415
389 mText.append(i18n("<p><b>Priority:</b> %2</p>") 416 mText.append(i18n("<p><b>Priority:</b> %2</p>")
390 .arg(QString::number(event->priority()))); 417 .arg(QString::number(event->priority())));
391 418
392 formatReadOnly(event); 419 formatReadOnly(event);
393 formatAttendees(event); 420 formatAttendees(event);
394 if ( event->relatedTo() ) { 421 if ( event->relatedTo() ) {
395 addTag("b",i18n("Parent todo: ")); 422 addTag("b",i18n("Parent todo: "));
396 mText.append(event->relatedTo()->summary()+" [" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] <br>"); 423 mText.append(event->relatedTo()->summary()+" [" +QString::number(event->relatedTo()->priority()) + "/" + QString::number(((Todo*)event->relatedTo())->percentComplete())+"%] <br>");
397 } 424 }
398 QPtrList<Incidence> Relations = event->relations(); 425 QPtrList<Incidence> Relations = event->relations();
399 Incidence *to; 426 Incidence *to;
400 if ( Relations.first() ) 427 if ( Relations.first() )
401 addTag("b",i18n("Sub todos:<br>")); 428 addTag("b",i18n("Sub todos:<br>"));
402 for (to=Relations.first();to;to=Relations.next()) { 429 for (to=Relations.first();to;to=Relations.next()) {
403 mText.append( to->summary()+" [" +QString::number(to->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%]<br>"); 430 mText.append( to->summary()+" [" +QString::number(to->priority()) + "/" + QString::number(((Todo*)to)->percentComplete())+"%]<br>");
404 431
405 } 432 }
406 setText(mText); 433 setText(mText);
407} 434}
408 435
409void KOEventViewer::formatCategories(Incidence *event) 436void KOEventViewer::formatCategories(Incidence *event)
410{ 437{
411 if (!event->categoriesStr().isEmpty()) { 438 if (!event->categoriesStr().isEmpty()) {
412 if (event->categories().count() == 1) { 439 if (event->categories().count() == 1) {
413 addTag("h3",i18n("Category")); 440 addTag("h3",i18n("Category"));
414 } else { 441 } else {
415 addTag("h3",i18n("Categories")); 442 addTag("h3",i18n("Categories"));
416 } 443 }
417 addTag("p",event->categoriesStr()); 444 addTag("p",event->categoriesStr());
418 } 445 }
419} 446}
420void KOEventViewer::formatAttendees(Incidence *event) 447void KOEventViewer::formatAttendees(Incidence *event)
421{ 448{
422 QPtrList<Attendee> attendees = event->attendees(); 449 QPtrList<Attendee> attendees = event->attendees();
423 if (attendees.count()) { 450 if (attendees.count()) {
424 451
425 452
426 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small); 453 QString iconPath = KGlobal::iconLoader()->iconPath("mailappt",KIcon::Small);
427 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small); 454 QString NOiconPath = KGlobal::iconLoader()->iconPath("nomailappt",KIcon::Small);
428 addTag("h3",i18n("Organizer")); 455 addTag("h3",i18n("Organizer"));
429 mText.append("<ul><li>"); 456 mText.append("<ul><li>");
430#ifndef KORG_NOKABC 457#ifndef KORG_NOKABC
431 458
432#ifdef DESKTOP_VERSION 459#ifdef DESKTOP_VERSION
433 KABC::AddressBook *add_book = KABC::StdAddressBook::self(); 460 KABC::AddressBook *add_book = KABC::StdAddressBook::self();
434 KABC::Addressee::List addressList; 461 KABC::Addressee::List addressList;
435 addressList = add_book->findByEmail(event->organizer()); 462 addressList = add_book->findByEmail(event->organizer());
436 KABC::Addressee o = addressList.first(); 463 KABC::Addressee o = addressList.first();
437 if (!o.isEmpty() && addressList.size()<2) { 464 if (!o.isEmpty() && addressList.size()<2) {
438 mText += "<a href=\"uid:" + o.uid() + "\">"; 465 mText += "<a href=\"uid:" + o.uid() + "\">";
439 mText += o.formattedName(); 466 mText += o.formattedName();
440 mText += "</a>\n"; 467 mText += "</a>\n";
441 } else { 468 } else {
442 mText.append(event->organizer()); 469 mText.append(event->organizer());
443 } 470 }
444#else //DESKTOP_VERSION 471#else //DESKTOP_VERSION
445 mText += "<a href=\"uid:organizer\">"; 472 mText += "<a href=\"uid:organizer\">";
446 mText += event->organizer(); 473 mText += event->organizer();
447 mText += "</a>\n"; 474 mText += "</a>\n";
448#endif //DESKTOP_VERSION 475#endif //DESKTOP_VERSION
449 476
450 477
451#else 478#else
452 mText.append(event->organizer()); 479 mText.append(event->organizer());
453#endif 480#endif
454 481
455 if (iconPath) { 482 if (iconPath) {
456 mText += " <a href=\"mailto:" + event->organizer() + "\">"; 483 mText += " <a href=\"mailto:" + event->organizer() + "\">";
457 mText += "<IMG src=\"" + iconPath + "\">"; 484 mText += "<IMG src=\"" + iconPath + "\">";
458 mText += "</a>\n"; 485 mText += "</a>\n";
459 } 486 }
460 mText.append("</li></ul>"); 487 mText.append("</li></ul>");
461 488
462 addTag("h3",i18n("Attendees")); 489 addTag("h3",i18n("Attendees"));
463 Attendee *a; 490 Attendee *a;
464 mText.append("<ul>"); 491 mText.append("<ul>");
492 int a_count = 0;
493 int a_count_nr = 0;
494
465 for(a=attendees.first();a;a=attendees.next()) { 495 for(a=attendees.first();a;a=attendees.next()) {
466#ifndef KORG_NOKABC 496#ifndef KORG_NOKABC
467#ifdef DESKTOP_VERSION 497#ifdef DESKTOP_VERSION
468 if (a->name().isEmpty()) { 498 if (a->name().isEmpty()) {
469 addressList = add_book->findByEmail(a->email()); 499 addressList = add_book->findByEmail(a->email());
470 KABC::Addressee o = addressList.first(); 500 KABC::Addressee o = addressList.first();
471 if (!o.isEmpty() && addressList.size()<2) { 501 if (!o.isEmpty() && addressList.size()<2) {
472 mText += "<a href=\"uid:" + o.uid() + "\">"; 502 mText += "<a href=\"uid:" + o.uid() + "\">";
473 mText += o.formattedName(); 503 mText += o.formattedName();
474 mText += "</a>\n"; 504 mText += "</a>\n";
475 } else { 505 } else {
476 mText += "<li>"; 506 mText += "<li>";
477 mText.append(a->email()); 507 mText.append(a->email());
478 mText += "\n"; 508 mText += "\n";
479 } 509 }
480 } else { 510 } else {
481 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 511 mText += "<li><a href=\"uid:" + a->uid() + "\">";
482 if (!a->name().isEmpty()) mText += a->name(); 512 if (!a->name().isEmpty()) mText += a->name();
483 else mText += a->email(); 513 else mText += a->email();
484 mText += "</a>\n"; 514 mText += "</a>\n";
485 } 515 }
486#else //DESKTOP_VERSION 516#else //DESKTOP_VERSION
487 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 517 mText += "<li><a href=\"uid:" + a->uid() + "\">";
488 if (!a->name().isEmpty()) mText += a->name(); 518 if (!a->name().isEmpty()) mText += a->name();
489 else mText += a->email(); 519 else mText += a->email();
490 mText += "</a>\n"; 520 mText += "</a>\n";
491#endif //DESKTOP_VERSION 521#endif //DESKTOP_VERSION
492#else 522#else
493 //qDebug("nokabc "); 523 //qDebug("nokabc ");
494 mText += "<li><a href=\"uid:" + a->uid() + "\">"; 524 mText += "<li><a href=\"uid:" + a->uid() + "\">";
495 if (!a->name().isEmpty()) mText += a->name(); 525 if (!a->name().isEmpty()) mText += a->name();
496 else mText += a->email(); 526 else mText += a->email();
497 mText += "</a>\n"; 527 mText += "</a>\n";
498#endif 528#endif
499 529
500 530
501 if (!a->email().isEmpty()) { 531 if (!a->email().isEmpty()) {
502 if (iconPath) { 532 if (iconPath) {
503 mText += "<a href=\"mailto:" + a->name() +" <" + a->email() + ">:" + mMailSubject + "\">"; 533 mText += "<a href=\"mailto:" + a->name() +" <" + a->email() + ">:" + mMailSubject + "\">";
504 if ( a->RSVP() ) 534 if ( a->RSVP() ) {
535 ++a_count;
505 mText += "<IMG src=\"" + iconPath + "\">"; 536 mText += "<IMG src=\"" + iconPath + "\">";
506 else 537 }
538 else {
539 ++a_count_nr;
507 mText += "<IMG src=\"" + NOiconPath + "\">"; 540 mText += "<IMG src=\"" + NOiconPath + "\">";
541 }
508 mText += "</a>\n"; 542 mText += "</a>\n";
509 } 543 }
510 } 544 }
511 if (a->status() != Attendee::NeedsAction ) 545 if (a->status() != Attendee::NeedsAction )
512 mText +="[" + a->statusStr() + "] "; 546 mText +="[" + a->statusStr() + "] ";
513 if (a->role() == Attendee::Chair ) 547 if (a->role() == Attendee::Chair )
514 mText +="(" + a->roleStr().left(1) + ".)"; 548 mText +="(" + a->roleStr().left(1) + ".)";
515 } 549 }
516 mText.append("</li></ul>"); 550 mText.append("</li></ul>");
551 if ( a_count > 1 ) {
552 mText += "<a href=\"mailto:ALL\">";
553 mText += i18n( "Mail to all" );
554 mText += "</a> ( ";
555 mText += "<IMG src=\"" + iconPath + "\">";
556 mText += i18n( " and " );
557 mText += "<IMG src=\"" + NOiconPath + "\"> )";
558 mText += "<br>\n";
559
560
561 }
562 if ( a_count_nr > 1 ) {
563 mText += "<a href=\"mailto:RSVP\">";
564 mText += i18n( "Mail to selected" );
565 mText += "</a> ( ";
566 mText += i18n( "<IMG src=\"%1\"> only )").arg ( iconPath );
567 mText += "\n";
568 }
517 } 569 }
518 570
519} 571}
520void KOEventViewer::appendJournal(Journal *jour, int mode ) 572void KOEventViewer::appendJournal(Journal *jour, int mode )
521{ 573{
522 bool shortDate = KOPrefs::instance()->mShortDateInViewer; 574 bool shortDate = KOPrefs::instance()->mShortDateInViewer;
523 if (mode == 0 ) { 575 if (mode == 0 ) {
524 addTag("h2",i18n("Journal from: ")); 576 addTag("h2",i18n("Journal from: "));
525 } 577 }
526 else { 578 else {
527 if ( mode == 1 ) { 579 if ( mode == 1 ) {
528 addTag("h2",i18n( "Local: " ) +i18n("Journal from: ")); 580 addTag("h2",i18n( "Local: " ) +i18n("Journal from: "));
529 } else { 581 } else {
530 addTag("h2",i18n( "Remote: " ) +i18n("Journal from: ")); 582 addTag("h2",i18n( "Remote: " ) +i18n("Journal from: "));
531 } 583 }
532 } 584 }
533 topLevelWidget()->setCaption("Journal Viewer"); 585 topLevelWidget()->setCaption("Journal Viewer");
534 mText.append(i18n("<h3> %1 </h3> ").arg(jour->dtStartDateStr(KOPrefs::instance()->mShortDateInViewer))); 586 mText.append(i18n("<h3> %1 </h3> ").arg(jour->dtStartDateStr(KOPrefs::instance()->mShortDateInViewer)));
535 addTag("b",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(jour->lastModified(),shortDate ) ); 587 addTag("b",i18n( "Last modified: " ) + KGlobal::locale()->formatDateTime(jour->lastModified(),shortDate ) );
536 if (!jour->description().isEmpty()) { 588 if (!jour->description().isEmpty()) {
537 addTag("p",jour->description()); 589 addTag("p",jour->description());
538 } 590 }
539 setText(mText); 591 setText(mText);
540} 592}
541 593
542void KOEventViewer::formatReadOnly(Incidence *event) 594void KOEventViewer::formatReadOnly(Incidence *event)
543{ 595{
544 if (event->isReadOnly()) { 596 if (event->isReadOnly()) {
545 addTag("p","<em>(" + i18n("read-only") + ")</em>"); 597 addTag("p","<em>(" + i18n("read-only") + ")</em>");
546 } 598 }
547} 599}
548void KOEventViewer::setSyncMode( bool b ) 600void KOEventViewer::setSyncMode( bool b )
549{ 601{
550 mSyncMode = b; 602 mSyncMode = b;
551} 603}
552 604
553 605
554void KOEventViewer::setTodo(Todo *event, bool clearV ) 606void KOEventViewer::setTodo(Todo *event, bool clearV )
555{ 607{
556 if ( clearV ) 608 if ( clearV )
557 clearEvents(); 609 clearEvents();
558 if ( mSyncMode ) { 610 if ( mSyncMode ) {
559 if ( clearV ) 611 if ( clearV )
560 appendTodo(event,1 ); 612 appendTodo(event,1 );
561 else 613 else
562 appendTodo(event,2); 614 appendTodo(event,2);
563 } else 615 } else
564 appendTodo(event); 616 appendTodo(event);
565} 617}
566void KOEventViewer::setJournal(Journal *event, bool clearV ) 618void KOEventViewer::setJournal(Journal *event, bool clearV )
567{ 619{
568 if ( clearV ) 620 if ( clearV )
569 clearEvents(); 621 clearEvents();
570 if ( mSyncMode ) { 622 if ( mSyncMode ) {
571 if ( clearV ) 623 if ( clearV )
572 appendJournal(event, 1); 624 appendJournal(event, 1);
573 else 625 else
574 appendJournal(event, 2); 626 appendJournal(event, 2);
575 } else 627 } else
576 appendJournal(event); 628 appendJournal(event);
577} 629}
578 630
579void KOEventViewer::setEvent(Event *event) 631void KOEventViewer::setEvent(Event *event)
580{ 632{
581 clearEvents(); 633 clearEvents();
582 if ( mSyncMode ) 634 if ( mSyncMode )
583 appendEvent(event, 1); 635 appendEvent(event, 1);
584 else 636 else
585 appendEvent(event); 637 appendEvent(event);
586} 638}
587 639
588void KOEventViewer::addEvent(Event *event) 640void KOEventViewer::addEvent(Event *event)
589{ 641{
590 if ( mSyncMode ) 642 if ( mSyncMode )
591 appendEvent(event, 2); 643 appendEvent(event, 2);
592 else 644 else
593 appendEvent(event); 645 appendEvent(event);
594} 646}
595 647
596void KOEventViewer::clearEvents(bool now) 648void KOEventViewer::clearEvents(bool now)
597{ 649{
598 mText = ""; 650 mText = "";
599 if (now) setText(mText); 651 if (now) setText(mText);
600} 652}
601 653
602void KOEventViewer::addText(QString text) 654void KOEventViewer::addText(QString text)
603{ 655{
604 mText.append(text); 656 mText.append(text);
605 setText(mText); 657 setText(mText);
606} 658}
diff --git a/korganizer/koeventviewer.h b/korganizer/koeventviewer.h
index 0cd3f33..cf44284 100644
--- a/korganizer/koeventviewer.h
+++ b/korganizer/koeventviewer.h
@@ -1,74 +1,75 @@
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#ifndef KOEVENTVIEWER_H 19#ifndef KOEVENTVIEWER_H
20#define KOEVENTVIEWER_H 20#define KOEVENTVIEWER_H
21// 21//
22// Viewer widget for events. 22// Viewer widget for events.
23// 23//
24 24
25#include <qtextbrowser.h> 25#include <qtextbrowser.h>
26 26
27#include <libkcal/event.h> 27#include <libkcal/event.h>
28#include <libkcal/journal.h> 28#include <libkcal/journal.h>
29 29
30 30
31using namespace KCal; 31using namespace KCal;
32 32
33class KOEventViewer : public QTextBrowser { 33class KOEventViewer : public QTextBrowser {
34 Q_OBJECT 34 Q_OBJECT
35 public: 35 public:
36 KOEventViewer(QWidget *parent=0,const char *name=0); 36 KOEventViewer(QWidget *parent=0,const char *name=0);
37 virtual ~KOEventViewer(); 37 virtual ~KOEventViewer();
38 38
39 void setSource(const QString &); 39 void setSource(const QString &);
40 void setEvent(Event *event); 40 void setEvent(Event *event);
41 void addEvent(Event *event); 41 void addEvent(Event *event);
42 void setTodo(Todo *event, bool clearV = true ); 42 void setTodo(Todo *event, bool clearV = true );
43 void setJournal(Journal *jour, bool clearV = true ); 43 void setJournal(Journal *jour, bool clearV = true );
44 44
45 void appendEvent(Event *event, int mode = 0 ); 45 void appendEvent(Event *event, int mode = 0 );
46 void appendTodo(Todo *event, int mode = 0 ); 46 void appendTodo(Todo *event, int mode = 0 );
47 void appendJournal(Journal *jour, int mode = 0 ); 47 void appendJournal(Journal *jour, int mode = 0 );
48 48
49 void clearEvents(bool now=false); 49 void clearEvents(bool now=false);
50 50
51 void addText(QString text); 51 void addText(QString text);
52 void setSyncMode( bool ); 52 void setSyncMode( bool );
53 void setColorMode( int ); 53 void setColorMode( int );
54 void mailToAttendees( bool all );
54 55
55 protected: 56 protected:
56 int mColorMode; 57 int mColorMode;
57 void addTag(const QString & tag,const QString & text); 58 void addTag(const QString & tag,const QString & text);
58 59
59 void formatCategories(Incidence *event); 60 void formatCategories(Incidence *event);
60 void formatAttendees(Incidence *event); 61 void formatAttendees(Incidence *event);
61 void formatReadOnly(Incidence *event); 62 void formatReadOnly(Incidence *event);
62 63
63 private: 64 private:
64 QTextBrowser *mEventTextView; 65 QTextBrowser *mEventTextView;
65 bool mSyncMode; 66 bool mSyncMode;
66 67
67 QString mText; 68 QString mText;
68 QString mMailSubject; 69 QString mMailSubject;
69 Incidence* mCurrentIncidence; 70 Incidence* mCurrentIncidence;
70 signals: 71 signals:
71 void launchaddressbook(QString uid); 72 void launchaddressbook(QString uid);
72}; 73};
73 74
74#endif 75#endif
diff --git a/libkdepim/externalapphandler.cpp b/libkdepim/externalapphandler.cpp
index 3079141..7200da9 100644
--- a/libkdepim/externalapphandler.cpp
+++ b/libkdepim/externalapphandler.cpp
@@ -1,1200 +1,1201 @@
1/* 1/*
2 This file is part of libkdepim. 2 This file is part of libkdepim.
3 Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2002 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/* 24/*
25Enhanced Version of the file for platform independent KDE tools. 25Enhanced Version of the file for platform independent KDE tools.
26Copyright (c) 2004 Ulf Schenk 26Copyright (c) 2004 Ulf Schenk
27 27
28$Id$ 28$Id$
29*/ 29*/
30#include <stdlib.h> 30#include <stdlib.h>
31 31
32#include <qfile.h> 32#include <qfile.h>
33#include <qmap.h> 33#include <qmap.h>
34#include <qregexp.h> 34#include <qregexp.h>
35 35
36#ifndef DESKTOP_VERSION 36#ifndef DESKTOP_VERSION
37#include <qpe/qpeapplication.h> 37#include <qpe/qpeapplication.h>
38#include <qtopia/qcopenvelope_qws.h> 38#include <qtopia/qcopenvelope_qws.h>
39#else 39#else
40#include <qapplication.h> 40#include <qapplication.h>
41#endif 41#endif
42 42
43#include <kstaticdeleter.h> 43#include <kstaticdeleter.h>
44#include <kmessagebox.h> 44#include <kmessagebox.h>
45 45
46 46
47#include "externalapphandler.h" 47#include "externalapphandler.h"
48 48
49#include "kpimglobalprefs.h" 49#include "kpimglobalprefs.h"
50 50
51//uncomment line to get debug output 51//uncomment line to get debug output
52//#define DEBUG_EXT_APP_HANDLER 52//#define DEBUG_EXT_APP_HANDLER
53 53
54/********************************************************************************* 54/*********************************************************************************
55 * 55 *
56 ********************************************************************************/ 56 ********************************************************************************/
57 57
58 58
59QCopTransferItem::QCopTransferItem(int usedSourceParameters, const QString& sourceMessage, const QString& targetChannel, const QString& targetMessage) 59QCopTransferItem::QCopTransferItem(int usedSourceParameters, const QString& sourceMessage, const QString& targetChannel, const QString& targetMessage)
60 : _usedSourceParameters(usedSourceParameters), _sourceMessage(sourceMessage), _targetChannel(targetChannel), _targetMessage(targetMessage) 60 : _usedSourceParameters(usedSourceParameters), _sourceMessage(sourceMessage), _targetChannel(targetChannel), _targetMessage(targetMessage)
61{ 61{
62 //sourceMessage passes later three parameters: sourceChannel, uid, param1 62 //sourceMessage passes later three parameters: sourceChannel, uid, param1
63 if (_usedSourceParameters == 0) 63 if (_usedSourceParameters == 0)
64 _sourceMessageParameters = "QString,QString)"; 64 _sourceMessageParameters = "QString,QString)";
65 else if (_usedSourceParameters == 1) 65 else if (_usedSourceParameters == 1)
66 _sourceMessageParameters = "(QString,QString,QString)"; 66 _sourceMessageParameters = "(QString,QString,QString)";
67 else if (_usedSourceParameters == 2) 67 else if (_usedSourceParameters == 2)
68 _sourceMessageParameters = "(QString,QString,QString,QString)"; 68 _sourceMessageParameters = "(QString,QString,QString,QString)";
69 else if (_usedSourceParameters == 3) 69 else if (_usedSourceParameters == 3)
70 _sourceMessageParameters = "(QString,QString,QString,QString,QString)"; 70 _sourceMessageParameters = "(QString,QString,QString,QString,QString)";
71} 71}
72 72
73/*********************************************************************************/ 73/*********************************************************************************/
74 74
75QCopTransferItem::QCopTransferItem() 75QCopTransferItem::QCopTransferItem()
76{ 76{
77} 77}
78 78
79/*********************************************************************************/ 79/*********************************************************************************/
80bool QCopTransferItem::sendMessageToTarget(const QString& uid, const QString& param1, const QString& param2, const QString& param3) 80bool QCopTransferItem::sendMessageToTarget(const QString& uid, const QString& param1, const QString& param2, const QString& param3)
81{ 81{
82 82
83#ifndef DESKTOP_VERSION 83#ifndef DESKTOP_VERSION
84 //sourceMessage passes two parameters: sourceChannel, uid 84 //sourceMessage passes two parameters: sourceChannel, uid
85 QString sourceMessage = _sourceMessage + _sourceMessageParameters; 85 QString sourceMessage = _sourceMessage + _sourceMessageParameters;
86#ifdef DEBUG_EXT_APP_HANDLER 86#ifdef DEBUG_EXT_APP_HANDLER
87 qDebug("1Using QCopEnvelope e(\"%s\",\"%s\")", _targetChannel.latin1(), sourceMessage.latin1()); 87 qDebug("1Using QCopEnvelope e(\"%s\",\"%s\")", _targetChannel.latin1(), sourceMessage.latin1());
88 qDebug("passing sourcechannel(%s), uid(%s), param1(%s), param2(%s), param3(%s) as parameter to QCopEnvelope", _sourceChannel.latin1(), uid.latin1(), param1.latin1(), param2.latin1(), param3.latin1()); 88 qDebug("passing sourcechannel(%s), uid(%s), param1(%s), param2(%s), param3(%s) as parameter to QCopEnvelope", _sourceChannel.latin1(), uid.latin1(), param1.latin1(), param2.latin1(), param3.latin1());
89#endif 89#endif
90 90
91 QCopEnvelope e(_targetChannel.latin1(), sourceMessage.latin1()); 91 QCopEnvelope e(_targetChannel.latin1(), sourceMessage.latin1());
92 92
93 e << _sourceChannel << uid; 93 e << _sourceChannel << uid;
94 94
95 if (_usedSourceParameters == 1) 95 if (_usedSourceParameters == 1)
96 e << param1; 96 e << param1;
97 else if (_usedSourceParameters == 2) 97 else if (_usedSourceParameters == 2)
98 e << param1 << param2; 98 e << param1 << param2;
99 else if (_usedSourceParameters == 3) 99 else if (_usedSourceParameters == 3)
100 e << param1 << param2 << param3; 100 e << param1 << param2 << param3;
101 101
102 qApp->processEvents(); 102 qApp->processEvents();
103 103
104 return true; 104 return true;
105 105
106#else 106#else
107 KMessageBox::sorry( 0, i18n( "This version does not support QCop." ) ); 107 KMessageBox::sorry( 0, i18n( "This version does not support QCop." ) );
108 return false; 108 return false;
109#endif 109#endif
110 110
111} 111}
112 112
113 113
114/*********************************************************************************/ 114/*********************************************************************************/
115void QCopTransferItem::setSourceChannel(const QString& sourceChannel) 115void QCopTransferItem::setSourceChannel(const QString& sourceChannel)
116{ 116{
117 117
118 if ( !sourceChannel.isEmpty()) 118 if ( !sourceChannel.isEmpty())
119 _sourceChannel = sourceChannel; 119 _sourceChannel = sourceChannel;
120} 120}
121 121
122 122
123/*********************************************************************************/ 123/*********************************************************************************/
124bool QCopTransferItem::appMessage( const QCString& cmsg, const QByteArray& data ) 124bool QCopTransferItem::appMessage( const QCString& cmsg, const QByteArray& data )
125{ 125{
126 126
127 // copied from old mail2 127 // copied from old mail2
128/* 128/*
129 static int ii = 0; 129 static int ii = 0;
130 130
131 // block second call 131 // block second call
132 if ( ii < 2 ) { 132 if ( ii < 2 ) {
133 ++ii; 133 ++ii;
134 if ( ii > 1 ) { 134 if ( ii > 1 ) {
135 qDebug("qcop call blocked "); 135 qDebug("qcop call blocked ");
136 return true; 136 return true;
137 } 137 }
138 } 138 }
139*/ 139*/
140 140
141// qDebug("QCopTransferItem- QCOP message received: %s ", cmsg.data() ); 141// qDebug("QCopTransferItem- QCOP message received: %s ", cmsg.data() );
142 142
143 //we are in the target and get a request from the source 143 //we are in the target and get a request from the source
144 if ( (_sourceMessage + _sourceMessageParameters) == cmsg.data()) 144 if ( (_sourceMessage + _sourceMessageParameters) == cmsg.data())
145 { 145 {
146 146
147 QDataStream stream( data, IO_ReadOnly ); 147 QDataStream stream( data, IO_ReadOnly );
148 148
149 149
150 QString sourceChannel; 150 QString sourceChannel;
151 QString uid; 151 QString uid;
152 QString param1; 152 QString param1;
153 QString param2; 153 QString param2;
154 QString param3; 154 QString param3;
155 155
156 stream >> sourceChannel >> uid; 156 stream >> sourceChannel >> uid;
157 157
158 if (_usedSourceParameters == 0) 158 if (_usedSourceParameters == 0)
159 { 159 {
160 emit receivedMessageFromSource(sourceChannel, uid); 160 emit receivedMessageFromSource(sourceChannel, uid);
161 } 161 }
162 else if (_usedSourceParameters == 1) 162 else if (_usedSourceParameters == 1)
163 { 163 {
164 stream >> param1; 164 stream >> param1;
165 emit receivedMessageFromSource(sourceChannel, uid, param1); 165 emit receivedMessageFromSource(sourceChannel, uid, param1);
166 } 166 }
167 else if (_usedSourceParameters == 2) 167 else if (_usedSourceParameters == 2)
168 { 168 {
169 stream >> param1 >> param2; 169 stream >> param1 >> param2;
170 emit receivedMessageFromSource(sourceChannel, uid, param1, param2); 170 emit receivedMessageFromSource(sourceChannel, uid, param1, param2);
171 } 171 }
172 else if (_usedSourceParameters == 3) 172 else if (_usedSourceParameters == 3)
173 { 173 {
174 stream >> param1 >> param2 >> param3; 174 stream >> param1 >> param2 >> param3;
175 emit receivedMessageFromSource(sourceChannel, uid, param1, param2, param3); 175 emit receivedMessageFromSource(sourceChannel, uid, param1, param2, param3);
176 } 176 }
177 177
178 return true; 178 return true;
179 } 179 }
180 180
181 return false; 181 return false;
182} 182}
183 183
184 184
185/********************************************************************************* 185/*********************************************************************************
186 * 186 *
187 ********************************************************************************/ 187 ********************************************************************************/
188 188
189 189
190QCopMapTransferItem::QCopMapTransferItem(int usedSourceParameters, const QString& sourceMessage, const QString& targetChannel, const QString& targetMessage) 190QCopMapTransferItem::QCopMapTransferItem(int usedSourceParameters, const QString& sourceMessage, const QString& targetChannel, const QString& targetMessage)
191 : QCopTransferItem(usedSourceParameters, sourceMessage, targetChannel,targetMessage) 191 : QCopTransferItem(usedSourceParameters, sourceMessage, targetChannel,targetMessage)
192{ 192{
193 //targetMessage returns later two parameters: uid, and map<qstring,qstring> 193 //targetMessage returns later two parameters: uid, and map<qstring,qstring>
194 _targetMessageParameters = "(QString,QMAP<QString,QString>)"; 194 _targetMessageParameters = "(QString,QMAP<QString,QString>)";
195} 195}
196 196
197/*********************************************************************************/ 197/*********************************************************************************/
198bool QCopMapTransferItem::sendMessageToSource(const QString& uid, const QMap<QString,QString>& nameEmailMap) 198bool QCopMapTransferItem::sendMessageToSource(const QString& uid, const QMap<QString,QString>& nameEmailMap)
199{ 199{
200#ifndef DESKTOP_VERSION 200#ifndef DESKTOP_VERSION
201 //targetMessage passes two parameters: uid, map 201 //targetMessage passes two parameters: uid, map
202 QString targetMessage = _targetMessage + _targetMessageParameters; 202 QString targetMessage = _targetMessage + _targetMessageParameters;
203 203
204#ifdef DEBUG_EXT_APP_HANDLER 204#ifdef DEBUG_EXT_APP_HANDLER
205 qDebug("2Using QCopEnvelope e(\"%s\",\"%s\")", _sourceChannel.latin1(), targetMessage.latin1()); 205 qDebug("2Using QCopEnvelope e(\"%s\",\"%s\")", _sourceChannel.latin1(), targetMessage.latin1());
206 qDebug("passing uid(%s) and map as parameter to QCopEnvelope", uid.latin1()); 206 qDebug("passing uid(%s) and map as parameter to QCopEnvelope", uid.latin1());
207#endif 207#endif
208 208
209 QCopEnvelope e(_sourceChannel.latin1(), targetMessage.latin1()); 209 QCopEnvelope e(_sourceChannel.latin1(), targetMessage.latin1());
210 //US we need no names in the To field. The emailadresses are enough 210 //US we need no names in the To field. The emailadresses are enough
211 211
212 e << uid << nameEmailMap; 212 e << uid << nameEmailMap;
213 213
214 qApp->processEvents(); 214 qApp->processEvents();
215 215
216 return true; 216 return true;
217 217
218#else 218#else
219 KMessageBox::sorry( 0, i18n( "This version does not support QCop." ) ); 219 KMessageBox::sorry( 0, i18n( "This version does not support QCop." ) );
220 return false; 220 return false;
221#endif 221#endif
222 222
223} 223}
224 224
225 225
226/*********************************************************************************/ 226/*********************************************************************************/
227bool QCopMapTransferItem::appMessage( const QCString& cmsg, const QByteArray& data ) 227bool QCopMapTransferItem::appMessage( const QCString& cmsg, const QByteArray& data )
228{ 228{
229 bool res = QCopTransferItem::appMessage( cmsg, data ); 229 bool res = QCopTransferItem::appMessage( cmsg, data );
230 230
231 if (res == false) 231 if (res == false)
232 { 232 {
233 QDataStream stream( data, IO_ReadOnly ); 233 QDataStream stream( data, IO_ReadOnly );
234 234
235// qDebug("QCopMapTransferItem- QCOP message received: %s ", cmsg.data() ); 235// qDebug("QCopMapTransferItem- QCOP message received: %s ", cmsg.data() );
236 236
237 //we are in the source and get an answer from the target 237 //we are in the source and get an answer from the target
238 if ((_targetMessage + _targetMessageParameters) == cmsg.data()) 238 if ((_targetMessage + _targetMessageParameters) == cmsg.data())
239 { 239 {
240 QMap<QString,QString> adrMap; 240 QMap<QString,QString> adrMap;
241 QString uid; 241 QString uid;
242 242
243 stream >> uid >> adrMap; 243 stream >> uid >> adrMap;
244 244
245 emit receivedMessageFromTarget(uid, adrMap); 245 emit receivedMessageFromTarget(uid, adrMap);
246 246
247 247
248 return true; 248 return true;
249 } 249 }
250 } 250 }
251 251
252 return false; 252 return false;
253} 253}
254 254
255 255
256/********************************************************************************* 256/*********************************************************************************
257 * 257 *
258 ********************************************************************************/ 258 ********************************************************************************/
259 259
260QCopListTransferItem::~QCopListTransferItem() 260QCopListTransferItem::~QCopListTransferItem()
261{ 261{
262 262
263} 263}
264 264
265QCopListTransferItem::QCopListTransferItem(int usedSourceParameters, const QString& sourceMessage, const QString& targetChannel, const QString& targetMessage) 265QCopListTransferItem::QCopListTransferItem(int usedSourceParameters, const QString& sourceMessage, const QString& targetChannel, const QString& targetMessage)
266 : QCopTransferItem(usedSourceParameters, sourceMessage, targetChannel,targetMessage) 266 : QCopTransferItem(usedSourceParameters, sourceMessage, targetChannel,targetMessage)
267{ 267{
268 //targetMessage returns later two parameters: uid, and three lists 268 //targetMessage returns later two parameters: uid, and three lists
269 _targetMessageParameters = "(QString,QStringList,QStringList,QStringList,QStringList,QStringList,QStringList)"; 269 _targetMessageParameters = "(QString,QStringList,QStringList,QStringList,QStringList,QStringList,QStringList)";
270} 270}
271 271
272/*********************************************************************************/ 272/*********************************************************************************/
273bool QCopListTransferItem::sendMessageToSource(const QString& uid, const QStringList& list1, const QStringList& list2, const QStringList& list3, const QStringList& list4, const QStringList& list5, const QStringList& list6) 273bool QCopListTransferItem::sendMessageToSource(const QString& uid, const QStringList& list1, const QStringList& list2, const QStringList& list3, const QStringList& list4, const QStringList& list5, const QStringList& list6)
274{ 274{
275#ifndef DESKTOP_VERSION 275#ifndef DESKTOP_VERSION
276 //targetMessage passes two parameters: uid, map 276 //targetMessage passes two parameters: uid, map
277 QString targetMessage = _targetMessage + _targetMessageParameters; 277 QString targetMessage = _targetMessage + _targetMessageParameters;
278 278
279#ifdef DEBUG_EXT_APP_HANDLER 279#ifdef DEBUG_EXT_APP_HANDLER
280 qDebug("3Using QCopEnvelope e(\"%s\",\"%s\")", _sourceChannel.latin1(), targetMessage.latin1()); 280 qDebug("3Using QCopEnvelope e(\"%s\",\"%s\")", _sourceChannel.latin1(), targetMessage.latin1());
281 qDebug("passing uid(%s) and list1, list2, list3, list4, list5, list6 as parameter to QCopEnvelope", uid.latin1()); 281 qDebug("passing uid(%s) and list1, list2, list3, list4, list5, list6 as parameter to QCopEnvelope", uid.latin1());
282 282
283 283
284 for ( int i = 0; i < list3.count(); i++) 284 for ( int i = 0; i < list3.count(); i++)
285 qDebug("listentry list3: %s",list3[i].latin1()); 285 qDebug("listentry list3: %s",list3[i].latin1());
286#endif 286#endif
287 287
288 QCopEnvelope e(_sourceChannel.latin1(), targetMessage.latin1()); 288 QCopEnvelope e(_sourceChannel.latin1(), targetMessage.latin1());
289 //US we need no names in the To field. The emailadresses are enough 289 //US we need no names in the To field. The emailadresses are enough
290 290
291 e << uid << list1 << list2 << list3 << list4 << list5 << list6; 291 e << uid << list1 << list2 << list3 << list4 << list5 << list6;
292 292
293 qApp->processEvents(); 293 qApp->processEvents();
294 294
295 return true; 295 return true;
296 296
297#else 297#else
298 KMessageBox::sorry( 0, i18n( "This version does not support QCop." ) ); 298 KMessageBox::sorry( 0, i18n( "This version does not support QCop." ) );
299 return false; 299 return false;
300#endif 300#endif
301 301
302} 302}
303 303
304 304
305/*********************************************************************************/ 305/*********************************************************************************/
306bool QCopListTransferItem::appMessage( const QCString& cmsg, const QByteArray& data ) 306bool QCopListTransferItem::appMessage( const QCString& cmsg, const QByteArray& data )
307{ 307{
308 bool res = QCopTransferItem::appMessage( cmsg, data ); 308 bool res = QCopTransferItem::appMessage( cmsg, data );
309#ifdef DEBUG_EXT_APP_HANDLER 309#ifdef DEBUG_EXT_APP_HANDLER
310 qDebug("1QCopListTransferItem- QCOP message received: %s ", cmsg.data() ); 310 qDebug("1QCopListTransferItem- QCOP message received: %s ", cmsg.data() );
311#endif 311#endif
312 312
313 if (res == false) 313 if (res == false)
314 { 314 {
315 QDataStream stream( data, IO_ReadOnly ); 315 QDataStream stream( data, IO_ReadOnly );
316 316
317#ifdef DEBUG_EXT_APP_HANDLER 317#ifdef DEBUG_EXT_APP_HANDLER
318 qDebug("2QCopListTransferItem- QCOP message received: %s ", cmsg.data() ); 318 qDebug("2QCopListTransferItem- QCOP message received: %s ", cmsg.data() );
319#endif 319#endif
320 320
321 //we are in the source and get an answer from the target 321 //we are in the source and get an answer from the target
322 if ((_targetMessage + _targetMessageParameters) == cmsg.data()) 322 if ((_targetMessage + _targetMessageParameters) == cmsg.data())
323 { 323 {
324 QStringList list1; 324 QStringList list1;
325 QStringList list2; 325 QStringList list2;
326 QStringList list3; 326 QStringList list3;
327 QStringList list4; 327 QStringList list4;
328 QStringList list5; 328 QStringList list5;
329 QStringList list6; 329 QStringList list6;
330 QString uid; 330 QString uid;
331 331
332#ifdef DEBUG_EXT_APP_HANDLER 332#ifdef DEBUG_EXT_APP_HANDLER
333 qDebug("3QCopListTransferItem- QCOP message received: %s ", cmsg.data() ); 333 qDebug("3QCopListTransferItem- QCOP message received: %s ", cmsg.data() );
334#endif 334#endif
335 335
336 stream >> uid >> list1 >> list2 >> list3 >> list4 >> list5 >> list6; 336 stream >> uid >> list1 >> list2 >> list3 >> list4 >> list5 >> list6;
337 emit receivedMessageFromTarget(uid, list1, list2, list3, list4, list5, list6); 337 emit receivedMessageFromTarget(uid, list1, list2, list3, list4, list5, list6);
338 338
339 339
340 return true; 340 return true;
341 } 341 }
342 } 342 }
343 343
344 return false; 344 return false;
345} 345}
346 346
347 347
348 348
349/********************************************************************************* 349/*********************************************************************************
350 * 350 *
351 ********************************************************************************/ 351 ********************************************************************************/
352 352
353 353
354ExternalAppHandler *ExternalAppHandler::sInstance = 0; 354ExternalAppHandler *ExternalAppHandler::sInstance = 0;
355static KStaticDeleter<ExternalAppHandler> staticDeleter; 355static KStaticDeleter<ExternalAppHandler> staticDeleter;
356 356
357ExternalAppHandler::ExternalAppHandler() 357ExternalAppHandler::ExternalAppHandler()
358{ 358{
359 mDefaultItems.setAutoDelete(true); 359 mDefaultItems.setAutoDelete(true);
360 360
361 mNameEmailUidListFromKAPITransfer = new QCopListTransferItem(0, "requestNameEmailUIDListFromKAPI", "QPE/Application/kapi", "receiveNameEmailUIDList"); 361 mNameEmailUidListFromKAPITransfer = new QCopListTransferItem(0, "requestNameEmailUIDListFromKAPI", "QPE/Application/kapi", "receiveNameEmailUIDList");
362 connect(mNameEmailUidListFromKAPITransfer, SIGNAL (receivedMessageFromSource(const QString&, const QString&)), this, SIGNAL (requestForNameEmailUidList(const QString&, const QString&))); 362 connect(mNameEmailUidListFromKAPITransfer, SIGNAL (receivedMessageFromSource(const QString&, const QString&)), this, SIGNAL (requestForNameEmailUidList(const QString&, const QString&)));
363 connect(mNameEmailUidListFromKAPITransfer, SIGNAL (receivedMessageFromTarget(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)), this, SLOT (receivedNameEmailUidList_Slot(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&))); 363 connect(mNameEmailUidListFromKAPITransfer, SIGNAL (receivedMessageFromTarget(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)), this, SLOT (receivedNameEmailUidList_Slot(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)));
364 364
365//US mFindByEmailFromKAPITransfer = new QCopListTransferItem(1, "requestFindByEmailFromKAPI", "QPE/Application/kapi", "receiveFindByEmailNameEmailUIDList"); 365//US mFindByEmailFromKAPITransfer = new QCopListTransferItem(1, "requestFindByEmailFromKAPI", "QPE/Application/kapi", "receiveFindByEmailNameEmailUIDList");
366//US connect(mFindByEmailFromKAPITransfer, SIGNAL (receivedMessageFromSource(const QString&, const QString&, const QString&)), this, SIGNAL (requestForFindByEmail(const QString&, const QString&, const QString&))); 366//US connect(mFindByEmailFromKAPITransfer, SIGNAL (receivedMessageFromSource(const QString&, const QString&, const QString&)), this, SIGNAL (requestForFindByEmail(const QString&, const QString&, const QString&)));
367//US connect(mFindByEmailFromKAPITransfer, SIGNAL (receivedMessageFromTarget(const QString&, const QStringList&, const QStringList&, const QStringList&)), this, SIGNAL (receivedFindByEmailEvent(const QString&, const QStringList&, const QStringList&, const QStringList&))); 367//US connect(mFindByEmailFromKAPITransfer, SIGNAL (receivedMessageFromTarget(const QString&, const QStringList&, const QStringList&, const QStringList&)), this, SIGNAL (receivedFindByEmailEvent(const QString&, const QStringList&, const QStringList&, const QStringList&)));
368 368
369 mDisplayDetails = new QCopListTransferItem(3, "requestDisplayDetailsFromKAPI", "QPE/Application/kapi", ""); 369 mDisplayDetails = new QCopListTransferItem(3, "requestDisplayDetailsFromKAPI", "QPE/Application/kapi", "");
370 connect(mDisplayDetails, SIGNAL (receivedMessageFromSource(const QString&, const QString&, const QString&, const QString&, const QString&)), this, SIGNAL (requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&))); 370 connect(mDisplayDetails, SIGNAL (receivedMessageFromSource(const QString&, const QString&, const QString&, const QString&, const QString&)), this, SIGNAL (requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&)));
371 371
372 372
373 373
374 mBirthdayListFromKAPITransfer = new QCopListTransferItem(0, "requestBirthdayListFromKAPI", "QPE/Application/kapi", "receiveBirthdayList"); 374 mBirthdayListFromKAPITransfer = new QCopListTransferItem(0, "requestBirthdayListFromKAPI", "QPE/Application/kapi", "receiveBirthdayList");
375 connect(mBirthdayListFromKAPITransfer, SIGNAL (receivedMessageFromSource(const QString&, const QString&)), this, SIGNAL (requestForBirthdayList(const QString&, const QString&))); 375 connect(mBirthdayListFromKAPITransfer, SIGNAL (receivedMessageFromSource(const QString&, const QString&)), this, SIGNAL (requestForBirthdayList(const QString&, const QString&)));
376 connect(mBirthdayListFromKAPITransfer, SIGNAL (receivedMessageFromTarget(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)), this, SIGNAL (receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&))); 376 connect(mBirthdayListFromKAPITransfer, SIGNAL (receivedMessageFromTarget(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)), this, SIGNAL (receivedBirthdayListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&, const QStringList&)));
377 377
378 378
379} 379}
380 380
381ExternalAppHandler::~ExternalAppHandler() 381ExternalAppHandler::~ExternalAppHandler()
382{ 382{
383 delete mNameEmailUidListFromKAPITransfer; 383 delete mNameEmailUidListFromKAPITransfer;
384 //delete mFindByEmailFromKAPITransfer; 384 //delete mFindByEmailFromKAPITransfer;
385 delete mDisplayDetails; 385 delete mDisplayDetails;
386 delete mBirthdayListFromKAPITransfer; 386 delete mBirthdayListFromKAPITransfer;
387} 387}
388 388
389void ExternalAppHandler::receivedNameEmailUidList_Slot(const QString& uid, 389void ExternalAppHandler::receivedNameEmailUidList_Slot(const QString& uid,
390 const QStringList& nameList, 390 const QStringList& nameList,
391 const QStringList& emailList, 391 const QStringList& emailList,
392 const QStringList& uidList, 392 const QStringList& uidList,
393 const QStringList&, 393 const QStringList&,
394 const QStringList&, 394 const QStringList&,
395 const QStringList& ) 395 const QStringList& )
396{ 396{
397 // this method is a conevnient way to reduce the number of parameters I have to pass 397 // this method is a conevnient way to reduce the number of parameters I have to pass
398 emit receivedNameEmailUidListEvent(uid, nameList, emailList, uidList); 398 emit receivedNameEmailUidListEvent(uid, nameList, emailList, uidList);
399} 399}
400 400
401 401
402void ExternalAppHandler::loadConfig() 402void ExternalAppHandler::loadConfig()
403{ 403{
404 404
405 mDefaultItems.clear(); 405 mDefaultItems.clear();
406 mEmailAppAvailable = UNDEFINED; 406 mEmailAppAvailable = UNDEFINED;
407 mPhoneAppAvailable = UNDEFINED; 407 mPhoneAppAvailable = UNDEFINED;
408 mFaxAppAvailable = UNDEFINED; 408 mFaxAppAvailable = UNDEFINED;
409 mSMSAppAvailable = UNDEFINED; 409 mSMSAppAvailable = UNDEFINED;
410 mPagerAppAvailable = UNDEFINED; 410 mPagerAppAvailable = UNDEFINED;
411 mSIPAppAvailable = UNDEFINED; 411 mSIPAppAvailable = UNDEFINED;
412 412
413 QString opiepath = QString::fromLatin1( getenv("OPIEDIR") ); 413 QString opiepath = QString::fromLatin1( getenv("OPIEDIR") );
414 QString qtopiapath = QString::fromLatin1( getenv("QPEDIR") ); 414 QString qtopiapath = QString::fromLatin1( getenv("QPEDIR") );
415 QString qtpath = QString::fromLatin1( getenv("QTDIR") ); 415 QString qtpath = QString::fromLatin1( getenv("QTDIR") );
416 416
417 //if qtopiapath is not set, fallback to qt 417 //if qtopiapath is not set, fallback to qt
418 if (qtopiapath.isEmpty()) 418 if (qtopiapath.isEmpty())
419 qtopiapath = qtpath; 419 qtopiapath = qtpath;
420 420
421 //if opiepath is not set, fallback to qtopia 421 //if opiepath is not set, fallback to qtopia
422 if (opiepath.isEmpty()) 422 if (opiepath.isEmpty())
423 opiepath = qtopiapath; 423 opiepath = qtopiapath;
424 424
425 425
426 426
427 //mailclients 427 //mailclients
428 QString mailmsg1 = "writeMail(QString,QString)"; 428 QString mailmsg1 = "writeMail(QString,QString)";
429 QString mailmsg2 = "writeMail(QMap(QString,QString))"; 429 QString mailmsg2 = "writeMail(QMap(QString,QString))";
430 430
431 QString undefined = ""; 431 QString undefined = "";
432 432
433 addDefaultAppItem(ExternalAppHandler::EMAIL, KPimGlobalPrefs::NONE_EMC, "No email client installed", undefined, undefined, undefined, undefined, undefined); 433 addDefaultAppItem(ExternalAppHandler::EMAIL, KPimGlobalPrefs::NONE_EMC, "No email client installed", undefined, undefined, undefined, undefined, undefined);
434 addDefaultAppItem(ExternalAppHandler::EMAIL, KPimGlobalPrefs::OTHER_EMC, "Userdefined email client", undefined, undefined, undefined, undefined, undefined); 434 addDefaultAppItem(ExternalAppHandler::EMAIL, KPimGlobalPrefs::OTHER_EMC, "Userdefined email client", undefined, undefined, undefined, undefined, undefined);
435 435
436 if (( QFile::exists( qtopiapath + "/bin/ompi" )) || 436 if (( QFile::exists( qtopiapath + "/bin/ompi" )) ||
437 ( QFile::exists( opiepath + "/bin/ompi" )) || 437 ( QFile::exists( opiepath + "/bin/ompi" )) ||
438 ( QFile::exists( qtpath + "/bin/ompi" ))) 438 ( QFile::exists( qtpath + "/bin/ompi" )))
439 addDefaultAppItem(ExternalAppHandler::EMAIL, KPimGlobalPrefs::OMPI_EMC, "OM/Pi email client", "QPE/Application/ompi", mailmsg1, "%1;%2", mailmsg2, "TO=%1;ATTACHMENT=%2"); 439 addDefaultAppItem(ExternalAppHandler::EMAIL, KPimGlobalPrefs::OMPI_EMC, "OM/Pi email client", "QPE/Application/ompi", mailmsg1, "%1;%2", mailmsg2, "TO=%1;ATTACHMENT=%2");
440 440
441 if (( QFile::exists( qtopiapath + "/bin/qtmail" )) || 441 if (( QFile::exists( qtopiapath + "/bin/qtmail" )) ||
442 ( QFile::exists( qtpath + "/bin/qtmail" ))) 442 ( QFile::exists( qtpath + "/bin/qtmail" )))
443 addDefaultAppItem(ExternalAppHandler::EMAIL, KPimGlobalPrefs::QTOPIA_EMC, "Qtopia email client", "QPE/Application/qtmail", mailmsg1, "%1;%2", mailmsg2, "TO=%1;ATTACHMENT=%2"); 443 addDefaultAppItem(ExternalAppHandler::EMAIL, KPimGlobalPrefs::QTOPIA_EMC, "Qtopia email client", "QPE/Application/qtmail", mailmsg1, "%1;%2", mailmsg2, "TO=%1;ATTACHMENT=%2");
444 444
445 if ( QFile::exists( opiepath + "/bin/opiemail" )) 445 if ( QFile::exists( opiepath + "/bin/opiemail" ))
446 addDefaultAppItem(ExternalAppHandler::EMAIL, KPimGlobalPrefs::OPIE_EMC, "Opie email client", "QPE/Application/opiemail", mailmsg1, "%1;%2", mailmsg2, "TO=%1;ATTACHMENT=%2"); 446 addDefaultAppItem(ExternalAppHandler::EMAIL, KPimGlobalPrefs::OPIE_EMC, "Opie email client", "QPE/Application/opiemail", mailmsg1, "%1;%2", mailmsg2, "TO=%1;ATTACHMENT=%2");
447 447
448 if ( QFile::exists( opiepath + "/bin/mailit" )) 448 if ( QFile::exists( opiepath + "/bin/mailit" ))
449 addDefaultAppItem(ExternalAppHandler::EMAIL, KPimGlobalPrefs::OPIE_MAILIT_EMC, "Opie mailit email client", "QPE/Application/mailit", mailmsg1, "%1;%2", mailmsg2, "TO=%1;ATTACHMENT=%2"); 449 addDefaultAppItem(ExternalAppHandler::EMAIL, KPimGlobalPrefs::OPIE_MAILIT_EMC, "Opie mailit email client", "QPE/Application/mailit", mailmsg1, "%1;%2", mailmsg2, "TO=%1;ATTACHMENT=%2");
450 450
451 451
452 452
453 //phoneclients 453 //phoneclients
454 454
455 addDefaultAppItem(ExternalAppHandler::PHONE, KPimGlobalPrefs::NONE_PHC, "No phone client installed", undefined, undefined, undefined, undefined, undefined); 455 addDefaultAppItem(ExternalAppHandler::PHONE, KPimGlobalPrefs::NONE_PHC, "No phone client installed", undefined, undefined, undefined, undefined, undefined);
456 addDefaultAppItem(ExternalAppHandler::PHONE, KPimGlobalPrefs::OTHER_PHC, "Other phone client", undefined, undefined, undefined, undefined, undefined); 456 addDefaultAppItem(ExternalAppHandler::PHONE, KPimGlobalPrefs::OTHER_PHC, "Other phone client", undefined, undefined, undefined, undefined, undefined);
457 if (( QFile::exists( qtopiapath + "/bin/kppi" )) || 457 if (( QFile::exists( qtopiapath + "/bin/kppi" )) ||
458 ( QFile::exists( opiepath + "/bin/kppi" ))) 458 ( QFile::exists( opiepath + "/bin/kppi" )))
459 addDefaultAppItem(ExternalAppHandler::PHONE, KPimGlobalPrefs::KPPI_PHC, "KP/Pi phone client", "QPE/Application/kppi", "-ring:%1", "", undefined, undefined); 459 addDefaultAppItem(ExternalAppHandler::PHONE, KPimGlobalPrefs::KPPI_PHC, "KP/Pi phone client", "QPE/Application/kppi", "-ring:%1", "", undefined, undefined);
460 460
461 //faxclients 461 //faxclients
462 addDefaultAppItem(ExternalAppHandler::FAX, KPimGlobalPrefs::NONE_FAC, "No fax client installed", undefined, undefined, undefined, undefined, undefined); 462 addDefaultAppItem(ExternalAppHandler::FAX, KPimGlobalPrefs::NONE_FAC, "No fax client installed", undefined, undefined, undefined, undefined, undefined);
463 addDefaultAppItem(ExternalAppHandler::FAX, KPimGlobalPrefs::OTHER_FAC, "Other fax client", undefined, undefined, undefined, undefined, undefined); 463 addDefaultAppItem(ExternalAppHandler::FAX, KPimGlobalPrefs::OTHER_FAC, "Other fax client", undefined, undefined, undefined, undefined, undefined);
464 464
465 //smsclients 465 //smsclients
466 addDefaultAppItem(ExternalAppHandler::SMS, KPimGlobalPrefs::NONE_SMC, "No sms client installed", undefined, undefined, undefined, undefined, undefined); 466 addDefaultAppItem(ExternalAppHandler::SMS, KPimGlobalPrefs::NONE_SMC, "No sms client installed", undefined, undefined, undefined, undefined, undefined);
467 addDefaultAppItem(ExternalAppHandler::SMS, KPimGlobalPrefs::OTHER_SMC, "Other sms client", undefined, undefined, undefined, undefined, undefined); 467 addDefaultAppItem(ExternalAppHandler::SMS, KPimGlobalPrefs::OTHER_SMC, "Other sms client", undefined, undefined, undefined, undefined, undefined);
468 468
469 //pagerclients 469 //pagerclients
470 addDefaultAppItem(ExternalAppHandler::PAGER, KPimGlobalPrefs::NONE_PAC, "No pager client installed", undefined, undefined, undefined, undefined, undefined); 470 addDefaultAppItem(ExternalAppHandler::PAGER, KPimGlobalPrefs::NONE_PAC, "No pager client installed", undefined, undefined, undefined, undefined, undefined);
471 addDefaultAppItem(ExternalAppHandler::PAGER, KPimGlobalPrefs::OTHER_PAC, "Other pager client", undefined, undefined, undefined, undefined, undefined); 471 addDefaultAppItem(ExternalAppHandler::PAGER, KPimGlobalPrefs::OTHER_PAC, "Other pager client", undefined, undefined, undefined, undefined, undefined);
472 472
473 //sipclients 473 //sipclients
474 addDefaultAppItem(ExternalAppHandler::SIP, KPimGlobalPrefs::NONE_SIC, "No SIP client installed", undefined, undefined, undefined, undefined, undefined); 474 addDefaultAppItem(ExternalAppHandler::SIP, KPimGlobalPrefs::NONE_SIC, "No SIP client installed", undefined, undefined, undefined, undefined, undefined);
475 addDefaultAppItem(ExternalAppHandler::SIP, KPimGlobalPrefs::OTHER_SIC, "Other SIP client", undefined, undefined, undefined, undefined, undefined); 475 addDefaultAppItem(ExternalAppHandler::SIP, KPimGlobalPrefs::OTHER_SIC, "Other SIP client", undefined, undefined, undefined, undefined, undefined);
476 if (( QFile::exists( qtopiapath + "/bin/kppi" )) || 476 if (( QFile::exists( qtopiapath + "/bin/kppi" )) ||
477 ( QFile::exists( opiepath + "/bin/kppi" ))) 477 ( QFile::exists( opiepath + "/bin/kppi" )))
478 addDefaultAppItem(ExternalAppHandler::SIP, KPimGlobalPrefs::KPPI_SIC, "KP/Pi SIP client", "QPE/Application/kppi", "-ring:%1", "", undefined, undefined); 478 addDefaultAppItem(ExternalAppHandler::SIP, KPimGlobalPrefs::KPPI_SIC, "KP/Pi SIP client", "QPE/Application/kppi", "-ring:%1", "", undefined, undefined);
479 479
480} 480}
481 481
482ExternalAppHandler *ExternalAppHandler::instance() 482ExternalAppHandler *ExternalAppHandler::instance()
483{ 483{
484 if ( !sInstance ) { 484 if ( !sInstance ) {
485 sInstance = staticDeleter.setObject( new ExternalAppHandler() ); 485 sInstance = staticDeleter.setObject( new ExternalAppHandler() );
486 sInstance->loadConfig(); 486 sInstance->loadConfig();
487 } 487 }
488 488
489 return sInstance; 489 return sInstance;
490} 490}
491 491
492void ExternalAppHandler::addDefaultAppItem(Types type, int id, const QString& label, const QString& channel, const QString& message, const QString& parameter, const QString& message2, const QString& parameter2) 492void ExternalAppHandler::addDefaultAppItem(Types type, int id, const QString& label, const QString& channel, const QString& message, const QString& parameter, const QString& message2, const QString& parameter2)
493{ 493{
494 DefaultAppItem* dai = new DefaultAppItem(type, id, label, channel, message, parameter, message2, parameter2); 494 DefaultAppItem* dai = new DefaultAppItem(type, id, label, channel, message, parameter, message2, parameter2);
495 // qDebug("%d %d %s %s ", type, id, label.latin1(), channel.latin1() ); 495 // qDebug("%d %d %s %s ", type, id, label.latin1(), channel.latin1() );
496 mDefaultItems.append(dai); 496 mDefaultItems.append(dai);
497} 497}
498 498
499 499
500QList<DefaultAppItem> ExternalAppHandler::getAvailableDefaultItems(Types type) 500QList<DefaultAppItem> ExternalAppHandler::getAvailableDefaultItems(Types type)
501{ 501{
502 QList<DefaultAppItem> list; 502 QList<DefaultAppItem> list;
503 503
504 DefaultAppItem* dai; 504 DefaultAppItem* dai;
505 505
506 for ( dai=mDefaultItems.first(); dai != 0; dai=mDefaultItems.next() ) 506 for ( dai=mDefaultItems.first(); dai != 0; dai=mDefaultItems.next() )
507 { 507 {
508 if (dai->_type == type) 508 if (dai->_type == type)
509 list.append(dai); 509 list.append(dai);
510 } 510 }
511 511
512 return list; 512 return list;
513} 513}
514 514
515DefaultAppItem* ExternalAppHandler::getDefaultItem(Types type, int clientid) 515DefaultAppItem* ExternalAppHandler::getDefaultItem(Types type, int clientid)
516{ 516{
517 DefaultAppItem* dai; 517 DefaultAppItem* dai;
518 518
519 for ( dai=mDefaultItems.first(); dai != 0; dai=mDefaultItems.next() ) 519 for ( dai=mDefaultItems.first(); dai != 0; dai=mDefaultItems.next() )
520 { 520 {
521 if (dai->_type == type && dai->_id == clientid) 521 if (dai->_type == type && dai->_id == clientid)
522 return dai; 522 return dai;
523 } 523 }
524 524
525 return 0; 525 return 0;
526} 526}
527 527
528bool ExternalAppHandler::isEmailAppAvailable() 528bool ExternalAppHandler::isEmailAppAvailable()
529{ 529{
530#ifndef DESKTOP_VERSION 530#ifndef DESKTOP_VERSION
531 if (mEmailAppAvailable == UNDEFINED) 531 if (mEmailAppAvailable == UNDEFINED)
532 { 532 {
533 int client = KPimGlobalPrefs::instance()->mEmailClient; 533 int client = KPimGlobalPrefs::instance()->mEmailClient;
534 if (client == KPimGlobalPrefs::NONE_EMC) 534 if (client == KPimGlobalPrefs::NONE_EMC)
535 mEmailAppAvailable = UNAVAILABLE; 535 mEmailAppAvailable = UNAVAILABLE;
536 else 536 else
537 mEmailAppAvailable = AVAILABLE; 537 mEmailAppAvailable = AVAILABLE;
538 } 538 }
539 return (mEmailAppAvailable == AVAILABLE); 539 return (mEmailAppAvailable == AVAILABLE);
540 540
541#else //DESKTOP_VERSION 541#else //DESKTOP_VERSION
542 return false; 542 return false;
543#endif //DESKTOP_VERSION 543#endif //DESKTOP_VERSION
544} 544}
545 545
546bool ExternalAppHandler::isSMSAppAvailable() 546bool ExternalAppHandler::isSMSAppAvailable()
547{ 547{
548#ifndef DESKTOP_VERSION 548#ifndef DESKTOP_VERSION
549 if (mSMSAppAvailable == UNDEFINED) 549 if (mSMSAppAvailable == UNDEFINED)
550 { 550 {
551 int client = KPimGlobalPrefs::instance()->mSMSClient; 551 int client = KPimGlobalPrefs::instance()->mSMSClient;
552 if (client == KPimGlobalPrefs::NONE_SMC) 552 if (client == KPimGlobalPrefs::NONE_SMC)
553 mSMSAppAvailable = UNAVAILABLE; 553 mSMSAppAvailable = UNAVAILABLE;
554 else 554 else
555 mSMSAppAvailable = AVAILABLE; 555 mSMSAppAvailable = AVAILABLE;
556 } 556 }
557 557
558 return (mSMSAppAvailable == AVAILABLE); 558 return (mSMSAppAvailable == AVAILABLE);
559#else //DESKTOP_VERSION 559#else //DESKTOP_VERSION
560 return false; 560 return false;
561#endif //DESKTOP_VERSION 561#endif //DESKTOP_VERSION
562} 562}
563 563
564bool ExternalAppHandler::isPhoneAppAvailable() 564bool ExternalAppHandler::isPhoneAppAvailable()
565{ 565{
566#ifndef DESKTOP_VERSION 566#ifndef DESKTOP_VERSION
567 if (mPhoneAppAvailable == UNDEFINED) 567 if (mPhoneAppAvailable == UNDEFINED)
568 { 568 {
569 int client = KPimGlobalPrefs::instance()->mPhoneClient; 569 int client = KPimGlobalPrefs::instance()->mPhoneClient;
570 if (client == KPimGlobalPrefs::NONE_PHC) 570 if (client == KPimGlobalPrefs::NONE_PHC)
571 mPhoneAppAvailable = UNAVAILABLE; 571 mPhoneAppAvailable = UNAVAILABLE;
572 else 572 else
573 mPhoneAppAvailable = AVAILABLE; 573 mPhoneAppAvailable = AVAILABLE;
574 } 574 }
575 575
576 return (mPhoneAppAvailable == AVAILABLE); 576 return (mPhoneAppAvailable == AVAILABLE);
577#else //DESKTOP_VERSION 577#else //DESKTOP_VERSION
578 return false; 578 return false;
579#endif //DESKTOP_VERSION 579#endif //DESKTOP_VERSION
580} 580}
581 581
582bool ExternalAppHandler::isFaxAppAvailable() 582bool ExternalAppHandler::isFaxAppAvailable()
583{ 583{
584#ifndef DESKTOP_VERSION 584#ifndef DESKTOP_VERSION
585 if (mFaxAppAvailable == UNDEFINED) 585 if (mFaxAppAvailable == UNDEFINED)
586 { 586 {
587 int client = KPimGlobalPrefs::instance()->mFaxClient; 587 int client = KPimGlobalPrefs::instance()->mFaxClient;
588 if (client == KPimGlobalPrefs::NONE_FAC) 588 if (client == KPimGlobalPrefs::NONE_FAC)
589 mFaxAppAvailable = UNAVAILABLE; 589 mFaxAppAvailable = UNAVAILABLE;
590 else 590 else
591 mFaxAppAvailable = AVAILABLE; 591 mFaxAppAvailable = AVAILABLE;
592 } 592 }
593 593
594 return (mFaxAppAvailable == AVAILABLE); 594 return (mFaxAppAvailable == AVAILABLE);
595#else //DESKTOP_VERSION 595#else //DESKTOP_VERSION
596 return false; 596 return false;
597#endif //DESKTOP_VERSION 597#endif //DESKTOP_VERSION
598} 598}
599 599
600bool ExternalAppHandler::isPagerAppAvailable() 600bool ExternalAppHandler::isPagerAppAvailable()
601{ 601{
602#ifndef DESKTOP_VERSION 602#ifndef DESKTOP_VERSION
603 if (mPagerAppAvailable == UNDEFINED) 603 if (mPagerAppAvailable == UNDEFINED)
604 { 604 {
605 int client = KPimGlobalPrefs::instance()->mPagerClient; 605 int client = KPimGlobalPrefs::instance()->mPagerClient;
606 if (client == KPimGlobalPrefs::NONE_PAC) 606 if (client == KPimGlobalPrefs::NONE_PAC)
607 mPagerAppAvailable = UNAVAILABLE; 607 mPagerAppAvailable = UNAVAILABLE;
608 else 608 else
609 mPagerAppAvailable = AVAILABLE; 609 mPagerAppAvailable = AVAILABLE;
610 } 610 }
611 611
612 return (mPagerAppAvailable == AVAILABLE); 612 return (mPagerAppAvailable == AVAILABLE);
613#else //DESKTOP_VERSION 613#else //DESKTOP_VERSION
614 return false; 614 return false;
615#endif //DESKTOP_VERSION 615#endif //DESKTOP_VERSION
616} 616}
617 617
618 618
619bool ExternalAppHandler::isSIPAppAvailable() 619bool ExternalAppHandler::isSIPAppAvailable()
620{ 620{
621#ifndef DESKTOP_VERSION 621#ifndef DESKTOP_VERSION
622 if (mSIPAppAvailable == UNDEFINED) 622 if (mSIPAppAvailable == UNDEFINED)
623 { 623 {
624 int client = KPimGlobalPrefs::instance()->mSipClient; 624 int client = KPimGlobalPrefs::instance()->mSipClient;
625 if (client == KPimGlobalPrefs::NONE_SIC) 625 if (client == KPimGlobalPrefs::NONE_SIC)
626 mSIPAppAvailable = UNAVAILABLE; 626 mSIPAppAvailable = UNAVAILABLE;
627 else 627 else
628 mSIPAppAvailable = AVAILABLE; 628 mSIPAppAvailable = AVAILABLE;
629 } 629 }
630 630
631 return (mSIPAppAvailable == AVAILABLE); 631 return (mSIPAppAvailable == AVAILABLE);
632#else //DESKTOP_VERSION 632#else //DESKTOP_VERSION
633 return false; 633 return false;
634#endif //DESKTOP_VERSION 634#endif //DESKTOP_VERSION
635} 635}
636 636
637/************************************************************************** 637/**************************************************************************
638 * 638 *
639 **************************************************************************/ 639 **************************************************************************/
640 640
641 641
642//calls the emailapplication with a number of attachments that need to be send (Seperated by Comma) 642//calls the emailapplication with a number of attachments that need to be send (Seperated by Comma)
643bool ExternalAppHandler::mailToMultipleContacts( const QString& emails, const QString& urls ) 643bool ExternalAppHandler::mailToMultipleContacts( const QString& emails, const QString& urls )
644{ 644{
645 645
646#ifndef DESKTOP_VERSION 646#ifndef DESKTOP_VERSION
647 QString channel; 647 QString channel;
648 QString message2; 648 QString message2;
649 QString parameters2; 649 QString parameters2;
650 650
651 651
652 int client = KPimGlobalPrefs::instance()->mEmailClient; 652 int client = KPimGlobalPrefs::instance()->mEmailClient;
653 if (client == KPimGlobalPrefs::OTHER_EMC) 653 if (client == KPimGlobalPrefs::OTHER_EMC)
654 { 654 {
655 channel = KPimGlobalPrefs::instance()->mEmailOtherChannel; 655 channel = KPimGlobalPrefs::instance()->mEmailOtherChannel;
656 message2 = KPimGlobalPrefs::instance()->mEmailOtherMessage; 656 message2 = KPimGlobalPrefs::instance()->mEmailOtherMessage;
657 parameters2 = KPimGlobalPrefs::instance()->mEmailOtherMessageParameters; 657 parameters2 = KPimGlobalPrefs::instance()->mEmailOtherMessageParameters;
658 } 658 }
659 else 659 else
660 { 660 {
661 DefaultAppItem* dai = getDefaultItem(EMAIL, client); 661 DefaultAppItem* dai = getDefaultItem(EMAIL, client);
662 if (!dai) 662 if (!dai)
663 { 663 {
664 qDebug("could not find configured email application."); 664 qDebug("could not find configured email application.");
665 return false; 665 return false;
666 } 666 }
667 channel = dai->_channel; 667 channel = dai->_channel;
668 message2 = dai->_message2; 668 message2 = dai->_message2;
669 parameters2 = dai->_parameters2; 669 parameters2 = dai->_parameters2;
670 } 670 }
671 671
672 //first check if one of the mailers need the emails right in the message. 672 //first check if one of the mailers need the emails right in the message.
673 message2 = translateMessage(message2, emails, urls); 673 message2 = translateMessage(message2, emails, urls);
674 674
675 675
676#ifdef DEBUG_EXT_APP_HANDLER 676#ifdef DEBUG_EXT_APP_HANDLER
677 qDebug("4Using QCopEnvelope e(\"%s\",\"%s\")", channel.latin1(), message2.latin1()); 677 qDebug("4Using QCopEnvelope e(\"%s\",\"%s\")", channel.latin1(), message2.latin1());
678 qDebug("passing emailadresses(%s), attachmenturls(%s) as parameters in the form %s to QCopEnvelope", emails.latin1() , urls.latin1(), parameters2.latin1()); 678 qDebug("passing emailadresses(%s), attachmenturls(%s) as parameters in the form %s to QCopEnvelope", emails.latin1() , urls.latin1(), parameters2.latin1());
679#endif 679#endif
680 680
681 681
682 QCopEnvelope e(channel.latin1(), message2.latin1()); 682 QCopEnvelope e(channel.latin1(), message2.latin1());
683 //US we need no names in the To field. The emailadresses are enough 683 //US we need no names in the To field. The emailadresses are enough
684 684
685 passParameters(&e, parameters2, emails, urls); 685 passParameters(&e, parameters2, emails, urls);
686 686
687 687
688 688
689#else 689#else
690 KMessageBox::sorry( 0, i18n( "This version does not support the sending of emails." ) ); 690 KMessageBox::sorry( 0, i18n( "This version does not support the sending of emails." ) );
691#endif 691#endif
692 692
693 return true; 693 return true;
694} 694}
695 695
696/************************************************************************** 696/**************************************************************************
697 * 697 *
698 **************************************************************************/ 698 **************************************************************************/
699 699
700 700
701//calls the emailapplication and creates a mail with parameter emails as recipients 701//calls the emailapplication and creates a mail with parameter emails as recipients
702bool ExternalAppHandler::mailToOneContact( const QString& name, const QString& emailadress ) 702bool ExternalAppHandler::mailToOneContact( const QString& name, const QString& emailadress )
703{ 703{
704#ifndef DESKTOP_VERSION 704#ifndef DESKTOP_VERSION
705 QString channel; 705 QString channel;
706 QString message; 706 QString message;
707 QString parameters; 707 QString parameters;
708 708
709 709
710 int client = KPimGlobalPrefs::instance()->mEmailClient; 710 int client = KPimGlobalPrefs::instance()->mEmailClient;
711 if (client == KPimGlobalPrefs::OTHER_EMC) 711 if (client == KPimGlobalPrefs::OTHER_EMC)
712 { 712 {
713 channel = KPimGlobalPrefs::instance()->mEmailOtherChannel; 713 channel = KPimGlobalPrefs::instance()->mEmailOtherChannel;
714 message = KPimGlobalPrefs::instance()->mEmailOtherMessage; 714 message = KPimGlobalPrefs::instance()->mEmailOtherMessage;
715 parameters = KPimGlobalPrefs::instance()->mEmailOtherMessageParameters; 715 parameters = KPimGlobalPrefs::instance()->mEmailOtherMessageParameters;
716 } 716 }
717 else 717 else
718 { 718 {
719 DefaultAppItem* dai = ExternalAppHandler::getDefaultItem(EMAIL, client); 719 DefaultAppItem* dai = ExternalAppHandler::getDefaultItem(EMAIL, client);
720 if (!dai) 720 if (!dai)
721 { 721 {
722 qDebug("could not find configured email application."); 722 qDebug("could not find configured email application.");
723 return false; 723 return false;
724 } 724 }
725 channel = dai->_channel; 725 channel = dai->_channel;
726 message = dai->_message; 726 message = dai->_message;
727 parameters = dai->_parameters; 727 parameters = dai->_parameters;
728 } 728 }
729 729
730 730
731 //first check if one of the mailers need the emails right in the message. 731 //first check if one of the mailers need the emails right in the message.
732 message = translateMessage(message, name, emailadress); 732 message = translateMessage(message, name, emailadress);
733 733
734 734
735#ifdef DEBUG_EXT_APP_HANDLER 735#ifdef DEBUG_EXT_APP_HANDLER
736 qDebug("5Using QCopEnvelope e(\"%s\",\"%s\")", channel.latin1(), message.latin1()); 736 qDebug("5Using QCopEnvelope e(\"%s\",\"%s\")", channel.latin1(), message.latin1());
737 qDebug("passing name(%s), emailadresses(%s) as parameters in the form %s to QCopEnvelope", name.latin1(), emailadress.latin1(), parameters.latin1()); 737 qDebug("passing name(%s), emailadresses(%s) as parameters in the form %s to QCopEnvelope", name.latin1(), emailadress.latin1(), parameters.latin1());
738#endif 738#endif
739 739
740 QCopEnvelope e(channel.latin1(), message.latin1()); 740 QCopEnvelope e(channel.latin1(), message.latin1());
741 //US we need no names in the To field. The emailadresses are enough 741 //US we need no names in the To field. The emailadresses are enough
742 742
743 passParameters(&e, parameters, name, emailadress); 743 passParameters(&e, parameters, name, emailadress);
744 744
745 745
746#else 746#else
747 KMessageBox::sorry( 0, i18n( "This version does not support the sending of emails." ) ); 747 KMessageBox::sorry( 0, i18n( "This version does not support the sending of emails." ) );
748#endif 748#endif
749 749
750 750
751 return true; 751 return true;
752} 752}
753 753
754/************************************************************************** 754/**************************************************************************
755 * 755 *
756 **************************************************************************/ 756 **************************************************************************/
757 757
758//calls the emailapplication and creates a mail with parameter as recipients 758//calls the emailapplication and creates a mail with parameter as recipients
759// parameters format is 759// parameters format is
760// NAME <EMAIL>:SUBJECT 760// NAME <EMAIL>:SUBJECT
761bool ExternalAppHandler::mailToOneContact( const QString& adressline ) 761bool ExternalAppHandler::mailToOneContact( const QString& adressline )
762{ 762{
763 QString line = adressline; 763 QString line = adressline;
764 764
765 int first = line.find( "<"); 765 int first = line.find( "<");
766 int last = line.find( ">"); 766 int last = line.find( ">");
767 QString name = line.left(first); 767 QString name = line.left(first);
768 QString emailadress = line.mid(first+1, last-first-1); 768 QString emailadress = line.mid(first+1, last-first-1);
769 769
770 //Subject can not be handled right now. 770 //Subject can not be handled right now.
771 return mailToOneContact( name, emailadress ); 771 return mailToOneContact( name, emailadress );
772 772
773} 773}
774 774
775 775
776/************************************************************************** 776/**************************************************************************
777 * 777 *
778 **************************************************************************/ 778 **************************************************************************/
779 779
780//calls the phoneapplication with the number 780//calls the phoneapplication with the number
781bool ExternalAppHandler::callByPhone( const QString& phonenumber ) 781bool ExternalAppHandler::callByPhone( const QString& phonenumber )
782{ 782{
783#ifndef DESKTOP_VERSION 783#ifndef DESKTOP_VERSION
784 QString channel; 784 QString channel;
785 QString message; 785 QString message;
786 QString parameters; 786 QString parameters;
787 787
788 788
789 int client = KPimGlobalPrefs::instance()->mPhoneClient; 789 int client = KPimGlobalPrefs::instance()->mPhoneClient;
790 if (client == KPimGlobalPrefs::OTHER_PHC) 790 if (client == KPimGlobalPrefs::OTHER_PHC)
791 { 791 {
792 channel = KPimGlobalPrefs::instance()->mPhoneOtherChannel; 792 channel = KPimGlobalPrefs::instance()->mPhoneOtherChannel;
793 message = KPimGlobalPrefs::instance()->mPhoneOtherMessage; 793 message = KPimGlobalPrefs::instance()->mPhoneOtherMessage;
794 parameters = KPimGlobalPrefs::instance()->mPhoneOtherMessageParameters; 794 parameters = KPimGlobalPrefs::instance()->mPhoneOtherMessageParameters;
795 } 795 }
796 else 796 else
797 { 797 {
798 DefaultAppItem* dai = ExternalAppHandler::getDefaultItem(PHONE, client); 798 DefaultAppItem* dai = ExternalAppHandler::getDefaultItem(PHONE, client);
799 if (!dai) 799 if (!dai)
800 { 800 {
801 qDebug("could not find configured phone application."); 801 qDebug("could not find configured phone application.");
802 return false; 802 return false;
803 } 803 }
804 channel = dai->_channel; 804 channel = dai->_channel;
805 message = dai->_message; 805 message = dai->_message;
806 parameters = dai->_parameters; 806 parameters = dai->_parameters;
807 } 807 }
808 808
809 809
810 //first check if one of the mailers need the emails right in the message. 810 //first check if one of the mailers need the emails right in the message.
811 message = translateMessage(message, phonenumber, ""); 811 message = translateMessage(message, phonenumber, "");
812 812
813 813
814#ifdef DEBUG_EXT_APP_HANDLER 814#ifdef DEBUG_EXT_APP_HANDLER
815 qDebug("6Using QCopEnvelope e(\"%s\",\"%s\")", channel.latin1(), message.latin1()); 815 qDebug("6Using QCopEnvelope e(\"%s\",\"%s\")", channel.latin1(), message.latin1());
816 qDebug("passing phonenumber(%s) as parameter in the form %s to QCopEnvelope", phonenumber.latin1(), parameters.latin1()); 816 qDebug("passing phonenumber(%s) as parameter in the form %s to QCopEnvelope", phonenumber.latin1(), parameters.latin1());
817#endif 817#endif
818 818
819 QCopEnvelope e(channel.latin1(), message.latin1()); 819 QCopEnvelope e(channel.latin1(), message.latin1());
820 //US we need no names in the To field. The emailadresses are enough 820 //US we need no names in the To field. The emailadresses are enough
821 821
822 passParameters(&e, parameters, phonenumber, ""); 822 passParameters(&e, parameters, phonenumber, "");
823 823
824 824
825#else 825#else
826 KMessageBox::sorry( 0, i18n( "This version does not support phonecalls." ) ); 826 KMessageBox::sorry( 0, i18n( "This version does not support phonecalls." ) );
827#endif 827#endif
828 828
829 829
830 return true; 830 return true;
831} 831}
832 832
833/************************************************************************** 833/**************************************************************************
834 * 834 *
835 **************************************************************************/ 835 **************************************************************************/
836 836
837//calls the smsapplication with the number 837//calls the smsapplication with the number
838bool ExternalAppHandler::callBySMS( const QString& phonenumber ) 838bool ExternalAppHandler::callBySMS( const QString& phonenumber )
839{ 839{
840#ifndef DESKTOP_VERSION 840#ifndef DESKTOP_VERSION
841 QString channel; 841 QString channel;
842 QString message; 842 QString message;
843 QString parameters; 843 QString parameters;
844 844
845 845
846 int client = KPimGlobalPrefs::instance()->mSMSClient; 846 int client = KPimGlobalPrefs::instance()->mSMSClient;
847 if (client == KPimGlobalPrefs::OTHER_SMC) 847 if (client == KPimGlobalPrefs::OTHER_SMC)
848 { 848 {
849 channel = KPimGlobalPrefs::instance()->mSMSOtherChannel; 849 channel = KPimGlobalPrefs::instance()->mSMSOtherChannel;
850 message = KPimGlobalPrefs::instance()->mSMSOtherMessage; 850 message = KPimGlobalPrefs::instance()->mSMSOtherMessage;
851 parameters = KPimGlobalPrefs::instance()->mSMSOtherMessageParameters; 851 parameters = KPimGlobalPrefs::instance()->mSMSOtherMessageParameters;
852 } 852 }
853 else 853 else
854 { 854 {
855 DefaultAppItem* dai = ExternalAppHandler::getDefaultItem(SMS, client); 855 DefaultAppItem* dai = ExternalAppHandler::getDefaultItem(SMS, client);
856 if (!dai) 856 if (!dai)
857 { 857 {
858 qDebug("could not find configured sms application."); 858 qDebug("could not find configured sms application.");
859 return false; 859 return false;
860 } 860 }
861 channel = dai->_channel; 861 channel = dai->_channel;
862 message = dai->_message; 862 message = dai->_message;
863 parameters = dai->_parameters; 863 parameters = dai->_parameters;
864 } 864 }
865 865
866 866
867 //first check if one of the mailers need the emails right in the message. 867 //first check if one of the mailers need the emails right in the message.
868 message = translateMessage(message, phonenumber, ""); 868 message = translateMessage(message, phonenumber, "");
869 869
870 870
871#ifdef DEBUG_EXT_APP_HANDLER 871#ifdef DEBUG_EXT_APP_HANDLER
872 qDebug("7Using QCopEnvelope e(\"%s\",\"%s\")", channel.latin1(), message.latin1()); 872 qDebug("7Using QCopEnvelope e(\"%s\",\"%s\")", channel.latin1(), message.latin1());
873 qDebug("passing phonenumber(%s) as parameter in the form %s to QCopEnvelope", phonenumber.latin1(), parameters.latin1()); 873 qDebug("passing phonenumber(%s) as parameter in the form %s to QCopEnvelope", phonenumber.latin1(), parameters.latin1());
874#endif 874#endif
875 875
876 QCopEnvelope e(channel.latin1(), message.latin1()); 876 QCopEnvelope e(channel.latin1(), message.latin1());
877 //US we need no names in the To field. The emailadresses are enough 877 //US we need no names in the To field. The emailadresses are enough
878 878
879 passParameters(&e, parameters, phonenumber, ""); 879 passParameters(&e, parameters, phonenumber, "");
880 880
881 881
882#else 882#else
883 KMessageBox::sorry( 0, i18n( "This version does not support the sending of sms." ) ); 883 KMessageBox::sorry( 0, i18n( "This version does not support the sending of sms." ) );
884#endif 884#endif
885 885
886 886
887 return true; 887 return true;
888} 888}
889 889
890/************************************************************************** 890/**************************************************************************
891 * 891 *
892 **************************************************************************/ 892 **************************************************************************/
893 893
894//calls the pagerapplication with the number 894//calls the pagerapplication with the number
895bool ExternalAppHandler::callByPager( const QString& pagernumber ) 895bool ExternalAppHandler::callByPager( const QString& pagernumber )
896{ 896{
897#ifndef DESKTOP_VERSION 897#ifndef DESKTOP_VERSION
898 QString channel; 898 QString channel;
899 QString message; 899 QString message;
900 QString parameters; 900 QString parameters;
901 901
902 902
903 int client = KPimGlobalPrefs::instance()->mPagerClient; 903 int client = KPimGlobalPrefs::instance()->mPagerClient;
904 if (client == KPimGlobalPrefs::OTHER_PAC) 904 if (client == KPimGlobalPrefs::OTHER_PAC)
905 { 905 {
906 channel = KPimGlobalPrefs::instance()->mPagerOtherChannel; 906 channel = KPimGlobalPrefs::instance()->mPagerOtherChannel;
907 message = KPimGlobalPrefs::instance()->mPagerOtherMessage; 907 message = KPimGlobalPrefs::instance()->mPagerOtherMessage;
908 parameters = KPimGlobalPrefs::instance()->mPagerOtherMessageParameters; 908 parameters = KPimGlobalPrefs::instance()->mPagerOtherMessageParameters;
909 } 909 }
910 else 910 else
911 { 911 {
912 DefaultAppItem* dai = ExternalAppHandler::getDefaultItem(PAGER, client); 912 DefaultAppItem* dai = ExternalAppHandler::getDefaultItem(PAGER, client);
913 if (!dai) 913 if (!dai)
914 { 914 {
915 qDebug("could not find configured pager application."); 915 qDebug("could not find configured pager application.");
916 return false; 916 return false;
917 } 917 }
918 channel = dai->_channel; 918 channel = dai->_channel;
919 message = dai->_message; 919 message = dai->_message;
920 parameters = dai->_parameters; 920 parameters = dai->_parameters;
921 } 921 }
922 922
923 923
924 //first check if one of the mailers need the emails right in the message. 924 //first check if one of the mailers need the emails right in the message.
925 message = translateMessage(message, pagernumber, ""); 925 message = translateMessage(message, pagernumber, "");
926 926
927 927
928#ifdef DEBUG_EXT_APP_HANDLER 928#ifdef DEBUG_EXT_APP_HANDLER
929 qDebug("8Using QCopEnvelope e(\"%s\",\"%s\")", channel.latin1(), message.latin1()); 929 qDebug("8Using QCopEnvelope e(\"%s\",\"%s\")", channel.latin1(), message.latin1());
930 qDebug("passing pagernumber(%s) as parameter in the form %s to QCopEnvelope", pagernumber.latin1(), parameters.latin1()); 930 qDebug("passing pagernumber(%s) as parameter in the form %s to QCopEnvelope", pagernumber.latin1(), parameters.latin1());
931#endif 931#endif
932 932
933 QCopEnvelope e(channel.latin1(), message.latin1()); 933 QCopEnvelope e(channel.latin1(), message.latin1());
934 //US we need no names in the To field. The emailadresses are enough 934 //US we need no names in the To field. The emailadresses are enough
935 935
936 passParameters(&e, parameters, pagernumber, ""); 936 passParameters(&e, parameters, pagernumber, "");
937 937
938 938
939#else 939#else
940 KMessageBox::sorry( 0, i18n( "This version does not support paging." ) ); 940 KMessageBox::sorry( 0, i18n( "This version does not support paging." ) );
941#endif 941#endif
942 942
943 943
944 return true; 944 return true;
945} 945}
946 946
947/************************************************************************** 947/**************************************************************************
948 * 948 *
949 **************************************************************************/ 949 **************************************************************************/
950 950
951//calls the faxapplication with the number 951//calls the faxapplication with the number
952bool ExternalAppHandler::callByFax( const QString& faxnumber ) 952bool ExternalAppHandler::callByFax( const QString& faxnumber )
953{ 953{
954#ifndef DESKTOP_VERSION 954#ifndef DESKTOP_VERSION
955 QString channel; 955 QString channel;
956 QString message; 956 QString message;
957 QString parameters; 957 QString parameters;
958 958
959 959
960 int client = KPimGlobalPrefs::instance()->mFaxClient; 960 int client = KPimGlobalPrefs::instance()->mFaxClient;
961 if (client == KPimGlobalPrefs::OTHER_FAC) 961 if (client == KPimGlobalPrefs::OTHER_FAC)
962 { 962 {
963 channel = KPimGlobalPrefs::instance()->mFaxOtherChannel; 963 channel = KPimGlobalPrefs::instance()->mFaxOtherChannel;
964 message = KPimGlobalPrefs::instance()->mFaxOtherMessage; 964 message = KPimGlobalPrefs::instance()->mFaxOtherMessage;
965 parameters = KPimGlobalPrefs::instance()->mFaxOtherMessageParameters; 965 parameters = KPimGlobalPrefs::instance()->mFaxOtherMessageParameters;
966 } 966 }
967 else 967 else
968 { 968 {
969 DefaultAppItem* dai = ExternalAppHandler::getDefaultItem(FAX, client); 969 DefaultAppItem* dai = ExternalAppHandler::getDefaultItem(FAX, client);
970 if (!dai) 970 if (!dai)
971 { 971 {
972 qDebug("could not find configured fax application."); 972 qDebug("could not find configured fax application.");
973 return false; 973 return false;
974 } 974 }
975 channel = dai->_channel; 975 channel = dai->_channel;
976 message = dai->_message; 976 message = dai->_message;
977 parameters = dai->_parameters; 977 parameters = dai->_parameters;
978 } 978 }
979 979
980 980
981 //first check if one of the mailers need the emails right in the message. 981 //first check if one of the mailers need the emails right in the message.
982 message = translateMessage(message, faxnumber, ""); 982 message = translateMessage(message, faxnumber, "");
983 983
984 984
985#ifdef DEBUG_EXT_APP_HANDLER 985#ifdef DEBUG_EXT_APP_HANDLER
986 qDebug("9Using QCopEnvelope e(\"%s\",\"%s\")", channel.latin1(), message.latin1()); 986 qDebug("9Using QCopEnvelope e(\"%s\",\"%s\")", channel.latin1(), message.latin1());
987 qDebug("passing faxnumber(%s) as parameter in the form %s to QCopEnvelope", faxnumber.latin1(), parameters.latin1()); 987 qDebug("passing faxnumber(%s) as parameter in the form %s to QCopEnvelope", faxnumber.latin1(), parameters.latin1());
988#endif 988#endif
989 989
990 QCopEnvelope e(channel.latin1(), message.latin1()); 990 QCopEnvelope e(channel.latin1(), message.latin1());
991 //US we need no names in the To field. The emailadresses are enough 991 //US we need no names in the To field. The emailadresses are enough
992 992
993 passParameters(&e, parameters, faxnumber, ""); 993 passParameters(&e, parameters, faxnumber, "");
994 994
995 995
996#else 996#else
997 KMessageBox::sorry( 0, i18n( "This version does not support the sending of faxes." ) ); 997 KMessageBox::sorry( 0, i18n( "This version does not support the sending of faxes." ) );
998#endif 998#endif
999 999
1000 1000
1001 return true; 1001 return true;
1002} 1002}
1003 1003
1004/************************************************************************** 1004/**************************************************************************
1005 * 1005 *
1006 **************************************************************************/ 1006 **************************************************************************/
1007 1007
1008//calls the sipapplication with the number 1008//calls the sipapplication with the number
1009bool ExternalAppHandler::callBySIP( const QString& sipnumber ) 1009bool ExternalAppHandler::callBySIP( const QString& sipnumber )
1010{ 1010{
1011#ifndef DESKTOP_VERSION 1011#ifndef DESKTOP_VERSION
1012 QString channel; 1012 QString channel;
1013 QString message; 1013 QString message;
1014 QString parameters; 1014 QString parameters;
1015 1015
1016 1016
1017 int client = KPimGlobalPrefs::instance()->mSipClient; 1017 int client = KPimGlobalPrefs::instance()->mSipClient;
1018 if (client == KPimGlobalPrefs::OTHER_SIC) 1018 if (client == KPimGlobalPrefs::OTHER_SIC)
1019 { 1019 {
1020 channel = KPimGlobalPrefs::instance()->mSipOtherChannel; 1020 channel = KPimGlobalPrefs::instance()->mSipOtherChannel;
1021 message = KPimGlobalPrefs::instance()->mSipOtherMessage; 1021 message = KPimGlobalPrefs::instance()->mSipOtherMessage;
1022 parameters = KPimGlobalPrefs::instance()->mSipOtherMessageParameters; 1022 parameters = KPimGlobalPrefs::instance()->mSipOtherMessageParameters;
1023 } 1023 }
1024 else 1024 else
1025 { 1025 {
1026 DefaultAppItem* dai = ExternalAppHandler::getDefaultItem(SIP, client); 1026 DefaultAppItem* dai = ExternalAppHandler::getDefaultItem(SIP, client);
1027 if (!dai) 1027 if (!dai)
1028 { 1028 {
1029 qDebug("could not find configured sip application."); 1029 qDebug("could not find configured sip application.");
1030 return false; 1030 return false;
1031 } 1031 }
1032 channel = dai->_channel; 1032 channel = dai->_channel;
1033 message = dai->_message; 1033 message = dai->_message;
1034 parameters = dai->_parameters; 1034 parameters = dai->_parameters;
1035 } 1035 }
1036 1036
1037 1037
1038 //first check if one of the sip apps need the emails right in the message. 1038 //first check if one of the sip apps need the emails right in the message.
1039 message = translateMessage(message, sipnumber, ""); 1039 message = translateMessage(message, sipnumber, "");
1040 1040
1041 1041
1042#ifdef DEBUG_EXT_APP_HANDLER 1042#ifdef DEBUG_EXT_APP_HANDLER
1043 qDebug("10Using QCopEnvelope e(\"%s\",\"%s\")", channel.latin1(), message.latin1()); 1043 qDebug("10Using QCopEnvelope e(\"%s\",\"%s\")", channel.latin1(), message.latin1());
1044 qDebug("passing sipnumber(%s) as parameter in the form %s to QCopEnvelope", sipnumber.latin1(), parameters.latin1()); 1044 qDebug("passing sipnumber(%s) as parameter in the form %s to QCopEnvelope", sipnumber.latin1(), parameters.latin1());
1045#endif 1045#endif
1046 1046
1047 QCopEnvelope e(channel.latin1(), message.latin1()); 1047 QCopEnvelope e(channel.latin1(), message.latin1());
1048 //US we need no names in the To field. The emailadresses are enough 1048 //US we need no names in the To field. The emailadresses are enough
1049 1049
1050 passParameters(&e, parameters, sipnumber, ""); 1050 passParameters(&e, parameters, sipnumber, "");
1051 1051
1052 1052
1053#else 1053#else
1054 KMessageBox::sorry( 0, i18n( "This version does not support sip." ) ); 1054 KMessageBox::sorry( 0, i18n( "This version does not support sip." ) );
1055#endif 1055#endif
1056 1056
1057 1057
1058 return true; 1058 return true;
1059} 1059}
1060 1060
1061 1061
1062/************************************************************************** 1062/**************************************************************************
1063 * 1063 *
1064 **************************************************************************/ 1064 **************************************************************************/
1065 1065
1066 1066
1067QString& ExternalAppHandler::translateMessage(QString& message, const QString& param1, const QString& param2 ) const 1067QString& ExternalAppHandler::translateMessage(QString& message, const QString& param1, const QString& param2 ) const
1068{ 1068{
1069 message = message.replace( QRegExp("%1"), param1 ); 1069 message = message.replace( QRegExp("%1"), param1 );
1070 return message.replace( QRegExp("%2"), param2 ); 1070 return message.replace( QRegExp("%2"), param2 );
1071} 1071}
1072 1072
1073/************************************************************************** 1073/**************************************************************************
1074 * 1074 *
1075 **************************************************************************/ 1075 **************************************************************************/
1076 1076
1077void ExternalAppHandler::passParameters(QCopEnvelope* e, const QString& parameters, const QString& param1 , const QString& param2) const 1077void ExternalAppHandler::passParameters(QCopEnvelope* e, const QString& parameters, const QString& param1 , const QString& param2) const
1078{ 1078{
1079#ifndef DESKTOP_VERSION 1079#ifndef DESKTOP_VERSION
1080 QMap<QString, QString> valmap; 1080 QMap<QString, QString> valmap;
1081 bool useValMap = false; 1081 bool useValMap = false;
1082 1082
1083 // first extract all parts of the parameters. 1083 // first extract all parts of the parameters.
1084 QStringList paramlist = QStringList::split(";", parameters); 1084 QStringList paramlist = QStringList::split(";", parameters);
1085 1085
1086 //Now check how many parts we have. 1086 //Now check how many parts we have.
1087 //=0 :no params to pass 1087 //=0 :no params to pass
1088 //>0 :parameters to pass 1088 //>0 :parameters to pass
1089 for ( QStringList::Iterator it = paramlist.begin(); it != paramlist.end(); ++it ) 1089 for ( QStringList::Iterator it = paramlist.begin(); it != paramlist.end(); ++it )
1090 { 1090 {
1091 QString param = (*it); 1091 QString param = (*it);
1092 QStringList keyvallist = QStringList::split("=", param); 1092 QStringList keyvallist = QStringList::split("=", param);
1093 1093
1094 //if we have keyvalue pairs, we assume that we pass a map to the envelope 1094 //if we have keyvalue pairs, we assume that we pass a map to the envelope
1095 QStringList::Iterator it2 = keyvallist.begin(); 1095 QStringList::Iterator it2 = keyvallist.begin();
1096 QString key = (*it2); 1096 QString key = (*it2);
1097 key = key.replace( QRegExp("%1"), param1 ); 1097 key = key.replace( QRegExp("%1"), param1 );
1098 key = key.replace( QRegExp("%2"), param2 ); 1098 key = key.replace( QRegExp("%2"), param2 );
1099 ++it2; 1099 ++it2;
1100 1100
1101 if(it2 != keyvallist.end()) 1101 if(it2 != keyvallist.end())
1102 { 1102 {
1103 QString value = (*it2); 1103 QString value = (*it2);
1104 value = value.replace( QRegExp("%1"), param1 ); 1104 value = value.replace( QRegExp("%1"), param1 );
1105 value = value.replace( QRegExp("%2"), param2 ); 1105 value = value.replace( QRegExp("%2"), param2 );
1106 1106
1107 valmap.insert(key, value); 1107 valmap.insert(key, value);
1108 useValMap = true; 1108 useValMap = true;
1109 } 1109 }
1110 else 1110 else
1111 { 1111 {
1112 // qDebug("pass parameter << %s", key.latin1()); 1112 // qDebug("pass parameter << %s", key.latin1());
1113 (*e) << key; 1113 (*e) << key;
1114 } 1114 }
1115 } 1115 }
1116 1116
1117 if (useValMap == true) 1117 if (useValMap == true)
1118 (*e) << valmap; 1118 (*e) << valmap;
1119 1119
1120#endif 1120#endif
1121 1121
1122} 1122}
1123 1123
1124 1124
1125 1125
1126/************************************************************************** 1126/**************************************************************************
1127 * 1127 *
1128 **************************************************************************/ 1128 **************************************************************************/
1129 1129
1130void ExternalAppHandler::appMessage( const QCString& cmsg, const QByteArray& data ) 1130void ExternalAppHandler::appMessage( const QCString& cmsg, const QByteArray& data )
1131{ 1131{
1132 1132
1133 if ( cmsg == "nextView()" ) { 1133 if ( cmsg == "nextView()" ) {
1134 qDebug("nextView()");
1134 emit nextView(); 1135 emit nextView();
1135 return; 1136 return;
1136 } 1137 }
1137 1138
1138 bool res = mNameEmailUidListFromKAPITransfer->appMessage( cmsg, data ); 1139 bool res = mNameEmailUidListFromKAPITransfer->appMessage( cmsg, data );
1139 if (!res) 1140 if (!res)
1140 res = mBirthdayListFromKAPITransfer->appMessage( cmsg, data ); 1141 res = mBirthdayListFromKAPITransfer->appMessage( cmsg, data );
1141 1142
1142 if (!res) 1143 if (!res)
1143 res = mDisplayDetails->appMessage( cmsg, data ); 1144 res = mDisplayDetails->appMessage( cmsg, data );
1144 1145
1145// if (!res) 1146// if (!res)
1146// res = mNameEmailUidListFromKAPITransfer->appMessage( cmsg, data ); 1147// res = mNameEmailUidListFromKAPITransfer->appMessage( cmsg, data );
1147} 1148}
1148 1149
1149 1150
1150 1151
1151bool ExternalAppHandler::requestNameEmailUidListFromKAPI(const QString& sourceChannel, const QString& sessionuid) 1152bool ExternalAppHandler::requestNameEmailUidListFromKAPI(const QString& sourceChannel, const QString& sessionuid)
1152{ 1153{
1153 mNameEmailUidListFromKAPITransfer->setSourceChannel(sourceChannel); 1154 mNameEmailUidListFromKAPITransfer->setSourceChannel(sourceChannel);
1154 return mNameEmailUidListFromKAPITransfer->sendMessageToTarget(sessionuid); 1155 return mNameEmailUidListFromKAPITransfer->sendMessageToTarget(sessionuid);
1155} 1156}
1156 1157
1157bool ExternalAppHandler::returnNameEmailUidListFromKAPI(const QString& sourceChannel, const QString& sessionuid, const QStringList& list1, const QStringList& list2, const QStringList& list3) 1158bool ExternalAppHandler::returnNameEmailUidListFromKAPI(const QString& sourceChannel, const QString& sessionuid, const QStringList& list1, const QStringList& list2, const QStringList& list3)
1158{ 1159{
1159 QStringList list4, list5, list6; 1160 QStringList list4, list5, list6;
1160 1161
1161 mNameEmailUidListFromKAPITransfer->setSourceChannel(sourceChannel); 1162 mNameEmailUidListFromKAPITransfer->setSourceChannel(sourceChannel);
1162 return mNameEmailUidListFromKAPITransfer->sendMessageToSource(sessionuid, list1, list2, list3, list4, list5, list6); 1163 return mNameEmailUidListFromKAPITransfer->sendMessageToSource(sessionuid, list1, list2, list3, list4, list5, list6);
1163} 1164}
1164 1165
1165bool ExternalAppHandler::requestFindByEmailFromKAPI(const QString& sourceChannel, const QString& sessionuid, const QString& email) 1166bool ExternalAppHandler::requestFindByEmailFromKAPI(const QString& sourceChannel, const QString& sessionuid, const QString& email)
1166{ 1167{
1167 mFindByEmailFromKAPITransfer->setSourceChannel(sourceChannel); 1168 mFindByEmailFromKAPITransfer->setSourceChannel(sourceChannel);
1168 return mFindByEmailFromKAPITransfer->sendMessageToTarget(sessionuid, email); 1169 return mFindByEmailFromKAPITransfer->sendMessageToTarget(sessionuid, email);
1169} 1170}
1170 1171
1171bool ExternalAppHandler::returnFindByEmailFromKAPI(const QString& sourceChannel, const QString& sessionuid, const QStringList& list1, const QStringList& list2, const QStringList& list3) 1172bool ExternalAppHandler::returnFindByEmailFromKAPI(const QString& sourceChannel, const QString& sessionuid, const QStringList& list1, const QStringList& list2, const QStringList& list3)
1172{ 1173{
1173 QStringList list4, list5, list6; 1174 QStringList list4, list5, list6;
1174 1175
1175 mFindByEmailFromKAPITransfer->setSourceChannel(sourceChannel); 1176 mFindByEmailFromKAPITransfer->setSourceChannel(sourceChannel);
1176 return mFindByEmailFromKAPITransfer->sendMessageToSource(sessionuid, list1, list2, list3, list4, list5, list6); 1177 return mFindByEmailFromKAPITransfer->sendMessageToSource(sessionuid, list1, list2, list3, list4, list5, list6);
1177} 1178}
1178 1179
1179bool ExternalAppHandler::requestDetailsFromKAPI(const QString& name, const QString& email, const QString& uid) 1180bool ExternalAppHandler::requestDetailsFromKAPI(const QString& name, const QString& email, const QString& uid)
1180{ 1181{
1181 mDisplayDetails->setSourceChannel(""); 1182 mDisplayDetails->setSourceChannel("");
1182 return mDisplayDetails->sendMessageToTarget("", name, email, uid); 1183 return mDisplayDetails->sendMessageToTarget("", name, email, uid);
1183} 1184}
1184 1185
1185bool ExternalAppHandler::requestBirthdayListFromKAPI(const QString& sourceChannel, const QString& sessionuid) 1186bool ExternalAppHandler::requestBirthdayListFromKAPI(const QString& sourceChannel, const QString& sessionuid)
1186{ 1187{
1187 mBirthdayListFromKAPITransfer->setSourceChannel(sourceChannel); 1188 mBirthdayListFromKAPITransfer->setSourceChannel(sourceChannel);
1188 return mBirthdayListFromKAPITransfer->sendMessageToTarget(sessionuid); 1189 return mBirthdayListFromKAPITransfer->sendMessageToTarget(sessionuid);
1189} 1190}
1190 1191
1191bool ExternalAppHandler::returnBirthdayListFromKAPI(const QString& sourceChannel, const QString& sessionuid, const QStringList& list1, const QStringList& list2, const QStringList& list3, const QStringList& list4, const QStringList& list5, const QStringList& list6) 1192bool ExternalAppHandler::returnBirthdayListFromKAPI(const QString& sourceChannel, const QString& sessionuid, const QStringList& list1, const QStringList& list2, const QStringList& list3, const QStringList& list4, const QStringList& list5, const QStringList& list6)
1192{ 1193{
1193 mBirthdayListFromKAPITransfer->setSourceChannel(sourceChannel); 1194 mBirthdayListFromKAPITransfer->setSourceChannel(sourceChannel);
1194 return mBirthdayListFromKAPITransfer->sendMessageToSource(sessionuid, list1, list2, list3, list4, list5, list6); 1195 return mBirthdayListFromKAPITransfer->sendMessageToSource(sessionuid, list1, list2, list3, list4, list5, list6);
1195} 1196}
1196 1197
1197 1198
1198 1199
1199 1200
1200 1201