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,393 +1,396 @@
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
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
@@ -830,391 +830,396 @@
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
@@ -2116,769 +2116,769 @@ void KABCore::addActionsManually()
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");
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
@@ -750,451 +750,452 @@ bool ExternalAppHandler::mailToOneContact( const QString& name, const QString& e
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