summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-12-05 14:38:15 (UTC)
committer zautrix <zautrix>2004-12-05 14:38:15 (UTC)
commitea023772f18fa52d2b3d523a68d707576629326f (patch) (unidiff)
tree5c41a05954c543fefb49a27f256f2995a5a67b2a
parent06bebf5be01898145c4f721a8d002519141e7f3b (diff)
downloadkdepimpi-ea023772f18fa52d2b3d523a68d707576629326f.zip
kdepimpi-ea023772f18fa52d2b3d523a68d707576629326f.tar.gz
kdepimpi-ea023772f18fa52d2b3d523a68d707576629326f.tar.bz2
ompi mail view fix
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt7
-rw-r--r--bin/kdepim/kopiemail/germantranslation.txt4
-rw-r--r--kmicromail/opiemail.cpp16
-rw-r--r--kmicromail/opiemail.h2
-rw-r--r--kmicromail/viewmail.cpp3
-rw-r--r--kmicromail/viewmail.h4
-rw-r--r--kmicromail/viewmailbase.cpp13
-rw-r--r--kmicromail/viewmailbase.h4
8 files changed, 45 insertions, 8 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 6be5222..5021212 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,621 +1,626 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 1.9.14 ************ 3********** VERSION 1.9.14 ************
4 4
5Fixed some problems with the dialog sizes when switching 5Fixed some problems with the dialog sizes when switching
6portrait/landscape mode on 640x480 PDA display. 6portrait/landscape mode on 640x480 PDA display.
7 7
8Fixed some other small bugs. 8Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi.
9 9
10Fixed an ugly bug in KOpieMail: 10Fixed an ugly bug in KOpieMail:
11KOpieMail was not able to write files (mails) to MSDOS file system, 11KOpieMail was not able to write files (mails) to MSDOS file system,
12like on an usual preformatted SD card. That should work now. 12like on an usual preformatted SD card. That should work now.
13To save your mail data on the Sd card do the following: 13To save your mail data on the Sd card do the following:
14Create a dir on the SD card: 14Create a dir on the SD card:
15mkdir /mnt/card/localmail 15mkdir /mnt/card/localmail
16Go to your home dir: 16Go to your home dir:
17cd 17cd
18Go to kopiemail data storage dir: 18Go to kopiemail data storage dir:
19cd kdepim/apps/kopiemail 19cd kdepim/apps/kopiemail
20Create a symlink to the SD card: 20Create a symlink to the SD card:
21ls -s /mnt/card/localmail 21ls -s /mnt/card/localmail
22Now KOpieMail will store all mails on the SD card. 22Now KOpieMail will store all mails on the SD card.
23 23
24KO/Pi Monthview: 24KO/Pi Monthview:
25Now "Go to Today" selects the current month from day 1-end, 25Now "Go to Today" selects the current month from day 1-end,
26not the current date + some days. 26not the current date + some days.
27I.e. "Go to Today" shows now always 27I.e. "Go to Today" shows now always
28the current month with first day of month in the first row. 28the current month with first day of month in the first row.
29 29
30Added missing German translation. 30Added missing German translation.
31 31
32Fixed icons of executeable on Wintendo. 32Fixed icons of executeable on Wintendo.
33 33
34Added a "Show next Mail" button to the OM/Pi
35mail viewer such that the mail below the current mail
36in the mail list view of the current folder
37can be read with a single click.
38
34 39
35********** VERSION 1.9.13 ************ 40********** VERSION 1.9.13 ************
36 41
37Fixed nasty PwM/Pi file reading bug, when 42Fixed nasty PwM/Pi file reading bug, when
38the used hash algo of file is different then the global 43the used hash algo of file is different then the global
39hash algo. 44hash algo.
40 45
41Added KA/Pi support for opie mailit mailapplication. 46Added KA/Pi support for opie mailit mailapplication.
42 47
43Fixed some bugs in OM/Pi. 48Fixed some bugs in OM/Pi.
44Now character conversion tables are available for the Zaurus 49Now character conversion tables are available for the Zaurus
45to make OM/Pi working properly. 50to make OM/Pi working properly.
46To get the character conversion in OM/Pi working, please download 51To get the character conversion in OM/Pi working, please download
47at the sourceforge project site the package 52at the sourceforge project site the package
48sr-character-conversion_SharpROM_arm.ipk.zip 53sr-character-conversion_SharpROM_arm.ipk.zip
49(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms) 54(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms)
50from the section "general files for KDE/Pim" 55from the section "general files for KDE/Pim"
51Instructions how to install this package are in a ReadMe in this file. 56Instructions how to install this package are in a ReadMe in this file.
52 57
53 58
54Fixed the orientation change problem in KA/Pi when switching 59Fixed the orientation change problem in KA/Pi when switching
55portrait/landscape mode. 60portrait/landscape mode.
56 61
57French translation available for KA/Pi and OM/Pi. 62French translation available for KA/Pi and OM/Pi.
58 63
59Fixed some problems with categories in KO/Pi in DTM sync. 64Fixed some problems with categories in KO/Pi in DTM sync.
60 65
61Added selection dialog for export to phone in KA/Pi. 66Added selection dialog for export to phone in KA/Pi.
62 67
63If in KO/Pi is an attendee selected to add to a meeting and this 68If in KO/Pi is an attendee selected to add to a meeting and this
64attendee is already in the list of attendees, this person is not added 69attendee is already in the list of attendees, this person is not added
65again. 70again.
66 71
67Some menu cleanup in KA/Pi. 72Some menu cleanup in KA/Pi.
68 73
69********** VERSION 1.9.12 ************ 74********** VERSION 1.9.12 ************
70 75
71Fix for the bug in KO/Pi What's Next view of version 1.9.11. 76Fix for the bug in KO/Pi What's Next view of version 1.9.11.
72 77
73Bugfix: Licence file is now shown again. 78Bugfix: Licence file is now shown again.
74 79
75OM/Pi now supports Unicode (utf8 charset). 80OM/Pi now supports Unicode (utf8 charset).
76Fixed some bugs in OM/Pi. 81Fixed some bugs in OM/Pi.
77 82
78KA/Pi has more German translation. 83KA/Pi has more German translation.
79 84
80 85
81********** VERSION 1.9.11 ************ 86********** VERSION 1.9.11 ************
82 87
83Fixed several problems in PWM/Pi, like 88Fixed several problems in PWM/Pi, like
84asking the user, if unsaved changed are pending 89asking the user, if unsaved changed are pending
85when closing the app. 90when closing the app.
86And PwM/Pi handles now different texts for the 91And PwM/Pi handles now different texts for the
87fields Description, Username, Password, configurable per category. 92fields Description, Username, Password, configurable per category.
88 93
89Fixed a crash in KO/Pi , when importing/loading vcs files 94Fixed a crash in KO/Pi , when importing/loading vcs files
90which have an entry with an attendee with state: 95which have an entry with an attendee with state:
91NEEDS ACTION 96NEEDS ACTION
92 97
93Fixed some problems in the German translation of OM/Pi, 98Fixed some problems in the German translation of OM/Pi,
94which makes some dialogs not fitting on the screen 99which makes some dialogs not fitting on the screen
95of the Z 5500. 100of the Z 5500.
96 101
97Fixed Qtopia crash, when disabling/deinstalling 102Fixed Qtopia crash, when disabling/deinstalling
98KO/Pi alarm applet. 103KO/Pi alarm applet.
99 104
100Implemented direct KDE<->KA/Pi sync for KA/Pi running 105Implemented direct KDE<->KA/Pi sync for KA/Pi running
101on Linux desktop. 106on Linux desktop.
102 107
103Added feature "remove sync info" to sync menu. 108Added feature "remove sync info" to sync menu.
104 109
105Tweaked the KO/Pi What's next view a bit, added 110Tweaked the KO/Pi What's next view a bit, added
106setting to hide events that are done. 111setting to hide events that are done.
107 112
108Disabled "beam receive enabled" on startup to 113Disabled "beam receive enabled" on startup to
109avoid problems if Fastload is enabled. 114avoid problems if Fastload is enabled.
110Please set "beam receive enabled", 115Please set "beam receive enabled",
111if you want to receive data via IR. 116if you want to receive data via IR.
112 117
113Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running 118Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running
114on Linux desktop. 119on Linux desktop.
115 120
116Made in KA/Pi scrolling possible, if details view is selected. 121Made in KA/Pi scrolling possible, if details view is selected.
117(The keyboard focus is set automatically to the search line) 122(The keyboard focus is set automatically to the search line)
118 123
119Fixed a bug in DMT sync, that a new entry in DTM was added 124Fixed a bug in DMT sync, that a new entry in DTM was added
120on every sync to Kx/Pi. 125on every sync to Kx/Pi.
121 126
122Fixed missing writing of KA/Pi categories to DMT entries when syncing. 127Fixed missing writing of KA/Pi categories to DMT entries when syncing.
123 128
124Fixed a bug in DMT sync with todos created in KO/Pi containing 129Fixed a bug in DMT sync with todos created in KO/Pi containing
125non-latin1 characters. 130non-latin1 characters.
126 131
127Rearranged package contents of Sharp-ipks and made all 132Rearranged package contents of Sharp-ipks and made all
128packages installable on SD again. 133packages installable on SD again.
129 134
130Fixed the writing of addressbook data in DTM sync. 135Fixed the writing of addressbook data in DTM sync.
131Empty fields in KA/Pi were not removed. 136Empty fields in KA/Pi were not removed.
132 137
133Added better category handling in KA/Pi: 138Added better category handling in KA/Pi:
134Added item 139Added item
135Edit Categories and 140Edit Categories and
136Manage new categories 141Manage new categories
137to the settings menu. 142to the settings menu.
138Possible to configure a view to display categories. 143Possible to configure a view to display categories.
139 144
140Added detailed "KDE Sync Howto" and "Multi Sync Howto" to Help menu. 145Added detailed "KDE Sync Howto" and "Multi Sync Howto" to Help menu.
141 146
142Fixed displaying of "free" days and time in KO Monthview and Agendaview. 147Fixed displaying of "free" days and time in KO Monthview and Agendaview.
143 148
144... and many other bugfixes. 149... and many other bugfixes.
145 150
146********** VERSION 1.9.10 ************ 151********** VERSION 1.9.10 ************
147 152
148Many internal small bugfixes. 153Many internal small bugfixes.
149And fix of the "big" bug in KO/Pi, 154And fix of the "big" bug in KO/Pi,
150that after Syncing the appointments had an offset by several hours. 155that after Syncing the appointments had an offset by several hours.
151That was a problem with the internal timezone setting, 156That was a problem with the internal timezone setting,
152introduced by the changed timezone configuration settings. 157introduced by the changed timezone configuration settings.
153 158
154German translation for OM/Pi is now available. 159German translation for OM/Pi is now available.
155 160
156 161
157********** VERSION 1.9.9 ************ 162********** VERSION 1.9.9 ************
158 163
159KDE-Pim/Pi has a new Member! 164KDE-Pim/Pi has a new Member!
160It is called PWM/Pi (Passwordmanager/platform-independent) 165It is called PWM/Pi (Passwordmanager/platform-independent)
161and it is available for the Zaurus. 166and it is available for the Zaurus.
162It is planned, that it will be available later for Windows. 167It is planned, that it will be available later for Windows.
163(And for Linux, of course). 168(And for Linux, of course).
164It is a port of the Passwordmanager of KDE. 169It is a port of the Passwordmanager of KDE.
165It will need the MicroKDElibs to run. 170It will need the MicroKDElibs to run.
166 171
167Made loading of addressbooks in KA/Pi up to 7 times faster! 172Made loading of addressbooks in KA/Pi up to 7 times faster!
168The bigger your addressbook file, the more starting speed 173The bigger your addressbook file, the more starting speed
169will you gain. (relatively) 174will you gain. (relatively)
170 175
171The Qtopia addressbook connector is now platform independend 176The Qtopia addressbook connector is now platform independend
172as well and should work on any platform for importing/exporting 177as well and should work on any platform for importing/exporting
173Qtopia and Opie XML files. 178Qtopia and Opie XML files.
174 179
175Added a +30min feature to the timezone settings to make 180Added a +30min feature to the timezone settings to make
176KDE-Pim/Pi useable in Australia and other parts on the 181KDE-Pim/Pi useable in Australia and other parts on the
177world with strange timezones ;-) 182world with strange timezones ;-)
178 183
179German "Umlaute" should now be sorted correctly on the Z in KA/Pi. 184German "Umlaute" should now be sorted correctly on the Z in KA/Pi.
180 185
181It is now possible to disable the 186It is now possible to disable the
182"receive data via infrared" feature, such that syncing with 187"receive data via infrared" feature, such that syncing with
183Outlook is now possible again with Kx/Pi runing. 188Outlook is now possible again with Kx/Pi runing.
184Please disable it, before syncing Sharp DTM with Outlook. 189Please disable it, before syncing Sharp DTM with Outlook.
185For your convenience, the "receive data via infrared" feature 190For your convenience, the "receive data via infrared" feature
186is disabled automatically, if you sync Kx/Pi with DTM. 191is disabled automatically, if you sync Kx/Pi with DTM.
187You have to enable it again manually after syncing. 192You have to enable it again manually after syncing.
188Enabling this feature makes it impossible to start the 193Enabling this feature makes it impossible to start the
189Sharp DTM apps. If this feature is enabled, you will only get the 194Sharp DTM apps. If this feature is enabled, you will only get the
190alarm notification from KO/Pi and not from the Sharp calendar. 195alarm notification from KO/Pi and not from the Sharp calendar.
191This is very useful if you sync KO/Pi with Sharp DTM, 196This is very useful if you sync KO/Pi with Sharp DTM,
192because after syncing you usually would get notified about 197because after syncing you usually would get notified about
193an alarm by KO/Pi and the Sharp Calendar. 198an alarm by KO/Pi and the Sharp Calendar.
194 199
195Together with the Linux desktop version of KO/Pi 200Together with the Linux desktop version of KO/Pi
196it is now possible to sync KO/Pi on the Zaurus 201it is now possible to sync KO/Pi on the Zaurus
197with the complete KDE-desktop (3.3 or later) 202with the complete KDE-desktop (3.3 or later)
198calendar data easily. 203calendar data easily.
199That makes it possible to sync the Z with one 204That makes it possible to sync the Z with one
200click of a mouse with the KDE-Desktop. 205click of a mouse with the KDE-Desktop.
201This feature it available for all Zaurus platforms KO/Pi 206This feature it available for all Zaurus platforms KO/Pi
202is running on. 207is running on.
203The only thing needed is a running KO/Pi on Linux and 208The only thing needed is a running KO/Pi on Linux and
204a compiled version of the small 209a compiled version of the small
205KDE-Pim/Pi<->KDE-Desktop access command line program, 210KDE-Pim/Pi<->KDE-Desktop access command line program,
206which is in the KDE-Pim/Pi sources available. 211which is in the KDE-Pim/Pi sources available.
207 212
208The "KDE-desktop" syncing feature for KA/Pi will follow 213The "KDE-desktop" syncing feature for KA/Pi will follow
209in the next releases. 214in the next releases.
210 215
211Fixed the vcard export bug, which had the version 1.9.8. 216Fixed the vcard export bug, which had the version 1.9.8.
212 217
213Added missing GERMAN translation to KO/Pi. 218Added missing GERMAN translation to KO/Pi.
214Hi PsionX, could you add the missing french translation?Thx! 219Hi PsionX, could you add the missing french translation?Thx!
215 220
216Translation files for KA/Pi are available as well. 221Translation files for KA/Pi are available as well.
217GERMAN translation will be available in the next release. 222GERMAN translation will be available in the next release.
218PsionX ( yres, you again ;-) ), could you start translating 223PsionX ( yres, you again ;-) ), could you start translating
219KA/Pi? Thx! 224KA/Pi? Thx!
220 225
221You can download the version 1.9.9 at 226You can download the version 1.9.9 at
222 227
223http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604 228http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604
224 229
225Note: 230Note:
226To run the mail program OM/Pi you need libopenssl. 231To run the mail program OM/Pi you need libopenssl.
227A link to a download loaction is available at 232A link to a download loaction is available at
228ZSI at www.killefiz.de 233ZSI at www.killefiz.de
229 234
230 235
231********** VERSION 1.9.8 ************ 236********** VERSION 1.9.8 ************
232 237
233Fixed character decoding in OM/Pi. 238Fixed character decoding in OM/Pi.
234(e.g. German "Umlaute" were not displayed properly.) 239(e.g. German "Umlaute" were not displayed properly.)
235 240
236Made is possible to reparent todos in KO/Pi. 241Made is possible to reparent todos in KO/Pi.
237Use contextmenu or keys (look at Help-Keys + Colors) for that. 242Use contextmenu or keys (look at Help-Keys + Colors) for that.
238 243
239Added the missing Sync-Howto and WhatsNew to the packages. 244Added the missing Sync-Howto and WhatsNew to the packages.
240 245
241KO/Pi on Linux desktop can now sync with KDE desktop. 246KO/Pi on Linux desktop can now sync with KDE desktop.
242That means: When using KO/Pi on Linux desktop for syncing with 247That means: When using KO/Pi on Linux desktop for syncing with
243KDE desktop and the Zaurus, the Zaurus can be synced now 248KDE desktop and the Zaurus, the Zaurus can be synced now
244with all KDE-Calendar resources, not only with one local file. 249with all KDE-Calendar resources, not only with one local file.
245(That makes it possible to sync the Zaurus with the 250(That makes it possible to sync the Zaurus with the
246calendar data on a Kolab server) 251calendar data on a Kolab server)
247 252
248KA/Pi syncing with KDE desktop will be available in the next version. 253KA/Pi syncing with KDE desktop will be available in the next version.
249 254
250 255
251********** VERSION 1.9.7 ************ 256********** VERSION 1.9.7 ************
252 257
253KO/Pi - KA/Pi on Windows: 258KO/Pi - KA/Pi on Windows:
254Now a directory can be defined by the user, where the 259Now a directory can be defined by the user, where the
255application/config data should be saved. 260application/config data should be saved.
256 Define your desired path in the evironment variable 261 Define your desired path in the evironment variable
257 MICROKDEHOME 262 MICROKDEHOME
258 before starting KO/Pi or KA/Pi. 263 before starting KO/Pi or KA/Pi.
259 264
260An easy Kx/Pi to Kx/Pi syncing is now possible 265An easy Kx/Pi to Kx/Pi syncing is now possible
261(it is called Pi-Sync) via network. 266(it is called Pi-Sync) via network.
262Please look at the Sync Howto. 267Please look at the Sync Howto.
263 268
264Exporting of calendar data and contacts to mobile phones is now possible. 269Exporting of calendar data and contacts to mobile phones is now possible.
265The SyncHowto is updated with information howto 270The SyncHowto is updated with information howto
266access/sync mobile phones. 271access/sync mobile phones.
267Please look at the Sync Howto. 272Please look at the Sync Howto.
268 273
269Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly. 274Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly.
270Please disable Fastload for the original contact/calendar applications 275Please disable Fastload for the original contact/calendar applications
271and close them. 276and close them.
272KO/Pi and KA/Pi must be running in order to receive the data. 277KO/Pi and KA/Pi must be running in order to receive the data.
273(KO/Pi and KA/Pi are always running if Fastload for them is enabled!) 278(KO/Pi and KA/Pi are always running if Fastload for them is enabled!)
274 279
275In the KA/Pi details view are now the preferred tel. numbers displayed on top 280In the KA/Pi details view are now the preferred tel. numbers displayed on top
276of the other data ( emails/tel.numbers/addresses) 281of the other data ( emails/tel.numbers/addresses)
277 282
278Fixed some syncing problems in KA/Pi. 283Fixed some syncing problems in KA/Pi.
279 284
280Added font settings for the KA/Pi details view. 285Added font settings for the KA/Pi details view.
281Added fields "children's name" and "gender" to KA/Pi. 286Added fields "children's name" and "gender" to KA/Pi.
282 287
283Made searching in KA/Pi better: 288Made searching in KA/Pi better:
284Now the first item in a view is selected after a search automatically and 289Now the first item in a view is selected after a search automatically and
285the views can be scrolled up/down when the search input field has the keyboard focus. 290the views can be scrolled up/down when the search input field has the keyboard focus.
286 291
287And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi. 292And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi.
288 293
289 294
290********** VERSION 1.9.6 ************ 295********** VERSION 1.9.6 ************
291 296
292Changes in the external application communication on the Zaurus 297Changes in the external application communication on the Zaurus
293in order to use less RAM when the apps are running. 298in order to use less RAM when the apps are running.
294First syncing of addressbooks (KA/Pi) is possible. 299First syncing of addressbooks (KA/Pi) is possible.
295 300
296 301
297********** VERSION 1.9.5a ************ 302********** VERSION 1.9.5a ************
298 303
299Fixed a bug in KO/Pi in the SharpDTM sync of version 1.9.5. 304Fixed a bug in KO/Pi in the SharpDTM sync of version 1.9.5.
300Fixed some small bugs. 305Fixed some small bugs.
301KA/Pi shows now the birthday in summary view. 306KA/Pi shows now the birthday in summary view.
302Now OM/Pi and KA/Pi are using the date format defined in KO/Pi 307Now OM/Pi and KA/Pi are using the date format defined in KO/Pi
303for displaying dates. 308for displaying dates.
304 309
305 310
306********** VERSION 1.9.5 ************ 311********** VERSION 1.9.5 ************
307 312
308There is still no Addressbook syncing! 313There is still no Addressbook syncing!
309 314
310New in 1.9.5: 315New in 1.9.5:
311 316
312Many bugfixes. 317Many bugfixes.
313Better searching in KA/Pi. 318Better searching in KA/Pi.
314You can configure in KA/Pi if you want to search only after 319You can configure in KA/Pi if you want to search only after
315<return> key pressed. 320<return> key pressed.
316 321
317Better mail downloading in OM/Pi. 322Better mail downloading in OM/Pi.
318 323
319First experimental alpha version of sync of KO/Pi with mobile phones. 324First experimental alpha version of sync of KO/Pi with mobile phones.
320See gammu documentation for supported phones. 325See gammu documentation for supported phones.
321You need to install the package kammu_1.9.5_arm.ipk for sync of KO/Pi with mobile phones. kammu_1.9.5_arm.ipk needs libbluetooth and libsdp. 326You need to install the package kammu_1.9.5_arm.ipk for sync of KO/Pi with mobile phones. kammu_1.9.5_arm.ipk needs libbluetooth and libsdp.
322Quick hint how to use: 327Quick hint how to use:
323NOTE: MOBILE PHONE SYNC IS EXPERIMENTAL! 328NOTE: MOBILE PHONE SYNC IS EXPERIMENTAL!
324Install kammu_1.9.5_arm.ipk , libbluetooth and libsdp. 329Install kammu_1.9.5_arm.ipk , libbluetooth and libsdp.
325Create syncprofile - mobile device 330Create syncprofile - mobile device
326Remove entry for model. (Leave empty ). 331Remove entry for model. (Leave empty ).
327Enable infrared on Zaurus and your Phone. 332Enable infrared on Zaurus and your Phone.
328Sync. 333Sync.
329To get a more detailed log, start kopi from konsole. 334To get a more detailed log, start kopi from konsole.
330 335
331********** VERSION 1.9.4 ************ 336********** VERSION 1.9.4 ************
332 337
333This is the version 1.9.4 of KDE-Pim/Pi for the Zaurus. 338This is the version 1.9.4 of KDE-Pim/Pi for the Zaurus.
334 339
335WARNING: 340WARNING:
336PLEASE BACKUP ALL YOUR DATA! 341PLEASE BACKUP ALL YOUR DATA!
337We have changed a lot and maybe there are some unknown problems. 342We have changed a lot and maybe there are some unknown problems.
338 343
339SYNC HANDLING HAS CHANGED! 344SYNC HANDLING HAS CHANGED!
340Such that, if you sync now with an already synded device, you will duplicated entries after the first sync. 345Such that, if you sync now with an already synded device, you will duplicated entries after the first sync.
341(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks). 346(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks).
342 347
343You need the kmicrokdelibs_1.9.4_arm.ipk as a base for the other programs. 348You need the kmicrokdelibs_1.9.4_arm.ipk as a base for the other programs.
344If you get the error: "Install only possible in main memory", just try it again to install it on SD card. That worked for me. And it was reported that rebooting Qtopia did help in this case as well. 349If you get the error: "Install only possible in main memory", just try it again to install it on SD card. That worked for me. And it was reported that rebooting Qtopia did help in this case as well.
345 350
346As programs are available: 351As programs are available:
347KO/Pi (korganizer ipk) - a calendar program. 352KO/Pi (korganizer ipk) - a calendar program.
348KA/Pi (kaddressbook ipk ) - an addressbook 353KA/Pi (kaddressbook ipk ) - an addressbook
349OM/Pi (kopiemail ipk ) an email program with pop/smtp and IMAP support. 354OM/Pi (kopiemail ipk ) an email program with pop/smtp and IMAP support.
350 355
351An alarm notification program ( korganizer-alarm ipk ) for KO/Pi that notifies you about alarms, even if the Zaurus is in suspend mode. 356An alarm notification program ( korganizer-alarm ipk ) for KO/Pi that notifies you about alarms, even if the Zaurus is in suspend mode.
352(If you do not see an icon in the taskbar after installing korganizer-alarm, please restart Qtopia) 357(If you do not see an icon in the taskbar after installing korganizer-alarm, please restart Qtopia)
353 358
354All the applications are installed in a "Pim" TAB. 359All the applications are installed in a "Pim" TAB.
355If this TAB is new on your system, you can get an icon in this TAB by installing pim_TAB_icon_1.9.4_arm.ipk 360If this TAB is new on your system, you can get an icon in this TAB by installing pim_TAB_icon_1.9.4_arm.ipk
356 361
357All the application are integrated. 362All the application are integrated.
358Such that you can choose in KO/Pi the attendees of a meeting from the addresses in KA/Pi. When you click in KA/Pi on the email address, OM/Pi is started to write the mail. 363Such that you can choose in KO/Pi the attendees of a meeting from the addresses in KA/Pi. When you click in KA/Pi on the email address, OM/Pi is started to write the mail.
359 364
360HINT: 365HINT:
361If you install KPhone/Pi 0.9.7, it will be called, if you click in KA/Pi on a phone number. 366If you install KPhone/Pi 0.9.7, it will be called, if you click in KA/Pi on a phone number.
362 367
363What's new? 368What's new?
364 369
365SYNC HANDLING HAS CHANGED! 370SYNC HANDLING HAS CHANGED!
366Such that, if you sync now with an already synded device, you will duplicated entries after the first sync. 371Such that, if you sync now with an already synded device, you will duplicated entries after the first sync.
367(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks). 372(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks).
368 373
369New in OM/Pi: 374New in OM/Pi:
370When copying(i.e. downloading mails) , you can specify, that only mails of a given size should be downloaded. Added mail copy possibility for selected mails. 375When copying(i.e. downloading mails) , you can specify, that only mails of a given size should be downloaded. Added mail copy possibility for selected mails.
371 376
372New in KO/Pi: 377New in KO/Pi:
373French is now available for KO/Pi. 378French is now available for KO/Pi.
374Choose menu:Actions - Configure:TAB locale 379Choose menu:Actions - Configure:TAB locale
375Syncing has changed. 380Syncing has changed.
376Phone sync available soon. 381Phone sync available soon.
377Not much changes, I cannot remember them ... 382Not much changes, I cannot remember them ...
378 383
379New in KA/Pi: 384New in KA/Pi:
380Beaming possible. 385Beaming possible.
381Sharp DTM readonly access possible( create a new DTM resource ); 386Sharp DTM readonly access possible( create a new DTM resource );
382Better searching possible. 387Better searching possible.
383Search is performed only after pressing the return key. 388Search is performed only after pressing the return key.
384Use wildcard * to specify parts of a name. 389Use wildcard * to specify parts of a name.
385 390
386Better name/email selection dialog (called from KO/Pi or OM/Pi). In this dialog, now searching is possible. Like in KA/Pi, use return key and wildcard * . 391Better name/email selection dialog (called from KO/Pi or OM/Pi). In this dialog, now searching is possible. Like in KA/Pi, use return key and wildcard * .
387 392
388A big improvement is the new management of the contact access. 393A big improvement is the new management of the contact access.
389In version 1.9.3, every application was using their own addressbook access data. 394In version 1.9.3, every application was using their own addressbook access data.
390That means, the addressbook was loaded up to three times in the memory, when accessed by KA/Pi, KO/Pi and OM/Pi. 395That means, the addressbook was loaded up to three times in the memory, when accessed by KA/Pi, KO/Pi and OM/Pi.
391That was wasting of memory, if you had several hundreds of contacts. 396That was wasting of memory, if you had several hundreds of contacts.
392 397
393Now only KA/Pi accesses the addressbook. 398Now only KA/Pi accesses the addressbook.
394If KO/Pi or OM/Pi want to get some name/email data, they request KA/Pi to open the name/email selection dialog and send it back to them. 399If KO/Pi or OM/Pi want to get some name/email data, they request KA/Pi to open the name/email selection dialog and send it back to them.
395If you click on an attendee in a meeting, its contact data is displayed in KA/Pi directly. 400If you click on an attendee in a meeting, its contact data is displayed in KA/Pi directly.
396That means, if KO/Pi or OM/Pi want to access contact data, KA/Pi is started first. 401That means, if KO/Pi or OM/Pi want to access contact data, KA/Pi is started first.
397 402
398New in the KO/Pi alarm applet: 403New in the KO/Pi alarm applet:
399Configure your own timer popup menu! 404Configure your own timer popup menu!
400(Text and minutes for timer countdown) 405(Text and minutes for timer countdown)
401Just edit the file 406Just edit the file
402(yourhomedir)/.kopialarmtimerrc 407(yourhomedir)/.kopialarmtimerrc
403and start/stop a timer to get a new menu with the data of this file. 408and start/stop a timer to get a new menu with the data of this file.
404 409
405********** VERSION 1.9.3 ************ 410********** VERSION 1.9.3 ************
4061) 4111)
407Now KO/Pi on Windows imports directly the calendar data of 412Now KO/Pi on Windows imports directly the calendar data of
408an installed Outlook. Should work with OL version >= 2000. 413an installed Outlook. Should work with OL version >= 2000.
409 414
410********** VERSION 1.9.2 ************ 415********** VERSION 1.9.2 ************
4111) 4161)
412KDE-Pim/Pi has got a new member: 417KDE-Pim/Pi has got a new member:
413KmicroMail (KM/Pi) is a mail program, 418KmicroMail (KM/Pi) is a mail program,
414which can handle IMAP and POP mail access. 419which can handle IMAP and POP mail access.
415It is based on Opie-Mail v3. 420It is based on Opie-Mail v3.
416All dependencies to the Opie libraries ar removed, 421All dependencies to the Opie libraries ar removed,
417such that no additional Opie lib is needed. 422such that no additional Opie lib is needed.
418It is already integrated in KO/Pi and KA/Pi. 423It is already integrated in KO/Pi and KA/Pi.
419It it now available for the Zaurus,probably it 424It it now available for the Zaurus,probably it
420will be available for other platforms later. 425will be available for other platforms later.
421Hint: 426Hint:
422Create your own contact (name + email) 427Create your own contact (name + email)
423in KA/Pi, select this contact and choose menu: 428in KA/Pi, select this contact and choose menu:
424Settings - Set Who Am I. 429Settings - Set Who Am I.
425Now the settings of this contact are used as 430Now the settings of this contact are used as
426the sender data in KM/Pi. 431the sender data in KM/Pi.
4272) 4322)
428KDE-Pim/Pi is split up in five different 433KDE-Pim/Pi is split up in five different
429packages now precompiled for Sharp Zaurus: 434packages now precompiled for Sharp Zaurus:
430--kmicrokdelibs_1.9.2_arm.ipk 435--kmicrokdelibs_1.9.2_arm.ipk
431The libs are needed for any 436The libs are needed for any
432of the following programs: 437of the following programs:
433--kaddressbook_1.9.2_arm.ipk 438--kaddressbook_1.9.2_arm.ipk
434--kmicromail_1.9.2_arm.ipk 439--kmicromail_1.9.2_arm.ipk
435--korganizer_1.9.2_arm.ipk 440--korganizer_1.9.2_arm.ipk
436Independ from that, there is the alarm applet 441Independ from that, there is the alarm applet
437available for KO/Pi, which also offers 442available for KO/Pi, which also offers
438quick access for a new mail or 443quick access for a new mail or
439showing the addressbook.: 444showing the addressbook.:
440--korganizer-alarm_1.9.2_arm.ipk 445--korganizer-alarm_1.9.2_arm.ipk
441Independend means, that the alarm applet 446Independend means, that the alarm applet
442does not need any of the libs or programs above to run. 447does not need any of the libs or programs above to run.
443But it would be quite useless without these programs. 448But it would be quite useless without these programs.
444NOTE: 449NOTE:
445If you get a 450If you get a
446"This application depends on other programs" 451"This application depends on other programs"
447during installation of 452during installation of
448--kmicrokdelibs_1.9.2_arm.ipk 453--kmicrokdelibs_1.9.2_arm.ipk
449you probably do not have to care about that. 454you probably do not have to care about that.
450kmicrokdelibs_1.9.2 will come with some 455kmicrokdelibs_1.9.2 will come with some
451resource plugins, which needs additional libraries. 456resource plugins, which needs additional libraries.
452(E.g. libopie1, if you want to use the 457(E.g. libopie1, if you want to use the
453opie resource connector in KA/Pi). 458opie resource connector in KA/Pi).
454If you do not have this libraries installed, 459If you do not have this libraries installed,
455you simply cannot use the resource. 460you simply cannot use the resource.
456To make it clear: 461To make it clear:
457If the libraries are missing, the applications 462If the libraries are missing, the applications
458using kmicrokdelibs will start, 463using kmicrokdelibs will start,
459because the resources are plugins. 464because the resources are plugins.
4603) 4653)
461KO/Pi and friends are now installable on SD-Card! 466KO/Pi and friends are now installable on SD-Card!
462It is recommended to install all libs and apps 467It is recommended to install all libs and apps
463on the SD card or all in the internal storage. 468on the SD card or all in the internal storage.
464There may be problems, if this is mixed. 469There may be problems, if this is mixed.
4654) 4704)
466Fixed two bugs in the alarm notification on Windows. 471Fixed two bugs in the alarm notification on Windows.
4675) 4725)
468Great improvement! 473Great improvement!
469KO/Pi uses now the latest version of libical. 474KO/Pi uses now the latest version of libical.
470Libical is the library which actually reads 475Libical is the library which actually reads
471the calendar files and extract the data from it. 476the calendar files and extract the data from it.
472With the old version, there were problems 477With the old version, there were problems
473(crashes or program hangs) when licical did read 478(crashes or program hangs) when licical did read
474files, which were not stored from KO/Pi. 479files, which were not stored from KO/Pi.
475I do not know, if the new libical works perfect, 480I do not know, if the new libical works perfect,
476but actually it works much better than 481but actually it works much better than
477the old version. 482the old version.
478There are no problems with compatibility with 483There are no problems with compatibility with
479old calendar files of KO/Pi, of course! 484old calendar files of KO/Pi, of course!
4806) 4856)
481New in KA/Pi: 486New in KA/Pi:
482Opie addressbook resource connector available! 487Opie addressbook resource connector available!
483You will need libopie1 and the opie addressbook, 488You will need libopie1 and the opie addressbook,
484of course. 489of course.
485With the Opie addressbook resource connector, 490With the Opie addressbook resource connector,
486you can access the Opie addressbook readonly in KA/Pi. 491you can access the Opie addressbook readonly in KA/Pi.
487If you want to edit or import the data into KA/Pi, 492If you want to edit or import the data into KA/Pi,
488do this: 493do this:
489a) Create an Opie resource. 494a) Create an Opie resource.
490 (Menu: Settings-Configure Resources). 495 (Menu: Settings-Configure Resources).
491After configuration and restarting KA/Pi you should see 496After configuration and restarting KA/Pi you should see
492the Opie contacts in KA/Pi. 497the Opie contacts in KA/Pi.
493b) Select some or all Opie contacts. 498b) Select some or all Opie contacts.
494(NOTE: +++++ 499(NOTE: +++++
495To know exactly, what contacts are Opie contacts, 500To know exactly, what contacts are Opie contacts,
496do this: Choose menu: 501do this: Choose menu:
497View-Modify View - TAB Fields. 502View-Modify View - TAB Fields.
498Select in the above list "Resource" and click 503Select in the above list "Resource" and click
499down arrow to add it to the "Selected fields". 504down arrow to add it to the "Selected fields".
500Click OK. 505Click OK.
501Now you have a new column "Resource" in your list, 506Now you have a new column "Resource" in your list,
502where you can see, what an Opie resource is. 507where you can see, what an Opie resource is.
503++++ NOTE end.) 508++++ NOTE end.)
504Ok, we do have now some Opie contacts seleted. 509Ok, we do have now some Opie contacts seleted.
505(Use SHIFT or CTRL key in order to multiple select). 510(Use SHIFT or CTRL key in order to multiple select).
506c) Choose menu: Edit-Copy. 511c) Choose menu: Edit-Copy.
507d) Choose menu: Edit-Paste. 512d) Choose menu: Edit-Paste.
508e) Select the resource, you want to add the contacts to. 513e) Select the resource, you want to add the contacts to.
509Congrats! Now you have read/write access to the copied 514Congrats! Now you have read/write access to the copied
510opie contacts as "real" KA/Pi contacts. 515opie contacts as "real" KA/Pi contacts.
511 516
512 517
513********** VERSION 1.9.1 ************ 518********** VERSION 1.9.1 ************
5141) 5191)
515 +++ IMPORTANT 1 +++ 520 +++ IMPORTANT 1 +++
516 521
517The storing place of the default calendar 522The storing place of the default calendar
518file has changed! 523file has changed!
519The default calendar file was 524The default calendar file was
520Applications/korganizer/mycalendar.ics 525Applications/korganizer/mycalendar.ics
521on Zaurus and 526on Zaurus and
522(yourHomeDir)/korganizer/mycalendar.ics 527(yourHomeDir)/korganizer/mycalendar.ics
523on Windows/Linux desktop. Now it is 528on Windows/Linux desktop. Now it is
524(yourHomeDir)/kdepim/korganizer/mycalendar.ics 529(yourHomeDir)/kdepim/korganizer/mycalendar.ics
525on Zaurus, Windows and Linux. 530on Zaurus, Windows and Linux.
526To load the old file, choose menu 531To load the old file, choose menu
527File-Load calendar backup. 532File-Load calendar backup.
528(It should be loaded automatically 533(It should be loaded automatically
529at startup with a warning message displayed). 534at startup with a warning message displayed).
530The place of the configuration file has changed too. 535The place of the configuration file has changed too.
531If you want to use your old KO/Pi config, 536If you want to use your old KO/Pi config,
532copy it to 537copy it to
533(yourHomeDir)/kdepim/config/korganizerrc 538(yourHomeDir)/kdepim/config/korganizerrc
534Please read VERSION 1.9.0 - topic 3) as well! 539Please read VERSION 1.9.0 - topic 3) as well!
535 540
536 +++ IMPORTANT 2 +++ 541 +++ IMPORTANT 2 +++
537 542
538Because of the new paths, you will need 543Because of the new paths, you will need
539a new version of the KO/Pi alarm applet 544a new version of the KO/Pi alarm applet
540for Zaurus. 545for Zaurus.
541Use version >= 1.9.1 546Use version >= 1.9.1
542 547
5432) 5482)
544Now the QWhat'sThis Icon works for items 549Now the QWhat'sThis Icon works for items
545in the month view as well. 550in the month view as well.
546(See VERSION 1.7.8 Topic 1) ). 551(See VERSION 1.7.8 Topic 1) ).
5473) 5523)
548You can import birtsdays/anniversaries 553You can import birtsdays/anniversaries
549from KA/Pi into KO/Pi. 554from KA/Pi into KO/Pi.
550Choose menu File-Import birthdays. 555Choose menu File-Import birthdays.
551If you import twice, already imported items 556If you import twice, already imported items
552will not be imported again, if they 557will not be imported again, if they
553have not been changed in KO/Pi. 558have not been changed in KO/Pi.
5544) 5594)
555When syncing with sharp DTM, now a progress 560When syncing with sharp DTM, now a progress
556is shown, when the data is written back. 561is shown, when the data is written back.
557If there is much data in KO/Pi and no data 562If there is much data in KO/Pi and no data
558in DTM, that can take a long time. 563in DTM, that can take a long time.
559(But only for the first time ). 564(But only for the first time ).
5605) 5655)
561In the search dialog, you can search 566In the search dialog, you can search
562now for the name/email of an attendee 567now for the name/email of an attendee
563of an event/todo. 568of an event/todo.
564To get more space for displaying 569To get more space for displaying
565search results, the buttons 570search results, the buttons
566for "search" and "close" on the 571for "search" and "close" on the
567bottom are removed in the PDA version. 572bottom are removed in the PDA version.
568You have to click OK in the top right 573You have to click OK in the top right
569corner to do a search. 574corner to do a search.
5706) 5756)
571Now it is possible to disable the displaying 576Now it is possible to disable the displaying
572of todo items in the Allday part of the Agenda. 577of todo items in the Allday part of the Agenda.
573Choose Menu Action-Configure, 578Choose Menu Action-Configure,
574TAB Todo View, checkbox 579TAB Todo View, checkbox
575"Allday Agenda view shows todos" 580"Allday Agenda view shows todos"
5767) 5817)
577If FastLoad is enabled, now the settings and the 582If FastLoad is enabled, now the settings and the
578calendar data are saved, when KO/Pi is closed. 583calendar data are saved, when KO/Pi is closed.
579(If no Fastload is enabled, KO/Pi saves 584(If no Fastload is enabled, KO/Pi saves
580the data as well, of course) 585the data as well, of course)
5818) 5868)
582The Agenda View has a minimize-splitter now, 587The Agenda View has a minimize-splitter now,
583such that the height of the allday part can be 588such that the height of the allday part can be
584changed quickly. 589changed quickly.
585 590
586********** VERSION 1.9.0 ************ 591********** VERSION 1.9.0 ************
5871) 5921)
588KO/Pi is now merged with the new microKDE from KA/Pi. 593KO/Pi is now merged with the new microKDE from KA/Pi.
589KO/Pi accesses now KA/Pi as the addressbook. 594KO/Pi accesses now KA/Pi as the addressbook.
590The other ddressbook-plugins are not working any longer. 595The other ddressbook-plugins are not working any longer.
591(It is planned, that later KA/Pi itself uses these plugins) 596(It is planned, that later KA/Pi itself uses these plugins)
592New versions of KO/Pi are only available 597New versions of KO/Pi are only available
593together with KA/Pi as the KDE-Pim/Pi package. 598together with KA/Pi as the KDE-Pim/Pi package.
5942) 5992)
595If you click on an attendee of a meeting in the 600If you click on an attendee of a meeting in the
596event viewer, a detailed summary of the 601event viewer, a detailed summary of the
597attendee is shown. 602attendee is shown.
5983) 6033)
599The place of the configuration file has changed. 604The place of the configuration file has changed.
600If you want to use your old KO/Pi config, copy 605If you want to use your old KO/Pi config, copy
601Applications/korganizer/config_korganizerrc 606Applications/korganizer/config_korganizerrc
602to 607to
603Applications/korganizer/config/korganizerrc 608Applications/korganizer/config/korganizerrc
604 609
605********** VERSION 1.7.8 ************ 610********** VERSION 1.7.8 ************
6061) 6111)
607Now the QWhat'sThis ist working. 612Now the QWhat'sThis ist working.
608Enable the QWhat'sThis icon in the toolbar. 613Enable the QWhat'sThis icon in the toolbar.
609(You have to restart to reload the changed toolbar config). 614(You have to restart to reload the changed toolbar config).
610Now click on the QWhat'sThis Icon 615Now click on the QWhat'sThis Icon
611in the top right corner of KO/Pi. 616in the top right corner of KO/Pi.
612Then click on an item in the Agenda View: 617Then click on an item in the Agenda View:
613You will get a detailed display of the items content. 618You will get a detailed display of the items content.
6142) 6192)
615Some other very minor changes. 620Some other very minor changes.
616But I have forgotten the details ... 621But I have forgotten the details ...
617For that reason I start this log here: 622For that reason I start this log here:
618To document my changes, when I am doing it. 623To document my changes, when I am doing it.
619 624
620********** VERSION 1.7.7 ************ 625********** VERSION 1.7.7 ************
621Stable Version of KO/Pi 626Stable Version of KO/Pi
diff --git a/bin/kdepim/kopiemail/germantranslation.txt b/bin/kdepim/kopiemail/germantranslation.txt
index 1abe14a..5039848 100644
--- a/bin/kdepim/kopiemail/germantranslation.txt
+++ b/bin/kdepim/kopiemail/germantranslation.txt
@@ -1,247 +1,247 @@
1{ " Local Time"," Locale Zeit" }, 1{ " Local Time"," Locale Zeit" },
2{ "Preferences","Vorlieben" }, 2{ "Preferences","Vorlieben" },
3{ "Ok","Ok" }, 3{ "Ok","Ok" },
4{ "Default","Standard" }, 4{ "Default","Standard" },
5{ "Cancel","Abbrechen" }, 5{ "Cancel","Abbrechen" },
6{ "Global","Global" }, 6{ "Global","Global" },
7{ "Email","Email" }, 7{ "Email","Email" },
8{ "Phone","Phone" }, 8{ "Phone","Phone" },
9{ "SMS","SMS" }, 9{ "SMS","SMS" },
10{ "Fax","Fax" }, 10{ "Fax","Fax" },
11{ "Pager","Pager" }, 11{ "Pager","Pager" },
12{ "SIP","SIP" }, 12{ "SIP","SIP" },
13{ "Language:(needs restart)","Sprache (Neustart!)" }, 13{ "Language:(needs restart)","Sprache (Neustart!)" },
14{ "English","Englisch" }, 14{ "English","Englisch" },
15{ "German","Deutsch" }, 15{ "German","Deutsch" },
16{ "French","Französich" }, 16{ "French","Französich" },
17{ "Italian","Italienisch" }, 17{ "Italian","Italienisch" },
18{ "User defined (usertranslation.txt)","Benutzerdef.(usertranslation.txt)" }, 18{ "User defined (usertranslation.txt)","Benutzerdef.(usertranslation.txt)" },
19{ "Time Format(nr):","Zeit Format(Neustart!)" }, 19{ "Time Format(nr):","Zeit Format(Neustart!)" },
20{ "24:00","24:00" }, 20{ "24:00","24:00" },
21{ "12:00am","12:00am" }, 21{ "12:00am","12:00am" },
22{ "Week starts on Sunday","Woche beginnt Sonntags" }, 22{ "Week starts on Sunday","Woche beginnt Sonntags" },
23{ "Locale","Localisation" }, 23{ "Locale","Localisation" },
24{ "Date Format:","Datums Format:" }, 24{ "Date Format:","Datums Format:" },
25{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" }, 25{ "24.03.2004 (%d.%m.%Y|%A %d %B %Y)","24.03.2004 (%d.%m.%Y|%A %d %B %Y)" },
26{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" }, 26{ "03.24.2004 (%m.%d.%Y|%A %B %d %Y)","03.24.2004 (%m.%d.%Y|%A %B %d %Y)" },
27{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" }, 27{ "2004-03-24 (%Y-%m-%d|%A %Y %B %d)","2004-03-24 (%Y-%m-%d|%A %Y %B %d)" },
28{ "User defined","Benutzerdefiniert" }, 28{ "User defined","Benutzerdefiniert" },
29{ "User long date:","Format langes Datum:" }, 29{ "User long date:","Format langes Datum:" },
30{ "User short date:","Format kurzes Datum:" }, 30{ "User short date:","Format kurzes Datum:" },
31{ "Monday 19 April 2004: %A %d %B %Y","Montag 19 April 2004: %A %d %B %Y" }, 31{ "Monday 19 April 2004: %A %d %B %Y","Montag 19 April 2004: %A %d %B %Y" },
32{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" }, 32{ "Mon 19.04.04: %a %d.%m.%y","Mon 19.04.04: %a %d.%m.%y" },
33{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" }, 33{ "Mon, 19.Apr.04: %a, %d.%b.%y","Mon, 19.Apr.04: %a, %d.%b.%y" },
34{ "Date Format","Datums Format" }, 34{ "Date Format","Datums Format" },
35{ "Timezone:","Zeitzone:" }, 35{ "Timezone:","Zeitzone:" },
36{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" }, 36{ "Add 30 min to selected Timezone","Addiere 30 min zur Zeitzone" },
37{ "Timezone has daylight saving","Zeitzone hat Sommerzeit" }, 37{ "Timezone has daylight saving","Zeitzone hat Sommerzeit" },
38{ "Actual start and end is the\nsunday before this date.","Tatsächlicher Beginn/Ende ist der\nSonntag vor diesem Datum!" }, 38{ "Actual start and end is the\nsunday before this date.","Tatsächlicher Beginn/Ende ist der\nSonntag vor diesem Datum!" },
39{ "The year in the date is ignored.","Das Jahr vom Datum wird ignoriert." }, 39{ "The year in the date is ignored.","Das Jahr vom Datum wird ignoriert." },
40{ "Daylight start:","Sommerzeit Beginn:" }, 40{ "Daylight start:","Sommerzeit Beginn:" },
41{ "Mon","Mo" }, 41{ "Mon","Mo" },
42{ "Tue","Di" }, 42{ "Tue","Di" },
43{ "Wed","Mi" }, 43{ "Wed","Mi" },
44{ "Thu","Do" }, 44{ "Thu","Do" },
45{ "Fri","Fr" }, 45{ "Fri","Fr" },
46{ "Sat","Sa" }, 46{ "Sat","Sa" },
47{ "Sun","So" }, 47{ "Sun","So" },
48{ "January","Januar" }, 48{ "January","Januar" },
49{ "February","Februar" }, 49{ "February","Februar" },
50{ "March","März" }, 50{ "March","März" },
51{ "April","April" }, 51{ "April","April" },
52{ "May","Mai" }, 52{ "May","Mai" },
53{ "June","Juni" }, 53{ "June","Juni" },
54{ "July","Juli" }, 54{ "July","Juli" },
55{ "August","August" }, 55{ "August","August" },
56{ "September","September" }, 56{ "September","September" },
57{ "October","Oktober" }, 57{ "October","Oktober" },
58{ "November","November" }, 58{ "November","November" },
59{ "December","Dezember" }, 59{ "December","Dezember" },
60{ "tomorrow","morgen" }, 60{ "tomorrow","morgen" },
61{ "today","heute" }, 61{ "today","heute" },
62{ "yesterday","gestern" }, 62{ "yesterday","gestern" },
63{ "Monday","Montag" }, 63{ "Monday","Montag" },
64{ "Tuesday","Dienstag" }, 64{ "Tuesday","Dienstag" },
65{ "Wednesday","Mittwoch" }, 65{ "Wednesday","Mittwoch" },
66{ "Thursday","Donnerstag" }, 66{ "Thursday","Donnerstag" },
67{ "Friday","Freitag" }, 67{ "Friday","Freitag" },
68{ "Saturday","Samstag" }, 68{ "Saturday","Samstag" },
69{ "Sunday","Sonntag" }, 69{ "Sunday","Sonntag" },
70{ "Daylight end:","Sommerzeit Ende:" }, 70{ "Daylight end:","Sommerzeit Ende:" },
71{ "Time Zone","Zeitzone" }, 71{ "Time Zone","Zeitzone" },
72{ "Used Mail Client","Benutzter Mail Client" }, 72{ "Used Mail Client","Benutzter Mail Client" },
73{ "Channel:","Channel:" }, 73{ "Channel:","Channel:" },
74{ "Message:","Message:" }, 74{ "Message:","Message:" },
75{ "Parameters:","Parameter:" }, 75{ "Parameters:","Parameter:" },
76{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" }, 76{ "HINT: Delimiter=; Name=%1,Email=%2","Hinweis: Begrenzer=; Name=%1,Email=%2" },
77{ "extra Message:","extra Message:" }, 77{ "extra Message:","extra Message:" },
78{ "extra Parameters:","extra Parameter:" }, 78{ "extra Parameters:","extra Parameter:" },
79{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" }, 79{ "HINT: Emails=%1,Attachments=%2","Hinweis: Emails=%1,Attachments=%2" },
80{ "External Apps.","Externe Appl." }, 80{ "External Apps.","Externe Appl." },
81{ "General","Allgemein" }, 81{ "General","Allgemein" },
82{ "Full &name:","Vor- und &Nachname:" }, 82{ "Full &name:","Vor- und &Nachname:" },
83{ "E&mail address:","E&mail Adresse:" }, 83{ "E&mail address:","E&mail Adresse:" },
84{ "Fonts","Schriftart" }, 84{ "Fonts","Schriftart" },
85{ "Choose...","Wähle..." }, 85{ "Choose...","Wähle..." },
86{ "Used %1 Client","Benutzter %1 Client" }, 86{ "Used %1 Client","Benutzter %1 Client" },
87{ "No email client installed","Kein Email Klient installiert" }, 87{ "No email client installed","Kein Email Klient installiert" },
88{ "Userdefined email client","Benutzerdef. Email Klient" }, 88{ "Userdefined email client","Benutzerdef. Email Klient" },
89{ "OM/Pi email client","OM/Pi Email Klient" }, 89{ "OM/Pi email client","OM/Pi Email Klient" },
90{ "Delete","Löschen" }, 90{ "Delete","Löschen" },
91{ "New","Neu" }, 91{ "New","Neu" },
92{ "Edit","Bearbeite" }, 92{ "Edit","Bearbeite" },
93{ "Close","Schließen" }, 93{ "Close","Schließen" },
94{ "Size","Größe" }, 94{ "Size","Größe" },
95{ "Date","Datum" }, 95{ "Date","Datum" },
96{ "Please set at","Bitte einstellen in" }, 96{ "Please set at","Bitte einstellen in" },
97{ "Settings@General TAB","Einstellungen@Allgemein TAB" }, 97{ "Settings@General TAB","Einstellungen@Allgemein TAB" },
98{ "KOpieMail/Pi","KOpieMail/Pi" }, 98{ "KOpieMail/Pi","KOpieMail/Pi" },
99{ "Mail","Mail" }, 99{ "Mail","Mail" },
100{ "Settings","Konfig" }, 100{ "Settings","Konfig" },
101{ "Get all new mails","Hole alle neuen Mails" }, 101{ "Get all new mails","Hole alle neuen Mails" },
102{ "Get new messages","Hole neue mails" }, 102{ "Get new messages","Hole neue mails" },
103{ "Compose new mail","Schreibe neue Mail" }, 103{ "Compose new mail","Schreibe neue Mail" },
104{ "Send queued mails","Sende gespeicherte Mails" }, 104{ "Send queued mails","Sende gespeicherte Mails" },
105{ "Show/Hide folders","Zeige Verzeichnisse" }, 105{ "Show/Hide folders","Zeige Verzeichnisse" },
106{ "Delete Mail","Lösche Mail" }, 106{ "Delete Mail","Lösche Mail" },
107{ "Edit settings","Ändere Einstellungen" }, 107{ "Edit settings","Ändere Einstellungen" },
108{ "Configure accounts","Konfiguriere Zugänge" }, 108{ "Configure accounts","Konfiguriere Zugänge" },
109{ "Mailbox","Mailbox" }, 109{ "Mailbox","Mailbox" },
110{ "Subject","Betreff" }, 110{ "Subject","Betreff" },
111{ "Sender","Sender" }, 111{ "Sender","Sender" },
112{ "Size","Größe" }, 112{ "Size","Größe" },
113{ "Date","Datum" }, 113{ "Date","Datum" },
114{ "Close","Schliessen" }, 114{ "Close","Schliessen" },
115{ "Help","Hilfe" }, 115{ "Help","Hilfe" },
116{ "About","Über" }, 116{ "About","Über" },
117{ "Licence","Lizenz" }, 117{ "Licence","Lizenz" },
118{ "LibEtPan Licence","LibEtPan Lizenz" }, 118{ "LibEtPan Licence","LibEtPan Lizenz" },
119{ "Settings - some need a restart (nr)","Einstellungen - manche benötigen einen Neustart (nr)" }, 119{ "Settings - some need a restart (nr)","Einstellungen - manche benötigen einen Neustart (nr)" },
120{ "HINT: Separate multiple\neMail addresses by ";"","Hinweis:Trenne mehrere\nAddressen mit einem ";"" }, 120{ "HINT: Separate multiple\neMail addresses by ";"","Hinweis:Trenne mehrere\nAddressen mit einem ";"" },
121{ "Ignore above settings and\nuse KA/Pi "Who am I" instead!","Ignoriere obige Einstellungen und\nbenutze KA/Pi "Wer bin ich"\nstattdessen!" }, 121{ "Ignore above settings and\nuse KA/Pi "Who am I" instead!","Ignoriere obige Einstellungen und\nbenutze KA/Pi "Wer bin ich"\nstattdessen!" },
122{ "View mail as html","Zeige Mails als html" }, 122{ "View mail as html","Zeige Mails als html" },
123{ "Send mails later","Sende Mails später" }, 123{ "Send mails later","Sende Mails später" },
124{ "Application(nr)","Applikation(nr)" }, 124{ "Application(nr)","Applikation(nr)" },
125{ "OK","OK" }, 125{ "OK","OK" },
126{ "Compose mail:","Verfasse Mail:" }, 126{ "Compose mail:","Verfasse Mail:" },
127{ "Dear Mr.","Hallo Herr" }, 127{ "Dear Mr.","Hallo Herr" },
128{ "Read mail:","Lese Mail:" }, 128{ "Read mail:","Lese Mail:" },
129{ "Hello","Hallo" }, 129{ "Hello","Hallo" },
130{ "Configure Accounts","Konfigure Zugänge" }, 130{ "Configure Accounts","Konfigure Zugänge" },
131{ "Name of the Account","Name des Zugangs" }, 131{ "Name of the Account","Name des Zugangs" },
132{ "News","News" }, 132{ "News","News" },
133{ "Account","Zugang" }, 133{ "Account","Zugang" },
134{ "Type","Typ" }, 134{ "Type","Typ" },
135{ "<p>Please select an account.</p>","<p>Bitte wähle einen Zugang.</p>" }, 135{ "<p>Please select an account.</p>","<p>Bitte wähle einen Zugang.</p>" },
136{ "Error","Fehler" }, 136{ "Error","Fehler" },
137{ "Configure NNTP","Konfiguriere News" }, 137{ "Configure NNTP","Konfiguriere News" },
138{ "Port","Port" }, 138{ "Port","Port" },
139{ "Server","Server" }, 139{ "Server","Server" },
140{ "Use SSL","Benutze SSL" }, 140{ "Use SSL","Benutze SSL" },
141{ "User","Benutzer" }, 141{ "User","Benutzer" },
142{ "Password","Passwort" }, 142{ "Password","Passwort" },
143{ "Use Login","Benutze Login" }, 143{ "Use Login","Benutze Login" },
144{ "Newsgroup","Newsgroup" }, 144{ "Newsgroup","Newsgroup" },
145{ "Get newsgroup list from server","Hole Newsgroup Liste vom Server" }, 145{ "Get newsgroup list from server","Hole Newsgroup Liste vom Server" },
146{ "Filter:","Filter:" }, 146{ "Filter:","Filter:" },
147{ "Show subscribed","Zeige abbonnierte" }, 147{ "Show subscribed","Zeige abbonnierte" },
148{ "Groups","NewsGroups" }, 148{ "Groups","NewsGroups" },
149{ "Configure IMAP","Konfiguriere IMAP" }, 149{ "Configure IMAP","Konfiguriere IMAP" },
150{ "Use secure sockets:","Benutze sichere Verbindung:" }, 150{ "Use secure sockets:","Benutze sichere Verbindung:" },
151{ "ssh $SERVER exec","ssh $SERVER exec" }, 151{ "ssh $SERVER exec","ssh $SERVER exec" },
152{ "Prefix","Prefix" }, 152{ "Prefix","Prefix" },
153{ "Local storage folder:","Lokales Verzeichnis:" }, 153{ "Local storage folder:","Lokales Verzeichnis:" },
154{ "Get only messages smaller","Hole nur Nachrichten kleiner" }, 154{ "Get only messages smaller","Hole nur Nachrichten kleiner" },
155{ "kB","kB" }, 155{ "kB","kB" },
156{ "Leave Messages on Server","Belasse Nachrichten auf dem Server" }, 156{ "Leave Messages on Server","Belasse Nachrichten auf dem Server" },
157{ "Configure POP3","Konfiguriere POP3" }, 157{ "Configure POP3","Konfiguriere POP3" },
158{ "ssh $SERVER exec imapd","ssh $SERVER exec imapd" }, 158{ "ssh $SERVER exec imapd","ssh $SERVER exec imapd" },
159{ "Configure SMTP","Konfiguriere SMTP" }, 159{ "Configure SMTP","Konfiguriere SMTP" },
160{ "Name of the SMTP Server","Name des SMTP Servers" }, 160{ "Name of the SMTP Server","Name des SMTP Servers" },
161{ "Port of the SMTP Server","Port des SMTP Servers" }, 161{ "Port of the SMTP Server","Port des SMTP Servers" },
162{ "Fetching folder list","Hole Verzeichnis Liste" }, 162{ "Fetching folder list","Hole Verzeichnis Liste" },
163{ "Fetch ","Hole " }, 163{ "Fetch ","Hole " },
164{ "Fetching header list","Hole Titel Liste" }, 164{ "Fetching header list","Hole Titel Liste" },
165{ "Mailbox has %1 mails","Mailbox hat %1 Mails" }, 165{ "Mailbox has %1 mails","Mailbox hat %1 Mails" },
166{ "Read this mail","Lies diese Mail" }, 166{ "Read this mail","Lies diese Mail" },
167{ "Move/Copy this mail","Verschiebe/kopiere diese Mail" }, 167{ "Move/Copy this mail","Verschiebe/kopiere diese Mail" },
168{ "Delete this mail","Lösche diese Mail" }, 168{ "Delete this mail","Lösche diese Mail" },
169{ "Move/Copy all selected mail","Verschiebe/kopiere selektierte Mails" }, 169{ "Move/Copy all selected mail","Verschiebe/kopiere selektierte Mails" },
170{ "Delete all selected mails","Lösche alle selektierten Mails" }, 170{ "Delete all selected mails","Lösche alle selektierten Mails" },
171{ "Clear selection","Selektion aufheben" }, 171{ "Clear selection","Selektion aufheben" },
172{ "Reply","Antworten" }, 172{ "Reply","Antworten" },
173{ "Forward","Weiterleiten" }, 173{ "Forward","Weiterleiten" },
174{ "Attachments","Anhang" }, 174{ "Attachments","Anhang" },
175{ "Show Html","Zeige in html" }, 175{ "Show Html","Zeige in html" },
176{ "Description","Beschreibung" }, 176{ "Description","Beschreibung" },
177{ "Filename","Dateiname" }, 177{ "Filename","Dateiname" },
178{ "E-Mail by %1","E-Mail von %1" }, 178{ "E-Mail by %1","E-Mail von %1" },
179{ "Cc","Kopie" }, 179{ "Cc","Kopie" },
180{ "To","An" }, 180{ "To","An" },
181{ "From","Von" }, 181{ "From","Von" },
182{ "<p>Do you really want to delete this mail? <br><br>","<p>Wollen Sie diese Mail wirklich löschen? <br><br>" }, 182{ "<p>Do you really want to delete this mail? <br><br>","<p>Wollen Sie diese Mail wirklich löschen? <br><br>" },
183{ "Mailbox has %1 mail(s)","Mailbox hat %1 Mail(s)" }, 183{ "Mailbox has %1 mail(s)","Mailbox hat %1 Mail(s)" },
184{ "Move/Copie all mails","Verschiebe/kopiere alle Mails" }, 184{ "Move/Copie all mails","Verschiebe/kopiere alle Mails" },
185{ "Delete all mails","Lösche alle Mails" }, 185{ "Delete all mails","Lösche alle Mails" },
186{ "Create new subfolder","Neues Unterverzeichnis" }, 186{ "Create new subfolder","Neues Unterverzeichnis" },
187{ "Delete folder","Lösche Verzeichnis" }, 187{ "Delete folder","Lösche Verzeichnis" },
188{ "Refresh folder list","Aktualisiere Verzeichnis Liste" }, 188{ "Refresh folder list","Aktualisiere Verzeichnis Liste" },
189{ "Create new folder","Neues Verzeichnis" }, 189{ "Create new folder","Neues Verzeichnis" },
190{ "Disconnect","Disconnect" }, 190{ "Disconnect","Disconnect" },
191{ "Set offline","Gehe offline" }, 191{ "Set offline","Gehe offline" },
192{ "Select target box","Wähle Ziel Box" }, 192{ "Select target box","Wähle Ziel Box" },
193{ "<b>Store mail(s) to</b>","<b>Speichere Mail(s) nach</b>" }, 193{ "<b>Store mail(s) to</b>","<b>Speichere Mail(s) nach</b>" },
194{ "Folder:","Verzeichnis:" }, 194{ "Folder:","Verzeichnis:" },
195{ "Account:","Zugang:" }, 195{ "Account:","Zugang:" },
196{ "Prefix will prepend, do not enter","Pfad-Prefix wird vorangestellt" }, 196{ "Prefix will prepend, do not enter","Pfad-Prefix wird vorangestellt" },
197{ "Move mail(s)","Verschiebe Mail(s)" }, 197{ "Move mail(s)","Verschiebe Mail(s)" },
198{ "only mails smaller","nur Mails kleiner" }, 198{ "only mails smaller","nur Mails kleiner" },
199{ " kB"," kB" }, 199{ " kB"," kB" },
200{ " message %1 of %2"," Nachricht %1 von %2" }, 200{ " message %1 of %2"," Nachricht %1 von %2" },
201{ "Copying...","Am Kopieren..." }, 201{ "Copying...","Am Kopieren..." },
202{ "Copy message %1 of %2","Kopiere Nachricht %1 von %2" }, 202{ "Copy message %1 of %2","Kopiere Nachricht %1 von %2" },
203{ "Do you really want to delete\nall selected mails?","Wollen Sie wirklich alle\nselektierten Mails Löschen?" }, 203{ "Do you really want to delete\nall selected mails?","Wollen Sie wirklich alle\nselektierten Mails Löschen?" },
204{ "Delete All Mails","Lösche alle Mails" }, 204{ "Delete All Mails","Lösche alle Mails" },
205{ "Deleting ...","Am Löschen..." }, 205{ "Deleting ...","Am Löschen..." },
206{ "Delete message %1 of %2","Lösche Nachricht %1 von %2" }, 206{ "Delete message %1 of %2","Lösche Nachricht %1 von %2" },
207{ "Compose Message","Verfasse Nachricht" }, 207{ "Compose Message","Verfasse Nachricht" },
208{ "Reply-To","Antwort-An" }, 208{ "Reply-To","Antwort-An" },
209{ "BCC","BCC" }, 209{ "BCC","BCC" },
210{ "Signature","Signatur" }, 210{ "Signature","Signatur" },
211{ "CC","Kopie" }, 211{ "CC","Kopie" },
212{ "Options","Optionen" }, 212{ "Options","Optionen" },
213{ "Delete File","Lösche Datei" }, 213{ "Delete File","Lösche Datei" },
214{ "Add File","Füge Datei hinzu" }, 214{ "Add File","Füge Datei hinzu" },
215{ "Attachment","Anhang" }, 215{ "Attachment","Anhang" },
216{ "send later","sende später" }, 216{ "send later","sende später" },
217{ "use:","via:" }, 217{ "use:","via:" },
218{ "Save","Speichern" }, 218{ "Save","Speichern" },
219{ "Name","Name" }, 219{ "Name","Name" },
220{ "No Receiver spezified","Kein Empfänger angegeben" }, 220{ "No Receiver spezified","Kein Empfänger angegeben" },
221{ "Sending mail","Sende Mail" }, 221{ "Sending mail","Sende Mail" },
222{ "No","Nein" }, 222{ "No","Nein" },
223{ "Yes","Ja" }, 223{ "Yes","Ja" },
224{ "Store message into drafts?\n","Speichere Nachricht in Entwürfe?\n" }, 224{ "Store message into drafts?\n","Speichere Nachricht in Entwürfe?\n" },
225{ "Store message?","Nachricht speichern?" }, 225{ "Store message?","Nachricht speichern?" },
226{ "Select Type","Selektiere Typ" }, 226{ "Select Type","Selektiere Typ" },
227{ "Select Account Type","Wähle Art des Zugangs" }, 227{ "Select Account Type","Wähle Art des Zugangs" },
228{ "IMAP","IMAP (online lesen)" }, 228{ "IMAP","IMAP (online lesen)" },
229{ "POP3","POP3 (holen)" }, 229{ "POP3","POP3 (holen)" },
230{ "SMTP","SMTP (senden)" }, 230{ "SMTP","SMTP (senden)" },
231{ "<p>Do you really want to delete the selected Account?</p>","<p>Möchten Sie wirklich den ausgewählten Account löschen?</p>" }, 231{ "<p>Do you really want to delete the selected Account?</p>","<p>Möchten Sie wirklich den ausgewählten Account löschen?</p>" },
232{ "Question","Eine Frage..." }, 232{ "Question","Eine Frage..." },
233{ "Send this message?","Nachricht wirklich senden?" }, 233{ "Send this message?","Nachricht wirklich senden?" },
234{ "Stop editing message","Stop editing message" }, 234{ "Stop editing message","Stop editing message" },
235{ "Sending mail %1 of %2","Sende Mail %1 von %2" }, 235{ "Sending mail %1 of %2","Sende Mail %1 von %2" },
236{ "%1 of %2 bytes send","%1 von %2 Bytes gesendet" }, 236{ "%1 of %2 bytes send","%1 von %2 Bytes gesendet" },
237{ "Refresh header list","Aktualisiere Titel Liste" }, 237{ "Refresh header list","Aktualisiere Titel Liste" },
238{ "Define a smtp\n account first!\n","Bitte zuerst einen\nSMTP Account anlegen!\n" }, 238{ "Define a smtp\n account first!\n","Bitte zuerst einen\nSMTP Account anlegen!\n" },
239{ "Mail queue flushed","Gespeicherte Mails gesendet!" }, 239{ "Mail queue flushed","Gespeicherte Mails gesendet!" },
240{ "Please create an\nSMTP account first.\nThe SMTP is needed\nfor sending mail.\n","Bitte legen Sie einen\nSMTP Account an.\nDer SMTP Account wird\nfür das Versenden von\nMails benötigt!" }, 240{ "Please create an\nSMTP account first.\nThe SMTP is needed\nfor sending mail.\n","Bitte legen Sie einen\nSMTP Account an.\nDer SMTP Account wird\nfür das Versenden von\nMails benötigt!" },
241{ "","" }, 241{ "Show next mail","Zeige nächste Mail" },
242{ "","" }, 242{ "End of List","Ende der Liste" },
243{ "","" }, 243{ "","" },
244{ "","" }, 244{ "","" },
245{ "","" }, 245{ "","" },
246{ "","" }, 246{ "","" },
247{ "","" }, 247{ "","" },
diff --git a/kmicromail/opiemail.cpp b/kmicromail/opiemail.cpp
index c20c7ce..ec192ea 100644
--- a/kmicromail/opiemail.cpp
+++ b/kmicromail/opiemail.cpp
@@ -1,544 +1,560 @@
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#include "koprefsdialog.h" 4#include "koprefsdialog.h"
5#include <kapplication.h> 5#include <kapplication.h>
6#include <libkdepim/externalapphandler.h> 6#include <libkdepim/externalapphandler.h>
7#include <libkdepim/kpimglobalprefs.h> 7#include <libkdepim/kpimglobalprefs.h>
8#ifdef MINIKDE_KDIALOG_H 8#ifdef MINIKDE_KDIALOG_H
9#undef MINIKDE_KDIALOG_H 9#undef MINIKDE_KDIALOG_H
10#endif 10#endif
11#include "settingsdialog.h" 11#include "settingsdialog.h"
12#include "opiemail.h" 12#include "opiemail.h"
13#include "editaccounts.h" 13#include "editaccounts.h"
14#include "composemail.h" 14#include "composemail.h"
15#include "mailistviewitem.h" 15#include "mailistviewitem.h"
16#include "viewmail.h" 16#include "viewmail.h"
17#include "selectstore.h" 17#include "selectstore.h"
18#include "selectsmtp.h" 18#include "selectsmtp.h"
19#include "accountitem.h" 19#include "accountitem.h"
20#include "klocale.h" 20#include "klocale.h"
21 21
22#include <qmessagebox.h> 22#include <qmessagebox.h>
23#include <qtimer.h> 23#include <qtimer.h>
24#include <qcursor.h> 24#include <qcursor.h>
25#include <qregexp.h> 25#include <qregexp.h>
26#include <qpe/global.h> 26#include <qpe/global.h>
27 27
28#ifdef DESKTOP_VERSION 28#ifdef DESKTOP_VERSION
29#include <qapplication.h> 29#include <qapplication.h>
30#else 30#else
31#include <qpe/qpeapplication.h> 31#include <qpe/qpeapplication.h>
32#endif 32#endif
33#include <libmailwrapper/smtpwrapper.h> 33#include <libmailwrapper/smtpwrapper.h>
34#include <libmailwrapper/mailtypes.h> 34#include <libmailwrapper/mailtypes.h>
35#include <libmailwrapper/abstractmail.h> 35#include <libmailwrapper/abstractmail.h>
36#include "koprefs.h" 36#include "koprefs.h"
37 37
38//using namespace Opie::Core; 38//using namespace Opie::Core;
39 39
40OpieMail::OpieMail( QWidget *parent, const char *name ) 40OpieMail::OpieMail( QWidget *parent, const char *name )
41 : MainWindow( parent, name) //, WStyle_ContextHelp ) 41 : MainWindow( parent, name) //, WStyle_ContextHelp )
42{ 42{
43 settings = new Settings(); 43 settings = new Settings();
44 44
45 setIcon(SmallIcon( "kmicromail" ) ); 45 setIcon(SmallIcon( "kmicromail" ) );
46 folderView->populate( settings->getAccounts() ); 46 folderView->populate( settings->getAccounts() );
47 47
48} 48}
49 49
50OpieMail::~OpieMail() 50OpieMail::~OpieMail()
51{ 51{
52 if (settings) delete settings; 52 if (settings) delete settings;
53} 53}
54 54
55void OpieMail::appMessage(const QCString &msg, const QByteArray &data) 55void OpieMail::appMessage(const QCString &msg, const QByteArray &data)
56{ 56{
57 57
58} 58}
59#include <stdlib.h> 59#include <stdlib.h>
60void OpieMail::message(const QCString &msg, const QByteArray &data) 60void OpieMail::message(const QCString &msg, const QByteArray &data)
61{ 61{
62 // copied from old mail2 62 // copied from old mail2
63 static int ii = 0; 63 static int ii = 0;
64 //qDebug("QCOP CALL ############################# %d ", ii); 64 //qDebug("QCOP CALL ############################# %d ", ii);
65 //QString mess ( msg ); 65 //QString mess ( msg );
66 //qDebug("Message = %s ",mess.latin1()); 66 //qDebug("Message = %s ",mess.latin1());
67 ++ii; 67 ++ii;
68 //qDebug("KM:appMessage %d *%s* %x", ii, msg.data(), this); 68 //qDebug("KM:appMessage %d *%s* %x", ii, msg.data(), this);
69 69
70 mPendingEmail = QString::null; 70 mPendingEmail = QString::null;
71 mPendingName = QString::null; 71 mPendingName = QString::null;
72 if (msg == "writeMail(QString,QString)") 72 if (msg == "writeMail(QString,QString)")
73 { 73 {
74 //qDebug("writeMail(QString,QString) "); 74 //qDebug("writeMail(QString,QString) ");
75 QDataStream stream(data,IO_ReadOnly); 75 QDataStream stream(data,IO_ReadOnly);
76 stream >> mPendingName >> mPendingEmail; 76 stream >> mPendingName >> mPendingEmail;
77 // removing the whitespaces at beginning and end is needed! 77 // removing the whitespaces at beginning and end is needed!
78 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) ); 78 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) );
79 } 79 }
80 else if (msg == "newMail()") 80 else if (msg == "newMail()")
81 { 81 {
82 //qDebug("slotComposeMail() "); 82 //qDebug("slotComposeMail() ");
83 // we cannot call slotComposeMail(); directly, because may be executing a QCOP call 83 // we cannot call slotComposeMail(); directly, because may be executing a QCOP call
84 // and a QCOP call does not like a processevents in his execution 84 // and a QCOP call does not like a processevents in his execution
85 // with the Qtimer we call slotComposeMail() after we reached the main event loop 85 // with the Qtimer we call slotComposeMail() after we reached the main event loop
86 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) ); 86 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) );
87 // slotComposeMail(); 87 // slotComposeMail();
88 } 88 }
89 else if (msg == "newMail(QString)") 89 else if (msg == "newMail(QString)")
90 { 90 {
91 //qDebug(" newMail(QString)"); 91 //qDebug(" newMail(QString)");
92 QDataStream stream(data,IO_ReadOnly); 92 QDataStream stream(data,IO_ReadOnly);
93 stream >> mPendingName; 93 stream >> mPendingName;
94 // the format is 94 // the format is
95 // NAME <EMAIL>:SUBJECT 95 // NAME <EMAIL>:SUBJECT
96 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) ); 96 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) );
97 } else { 97 } else {
98 mPendingData = data; 98 mPendingData = data;
99 mPendingMessage = msg; 99 mPendingMessage = msg;
100 QTimer::singleShot ( 50, this, SLOT(slotExtAppHandler() ) ); 100 QTimer::singleShot ( 50, this, SLOT(slotExtAppHandler() ) );
101 } 101 }
102 102
103 //qDebug("END OpieMail::message "); 103 //qDebug("END OpieMail::message ");
104} 104}
105void OpieMail::slotExtAppHandler() 105void OpieMail::slotExtAppHandler()
106{ 106{
107 ExternalAppHandler::instance()->appMessage ( mPendingMessage, mPendingData ); 107 ExternalAppHandler::instance()->appMessage ( mPendingMessage, mPendingData );
108} 108}
109void OpieMail::slotwriteMail2(const QString& namemail ) 109void OpieMail::slotwriteMail2(const QString& namemail )
110{ 110{
111 //qDebug("OpieMail::slotwriteMail2 "); 111 //qDebug("OpieMail::slotwriteMail2 ");
112 //qApp->processEvents(); 112 //qApp->processEvents();
113 ComposeMail compose( settings, this, 0, true ); 113 ComposeMail compose( settings, this, 0, true );
114 if ( !namemail.isEmpty() ) { 114 if ( !namemail.isEmpty() ) {
115 QString to = namemail; 115 QString to = namemail;
116 if ( namemail.find( " <") > 1 ) { 116 if ( namemail.find( " <") > 1 ) {
117 to = "\"" +to.replace( QRegExp( " <"), "\" <") ; 117 to = "\"" +to.replace( QRegExp( " <"), "\" <") ;
118 } else 118 } else
119 if ( namemail.find( "<") > 1 ) { 119 if ( namemail.find( "<") > 1 ) {
120 to = "\"" +to.replace( QRegExp( "<"), "\" <") ; 120 to = "\"" +to.replace( QRegExp( "<"), "\" <") ;
121 } 121 }
122 int sub = to.find( ">:"); 122 int sub = to.find( ">:");
123 if ( sub > 0 ) { 123 if ( sub > 0 ) {
124 compose.setTo( to.left(sub+1) ); 124 compose.setTo( to.left(sub+1) );
125 compose.setSubject( to.mid(sub+2) ); 125 compose.setSubject( to.mid(sub+2) );
126 } else 126 } else
127 compose.setTo( to ); 127 compose.setTo( to );
128 } 128 }
129 compose.slotAdjustColumns(); 129 compose.slotAdjustColumns();
130#ifndef DESKTOP_VERSION 130#ifndef DESKTOP_VERSION
131 compose.showMaximized(); 131 compose.showMaximized();
132#endif 132#endif
133 compose.exec(); 133 compose.exec();
134 raise(); 134 raise();
135 //qDebug("retttich "); 135 //qDebug("retttich ");
136} 136}
137void OpieMail::slotwriteMail(const QString&name,const QString&email) 137void OpieMail::slotwriteMail(const QString&name,const QString&email)
138{ 138{
139 // qDebug("OpieMail::slotwriteMail "); 139 // qDebug("OpieMail::slotwriteMail ");
140 ComposeMail compose( settings, this, 0, true ); 140 ComposeMail compose( settings, this, 0, true );
141 if (!email.isEmpty()) 141 if (!email.isEmpty())
142 { 142 {
143 if (!name.isEmpty()) 143 if (!name.isEmpty())
144 { 144 {
145 compose.setTo("\"" + name + "\"" + " " + "<"+ email + ">"); 145 compose.setTo("\"" + name + "\"" + " " + "<"+ email + ">");
146 } 146 }
147 else 147 else
148 { 148 {
149 compose.setTo(email); 149 compose.setTo(email);
150 } 150 }
151 } 151 }
152 compose.slotAdjustColumns(); 152 compose.slotAdjustColumns();
153#ifndef DESKTOP_VERSION 153#ifndef DESKTOP_VERSION
154 compose.showMaximized(); 154 compose.showMaximized();
155#endif 155#endif
156 compose.exec(); 156 compose.exec();
157 raise(); 157 raise();
158} 158}
159 159
160void OpieMail::slotComposeMail() 160void OpieMail::slotComposeMail()
161{ 161{
162 if ( mPendingEmail == QString::null && mPendingName == QString::null) 162 if ( mPendingEmail == QString::null && mPendingName == QString::null)
163 slotwriteMail2( QString () ); 163 slotwriteMail2( QString () );
164 else { 164 else {
165 if ( mPendingEmail == QString::null ) 165 if ( mPendingEmail == QString::null )
166 slotwriteMail2( mPendingName ); 166 slotwriteMail2( mPendingName );
167 else 167 else
168 slotwriteMail( mPendingName, mPendingEmail ); 168 slotwriteMail( mPendingName, mPendingEmail );
169 } 169 }
170 //slotwriteMail(0l,0l); 170 //slotwriteMail(0l,0l);
171} 171}
172 172
173void OpieMail::slotSendQueued() 173void OpieMail::slotSendQueued()
174{ 174{
175 SMTPaccount *smtp = 0; 175 SMTPaccount *smtp = 0;
176 176
177 QList<Account> list = settings->getAccounts(); 177 QList<Account> list = settings->getAccounts();
178 QList<SMTPaccount> smtpList; 178 QList<SMTPaccount> smtpList;
179 smtpList.setAutoDelete(false); 179 smtpList.setAutoDelete(false);
180 Account *it; 180 Account *it;
181 for ( it = list.first(); it; it = list.next() ) 181 for ( it = list.first(); it; it = list.next() )
182 { 182 {
183 if ( it->getType() == MAILLIB::A_SMTP ) 183 if ( it->getType() == MAILLIB::A_SMTP )
184 { 184 {
185 smtp = static_cast<SMTPaccount *>(it); 185 smtp = static_cast<SMTPaccount *>(it);
186 smtpList.append(smtp); 186 smtpList.append(smtp);
187 } 187 }
188 } 188 }
189 if (smtpList.count()==0) 189 if (smtpList.count()==0)
190 { 190 {
191 QMessageBox::information(0,i18n("Info"),i18n("Define a smtp account first!\n")); 191 QMessageBox::information(0,i18n("Info"),i18n("Define a smtp account first!\n"));
192 return; 192 return;
193 } 193 }
194 if ( QMessageBox::warning(this, i18n("Sending all mails"), i18n("Do you really want to send\nall queued mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::No ) 194 if ( QMessageBox::warning(this, i18n("Sending all mails"), i18n("Do you really want to send\nall queued mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::No )
195 return; 195 return;
196 if (smtpList.count()==1) 196 if (smtpList.count()==1)
197 { 197 {
198 smtp = smtpList.at(0); 198 smtp = smtpList.at(0);
199 } 199 }
200 else 200 else
201 { 201 {
202 smtp = 0; 202 smtp = 0;
203 selectsmtp selsmtp; 203 selectsmtp selsmtp;
204 selsmtp.setSelectionlist(&smtpList); 204 selsmtp.setSelectionlist(&smtpList);
205#ifndef DESKTOP_VERSION 205#ifndef DESKTOP_VERSION
206 selsmtp.showMaximized(); 206 selsmtp.showMaximized();
207#endif 207#endif
208 if ( selsmtp.exec() == QDialog::Accepted ) 208 if ( selsmtp.exec() == QDialog::Accepted )
209 { 209 {
210 smtp = selsmtp.selected_smtp(); 210 smtp = selsmtp.selected_smtp();
211 } 211 }
212 } 212 }
213 if (smtp) 213 if (smtp)
214 { 214 {
215 215
216 Global::statusMessage("Sending mails...!"); 216 Global::statusMessage("Sending mails...!");
217 SMTPwrapper * wrap = new SMTPwrapper(smtp); 217 SMTPwrapper * wrap = new SMTPwrapper(smtp);
218 if ( wrap->flushOutbox() ) 218 if ( wrap->flushOutbox() )
219 { 219 {
220 Global::statusMessage("Mails sent!"); 220 Global::statusMessage("Mails sent!");
221 } 221 }
222 delete wrap; 222 delete wrap;
223 } 223 }
224 // pending refresh list view, if outgoing is displayed 224 // pending refresh list view, if outgoing is displayed
225} 225}
226 226
227void OpieMail::slotSearchMails() 227void OpieMail::slotSearchMails()
228{ 228{
229 qDebug("OpieMail::slotSearchMails():not implemented "); 229 qDebug("OpieMail::slotSearchMails():not implemented ");
230} 230}
231 231
232void OpieMail::slotEditSettings() 232void OpieMail::slotEditSettings()
233{ 233{
234 234
235 KOPrefsDialog settingsDialog( this, "koprefs", true ); 235 KOPrefsDialog settingsDialog( this, "koprefs", true );
236#ifndef DESKTOP_VERSION 236#ifndef DESKTOP_VERSION
237 settingsDialog.showMaximized(); 237 settingsDialog.showMaximized();
238#endif 238#endif
239 settingsDialog.exec(); 239 settingsDialog.exec();
240 240
241 slotSetCodec( KOPrefs::instance()->mCurrentCodec ); 241 slotSetCodec( KOPrefs::instance()->mCurrentCodec );
242 // KApplication::execDialog(settingsDialog); 242 // KApplication::execDialog(settingsDialog);
243} 243}
244 244
245void OpieMail::slotEditAccounts() 245void OpieMail::slotEditAccounts()
246{ 246{
247 EditAccounts eaDialog( settings, this, 0, true ); 247 EditAccounts eaDialog( settings, this, 0, true );
248 eaDialog.slotAdjustColumns(); 248 eaDialog.slotAdjustColumns();
249#ifndef DESKTOP_VERSION 249#ifndef DESKTOP_VERSION
250 eaDialog.showMaximized(); 250 eaDialog.showMaximized();
251#endif 251#endif
252 eaDialog.exec(); 252 eaDialog.exec();
253 if ( settings ) delete settings; 253 if ( settings ) delete settings;
254 settings = new Settings(); 254 settings = new Settings();
255 255
256 folderView->populate( settings->getAccounts() ); 256 folderView->populate( settings->getAccounts() );
257} 257}
258void OpieMail::replyMail() 258void OpieMail::replyMail()
259{ 259{
260 260
261 QListViewItem*item = mailView->currentItem(); 261 QListViewItem*item = mailView->currentItem();
262 if (!item) return; 262 if (!item) return;
263 RecMailP mail = ((MailListViewItem*)item)->data(); 263 RecMailP mail = ((MailListViewItem*)item)->data();
264 RecBodyP body = folderView->fetchBody(mail); 264 RecBodyP body = folderView->fetchBody(mail);
265 265
266 QString rtext; 266 QString rtext;
267 rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose 267 rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose
268 .arg( mail->getFrom()) 268 .arg( mail->getFrom())
269 .arg( mail->getDate()); 269 .arg( mail->getDate());
270 270
271 QString text = body->Bodytext(); 271 QString text = body->Bodytext();
272 QStringList lines = QStringList::split(QRegExp("\\n"), text); 272 QStringList lines = QStringList::split(QRegExp("\\n"), text);
273 QStringList::Iterator it; 273 QStringList::Iterator it;
274 for (it = lines.begin(); it != lines.end(); it++) 274 for (it = lines.begin(); it != lines.end(); it++)
275 { 275 {
276 rtext += "> " + *it + "\n"; 276 rtext += "> " + *it + "\n";
277 } 277 }
278 rtext += "\n"; 278 rtext += "\n";
279 279
280 QString prefix; 280 QString prefix;
281 if ( mail->getSubject().find(QRegExp("^Re: .*$")) != -1) prefix = ""; 281 if ( mail->getSubject().find(QRegExp("^Re: .*$")) != -1) prefix = "";
282 else prefix = "Re: "; // no i18n on purpose 282 else prefix = "Re: "; // no i18n on purpose
283 283
284 Settings *settings = new Settings(); 284 Settings *settings = new Settings();
285 ComposeMail composer( settings ,this, 0, true); 285 ComposeMail composer( settings ,this, 0, true);
286 if (mail->Replyto().isEmpty()) { 286 if (mail->Replyto().isEmpty()) {
287 composer.setTo( mail->getFrom()); 287 composer.setTo( mail->getFrom());
288 } else { 288 } else {
289 composer.setTo( mail->Replyto()); 289 composer.setTo( mail->Replyto());
290 } 290 }
291 composer.setSubject( prefix + mail->getSubject()); 291 composer.setSubject( prefix + mail->getSubject());
292 composer.setMessage( rtext ); 292 composer.setMessage( rtext );
293 composer.setInReplyTo( mail->Msgid()); 293 composer.setInReplyTo( mail->Msgid());
294 composer.setCharset( body->getCharset() ); 294 composer.setCharset( body->getCharset() );
295 if ( QDialog::Accepted == KApplication::execDialog( &composer ) ) 295 if ( QDialog::Accepted == KApplication::execDialog( &composer ) )
296 { 296 {
297 mail->Wrapper()->answeredMail(mail); 297 mail->Wrapper()->answeredMail(mail);
298 } 298 }
299 delete settings; 299 delete settings;
300 300
301} 301}
302void OpieMail::displayNextMail(ViewMail * vm)
303{
304 QListViewItem*item = mailView->currentItem();
305 if (!item) return;
306 item = item->itemBelow();
307 if (!item) {
308 vm->setCaption(i18n("End of List" ));
309 return;
310 }
311 mailView->setCurrentItem(item);
312 RecMailP mail = ((MailListViewItem*)item)->data();
313 RecBodyP body = folderView->fetchBody(mail);
314 vm->setBody( body );
315 vm->setMail( mail );
316}
302void OpieMail::displayMail() 317void OpieMail::displayMail()
303{ 318{
304 QListViewItem*item = mailView->currentItem(); 319 QListViewItem*item = mailView->currentItem();
305 if (!item) return; 320 if (!item) return;
306 RecMailP mail = ((MailListViewItem*)item)->data(); 321 RecMailP mail = ((MailListViewItem*)item)->data();
307 RecBodyP body = folderView->fetchBody(mail); 322 RecBodyP body = folderView->fetchBody(mail);
308 ViewMail readMail( this,"", Qt::WType_Modal ); 323 ViewMail readMail( this,"", Qt::WType_Modal );
309 readMail.setBody( body ); 324 readMail.setBody( body );
310 readMail.setMail( mail ); 325 readMail.setMail( mail );
311#ifndef DESKTOP_VERSION 326#ifndef DESKTOP_VERSION
312 readMail.showMaximized(); 327 readMail.showMaximized();
313#else 328#else
314 readMail.resize( 640, 480); 329 readMail.resize( 640, 480);
315#endif 330#endif
331 connect( &readMail,SIGNAL( showNextMail(ViewMail *) ), this, SLOT( displayNextMail(ViewMail *) ) );
316 readMail.exec(); 332 readMail.exec();
317 333
318 if ( readMail.deleted ) 334 if ( readMail.deleted )
319 { 335 {
320 folderView->refreshCurrent(); 336 folderView->refreshCurrent();
321 } 337 }
322 else 338 else
323 { 339 {
324 ( (MailListViewItem*)item )->setPixmap( 0, QPixmap() ); 340 ( (MailListViewItem*)item )->setPixmap( 0, QPixmap() );
325 } 341 }
326} 342}
327void OpieMail::slotGetAllMail() 343void OpieMail::slotGetAllMail()
328{ 344{
329 QListViewItem * item = folderView->firstChild(); 345 QListViewItem * item = folderView->firstChild();
330 while ( item ){ 346 while ( item ){
331 ((AccountViewItem *)item)->contextMenuSelected( 101 ); 347 ((AccountViewItem *)item)->contextMenuSelected( 101 );
332 item = item->nextSibling (); 348 item = item->nextSibling ();
333 } 349 }
334} 350}
335void OpieMail::slotGetMail() 351void OpieMail::slotGetMail()
336{ 352{
337 QListViewItem * item = folderView->currentItem(); 353 QListViewItem * item = folderView->currentItem();
338 if ( ! item ) return; 354 if ( ! item ) return;
339 ((AccountViewItem *)item)->contextMenuSelected( 101 ); 355 ((AccountViewItem *)item)->contextMenuSelected( 101 );
340} 356}
341void OpieMail::slotDeleteMail() 357void OpieMail::slotDeleteMail()
342{ 358{
343 if (!mailView->currentItem()) return; 359 if (!mailView->currentItem()) return;
344 RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data(); 360 RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data();
345 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 ) 361 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 )
346 { 362 {
347 mail->Wrapper()->deleteMail( mail ); 363 mail->Wrapper()->deleteMail( mail );
348 folderView->refreshCurrent(); 364 folderView->refreshCurrent();
349 } 365 }
350} 366}
351void OpieMail::slotDeleteAllMail() 367void OpieMail::slotDeleteAllMail()
352{ 368{
353 369
354 QValueList<RecMailP> t; 370 QValueList<RecMailP> t;
355 if ( QMessageBox::warning(this, i18n("Delete All Mails"), i18n("Do you really want to delete\nall selected mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) 371 if ( QMessageBox::warning(this, i18n("Delete All Mails"), i18n("Do you really want to delete\nall selected mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes )
356 { 372 {
357 MailListViewItem* item = (MailListViewItem*)mailView->firstChild (); 373 MailListViewItem* item = (MailListViewItem*)mailView->firstChild ();
358 while ( item ) { 374 while ( item ) {
359 if ( item->isSelected() ) { 375 if ( item->isSelected() ) {
360 t.append( item->data() ); 376 t.append( item->data() );
361 } 377 }
362 item = (MailListViewItem*)item->nextSibling(); 378 item = (MailListViewItem*)item->nextSibling();
363 } 379 }
364 } 380 }
365 else 381 else
366 return; 382 return;
367 if ( t.count() == 0 ) 383 if ( t.count() == 0 )
368 return; 384 return;
369 RecMailP mail = t.first(); 385 RecMailP mail = t.first();
370 mail->Wrapper()->deleteMailList(t); 386 mail->Wrapper()->deleteMailList(t);
371 folderView->refreshCurrent(); 387 folderView->refreshCurrent();
372 388
373 389
374} 390}
375void OpieMail::clearSelection() 391void OpieMail::clearSelection()
376{ 392{
377 mailView->clearSelection(); 393 mailView->clearSelection();
378 394
379} 395}
380 396
381void OpieMail::mailHold(int button, QListViewItem *item,const QPoint&,int ) 397void OpieMail::mailHold(int button, QListViewItem *item,const QPoint&,int )
382{ 398{
383 if (!mailView->currentItem()) return; 399 if (!mailView->currentItem()) return;
384 MAILLIB::ATYPE mailtype = ((MailListViewItem*)mailView->currentItem() )->wrapperType(); 400 MAILLIB::ATYPE mailtype = ((MailListViewItem*)mailView->currentItem() )->wrapperType();
385 /* just the RIGHT button - or hold on pda */ 401 /* just the RIGHT button - or hold on pda */
386 if (button!=2) {return;} 402 if (button!=2) {return;}
387 if (!item) return; 403 if (!item) return;
388 QPopupMenu *m = new QPopupMenu(0); 404 QPopupMenu *m = new QPopupMenu(0);
389 if (m) 405 if (m)
390 { 406 {
391 if (mailtype==MAILLIB::A_NNTP) { 407 if (mailtype==MAILLIB::A_NNTP) {
392 m->insertItem(i18n("Read this posting"),this,SLOT(displayMail())); 408 m->insertItem(i18n("Read this posting"),this,SLOT(displayMail()));
393 m->insertItem(i18n("Copy this posting"),this,SLOT(slotMoveCopyMail())); 409 m->insertItem(i18n("Copy this posting"),this,SLOT(slotMoveCopyMail()));
394 m->insertSeparator(); 410 m->insertSeparator();
395 m->insertItem(i18n("Copy all selected postings"),this,SLOT(slotMoveCopyAllMail())); 411 m->insertItem(i18n("Copy all selected postings"),this,SLOT(slotMoveCopyAllMail()));
396 m->insertItem(i18n("Clear selection"),this,SLOT(clearSelection())); 412 m->insertItem(i18n("Clear selection"),this,SLOT(clearSelection()));
397 } else { 413 } else {
398 if (folderView->currentisDraft()) { 414 if (folderView->currentisDraft()) {
399 m->insertItem(i18n("Edit this mail"),this,SLOT(reEditMail())); 415 m->insertItem(i18n("Edit this mail"),this,SLOT(reEditMail()));
400 } 416 }
401 m->insertItem(i18n("Reply to this mail"),this,SLOT(replyMail())); 417 m->insertItem(i18n("Reply to this mail"),this,SLOT(replyMail()));
402 m->insertSeparator(); 418 m->insertSeparator();
403 m->insertItem(i18n("Read this mail"),this,SLOT(displayMail())); 419 m->insertItem(i18n("Read this mail"),this,SLOT(displayMail()));
404 m->insertItem(i18n("Move/Copy this mail"),this,SLOT(slotMoveCopyMail())); 420 m->insertItem(i18n("Move/Copy this mail"),this,SLOT(slotMoveCopyMail()));
405 m->insertItem(i18n("Delete this mail"),this,SLOT(slotDeleteMail())); 421 m->insertItem(i18n("Delete this mail"),this,SLOT(slotDeleteMail()));
406 m->insertSeparator(); 422 m->insertSeparator();
407 m->insertItem(i18n("Move/Copy all selected mail"),this,SLOT(slotMoveCopyAllMail())); 423 m->insertItem(i18n("Move/Copy all selected mail"),this,SLOT(slotMoveCopyAllMail()));
408 m->insertItem(i18n("Delete all selected mails"),this,SLOT(slotDeleteAllMail())); 424 m->insertItem(i18n("Delete all selected mails"),this,SLOT(slotDeleteAllMail()));
409 m->insertItem(i18n("Clear selection"),this,SLOT(clearSelection())); 425 m->insertItem(i18n("Clear selection"),this,SLOT(clearSelection()));
410 } 426 }
411 m->setFocus(); 427 m->setFocus();
412 m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) ); 428 m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) );
413 delete m; 429 delete m;
414 } 430 }
415} 431}
416 432
417void OpieMail::slotShowFolders( bool show ) 433void OpieMail::slotShowFolders( bool show )
418{ 434{
419 if ( show && folderView->isHidden() ) 435 if ( show && folderView->isHidden() )
420 { 436 {
421 folderView->show(); 437 folderView->show();
422 } 438 }
423 else if ( !show && !folderView->isHidden() ) 439 else if ( !show && !folderView->isHidden() )
424 { 440 {
425 folderView->hide(); 441 folderView->hide();
426 } 442 }
427} 443}
428 444
429void OpieMail::refreshMailView(const QValueList<RecMailP>&list) 445void OpieMail::refreshMailView(const QValueList<RecMailP>&list)
430{ 446{
431 MailListViewItem*item = 0; 447 MailListViewItem*item = 0;
432 mailView->clear(); 448 mailView->clear();
433 449
434 QValueList<RecMailP>::ConstIterator it; 450 QValueList<RecMailP>::ConstIterator it;
435 for (it = list.begin(); it != list.end();++it) 451 for (it = list.begin(); it != list.end();++it)
436 { 452 {
437 item = new MailListViewItem(mailView,item); 453 item = new MailListViewItem(mailView,item);
438 item->storeData((*it)); 454 item->storeData((*it));
439 item->showEntry(); 455 item->showEntry();
440 } 456 }
441 mailView->setSorting ( 4, false ); 457 mailView->setSorting ( 4, false );
442} 458}
443 459
444void OpieMail::mailLeftClicked( QListViewItem *item ) 460void OpieMail::mailLeftClicked( QListViewItem *item )
445{ 461{
446 mailView->clearSelection(); 462 mailView->clearSelection();
447 /* just LEFT button - or tap with stylus on pda */ 463 /* just LEFT button - or tap with stylus on pda */
448 //if (button!=1) return; 464 //if (button!=1) return;
449 if (!item) return; 465 if (!item) return;
450 if (folderView->currentisDraft()) { 466 if (folderView->currentisDraft()) {
451 reEditMail(); 467 reEditMail();
452 } else { 468 } else {
453 displayMail(); 469 displayMail();
454 } 470 }
455} 471}
456 472
457void OpieMail::slotMoveCopyMail() 473void OpieMail::slotMoveCopyMail()
458{ 474{
459 if (!mailView->currentItem()) return; 475 if (!mailView->currentItem()) return;
460 RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data(); 476 RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data();
461 AbstractMail*targetMail = 0; 477 AbstractMail*targetMail = 0;
462 QString targetFolder = ""; 478 QString targetFolder = "";
463 Selectstore sels; 479 Selectstore sels;
464 folderView->setupFolderselect(&sels); 480 folderView->setupFolderselect(&sels);
465 if (!sels.exec()) return; 481 if (!sels.exec()) return;
466 targetMail = sels.currentMail(); 482 targetMail = sels.currentMail();
467 targetFolder = sels.currentFolder(); 483 targetFolder = sels.currentFolder();
468 if ( (mail->Wrapper()==targetMail && mail->getMbox()==targetFolder) || 484 if ( (mail->Wrapper()==targetMail && mail->getMbox()==targetFolder) ||
469 targetFolder.isEmpty()) 485 targetFolder.isEmpty())
470 { 486 {
471 return; 487 return;
472 } 488 }
473 if (sels.newFolder() && !targetMail->createMbox(targetFolder)) 489 if (sels.newFolder() && !targetMail->createMbox(targetFolder))
474 { 490 {
475 QMessageBox::critical(0,i18n("Error creating new Folder"), 491 QMessageBox::critical(0,i18n("Error creating new Folder"),
476 i18n("<center>Error while creating<br>new folder - breaking.</center>")); 492 i18n("<center>Error while creating<br>new folder - breaking.</center>"));
477 return; 493 return;
478 } 494 }
479 sels.hide(); 495 sels.hide();
480 qApp->processEvents(); 496 qApp->processEvents();
481 // qDebug("hiding sels "); 497 // qDebug("hiding sels ");
482 mail->Wrapper()->mvcpMail(mail,targetFolder,targetMail,sels.moveMails()); 498 mail->Wrapper()->mvcpMail(mail,targetFolder,targetMail,sels.moveMails());
483 folderView->refreshCurrent(); 499 folderView->refreshCurrent();
484} 500}
485 501
486void OpieMail::slotMoveCopyAllMail() 502void OpieMail::slotMoveCopyAllMail()
487{ 503{
488 504
489 if (!mailView->currentItem()) return; 505 if (!mailView->currentItem()) return;
490 QValueList<RecMailP> t; 506 QValueList<RecMailP> t;
491 // 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 ) 507 // 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 )
492 { 508 {
493 MailListViewItem* item = (MailListViewItem*)mailView->firstChild (); 509 MailListViewItem* item = (MailListViewItem*)mailView->firstChild ();
494 while ( item ) { 510 while ( item ) {
495 if ( item->isSelected() ) { 511 if ( item->isSelected() ) {
496 t.append( item->data() ); 512 t.append( item->data() );
497 } 513 }
498 item = (MailListViewItem*)item->nextSibling(); 514 item = (MailListViewItem*)item->nextSibling();
499 } 515 }
500 } 516 }
501 // else 517 // else
502 // return; 518 // return;
503 if ( t.count() == 0 ) 519 if ( t.count() == 0 )
504 return; 520 return;
505 RecMailP mail = t.first(); 521 RecMailP mail = t.first();
506 AbstractMail*targetMail = 0; 522 AbstractMail*targetMail = 0;
507 QString targetFolder = ""; 523 QString targetFolder = "";
508 Selectstore sels; 524 Selectstore sels;
509 folderView->setupFolderselect(&sels); 525 folderView->setupFolderselect(&sels);
510 if (!sels.exec()) return; 526 if (!sels.exec()) return;
511 targetMail = sels.currentMail(); 527 targetMail = sels.currentMail();
512 targetFolder = sels.currentFolder(); 528 targetFolder = sels.currentFolder();
513 if ( (mail->Wrapper()==targetMail && mail->getMbox()==targetFolder) || 529 if ( (mail->Wrapper()==targetMail && mail->getMbox()==targetFolder) ||
514 targetFolder.isEmpty()) 530 targetFolder.isEmpty())
515 { 531 {
516 return; 532 return;
517 } 533 }
518 if (sels.newFolder() && !targetMail->createMbox(targetFolder)) 534 if (sels.newFolder() && !targetMail->createMbox(targetFolder))
519 { 535 {
520 QMessageBox::critical(0,i18n("Error creating new Folder"), 536 QMessageBox::critical(0,i18n("Error creating new Folder"),
521 i18n("<center>Error while creating<br>new folder - breaking.</center>")); 537 i18n("<center>Error while creating<br>new folder - breaking.</center>"));
522 return; 538 return;
523 } 539 }
524 sels.hide(); 540 sels.hide();
525 qApp->processEvents(); 541 qApp->processEvents();
526 //qDebug("hiding sels "); 542 //qDebug("hiding sels ");
527 mail->Wrapper()->mvcpMailList(t,targetFolder,targetMail,sels.moveMails()); 543 mail->Wrapper()->mvcpMailList(t,targetFolder,targetMail,sels.moveMails());
528 folderView->refreshCurrent(); 544 folderView->refreshCurrent();
529} 545}
530 546
531void OpieMail::reEditMail() 547void OpieMail::reEditMail()
532{ 548{
533 if (!mailView->currentItem()) return; 549 if (!mailView->currentItem()) return;
534 550
535 ComposeMail compose( settings, this, 0, true ); 551 ComposeMail compose( settings, this, 0, true );
536 compose.reEditMail(((MailListViewItem*)mailView->currentItem() )->data()); 552 compose.reEditMail(((MailListViewItem*)mailView->currentItem() )->data());
537 compose.slotAdjustColumns(); 553 compose.slotAdjustColumns();
538#ifndef DESKTOP_VERSION 554#ifndef DESKTOP_VERSION
539 compose.showMaximized(); 555 compose.showMaximized();
540#else 556#else
541 compose.resize(640,480); 557 compose.resize(640,480);
542#endif 558#endif
543 compose.exec(); 559 compose.exec();
544} 560}
diff --git a/kmicromail/opiemail.h b/kmicromail/opiemail.h
index 44ab1ec..30968a7 100644
--- a/kmicromail/opiemail.h
+++ b/kmicromail/opiemail.h
@@ -1,56 +1,58 @@
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 11
11class OpieMail : public MainWindow 12class OpieMail : public MainWindow
12{ 13{
13 Q_OBJECT 14 Q_OBJECT
14 15
15public: 16public:
16 OpieMail( QWidget *parent = 0, const char *name = 0 ); 17 OpieMail( QWidget *parent = 0, const char *name = 0 );
17 virtual ~OpieMail(); 18 virtual ~OpieMail();
18 static QString appName() { return QString::fromLatin1("kopiemail"); } 19 static QString appName() { return QString::fromLatin1("kopiemail"); }
19 20
20public slots: 21public slots:
21 virtual void slotwriteMail(const QString&name,const QString&email); 22 virtual void slotwriteMail(const QString&name,const QString&email);
22 virtual void slotwriteMail2(const QString&nameemail); 23 virtual void slotwriteMail2(const QString&nameemail);
23 virtual void slotComposeMail(); 24 virtual void slotComposeMail();
24 virtual void slotExtAppHandler(); 25 virtual void slotExtAppHandler();
25 virtual void appMessage(const QCString &msg, const QByteArray &data); 26 virtual void appMessage(const QCString &msg, const QByteArray &data);
26 virtual void message(const QCString &msg, const QByteArray &data); 27 virtual void message(const QCString &msg, const QByteArray &data);
27protected slots: 28protected slots:
29 virtual void displayNextMail(ViewMail * vm);
28 virtual void slotSendQueued(); 30 virtual void slotSendQueued();
29 virtual void slotSearchMails(); 31 virtual void slotSearchMails();
30 virtual void slotEditSettings(); 32 virtual void slotEditSettings();
31 virtual void slotEditAccounts(); 33 virtual void slotEditAccounts();
32 virtual void displayMail(); 34 virtual void displayMail();
33 virtual void replyMail(); 35 virtual void replyMail();
34 virtual void slotDeleteMail(); 36 virtual void slotDeleteMail();
35 virtual void slotGetMail(); 37 virtual void slotGetMail();
36 virtual void slotGetAllMail(); 38 virtual void slotGetAllMail();
37 virtual void slotDeleteAllMail(); 39 virtual void slotDeleteAllMail();
38 virtual void mailHold(int, QListViewItem *,const QPoint&,int); 40 virtual void mailHold(int, QListViewItem *,const QPoint&,int);
39 virtual void slotShowFolders( bool show ); 41 virtual void slotShowFolders( bool show );
40 virtual void refreshMailView(const QValueList<RecMailP>&); 42 virtual void refreshMailView(const QValueList<RecMailP>&);
41 virtual void mailLeftClicked( QListViewItem * ); 43 virtual void mailLeftClicked( QListViewItem * );
42 virtual void slotMoveCopyMail(); 44 virtual void slotMoveCopyMail();
43 virtual void slotMoveCopyAllMail(); 45 virtual void slotMoveCopyAllMail();
44 virtual void reEditMail(); 46 virtual void reEditMail();
45 void clearSelection(); 47 void clearSelection();
46 48
47private: 49private:
48 QString mPendingEmail; 50 QString mPendingEmail;
49 QString mPendingName; 51 QString mPendingName;
50 QByteArray mPendingData; 52 QByteArray mPendingData;
51 QCString mPendingMessage; 53 QCString mPendingMessage;
52 Settings *settings; 54 Settings *settings;
53 55
54}; 56};
55 57
56#endif 58#endif
diff --git a/kmicromail/viewmail.cpp b/kmicromail/viewmail.cpp
index 3bd6f41..60c764c 100644
--- a/kmicromail/viewmail.cpp
+++ b/kmicromail/viewmail.cpp
@@ -1,532 +1,533 @@
1// CHANGED 2004-08-06 Lutz Rogowski 1// CHANGED 2004-08-06 Lutz Rogowski
2 2
3 3
4 4
5#include <kfiledialog.h> 5#include <kfiledialog.h>
6#include "koprefs.h" 6#include "koprefs.h"
7#include <klocale.h> 7#include <klocale.h>
8#include <kglobal.h> 8#include <kglobal.h>
9#include <kapplication.h> 9#include <kapplication.h>
10 10
11#ifdef MINIKDE_KDIALOG_H 11#ifdef MINIKDE_KDIALOG_H
12#undef MINIKDE_KDIALOG_H 12#undef MINIKDE_KDIALOG_H
13#endif 13#endif
14 14
15#include "composemail.h" 15#include "composemail.h"
16#include "viewmail.h" 16#include "viewmail.h"
17 17
18#include <libmailwrapper/settings.h> 18#include <libmailwrapper/settings.h>
19#include <libmailwrapper/abstractmail.h> 19#include <libmailwrapper/abstractmail.h>
20#include <libmailwrapper/mailtypes.h> 20#include <libmailwrapper/mailtypes.h>
21 21
22#include <qdialog.h> 22#include <qdialog.h>
23 23
24#include <qpe/qpeapplication.h> 24#include <qpe/qpeapplication.h>
25 25
26/* QT */ 26/* QT */
27#include <qtextbrowser.h> 27#include <qtextbrowser.h>
28#include <qmessagebox.h> 28#include <qmessagebox.h>
29#include <qtextstream.h> 29#include <qtextstream.h>
30#include <qaction.h> 30#include <qaction.h>
31#include <qpopupmenu.h> 31#include <qpopupmenu.h>
32#include <qfile.h> 32#include <qfile.h>
33#include <qlayout.h> 33#include <qlayout.h>
34 34
35//using namespace Opie::Ui; 35//using namespace Opie::Ui;
36//using namespace Opie::Core; 36//using namespace Opie::Core;
37 37
38AttachItem::AttachItem(QListView * parent,QListViewItem *after, const QString&mime,const QString&desc,const QString&file, 38AttachItem::AttachItem(QListView * parent,QListViewItem *after, const QString&mime,const QString&desc,const QString&file,
39 const QString&fsize,int num,const QValueList<int>&path) 39 const QString&fsize,int num,const QValueList<int>&path)
40 : QListViewItem(parent,after),_partNum(num) 40 : QListViewItem(parent,after),_partNum(num)
41{ 41{
42 _path=path; 42 _path=path;
43 setText(0, mime); 43 setText(0, mime);
44 setText(1, desc); 44 setText(1, desc);
45 setText(2, file); 45 setText(2, file);
46 setText(3, fsize); 46 setText(3, fsize);
47} 47}
48 48
49AttachItem::AttachItem(QListViewItem * parent,QListViewItem *after, const QString&mime,const QString&desc,const QString&file, 49AttachItem::AttachItem(QListViewItem * parent,QListViewItem *after, const QString&mime,const QString&desc,const QString&file,
50 const QString&fsize,int num,const QValueList<int>&path) 50 const QString&fsize,int num,const QValueList<int>&path)
51 : QListViewItem(parent,after),_partNum(num) 51 : QListViewItem(parent,after),_partNum(num)
52{ 52{
53 _path=path; 53 _path=path;
54 setText(0, mime); 54 setText(0, mime);
55 setText(1, desc); 55 setText(1, desc);
56 setText(2, file); 56 setText(2, file);
57 setText(3, fsize); 57 setText(3, fsize);
58} 58}
59 59
60bool AttachItem::isParentof(const QValueList<int>&path) 60bool AttachItem::isParentof(const QValueList<int>&path)
61{ 61{
62 /* if not set, then no parent */ 62 /* if not set, then no parent */
63 if (path.count()==0||_path.count()==0) return false; 63 if (path.count()==0||_path.count()==0) return false;
64 /* the parent must have one digit less then a child */ 64 /* the parent must have one digit less then a child */
65 if (path.count()!=_path.count()+1) return false; 65 if (path.count()!=_path.count()+1) return false;
66 for (unsigned int i=0; i < _path.count();++i) 66 for (unsigned int i=0; i < _path.count();++i)
67 { 67 {
68 if (_path[i]!=path[i]) return false; 68 if (_path[i]!=path[i]) return false;
69 } 69 }
70 return true; 70 return true;
71} 71}
72 72
73AttachItem* ViewMail::searchParent(const QValueList<int>&path) 73AttachItem* ViewMail::searchParent(const QValueList<int>&path)
74{ 74{
75 QListViewItemIterator it( attachments ); 75 QListViewItemIterator it( attachments );
76 for ( ; it.current(); ++it ) 76 for ( ; it.current(); ++it )
77 { 77 {
78 AttachItem*ati = (AttachItem*)it.current(); 78 AttachItem*ati = (AttachItem*)it.current();
79 if (ati->isParentof(path)) return ati; 79 if (ati->isParentof(path)) return ati;
80 } 80 }
81 return 0; 81 return 0;
82} 82}
83 83
84AttachItem* ViewMail::lastChild(AttachItem*parent) 84AttachItem* ViewMail::lastChild(AttachItem*parent)
85{ 85{
86 if (!parent) return 0; 86 if (!parent) return 0;
87 AttachItem* item = (AttachItem*)parent->firstChild(); 87 AttachItem* item = (AttachItem*)parent->firstChild();
88 if (!item) return item; 88 if (!item) return item;
89 AttachItem*temp=0; 89 AttachItem*temp=0;
90 while( (temp=(AttachItem*)item->nextSibling())) 90 while( (temp=(AttachItem*)item->nextSibling()))
91 { 91 {
92 item = temp; 92 item = temp;
93 } 93 }
94 return item; 94 return item;
95} 95}
96 96
97void ViewMail::setBody(const RecBodyP&body ) 97void ViewMail::setBody(const RecBodyP&body )
98{ 98{
99 99
100 m_body = body; 100 m_body = body;
101 m_mail[2] = body->Bodytext(); 101 m_mail[2] = body->Bodytext();
102 // qDebug("********text %s ",m_mail[2].latin1() ); 102 // qDebug("********text %s ",m_mail[2].latin1() );
103 attachbutton->setEnabled(body->Parts().count()>0); 103 attachbutton->setEnabled(body->Parts().count()>0);
104 attachments->setEnabled(body->Parts().count()>0); 104 attachments->setEnabled(body->Parts().count()>0);
105 if (body->Parts().count()==0) 105 if (body->Parts().count()==0)
106 { 106 {
107 return; 107 return;
108 } 108 }
109 AttachItem * curItem=0; 109 AttachItem * curItem=0;
110 AttachItem * parentItem = 0; 110 AttachItem * parentItem = 0;
111 QString type=body->Description()->Type()+"/"+body->Description()->Subtype(); 111 QString type=body->Description()->Type()+"/"+body->Description()->Subtype();
112 QString desc,fsize; 112 QString desc,fsize;
113 double s = body->Description()->Size(); 113 double s = body->Description()->Size();
114 int w; 114 int w;
115 w=0; 115 w=0;
116 116
117 while (s>1024) 117 while (s>1024)
118 { 118 {
119 s/=1024; 119 s/=1024;
120 ++w; 120 ++w;
121 if (w>=2) break; 121 if (w>=2) break;
122 } 122 }
123 123
124 QString q=""; 124 QString q="";
125 switch(w) 125 switch(w)
126 { 126 {
127 case 1: 127 case 1:
128 q="k"; 128 q="k";
129 break; 129 break;
130 case 2: 130 case 2:
131 q="M"; 131 q="M";
132 break; 132 break;
133 default: 133 default:
134 break; 134 break;
135 } 135 }
136 136
137 { 137 {
138 /* I did not found a method to make a CONTENT reset on a QTextStream 138 /* I did not found a method to make a CONTENT reset on a QTextStream
139 so I use this construct that the stream will re-constructed in each 139 so I use this construct that the stream will re-constructed in each
140 loop. To let it work, the textstream is packed into a own area of 140 loop. To let it work, the textstream is packed into a own area of
141 code is it will be destructed after finishing its small job. 141 code is it will be destructed after finishing its small job.
142 */ 142 */
143 QTextOStream o(&fsize); 143 QTextOStream o(&fsize);
144 if (w>0) o.precision(2); else o.precision(0); 144 if (w>0) o.precision(2); else o.precision(0);
145 o.setf(QTextStream::fixed); 145 o.setf(QTextStream::fixed);
146 o << s << " " << q << "Byte"; 146 o << s << " " << q << "Byte";
147 } 147 }
148 148
149 curItem=new AttachItem(attachments,curItem,type,"Mailbody","",fsize,-1,body->Description()->Positionlist()); 149 curItem=new AttachItem(attachments,curItem,type,"Mailbody","",fsize,-1,body->Description()->Positionlist());
150 QString filename = ""; 150 QString filename = "";
151 151
152 for (unsigned int i = 0; i < body->Parts().count();++i) 152 for (unsigned int i = 0; i < body->Parts().count();++i)
153 { 153 {
154 filename = ""; 154 filename = "";
155 type = body->Parts()[i]->Type()+"/"+body->Parts()[i]->Subtype(); 155 type = body->Parts()[i]->Type()+"/"+body->Parts()[i]->Subtype();
156 part_plist_t::ConstIterator it = body->Parts()[i]->Parameters().begin(); 156 part_plist_t::ConstIterator it = body->Parts()[i]->Parameters().begin();
157 for (;it!=body->Parts()[i]->Parameters().end();++it) 157 for (;it!=body->Parts()[i]->Parameters().end();++it)
158 { 158 {
159 if (it.key().lower()=="name") 159 if (it.key().lower()=="name")
160 { 160 {
161 filename=it.data(); 161 filename=it.data();
162 } 162 }
163 } 163 }
164 s = body->Parts()[i]->Size(); 164 s = body->Parts()[i]->Size();
165 w = 0; 165 w = 0;
166 while (s>1024) 166 while (s>1024)
167 { 167 {
168 s/=1024; 168 s/=1024;
169 ++w; 169 ++w;
170 if (w>=2) break; 170 if (w>=2) break;
171 } 171 }
172 switch(w) 172 switch(w)
173 { 173 {
174 case 1: 174 case 1:
175 q="k"; 175 q="k";
176 break; 176 break;
177 case 2: 177 case 2:
178 q="M"; 178 q="M";
179 break; 179 break;
180 default: 180 default:
181 q=""; 181 q="";
182 break; 182 break;
183 } 183 }
184 QTextOStream o(&fsize); 184 QTextOStream o(&fsize);
185 if (w>0) o.precision(2); else o.precision(0); 185 if (w>0) o.precision(2); else o.precision(0);
186 o.setf(QTextStream::fixed); 186 o.setf(QTextStream::fixed);
187 o << s << " " << q << "Byte"; 187 o << s << " " << q << "Byte";
188 desc = body->Parts()[i]->Description(); 188 desc = body->Parts()[i]->Description();
189 parentItem = searchParent(body->Parts()[i]->Positionlist()); 189 parentItem = searchParent(body->Parts()[i]->Positionlist());
190 if (parentItem) 190 if (parentItem)
191 { 191 {
192 AttachItem*temp = lastChild(parentItem); 192 AttachItem*temp = lastChild(parentItem);
193 if (temp) curItem = temp; 193 if (temp) curItem = temp;
194 curItem=new AttachItem(parentItem,curItem,type,desc,filename,fsize,i,body->Parts()[i]->Positionlist()); 194 curItem=new AttachItem(parentItem,curItem,type,desc,filename,fsize,i,body->Parts()[i]->Positionlist());
195 attachments->setRootIsDecorated(true); 195 attachments->setRootIsDecorated(true);
196 curItem = parentItem; 196 curItem = parentItem;
197 } 197 }
198 else 198 else
199 { 199 {
200 curItem=new AttachItem(attachments,curItem,type,desc,filename,fsize,i,body->Parts()[i]->Positionlist()); 200 curItem=new AttachItem(attachments,curItem,type,desc,filename,fsize,i,body->Parts()[i]->Positionlist());
201 } 201 }
202 } 202 }
203} 203}
204 204
205 205
206void ViewMail::slotShowHtml( bool state ) 206void ViewMail::slotShowHtml( bool state )
207{ 207{
208 m_showHtml = state; 208 m_showHtml = state;
209 setText(); 209 setText();
210} 210}
211 211
212void ViewMail::slotItemClicked( QListViewItem * item , const QPoint & point, int ) 212void ViewMail::slotItemClicked( QListViewItem * item , const QPoint & point, int )
213{ 213{
214 if (!item ) 214 if (!item )
215 return; 215 return;
216 216
217 if ( ( ( AttachItem* )item )->Partnumber() == -1 ) 217 if ( ( ( AttachItem* )item )->Partnumber() == -1 )
218 { 218 {
219 setText(); 219 setText();
220 return; 220 return;
221 } 221 }
222 QPopupMenu *menu = new QPopupMenu(); 222 QPopupMenu *menu = new QPopupMenu();
223 int ret=0; 223 int ret=0;
224 224
225 if ( item->text( 0 ).left( 5 ) == "text/" || item->text(0)=="message/rfc822" ) 225 if ( item->text( 0 ).left( 5 ) == "text/" || item->text(0)=="message/rfc822" )
226 { 226 {
227 menu->insertItem( i18n( "Show Text" ), 1 ); 227 menu->insertItem( i18n( "Show Text" ), 1 );
228 } 228 }
229 if (item->text(0).left(6)=="image/") { 229 if (item->text(0).left(6)=="image/") {
230 menu->insertItem(i18n("Display image preview"),2); 230 menu->insertItem(i18n("Display image preview"),2);
231 } 231 }
232 menu->insertItem( i18n( "Save Attachment" ), 0 ); 232 menu->insertItem( i18n( "Save Attachment" ), 0 );
233 menu->insertSeparator(1); 233 menu->insertSeparator(1);
234 234
235 ret = menu->exec( point, 0 ); 235 ret = menu->exec( point, 0 );
236 236
237 switch(ret) 237 switch(ret)
238 { 238 {
239 case 0: 239 case 0:
240 { 240 {
241 //MimeTypes types; 241 //MimeTypes types;
242 //types.insert( "all", "*" ); 242 //types.insert( "all", "*" );
243 QString str = KFileDialog::getSaveFileName( "/", item->text( 2 ), this ); 243 QString str = KFileDialog::getSaveFileName( "/", item->text( 2 ), this );
244 244
245 if( !str.isEmpty() ) 245 if( !str.isEmpty() )
246 { 246 {
247 encodedString*content = m_recMail->Wrapper()->fetchDecodedPart( m_recMail, m_body->Parts()[ ( ( AttachItem* )item )->Partnumber() ] ); 247 encodedString*content = m_recMail->Wrapper()->fetchDecodedPart( m_recMail, m_body->Parts()[ ( ( AttachItem* )item )->Partnumber() ] );
248 if (content) 248 if (content)
249 { 249 {
250 QFile output(str); 250 QFile output(str);
251 output.open(IO_WriteOnly); 251 output.open(IO_WriteOnly);
252 output.writeBlock(content->Content(),content->Length()); 252 output.writeBlock(content->Content(),content->Length());
253 output.close(); 253 output.close();
254 delete content; 254 delete content;
255 } 255 }
256 } 256 }
257 } 257 }
258 break ; 258 break ;
259 259
260 case 2: 260 case 2:
261 { 261 {
262#ifdef DESKTOP_VERSION 262#ifdef DESKTOP_VERSION
263 QString tmpfile = locateLocal( "tmp", "opiemail-image"); 263 QString tmpfile = locateLocal( "tmp", "opiemail-image");
264#else 264#else
265 QString tmpfile = "/tmp/opiemail-image"; 265 QString tmpfile = "/tmp/opiemail-image";
266#endif 266#endif
267 encodedString*content = m_recMail->Wrapper()->fetchDecodedPart( m_recMail, m_body->Parts()[ ( ( AttachItem* )item )->Partnumber() ] ); 267 encodedString*content = m_recMail->Wrapper()->fetchDecodedPart( m_recMail, m_body->Parts()[ ( ( AttachItem* )item )->Partnumber() ] );
268 if (content) { 268 if (content) {
269 QFile output(tmpfile); 269 QFile output(tmpfile);
270 output.open(IO_WriteOnly); 270 output.open(IO_WriteOnly);
271 output.writeBlock(content->Content(),content->Length()); 271 output.writeBlock(content->Content(),content->Length());
272 output.close(); 272 output.close();
273 delete content; 273 delete content;
274 MailImageDlg iview(""); 274 MailImageDlg iview("");
275 iview.setName(tmpfile); 275 iview.setName(tmpfile);
276 KApplication::execDialog(&iview); 276 KApplication::execDialog(&iview);
277 output.remove(); 277 output.remove();
278 } 278 }
279 } 279 }
280 break; 280 break;
281 case 1: 281 case 1:
282 if ( ( ( AttachItem* )item )->Partnumber() == -1 ) 282 if ( ( ( AttachItem* )item )->Partnumber() == -1 )
283 { 283 {
284 setText(); 284 setText();
285 } 285 }
286 else 286 else
287 { 287 {
288 if ( m_recMail->Wrapper() != 0l ) 288 if ( m_recMail->Wrapper() != 0l )
289 { // make sure that there is a wrapper , even after delete or simular actions 289 { // make sure that there is a wrapper , even after delete or simular actions
290 browser->setText( m_recMail->Wrapper()->fetchTextPart( m_recMail, m_body->Parts()[ ( ( AttachItem* )item )->Partnumber() ] ) ); 290 browser->setText( m_recMail->Wrapper()->fetchTextPart( m_recMail, m_body->Parts()[ ( ( AttachItem* )item )->Partnumber() ] ) );
291 } 291 }
292 } 292 }
293 break; 293 break;
294 } 294 }
295 delete menu; 295 delete menu;
296} 296}
297 297
298 298
299void ViewMail::setMail(const RecMailP&mail ) 299void ViewMail::setMail(const RecMailP&mail )
300{ 300{
301 301
302 m_recMail = mail; 302 m_recMail = mail;
303 303
304 m_mail[0] = mail->getFrom(); 304 m_mail[0] = mail->getFrom();
305 m_mail[1] = mail->getSubject(); 305 m_mail[1] = mail->getSubject();
306 m_mail[3] = mail->getDate(); 306 m_mail[3] = mail->getDate();
307 m_mail[4] = mail->Msgid(); 307 m_mail[4] = mail->Msgid();
308 308
309 m_mail2[0] = mail->To(); 309 m_mail2[0] = mail->To();
310 m_mail2[1] = mail->CC(); 310 m_mail2[1] = mail->CC();
311 m_mail2[2] = mail->Bcc(); 311 m_mail2[2] = mail->Bcc();
312 312
313 setText(); 313 setText();
314} 314}
315 315
316 316
317 317
318ViewMail::ViewMail( QWidget *parent, const char *name, WFlags fl) 318ViewMail::ViewMail( QWidget *parent, const char *name, WFlags fl)
319 : ViewMailBase(parent, name, fl), _inLoop(false) 319 : ViewMailBase(parent, name, fl), _inLoop(false)
320{ 320{
321 m_gotBody = false; 321 m_gotBody = false;
322 deleted = false; 322 deleted = false;
323 323
324 connect( reply, SIGNAL(activated()), SLOT(slotReply())); 324 connect( reply, SIGNAL(activated()), SLOT(slotReply()));
325 connect( forward, SIGNAL(activated()), SLOT(slotForward())); 325 connect( forward, SIGNAL(activated()), SLOT(slotForward()));
326 connect( deleteMail, SIGNAL( activated() ), SLOT( slotDeleteMail() ) ); 326 connect( deleteMail, SIGNAL( activated() ), SLOT( slotDeleteMail() ) );
327 connect( showHtml, SIGNAL( toggled(bool) ), SLOT( slotShowHtml(bool) ) ); 327 connect( showHtml, SIGNAL( toggled(bool) ), SLOT( slotShowHtml(bool) ) );
328 connect( closeMail, SIGNAL( activated() ), SLOT( close() ) ); 328 connect( closeMail, SIGNAL( activated() ), SLOT( close() ) );
329 connect( nextMail, SIGNAL( activated() ), SLOT( slotNextMail() ) );
329 330
330 attachments->setEnabled(m_gotBody); 331 attachments->setEnabled(m_gotBody);
331 connect( attachments, SIGNAL( clicked(QListViewItem*,const QPoint&, int) ), SLOT( slotItemClicked(QListViewItem*,const QPoint&, int) ) ); 332 connect( attachments, SIGNAL( clicked(QListViewItem*,const QPoint&, int) ), SLOT( slotItemClicked(QListViewItem*,const QPoint&, int) ) );
332 333
333 readConfig(); 334 readConfig();
334 attachments->setSorting(-1); 335 attachments->setSorting(-1);
335} 336}
336 337
337void ViewMail::readConfig() 338void ViewMail::readConfig()
338{ 339{
339 340
340 setFont ( KOPrefs::instance()->mReadFont ); 341 setFont ( KOPrefs::instance()->mReadFont );
341 m_showHtml = KOPrefs::instance()->mViewAsHtml; 342 m_showHtml = KOPrefs::instance()->mViewAsHtml;
342 showHtml->setOn( m_showHtml ); 343 showHtml->setOn( m_showHtml );
343} 344}
344 345
345void ViewMail::setText() 346void ViewMail::setText()
346{ 347{
347 348
348 QString toString; 349 QString toString;
349 QString ccString; 350 QString ccString;
350 QString bccString; 351 QString bccString;
351 352
352 353
353 toString = m_mail2[0].join(","); 354 toString = m_mail2[0].join(",");
354 ccString = m_mail2[1].join(","); 355 ccString = m_mail2[1].join(",");
355 bccString = m_mail2[2].join(","); 356 bccString = m_mail2[2].join(",");
356 357
357 358
358 setCaption( i18n("E-Mail by %1").arg( m_mail[0] ) ); 359 setCaption( i18n("E-Mail by %1").arg( m_mail[0] ) );
359 360
360 m_mailHtml = "<html><body>" 361 m_mailHtml = "<html><body>"
361 "<table width=\"100%\" border=\"0\"><tr bgcolor=\"#FFDD76\"><td>" 362 "<table width=\"100%\" border=\"0\"><tr bgcolor=\"#FFDD76\"><td>"
362 "<div align=left><b>" + deHtml( m_mail[1] ) + "</b></div>" 363 "<div align=left><b>" + deHtml( m_mail[1] ) + "</b></div>"
363 "</td></tr><tr bgcolor=\"#EEEEE6\"><td>" 364 "</td></tr><tr bgcolor=\"#EEEEE6\"><td>"
364 "<b>" + i18n( "From" ) + ": </b><font color=#6C86C0>" + deHtml( m_mail[0] ) + "</font><br>" 365 "<b>" + i18n( "From" ) + ": </b><font color=#6C86C0>" + deHtml( m_mail[0] ) + "</font><br>"
365 "<b>" + i18n( "To" ) + ": </b><font color=#6C86C0>" + deHtml( toString ) + "</font><br><b>" + 366 "<b>" + i18n( "To" ) + ": </b><font color=#6C86C0>" + deHtml( toString ) + "</font><br><b>" +
366 i18n( "Cc" ) + ": </b>" + deHtml( ccString ) + "<br>" 367 i18n( "Cc" ) + ": </b>" + deHtml( ccString ) + "<br>"
367 "<b>" + i18n( "Date" ) + ": </b> " + m_mail[3] + 368 "<b>" + i18n( "Date" ) + ": </b> " + m_mail[3] +
368 "</td></tr></table><font>"; 369 "</td></tr></table><font>";
369 370
370 if ( !m_showHtml ) 371 if ( !m_showHtml )
371 { 372 {
372 browser->setText( QString( m_mailHtml) + deHtml( m_mail[2] ) + "</font></html>" ); 373 browser->setText( QString( m_mailHtml) + deHtml( m_mail[2] ) + "</font></html>" );
373 } 374 }
374 else 375 else
375 { 376 {
376 browser->setText( QString( m_mailHtml) + m_mail[2] + "</font></html>" ); 377 browser->setText( QString( m_mailHtml) + m_mail[2] + "</font></html>" );
377 } 378 }
378 // remove later in favor of a real handling 379 // remove later in favor of a real handling
379 m_gotBody = true; 380 m_gotBody = true;
380} 381}
381 382
382 383
383ViewMail::~ViewMail() 384ViewMail::~ViewMail()
384{ 385{
385 m_recMail->Wrapper()->cleanMimeCache(); 386 m_recMail->Wrapper()->cleanMimeCache();
386 hide(); 387 hide();
387} 388}
388 389
389void ViewMail::hide() 390void ViewMail::hide()
390{ 391{
391 QWidget::hide(); 392 QWidget::hide();
392 393
393 if (_inLoop) 394 if (_inLoop)
394 { 395 {
395 _inLoop = false; 396 _inLoop = false;
396 qApp->exit_loop(); 397 qApp->exit_loop();
397 398
398 } 399 }
399 400
400} 401}
401 402
402void ViewMail::exec() 403void ViewMail::exec()
403{ 404{
404 show(); 405 show();
405 406
406 if (!_inLoop) 407 if (!_inLoop)
407 { 408 {
408 _inLoop = true; 409 _inLoop = true;
409 qApp->enter_loop(); 410 qApp->enter_loop();
410 } 411 }
411 412
412} 413}
413 414
414QString ViewMail::deHtml(const QString &string) 415QString ViewMail::deHtml(const QString &string)
415{ 416{
416 QString string_ = string; 417 QString string_ = string;
417 string_.replace(QRegExp("&"), "&amp;"); 418 string_.replace(QRegExp("&"), "&amp;");
418 string_.replace(QRegExp("<"), "&lt;"); 419 string_.replace(QRegExp("<"), "&lt;");
419 string_.replace(QRegExp(">"), "&gt;"); 420 string_.replace(QRegExp(">"), "&gt;");
420 string_.replace(QRegExp("\\n"), "<br>"); 421 string_.replace(QRegExp("\\n"), "<br>");
421 return string_; 422 return string_;
422} 423}
423 424
424void ViewMail::slotReply() 425void ViewMail::slotReply()
425{ 426{
426 if (!m_gotBody) 427 if (!m_gotBody)
427 { 428 {
428 QMessageBox::information(this, i18n("Error"), i18n("<p>The mail body is not yet downloaded, so you cannot reply yet."), i18n("Ok")); 429 QMessageBox::information(this, i18n("Error"), i18n("<p>The mail body is not yet downloaded, so you cannot reply yet."), i18n("Ok"));
429 return; 430 return;
430 } 431 }
431 432
432 QString rtext; 433 QString rtext;
433 rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose 434 rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose
434 .arg( m_mail[0] ) 435 .arg( m_mail[0] )
435 .arg( m_mail[3] ); 436 .arg( m_mail[3] );
436 437
437 QString text = m_mail[2]; 438 QString text = m_mail[2];
438 QStringList lines = QStringList::split(QRegExp("\\n"), text); 439 QStringList lines = QStringList::split(QRegExp("\\n"), text);
439 QStringList::Iterator it; 440 QStringList::Iterator it;
440 for (it = lines.begin(); it != lines.end(); it++) 441 for (it = lines.begin(); it != lines.end(); it++)
441 { 442 {
442 rtext += "> " + *it + "\n"; 443 rtext += "> " + *it + "\n";
443 } 444 }
444 rtext += "\n"; 445 rtext += "\n";
445 446
446 QString prefix; 447 QString prefix;
447 if ( m_mail[1].find(QRegExp("^Re: .*$")) != -1) prefix = ""; 448 if ( m_mail[1].find(QRegExp("^Re: .*$")) != -1) prefix = "";
448 else prefix = "Re: "; // no i18n on purpose 449 else prefix = "Re: "; // no i18n on purpose
449 450
450 Settings *settings = new Settings(); 451 Settings *settings = new Settings();
451 ComposeMail composer( settings ,this, 0, true); 452 ComposeMail composer( settings ,this, 0, true);
452 if (m_recMail->Replyto().isEmpty()) { 453 if (m_recMail->Replyto().isEmpty()) {
453 composer.setTo(m_recMail->getFrom()); 454 composer.setTo(m_recMail->getFrom());
454 } else { 455 } else {
455 composer.setTo(m_recMail->Replyto()); 456 composer.setTo(m_recMail->Replyto());
456 } 457 }
457 composer.setSubject( prefix + m_mail[1] ); 458 composer.setSubject( prefix + m_mail[1] );
458 composer.setMessage( rtext ); 459 composer.setMessage( rtext );
459 composer.setInReplyTo(m_recMail->Msgid()); 460 composer.setInReplyTo(m_recMail->Msgid());
460 composer.setCharset( m_body->getCharset() ); 461 composer.setCharset( m_body->getCharset() );
461 462
462 if ( QDialog::Accepted == KApplication::execDialog( &composer ) ) 463 if ( QDialog::Accepted == KApplication::execDialog( &composer ) )
463 { 464 {
464 m_recMail->Wrapper()->answeredMail(m_recMail); 465 m_recMail->Wrapper()->answeredMail(m_recMail);
465 } 466 }
466 delete settings; 467 delete settings;
467} 468}
468 469
469void ViewMail::slotForward() 470void ViewMail::slotForward()
470{ 471{
471 if (!m_gotBody) 472 if (!m_gotBody)
472 { 473 {
473 QMessageBox::information(this, i18n("Error"), i18n("<p>The mail body is not yet downloaded, so you cannot forward yet."), i18n("Ok")); 474 QMessageBox::information(this, i18n("Error"), i18n("<p>The mail body is not yet downloaded, so you cannot forward yet."), i18n("Ok"));
474 return; 475 return;
475 } 476 }
476 477
477 QString ftext; 478 QString ftext;
478 ftext += QString("\n----- Forwarded message from %1 -----\n\n") 479 ftext += QString("\n----- Forwarded message from %1 -----\n\n")
479 .arg( m_mail[0] ); 480 .arg( m_mail[0] );
480 if (!m_mail[3].isNull()) 481 if (!m_mail[3].isNull())
481 ftext += QString("Date: %1\n") 482 ftext += QString("Date: %1\n")
482 .arg( m_mail[3] ); 483 .arg( m_mail[3] );
483 if (!m_mail[0].isNull()) 484 if (!m_mail[0].isNull())
484 ftext += QString("From: %1\n") 485 ftext += QString("From: %1\n")
485 .arg( m_mail[0] ); 486 .arg( m_mail[0] );
486 if (!m_mail[1].isNull()) 487 if (!m_mail[1].isNull())
487 ftext += QString("Subject: %1\n") 488 ftext += QString("Subject: %1\n")
488 .arg( m_mail[1] ); 489 .arg( m_mail[1] );
489 490
490 ftext += QString("\n%1\n") 491 ftext += QString("\n%1\n")
491 .arg( m_mail[2]); 492 .arg( m_mail[2]);
492 493
493 ftext += QString("----- End forwarded message -----\n"); 494 ftext += QString("----- End forwarded message -----\n");
494 495
495 Settings *settings = new Settings(); 496 Settings *settings = new Settings();
496 ComposeMail composer( settings ,this, 0, true); 497 ComposeMail composer( settings ,this, 0, true);
497 composer.setSubject( "Fwd: " + m_mail[1] ); 498 composer.setSubject( "Fwd: " + m_mail[1] );
498 composer.setMessage( ftext ); 499 composer.setMessage( ftext );
499 if ( QDialog::Accepted == KApplication::execDialog( &composer )) 500 if ( QDialog::Accepted == KApplication::execDialog( &composer ))
500 { 501 {
501 } 502 }
502} 503}
503 504
504void ViewMail::slotDeleteMail( ) 505void ViewMail::slotDeleteMail( )
505{ 506{
506 if ( QMessageBox::warning(this, i18n("Delete Mail"), QString( i18n("<p>Do you really want to delete this mail? <br><br>" ) + m_mail[0] + " - " + m_mail[1] ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) 507 if ( QMessageBox::warning(this, i18n("Delete Mail"), QString( i18n("<p>Do you really want to delete this mail? <br><br>" ) + m_mail[0] + " - " + m_mail[1] ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes )
507 { 508 {
508 m_recMail->Wrapper()->deleteMail( m_recMail ); 509 m_recMail->Wrapper()->deleteMail( m_recMail );
509 hide(); 510 hide();
510 deleted = true; 511 deleted = true;
511 } 512 }
512} 513}
513 514
514MailImageDlg::MailImageDlg(const QString&fname,QWidget *parent, const char *name, bool modal, WFlags f) 515MailImageDlg::MailImageDlg(const QString&fname,QWidget *parent, const char *name, bool modal, WFlags f)
515 : QDialog(parent,name,modal) 516 : QDialog(parent,name,modal)
516{ 517{
517 QVBoxLayout*dlglayout = new QVBoxLayout(this); 518 QVBoxLayout*dlglayout = new QVBoxLayout(this);
518 dlglayout->setSpacing(2); 519 dlglayout->setSpacing(2);
519 dlglayout->setMargin(1); 520 dlglayout->setMargin(1);
520 //m_imageview = new Opie::MM::OImageScrollView(this); 521 //m_imageview = new Opie::MM::OImageScrollView(this);
521 //dlglayout->addWidget(m_imageview); 522 //dlglayout->addWidget(m_imageview);
522} 523}
523 524
524MailImageDlg::~MailImageDlg() 525MailImageDlg::~MailImageDlg()
525{ 526{
526} 527}
527 528
528void MailImageDlg::setName(const QString&fname) 529void MailImageDlg::setName(const QString&fname)
529{ 530{
530 qDebug("viewmail.cpp: MailImageDlg::setName Pending"); 531 qDebug("viewmail.cpp: MailImageDlg::setName Pending");
531 // m_imageview->setImage(fname); 532 // m_imageview->setImage(fname);
532} 533}
diff --git a/kmicromail/viewmail.h b/kmicromail/viewmail.h
index 194ac8e..c2c2ce3 100644
--- a/kmicromail/viewmail.h
+++ b/kmicromail/viewmail.h
@@ -1,86 +1,88 @@
1#ifndef VIEWMAIL_H 1#ifndef VIEWMAIL_H
2#define VIEWMAIL_H 2#define VIEWMAIL_H
3 3
4#include "viewmailbase.h" 4#include "viewmailbase.h"
5#include <libmailwrapper/mailtypes.h> 5#include <libmailwrapper/mailtypes.h>
6 6
7#include <qdialog.h> 7#include <qdialog.h>
8 8
9#include <qlistview.h> 9#include <qlistview.h>
10#include <qmap.h> 10#include <qmap.h>
11#include <qstringlist.h> 11#include <qstringlist.h>
12#include <qvaluelist.h> 12#include <qvaluelist.h>
13 13
14//namespace Opie { namespace MM { class OImageScrollView; } } 14//namespace Opie { namespace MM { class OImageScrollView; } }
15 15
16class AttachItem : public QListViewItem 16class AttachItem : public QListViewItem
17{ 17{
18public: 18public:
19 AttachItem(QListView * parent,QListViewItem *after, const QString&mime,const QString&desc,const QString&file, 19 AttachItem(QListView * parent,QListViewItem *after, const QString&mime,const QString&desc,const QString&file,
20 const QString&fsize,int num,const QValueList<int>&path); 20 const QString&fsize,int num,const QValueList<int>&path);
21 AttachItem(QListViewItem * parent,QListViewItem *after, const QString&mime,const QString&desc,const QString&file, 21 AttachItem(QListViewItem * parent,QListViewItem *after, const QString&mime,const QString&desc,const QString&file,
22 const QString&fsize,int num,const QValueList<int>&path); 22 const QString&fsize,int num,const QValueList<int>&path);
23 int Partnumber() { return _partNum; } 23 int Partnumber() { return _partNum; }
24 bool isParentof(const QValueList<int>&path); 24 bool isParentof(const QValueList<int>&path);
25 25
26private: 26private:
27 int _partNum; 27 int _partNum;
28 /* needed for a better display of attachments */ 28 /* needed for a better display of attachments */
29 QValueList<int> _path; 29 QValueList<int> _path;
30}; 30};
31 31
32class ViewMail : public ViewMailBase 32class ViewMail : public ViewMailBase
33{ 33{
34 Q_OBJECT 34 Q_OBJECT
35 35
36public: 36public:
37 ViewMail( QWidget *parent = 0, const char *name = 0, WFlags fl = 0); 37 ViewMail( QWidget *parent = 0, const char *name = 0, WFlags fl = 0);
38 ~ViewMail(); 38 ~ViewMail();
39 39
40 void hide(); 40 void hide();
41 void exec(); 41 void exec();
42 void setMail(const RecMailP&mail ); 42 void setMail(const RecMailP&mail );
43 void setBody(const RecBodyP&body); 43 void setBody(const RecBodyP&body);
44 bool deleted; 44 bool deleted;
45 45 signals:
46 void showNextMail(ViewMail*);
46protected: 47protected:
47 QString deHtml(const QString &string); 48 QString deHtml(const QString &string);
48 AttachItem* searchParent(const QValueList<int>&path); 49 AttachItem* searchParent(const QValueList<int>&path);
49 AttachItem* lastChild(AttachItem*parent); 50 AttachItem* lastChild(AttachItem*parent);
50 51
51protected slots: 52protected slots:
53 void slotNextMail() { emit showNextMail(this); };
52 void slotReply(); 54 void slotReply();
53 void slotForward(); 55 void slotForward();
54 void setText(); 56 void setText();
55 void slotItemClicked( QListViewItem * item , const QPoint & point, int c ); 57 void slotItemClicked( QListViewItem * item , const QPoint & point, int c );
56 void slotDeleteMail( ); 58 void slotDeleteMail( );
57 void slotShowHtml( bool ); 59 void slotShowHtml( bool );
58 60
59private: 61private:
60 void readConfig(); 62 void readConfig();
61 63
62 bool _inLoop; 64 bool _inLoop;
63 QString m_mailHtml; 65 QString m_mailHtml;
64 bool m_gotBody; 66 bool m_gotBody;
65 RecBodyP m_body; 67 RecBodyP m_body;
66 RecMailP m_recMail; 68 RecMailP m_recMail;
67 bool m_showHtml; 69 bool m_showHtml;
68 70
69 // 0 from 1 subject 2 bodytext 3 date 71 // 0 from 1 subject 2 bodytext 3 date
70 QMap <int,QString> m_mail; 72 QMap <int,QString> m_mail;
71 // 0 to 1 cc 2 bcc 73 // 0 to 1 cc 2 bcc
72 QMap <int,QStringList> m_mail2; 74 QMap <int,QStringList> m_mail2;
73}; 75};
74 76
75class MailImageDlg:public QDialog 77class MailImageDlg:public QDialog
76{ 78{
77 Q_OBJECT 79 Q_OBJECT
78public: 80public:
79 MailImageDlg(const QString&,QWidget *parent = 0, const char *name = 0, bool modal = true, WFlags f = 0); 81 MailImageDlg(const QString&,QWidget *parent = 0, const char *name = 0, bool modal = true, WFlags f = 0);
80 ~MailImageDlg(); 82 ~MailImageDlg();
81 void setName(const QString&); 83 void setName(const QString&);
82protected: 84protected:
83 //Opie::MM::OImageScrollView*m_imageview; 85 //Opie::MM::OImageScrollView*m_imageview;
84}; 86};
85 87
86#endif 88#endif
diff --git a/kmicromail/viewmailbase.cpp b/kmicromail/viewmailbase.cpp
index 3d7ed42..c4731a7 100644
--- a/kmicromail/viewmailbase.cpp
+++ b/kmicromail/viewmailbase.cpp
@@ -1,93 +1,104 @@
1// CHANGED 2004-08-06 Lutz Rogowski 1// CHANGED 2004-08-06 Lutz Rogowski
2#include <qtextbrowser.h> 2#include <qtextbrowser.h>
3#include <qlistview.h> 3#include <qlistview.h>
4#include <qaction.h> 4#include <qaction.h>
5#include <qlabel.h> 5#include <qlabel.h>
6#include <qvbox.h> 6#include <qvbox.h>
7 7
8#include <qtoolbar.h> 8#include <qtoolbar.h>
9#include <qmenubar.h> 9#include <qmenubar.h>
10#include <kiconloader.h> 10#include <kiconloader.h>
11//#include <qpe/resource.h> 11//#include <qpe/resource.h>
12#include <klocale.h> 12#include <klocale.h>
13 13
14#include "viewmailbase.h" 14#include "viewmailbase.h"
15//#include "opendiag.h" 15//#include "opendiag.h"
16 16
17ViewMailBase::ViewMailBase(QWidget *parent, const char *name, WFlags fl) 17ViewMailBase::ViewMailBase(QWidget *parent, const char *name, WFlags fl)
18 : QMainWindow(parent, name, fl) 18 : QMainWindow(parent, name, fl)
19{ 19{
20 20
21 setToolBarsMovable(false); 21 setToolBarsMovable(false);
22 22
23 toolbar = new QToolBar(this); 23 toolbar = new QToolBar(this);
24 menubar = new QMenuBar( toolbar ); 24 menubar = new QMenuBar( toolbar );
25 mailmenu = new QPopupMenu( menubar ); 25 mailmenu = new QPopupMenu( menubar );
26 menubar->insertItem( i18n( "Mail" ), mailmenu ); 26 menubar->insertItem( i18n( "Mail" ), mailmenu );
27 27
28 toolbar->setHorizontalStretchable(true); 28 toolbar->setHorizontalStretchable(true);
29 addToolBar(toolbar); 29 addToolBar(toolbar);
30 30
31 reply = new QAction(i18n("Reply"),SmallIcon("reply"), 0, 0, this); 31 reply = new QAction(i18n("Reply"),SmallIcon("reply"), 0, 0, this);
32 reply->addTo(toolbar); 32 reply->addTo(toolbar);
33 reply->addTo(mailmenu); 33 reply->addTo(mailmenu);
34 34
35 forward = new QAction(i18n("Forward"),SmallIcon("forward"), 0, 0, this); 35 forward = new QAction(i18n("Forward"),SmallIcon("forward"), 0, 0, this);
36 forward->addTo(toolbar); 36 forward->addTo(toolbar);
37 forward->addTo(mailmenu); 37 forward->addTo(mailmenu);
38 38
39 attachbutton = new QAction(i18n("Attachments"),SmallIcon("attach"), 0, 0, this, 0, true); 39 attachbutton = new QAction(i18n("Attachments"),SmallIcon("attach"), 0, 0, this, 0, true);
40 attachbutton->addTo(toolbar); 40 attachbutton->addTo(toolbar);
41 attachbutton->addTo(mailmenu); 41 attachbutton->addTo(mailmenu);
42 connect(attachbutton, SIGNAL(toggled(bool)), SLOT(slotChangeAttachview(bool))); 42 connect(attachbutton, SIGNAL(toggled(bool)), SLOT(slotChangeAttachview(bool)));
43 43
44 44
45 showHtml = new QAction( i18n( "Show Html" ), SmallIcon( "html" ), 0, 0, this, 0, true ); 45 showHtml = new QAction( i18n( "Show Html" ), SmallIcon( "html" ), 0, 0, this, 0, true );
46 showHtml->addTo( toolbar ); 46 showHtml->addTo( toolbar );
47 showHtml->addTo( mailmenu ); 47 showHtml->addTo( mailmenu );
48 48
49 deleteMail = new QAction(i18n("Delete Mail"),SmallIcon("trash"), 0, 0, this); 49 deleteMail = new QAction(i18n("Delete Mail"),SmallIcon("trash"), 0, 0, this);
50 deleteMail->addTo(toolbar); 50 deleteMail->addTo(toolbar);
51 deleteMail->addTo(mailmenu); 51 deleteMail->addTo(mailmenu);
52 closeMail = new QAction(i18n("Close"),SmallIcon("exit"), 0, 0, this); 52
53
54
55 nextMail = new QAction(i18n("Show next mail"),SmallIcon("add"), 0, 0, this);
53 QLabel *spacer = new QLabel(toolbar); 56 QLabel *spacer = new QLabel(toolbar);
57 nextMail->addTo(toolbar);
58 nextMail->addTo(mailmenu);
59
60
61
62
63 closeMail = new QAction(i18n("Close"),SmallIcon("exit"), 0, 0, this);
64 //QLabel *spacer = new QLabel(toolbar);
54 spacer->setBackgroundMode(QWidget::PaletteButton); 65 spacer->setBackgroundMode(QWidget::PaletteButton);
55 toolbar->setStretchableWidget(spacer); 66 toolbar->setStretchableWidget(spacer);
56 closeMail->addTo(toolbar); 67 closeMail->addTo(toolbar);
57 closeMail->addTo(mailmenu); 68 closeMail->addTo(mailmenu);
58 QVBox *view = new QVBox(this); 69 QVBox *view = new QVBox(this);
59 setCentralWidget(view); 70 setCentralWidget(view);
60 71
61 attachments = new QListView(view); 72 attachments = new QListView(view);
62 attachments->setMinimumHeight(90); 73 attachments->setMinimumHeight(90);
63 attachments->setMaximumHeight(90); 74 attachments->setMaximumHeight(90);
64 attachments->setAllColumnsShowFocus(true); 75 attachments->setAllColumnsShowFocus(true);
65 attachments->addColumn("Mime Type", 60); 76 attachments->addColumn("Mime Type", 60);
66 attachments->addColumn(i18n("Description"), 100); 77 attachments->addColumn(i18n("Description"), 100);
67 attachments->addColumn(i18n("Filename"), 80); 78 attachments->addColumn(i18n("Filename"), 80);
68 attachments->addColumn(i18n("Size"), 80); 79 attachments->addColumn(i18n("Size"), 80);
69 attachments->setSorting(-1); 80 attachments->setSorting(-1);
70 attachments->hide(); 81 attachments->hide();
71 82
72 browser = new QTextBrowser(view); 83 browser = new QTextBrowser(view);
73 84
74 //openDiag = new OpenDiag(view); 85 //openDiag = new OpenDiag(view);
75 //openDiag->hide(); 86 //openDiag->hide();
76 87
77} 88}
78 89
79void ViewMailBase::slotChangeAttachview(bool state) 90void ViewMailBase::slotChangeAttachview(bool state)
80{ 91{
81 if (state) attachments->show(); 92 if (state) attachments->show();
82 else attachments->hide(); 93 else attachments->hide();
83} 94}
84 95
85void ViewMailBase::keyPressEvent ( QKeyEvent * e ) 96void ViewMailBase::keyPressEvent ( QKeyEvent * e )
86{ 97{
87 if( e->key()==Qt::Key_Escape ) { 98 if( e->key()==Qt::Key_Escape ) {
88 close(); 99 close();
89 e->accept(); 100 e->accept();
90 return; 101 return;
91 } 102 }
92 QWidget::keyPressEvent(e); 103 QWidget::keyPressEvent(e);
93} 104}
diff --git a/kmicromail/viewmailbase.h b/kmicromail/viewmailbase.h
index 1c8948a..c97e9e3 100644
--- a/kmicromail/viewmailbase.h
+++ b/kmicromail/viewmailbase.h
@@ -1,39 +1,39 @@
1// CHANGED 2004-08-06 Lutz Rogowski 1// CHANGED 2004-08-06 Lutz Rogowski
2#ifndef VIEWMAILBASE_H 2#ifndef VIEWMAILBASE_H
3#define VIEWMAILBASE_H 3#define VIEWMAILBASE_H
4 4
5#include <qmainwindow.h> 5#include <qmainwindow.h>
6 6
7class QAction; 7class QAction;
8class OpenDiag; 8class OpenDiag;
9class QListView; 9class QListView;
10class QToolBar; 10class QToolBar;
11class QTextBrowser; 11class QTextBrowser;
12class QMenuBar; 12class QMenuBar;
13class QPopupMenu; 13class QPopupMenu;
14 14
15class ViewMailBase : public QMainWindow 15class ViewMailBase : public QMainWindow
16{ 16{
17 Q_OBJECT 17 Q_OBJECT
18 18
19public: 19public:
20 ViewMailBase(QWidget *parent = 0, const char *name = 0, WFlags fl = 0); 20 ViewMailBase(QWidget *parent = 0, const char *name = 0, WFlags fl = 0);
21 21
22protected: 22protected:
23 QAction *reply, *forward, *attachbutton, *deleteMail, *showHtml, *closeMail; 23 QAction *reply, *forward, *attachbutton, *deleteMail, *showHtml, *closeMail, *nextMail;
24 QListView *attachments; 24 QListView *attachments;
25 QToolBar *toolbar; 25 QToolBar *toolbar;
26 QTextBrowser *browser; 26 QTextBrowser *browser;
27 OpenDiag *openDiag; 27 OpenDiag *openDiag;
28 QMenuBar *menubar; 28 QMenuBar *menubar;
29 QPopupMenu *mailmenu; 29 QPopupMenu *mailmenu;
30 30
31protected slots: 31protected slots:
32 void slotChangeAttachview(bool state); 32 void slotChangeAttachview(bool state);
33 virtual void keyPressEvent ( QKeyEvent * e ); 33 virtual void keyPressEvent ( QKeyEvent * e );
34 34
35 35
36}; 36};
37 37
38#endif 38#endif
39 39