summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-02-24 11:19:48 (UTC)
committer zautrix <zautrix>2005-02-24 11:19:48 (UTC)
commitff8a2f593fae5ffe82f889ab70d32bf02a45f4fb (patch) (unidiff)
treeb3b4c6ee66b7ae39fad43622a2badacdbe9ed4e1
parent66ea8a0023a2a58e7887a41c265f2a7112b6b625 (diff)
downloadkdepimpi-ff8a2f593fae5ffe82f889ab70d32bf02a45f4fb.zip
kdepimpi-ff8a2f593fae5ffe82f889ab70d32bf02a45f4fb.tar.gz
kdepimpi-ff8a2f593fae5ffe82f889ab70d32bf02a45f4fb.tar.bz2
ompi html fixes
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt3
-rw-r--r--kmicromail/viewmail.cpp23
-rw-r--r--kmicromail/viewmail.h2
3 files changed, 25 insertions, 3 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 0596511..86ac9b5 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,395 +1,398 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 2.0.12 ************ 3********** VERSION 2.0.12 ************
4 4
5KO/Pi: 5KO/Pi:
6Fixed a bug in todo start/due date handling for non recurring todos with a start and due date. 6Fixed a bug in todo start/due date handling for non recurring todos with a start and due date.
7Fixed some layout problems in the KO/Pi agenda view when there were many conflicting itmes. 7Fixed some layout problems in the KO/Pi agenda view when there were many conflicting itmes.
8Fixed several problems of the keyboard focus in the desktop versions when opening the search dialog/event viewer. 8Fixed several problems of the keyboard focus in the desktop versions when opening the search dialog/event viewer.
9 9
10Fixed problem in pi-sync mode when wrong password was sent. 10Fixed problem in pi-sync mode when wrong password was sent.
11 11
12OM/Pi:
13Fixed a crash when displaying mails with "Show mail as html" was checked in the config.
14Added a check before displaying the mail if the mail is in html format, if "Show mail as html" is enabled.
12 15
13********** VERSION 2.0.11 ************ 16********** VERSION 2.0.11 ************
14 17
15Fixed some problems in pi-sync mode 18Fixed some problems in pi-sync mode
16(e.g. details of events were not synced properly) 19(e.g. details of events were not synced properly)
17 20
18********** VERSION 2.0.10 ************ 21********** VERSION 2.0.10 ************
19 22
20KO/Pi: 23KO/Pi:
21In the desktop versions the context menu in the search dialog was broken after introducing the What'sThis info for the list view. 24In the desktop versions the context menu in the search dialog was broken after introducing the What'sThis info for the list view.
22This is fixed. 25This is fixed.
23Changed the search dialog a bit to make it more user friendly. 26Changed the search dialog a bit to make it more user friendly.
24(E.g.: Removed message box about "no items found" and set key focus to search line edit after search). 27(E.g.: Removed message box about "no items found" and set key focus to search line edit after search).
25 28
26Added config option to hide the week number in KO/Pi toolbar. 29Added config option to hide the week number in KO/Pi toolbar.
27 30
28********** VERSION 2.0.9 ************ 31********** VERSION 2.0.9 ************
29 32
30Made month view icons for multiday events a bit nicer. 33Made month view icons for multiday events a bit nicer.
31Some minor fixes in KO/Pi 34Some minor fixes in KO/Pi
32(e.g. go to today did not work for new week view properly). 35(e.g. go to today did not work for new week view properly).
33 36
34 37
35********** VERSION 2.0.8 ************ 38********** VERSION 2.0.8 ************
36 39
37Fixed a problem in dependency info in the ipk files for the Zaurus. 40Fixed a problem in dependency info in the ipk files for the Zaurus.
38 41
39Added icon for the stealth new week view and made navigation more user friendly in monthview by adding a prev/next week button to the navigator bar. 42Added icon for the stealth new week view and made navigation more user friendly in monthview by adding a prev/next week button to the navigator bar.
40 43
41Added a "go today" button to the datepicker. 44Added a "go today" button to the datepicker.
42 45
43Added "created" and "last modified" to event/todo viewer (and What'sThis viewer) 46Added "created" and "last modified" to event/todo viewer (and What'sThis viewer)
44and made it configureable to show these values. 47and made it configureable to show these values.
45 48
46Fixed a problem for events (from external iCal files) that do have a duration but no end date. 49Fixed a problem for events (from external iCal files) that do have a duration but no end date.
47 50
48 51
49********** VERSION 2.0.7 ************ 52********** VERSION 2.0.7 ************
50 53
51Added global application font settings 54Added global application font settings
52(for all KDE-Pim/Pi apps) to the general settings. 55(for all KDE-Pim/Pi apps) to the general settings.
53 56
54Fixed a problem in OM/Pi when trying to login to some IMAP servers 57Fixed a problem in OM/Pi when trying to login to some IMAP servers
55(like the IMAP server of Apple: mail.mac.com ) 58(like the IMAP server of Apple: mail.mac.com )
56 59
57Added recurring todos to KO/Pi. 60Added recurring todos to KO/Pi.
58 61
59 62
60********** VERSION 2.0.6 ************ 63********** VERSION 2.0.6 ************
61 64
62Some bugfixes in the pi-sync mode. 65Some bugfixes in the pi-sync mode.
63Added German translation for pi-sync mode. 66Added German translation for pi-sync mode.
64 67
65KO/Pi: 68KO/Pi:
66Made the todolist using alternate background. 69Made the todolist using alternate background.
67 70
68Other minor fixes in KO/Pi. 71Other minor fixes in KO/Pi.
69 72
70 73
71********** VERSION 2.0.5 ************ 74********** VERSION 2.0.5 ************
72 75
73Bugfixes in KO/Pi. 76Bugfixes in KO/Pi.
74 77
75********** VERSION 2.0.4 ************ 78********** VERSION 2.0.4 ************
76 79
77KO/Pi: 80KO/Pi:
78Fixed problem loading translations for summary/location edit boxes in event/todo editor. 81Fixed problem loading translations for summary/location edit boxes in event/todo editor.
79 82
80Added a general "select week number" to the toolbar. 83Added a general "select week number" to the toolbar.
81 84
82Fixed some small problem of the new features introduced in version 2.0.3. 85Fixed some small problem of the new features introduced in version 2.0.3.
83 86
84Made it possible to specify one specific category as category color, 87Made it possible to specify one specific category as category color,
85if more than one categories are selected. 88if more than one categories are selected.
86 89
87Fixed a bug in saving colors for categories with non-ascii characters. 90Fixed a bug in saving colors for categories with non-ascii characters.
88(Like, e.g. German Umlauts). 91(Like, e.g. German Umlauts).
89Propably you have to set your colors again for those categories. 92Propably you have to set your colors again for those categories.
90 93
91 94
92********** VERSION 2.0.3 ************ 95********** VERSION 2.0.3 ************
93 96
94KO/Pi: 97KO/Pi:
95Added feature for changing alarm settings for many items at once: 98Added feature for changing alarm settings for many items at once:
96Open list view (or search dialog), select the desired items and choose in 99Open list view (or search dialog), select the desired items and choose in
97the popup menu: Set alarm for selected... 100the popup menu: Set alarm for selected...
98 101
99Added to the event/todo viewer the option to send an email to 102Added to the event/todo viewer the option to send an email to
100all attendees or all selected (with RSVP) attendees. 103all attendees or all selected (with RSVP) attendees.
101 104
102Made the week-month mode changing in month view faster. 105Made the week-month mode changing in month view faster.
103 106
104Made month view better useable with keyboard. 107Made month view better useable with keyboard.
105Now TAB key jumps to next cell with an event/todo. 108Now TAB key jumps to next cell with an event/todo.
106Scroll in cell with coursor keys, scroll in time (next week) with 109Scroll in cell with coursor keys, scroll in time (next week) with
107Shift/Control + coursorkeys. 110Shift/Control + coursorkeys.
108 111
109Fixed bug that the todo view flat mode was reset after first view update. 112Fixed bug that the todo view flat mode was reset after first view update.
110 113
111If a todo is displayed closed in the todo view, 114If a todo is displayed closed in the todo view,
112it is now displayed in overdue/due today color depending on the subtodos overdue/due today properties. 115it is now displayed in overdue/due today color depending on the subtodos overdue/due today properties.
113 116
114Added info about the numbers of years to the caption (title) information about a birthday event. 117Added info about the numbers of years to the caption (title) information about a birthday event.
115 118
116Made completion date in todo editor editable. 119Made completion date in todo editor editable.
117 120
118Added possibility to save/load templates for journals. 121Added possibility to save/load templates for journals.
119(Which is just a simple "save text to file" or "insert text from file". 122(Which is just a simple "save text to file" or "insert text from file".
120 123
121********** VERSION 2.0.2 ************ 124********** VERSION 2.0.2 ************
122 125
123KO/Pi: 126KO/Pi:
124Fixed the layout problem of the day label buttons 127Fixed the layout problem of the day label buttons
125of the agenda view introduced in version 2.0.1. 128of the agenda view introduced in version 2.0.1.
126 129
127Added WhatsThis support for the todo view and the list view. 130Added WhatsThis support for the todo view and the list view.
128 131
129Added a quite useful feature to the montview. 132Added a quite useful feature to the montview.
130Just click on the week numbers on the left. 133Just click on the week numbers on the left.
131And in the top right corner of month view/agenda view 134And in the top right corner of month view/agenda view
132there is now a "week number quick selector". 135there is now a "week number quick selector".
133(Click on the black triangle). 136(Click on the black triangle).
134 137
135Made the quite difficult timezone change in KO/Pi easy. 138Made the quite difficult timezone change in KO/Pi easy.
136 139
137OM/Pi: 140OM/Pi:
138Fixed too small icons on desktop. 141Fixed too small icons on desktop.
139Fixed non visible icons in mainwindow on Z with fastload enabled. 142Fixed non visible icons in mainwindow on Z with fastload enabled.
140Added signature file setting to smtp account config. 143Added signature file setting to smtp account config.
141And the signature can be edited and saved in the edit mail dialog. 144And the signature can be edited and saved in the edit mail dialog.
142That does mean: 145That does mean:
143Simply edit the signature for the selected smtp account in the 146Simply edit the signature for the selected smtp account in the
144edit new mail dialog and press the "save signature" button there. 147edit new mail dialog and press the "save signature" button there.
145Then the signature is saved to the file specified in the smtp account settings. 148Then the signature is saved to the file specified in the smtp account settings.
146If there is no file specified, it is saved automatically to the file 149If there is no file specified, it is saved automatically to the file
147kdepim/apps/kopiemail/<accountname>.sig. 150kdepim/apps/kopiemail/<accountname>.sig.
148 151
149 152
150 153
151********** VERSION 2.0.1 ************ 154********** VERSION 2.0.1 ************
152 155
153Oooops ... I forgot to test on the Zaurus 5500 ... 156Oooops ... I forgot to test on the Zaurus 5500 ...
154 157
155Fixed many problems of new (english) strings (and german translations) 158Fixed many problems of new (english) strings (and german translations)
156introduced in the latest versions, where the text was not fitting on the 159introduced in the latest versions, where the text was not fitting on the
157240x320 display of the Zaurus 5500. 160240x320 display of the Zaurus 5500.
158 161
159KO/Pi: 162KO/Pi:
160Added a popup menu ( press pen and hold to get popup ) to the agenda view 163Added a popup menu ( press pen and hold to get popup ) to the agenda view
161with many useful items (add event/todo, show next week, two weeks, month, journal). 164with many useful items (add event/todo, show next week, two weeks, month, journal).
162 165
163Added items to the todolist popup menu for: 166Added items to the todolist popup menu for:
164Display all opened, all closed or all todos flat. 167Display all opened, all closed or all todos flat.
165The "flat" view makes is possible to sort all todos after ,e.g., prio or date. 168The "flat" view makes is possible to sort all todos after ,e.g., prio or date.
166Made the reparenting of todos on the desktop possible via Drag&Drop. 169Made the reparenting of todos on the desktop possible via Drag&Drop.
167Fixed several bugs in setting the completed datetime for todos. 170Fixed several bugs in setting the completed datetime for todos.
168Added info about completed datetime of todos to the todo viewer. 171Added info about completed datetime of todos to the todo viewer.
169Now displaying a completed todo (with completed datetime set) in the agenda view 172Now displaying a completed todo (with completed datetime set) in the agenda view
170at the time of the completion. Such that now it is possible to see in the agenda view 173at the time of the completion. Such that now it is possible to see in the agenda view
171when what todo was completed. 174when what todo was completed.
172Fixed behaviour of automatic setting completion of todos with sub-todos/parent todos. 175Fixed behaviour of automatic setting completion of todos with sub-todos/parent todos.
173Now the behaviour is: 176Now the behaviour is:
174Setting a parent to complete sets all (sub)childs to complete. 177Setting a parent to complete sets all (sub)childs to complete.
175Setting a parent to uncomplete does not change the childs. 178Setting a parent to uncomplete does not change the childs.
176Setting a child to uncomplete sets all parent to uncomplete. 179Setting a child to uncomplete sets all parent to uncomplete.
177Setting a child to complete does not change the parents. 180Setting a child to complete does not change the parents.
178 181
179Smart updating and double buffering of the daymatrix. 182Smart updating and double buffering of the daymatrix.
180Showing holidays in the day matrix. 183Showing holidays in the day matrix.
181Many other small performance updates. 184Many other small performance updates.
182 185
183Made day labels in agenda clickable. By clicking a label, the day is displayed in single day mode. 186Made day labels in agenda clickable. By clicking a label, the day is displayed in single day mode.
184 187
185Now the translation file usertranslation.txt is supposed to be in utf8 format. 188Now the translation file usertranslation.txt is supposed to be in utf8 format.
186If you want to translate a language from western europe, just change the germantranslation.txt file. Please read the updated Usertranslation HowTo in KO/Pi Help menu. 189If you want to translate a language from western europe, just change the germantranslation.txt file. Please read the updated Usertranslation HowTo in KO/Pi Help menu.
187 190
188 191
189********** VERSION 2.0.0 ************ 192********** VERSION 2.0.0 ************
190 193
191Stable release 2.0.0! 194Stable release 2.0.0!
192 195
193KO/Pi: 196KO/Pi:
194Fixed problem in edit dialog recreation at startup. 197Fixed problem in edit dialog recreation at startup.
195Made "toggle view*" menu items enabled context sensitive. 198Made "toggle view*" menu items enabled context sensitive.
196Changed agenda size menu to items 1-10. 199Changed agenda size menu to items 1-10.
197Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down. 200Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down.
198Usebility enhancements in the KO/Pi menus. 201Usebility enhancements in the KO/Pi menus.
199Birthday import now adds year to summary. 202Birthday import now adds year to summary.
200What's Next view shows age in years for birthday. 203What's Next view shows age in years for birthday.
201 204
202OM/Pi: 205OM/Pi:
203Added three info lines to display subject, from and to of selected mails. 206Added three info lines to display subject, from and to of selected mails.
204 207
205KA/Pi: 208KA/Pi:
206Fixed jump bar behaviour on Zaurus. 209Fixed jump bar behaviour on Zaurus.
207Now KA/Pi search field supports searching for a range of starting characters. 210Now KA/Pi search field supports searching for a range of starting characters.
208E.g. to search for all contact beginning with b to n, type 211E.g. to search for all contact beginning with b to n, type
209b-n 212b-n
210in the search field. 213in the search field.
211 214
212********** VERSION 1.9.20 ************ 215********** VERSION 1.9.20 ************
213 216
214KO/Pi: 217KO/Pi:
215Added for the "dislplay one day" agenda mode 218Added for the "dislplay one day" agenda mode
216info in the caption and in the day lables: 219info in the caption and in the day lables:
217Now it is displayed, if the selected day is from "day before yesterday" 220Now it is displayed, if the selected day is from "day before yesterday"
218to "day after tomorrow". 221to "day after tomorrow".
219Made it possible to delete a Todo, which has sub-todos. 222Made it possible to delete a Todo, which has sub-todos.
220Fixed two small problems in the todo view. 223Fixed two small problems in the todo view.
221Added missing German translation for filter edit and print dialog. 224Added missing German translation for filter edit and print dialog.
222Made search dialog closeable by cancel key. 225Made search dialog closeable by cancel key.
223 226
224Made it possible to select in the date picker the (ligt grey ) 227Made it possible to select in the date picker the (ligt grey )
225dates of the prev./next month with the mouse. 228dates of the prev./next month with the mouse.
226 229
227OM/Pi: 230OM/Pi:
228"Delete mail" icon in main window now deletes all selected mails. 231"Delete mail" icon in main window now deletes all selected mails.
229Fixed the problem, that the state flag of imap mails was ignored. 232Fixed the problem, that the state flag of imap mails was ignored.
230Now mails with "FLAG_SEEN" on the imap server get no icon in the list view 233Now mails with "FLAG_SEEN" on the imap server get no icon in the list view
231to indecate that they are already seen. 234to indecate that they are already seen.
232Fixed the problem that the body of some mails was not displayed in the 235Fixed the problem that the body of some mails was not displayed in the
233mail viewer when fetching them from the imap server directly to read them. 236mail viewer when fetching them from the imap server directly to read them.
234Made it (configurable) possible to show the "To:" field in the list view. 237Made it (configurable) possible to show the "To:" field in the list view.
235Added to the mail viewer the option "View Source" to make it possible to see the raw mail data. 238Added to the mail viewer the option "View Source" to make it possible to see the raw mail data.
236Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the 239Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the
237local storage folder (specified in account settings) of the account of the mail. 240local storage folder (specified in account settings) of the account of the mail.
238Removed some memory leaks in OM/Pi. 241Removed some memory leaks in OM/Pi.
239 242
240 243
241********** VERSION 1.9.19 ************ 244********** VERSION 1.9.19 ************
242 245
243Added a lot of missing translations to KA/Pi, 246Added a lot of missing translations to KA/Pi,
244Added some missing translations to KO/Pi and OM/Pi. 247Added some missing translations to KO/Pi and OM/Pi.
245 248
246Fixed some minor problems in KA/Pi + KO/Pi. 249Fixed some minor problems in KA/Pi + KO/Pi.
247 250
248Fixed a crash when closing PwM/Pi. 251Fixed a crash when closing PwM/Pi.
249Added German translation for PwM/Pi. 252Added German translation for PwM/Pi.
250 253
251Made view change and Month View update faster in KO/Pi. 254Made view change and Month View update faster in KO/Pi.
252 255
253 256
254********** VERSION 1.9.18 ************ 257********** VERSION 1.9.18 ************
255 258
256FYI: The VERSION 1.9.17 was a testing release only. 259FYI: The VERSION 1.9.17 was a testing release only.
257Please read the changelog of VERSION 1.9.17 as well. 260Please read the changelog of VERSION 1.9.17 as well.
258 261
259Cleaned up the syncing config dialog. 262Cleaned up the syncing config dialog.
260Added sync config options for date range for events. 263Added sync config options for date range for events.
261Added sync config options for filters on incoming data. 264Added sync config options for filters on incoming data.
262Added sync config options for filters on outgoing data. 265Added sync config options for filters on outgoing data.
263Please read the updated SyncHowTo about the new filter settings. 266Please read the updated SyncHowTo about the new filter settings.
264These filter settings make it now possible to sync with shared 267These filter settings make it now possible to sync with shared
265calendars without writing back private or confidential data 268calendars without writing back private or confidential data
266(via the outgoing filters). 269(via the outgoing filters).
267To sync only with particular parts of a shared calendar, 270To sync only with particular parts of a shared calendar,
268the incoming filter settings can be used. 271the incoming filter settings can be used.
269An example can be found in the SyncHowTo. 272An example can be found in the SyncHowTo.
270Same for shared addressbooks. 273Same for shared addressbooks.
271 274
272Added a setting for the global kdepim data storage. 275Added a setting for the global kdepim data storage.
273Usually the data is stored in (yourhomedir/kdepim). 276Usually the data is stored in (yourhomedir/kdepim).
274Now you can set in the Global config dialog TAB, subTAB "Data storage path" 277Now you can set in the Global config dialog TAB, subTAB "Data storage path"
275a directory where all the kdepim data is stored. 278a directory where all the kdepim data is stored.
276That makes it easy to save all kdepim data on a SD card on the Z, for example. 279That makes it easy to save all kdepim data on a SD card on the Z, for example.
277 280
278KO/Pi: 281KO/Pi:
279The timeedit input has a pulldown list for times. 282The timeedit input has a pulldown list for times.
280If opened, this pulldown list should now has the right time highlighted. 283If opened, this pulldown list should now has the right time highlighted.
281Added the possibility to exclude events/todos/journals in a filter. 284Added the possibility to exclude events/todos/journals in a filter.
282You should exclude journals, if you do not want them to sync with a public calendar. 285You should exclude journals, if you do not want them to sync with a public calendar.
283 286
284KA/Pi: 287KA/Pi:
285Added the possibility to in/exclude public/private/confidential contacts to a filter. 288Added the possibility to in/exclude public/private/confidential contacts to a filter.
286If you have already defined filterrules in KA/Pi you have to adjust them all by setting the "include public/private/confidential" property manually. Sorry for that ... 289If you have already defined filterrules in KA/Pi you have to adjust them all by setting the "include public/private/confidential" property manually. Sorry for that ...
287Added printing of card view and details view on desktop. 290Added printing of card view and details view on desktop.
288Printing of list view is not working... 291Printing of list view is not working...
289Added button for removing pictures in contact editor. 292Added button for removing pictures in contact editor.
290Parsing data fix of KA/Pi version 1.9.17. 293Parsing data fix of KA/Pi version 1.9.17.
291Fixed the "parse name automatically" problem of KA/Pi version 1.9.17. 294Fixed the "parse name automatically" problem of KA/Pi version 1.9.17.
292Fixed some syncing merging problems. 295Fixed some syncing merging problems.
293 296
294 297
295********** VERSION 1.9.17 ************ 298********** VERSION 1.9.17 ************
296 299
297KO/Pi: 300KO/Pi:
298Fixed that tooltips were not updated after moving an item in agenda view. 301Fixed that tooltips were not updated after moving an item in agenda view.
299Fixed a bug in sorting start date for recurring events in list view. 302Fixed a bug in sorting start date for recurring events in list view.
300Changed the left button in todo viewer from "Agenda" to "Set completed". 303Changed the left button in todo viewer from "Agenda" to "Set completed".
301This makes it possible to change a todo in the What's Next View quickly to the completed state without leaving the What's Next View. 304This makes it possible to change a todo in the What's Next View quickly to the completed state without leaving the What's Next View.
302Added more info in the todo viewer: Startdate, parent/sub todos. 305Added more info in the todo viewer: Startdate, parent/sub todos.
303 306
304 307
305KA/Pi: 308KA/Pi:
306All fields search does now actually search all the (possible) fields, 309All fields search does now actually search all the (possible) fields,
307not only those listed in the contact list. 310not only those listed in the contact list.
308Made is possible to inline a picture in a vcard on the Z. 311Made is possible to inline a picture in a vcard on the Z.
309This was only possible on the desktop, now is it possible on the Z as well. 312This was only possible on the desktop, now is it possible on the Z as well.
310Fixed of missing save settings after filter configuration. 313Fixed of missing save settings after filter configuration.
311Made saving of addressbook much faster. 314Made saving of addressbook much faster.
312Fixed extension widget layout problem. 315Fixed extension widget layout problem.
313Fixed saving of default formatted name settings. 316Fixed saving of default formatted name settings.
314Fixed formatted name handling in edit dialog. 317Fixed formatted name handling in edit dialog.
315Added an option for changing formatted names of many contacts 318Added an option for changing formatted names of many contacts
316(menu: File - Change - Set formatted name). 319(menu: File - Change - Set formatted name).
317 320
318QWhatsThis was not working on the Z ( only black rectangle was shown). 321QWhatsThis was not working on the Z ( only black rectangle was shown).
319This is Fixed. 322This is Fixed.
320 323
321KDE-Sync: 324KDE-Sync:
322Now readonly KDE resources are synced as well. 325Now readonly KDE resources are synced as well.
323(They are not changed in KDE itself, of course). 326(They are not changed in KDE itself, of course).
324 327
325 328
326 329
327********** VERSION 1.9.16 ************ 330********** VERSION 1.9.16 ************
328 331
329KO/Pi: 332KO/Pi:
330Fixed search dialog size on Z 6000 (480x640 display). 333Fixed search dialog size on Z 6000 (480x640 display).
331Added setting to hide/show time in agenda items. 334Added setting to hide/show time in agenda items.
332Added setting to hide not running todos in todo view. 335Added setting to hide not running todos in todo view.
333Added columns for start date/time in todo view. 336Added columns for start date/time in todo view.
334Replaced the solid half-hour lines in agenda view by dot lines. 337Replaced the solid half-hour lines in agenda view by dot lines.
335Added possibility of printing the What's Next View on the desktop 338Added possibility of printing the What's Next View on the desktop
336(i.e. Windows and Linux). 339(i.e. Windows and Linux).
337Fixed a crash in KO/Pi when starting KO/Pi with What's Next view. 340Fixed a crash in KO/Pi when starting KO/Pi with What's Next view.
338Added tooltips in month view.(Tooltips only available on desktop) 341Added tooltips in month view.(Tooltips only available on desktop)
339 342
340Fixed a strange problem in KO/Pi alarm applet. 343Fixed a strange problem in KO/Pi alarm applet.
341Did not find the actual problem, 344Did not find the actual problem,
342such that now Qtopia reboots again if deinstalling the alarm applet. 345such that now Qtopia reboots again if deinstalling the alarm applet.
343But the alarm applet should work again. 346But the alarm applet should work again.
344 347
345KA/Pi: 348KA/Pi:
346Fixed the problem, that internal pictures were not saved. 349Fixed the problem, that internal pictures were not saved.
347 350
348Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes. 351Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes.
349 352
350Fixed some minor problems. (Like word wrap in help text windows). 353Fixed some minor problems. (Like word wrap in help text windows).
351 354
352Fixed a compiling problem in microkde/kresources. 355Fixed a compiling problem in microkde/kresources.
353 356
354KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM. 357KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM.
355This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9) 358This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9)
356such that now syncing KO/Pi with Sharp DTM should work on the 359such that now syncing KO/Pi with Sharp DTM should work on the
357Zaurus C 3000 model. 360Zaurus C 3000 model.
358 361
359********** VERSION 1.9.15 ************ 362********** VERSION 1.9.15 ************
360 363
361Usebilty enhancements in KO/Pi: 364Usebilty enhancements in KO/Pi:
362When clicking on the date in a month view cell, the day view is shown. 365When clicking on the date in a month view cell, the day view is shown.
363Old behaviour was, that the "new event" dialog popped up. 366Old behaviour was, that the "new event" dialog popped up.
364 367
365Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu). 368Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu).
366That means, you can restore the latest 369That means, you can restore the latest
367event/todo/journal you have deleted. 370event/todo/journal you have deleted.
368A journal is deleted, if you clear all the text of the journal. 371A journal is deleted, if you clear all the text of the journal.
369 372
370Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14. 373Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14.
371 374
372KA/Pi starting in 480x640 resolution: 375KA/Pi starting in 480x640 resolution:
373Hide the filter action in toolbar 376Hide the filter action in toolbar
374and added icons for undo/delete/redo in toolbar. 377and added icons for undo/delete/redo in toolbar.
375 378
376Change in OM/Pi ViewMail dialog: 379Change in OM/Pi ViewMail dialog:
377When clicking on the "delete" icon the mail is deleted after confirmation as usual. 380When clicking on the "delete" icon the mail is deleted after confirmation as usual.
378But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any). 381But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any).
379 382
380Fixed a crash when deleting mail-accounts in OM/Pi. 383Fixed a crash when deleting mail-accounts in OM/Pi.
381 384
382 385
383********** VERSION 1.9.14 ************ 386********** VERSION 1.9.14 ************
384 387
385Fixed some problems with the dialog sizes when switching 388Fixed some problems with the dialog sizes when switching
386portrait/landscape mode on 640x480 PDA display. 389portrait/landscape mode on 640x480 PDA display.
387 390
388Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi. 391Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi.
389 392
390Fixed an ugly bug in KOpieMail: 393Fixed an ugly bug in KOpieMail:
391KOpieMail was not able to write files (mails) to MSDOS file system, 394KOpieMail was not able to write files (mails) to MSDOS file system,
392like on an usual preformatted SD card. That should work now. 395like on an usual preformatted SD card. That should work now.
393To save your mail data on the Sd card do the following: 396To save your mail data on the Sd card do the following:
394Create a dir on the SD card: 397Create a dir on the SD card:
395mkdir /mnt/card/localmail 398mkdir /mnt/card/localmail
diff --git a/kmicromail/viewmail.cpp b/kmicromail/viewmail.cpp
index 726f540..685b4e4 100644
--- a/kmicromail/viewmail.cpp
+++ b/kmicromail/viewmail.cpp
@@ -1,560 +1,579 @@
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 m_showHtml = KOPrefs::instance()->mViewAsHtml;
103 if ( m_showHtml ) {
104 if ( m_mail[2].find ("<html>",0,false ) > -1 ) {
105 qDebug("html mail ");
106 } else {
107 qDebug("no html mail ");
108 m_showHtml = false;
109 }
110 }
111 showHtml->blockSignals( true );
112 showHtml->setOn( m_showHtml );
113 showHtml->blockSignals( false );
102 // qDebug("********text %s ",m_mail[2].latin1() ); 114 // qDebug("********text %s ",m_mail[2].latin1() );
103 attachbutton->setEnabled(body->Parts().count()>0); 115 attachbutton->setEnabled(body->Parts().count()>0);
104 attachments->setEnabled(body->Parts().count()>0); 116 attachments->setEnabled(body->Parts().count()>0);
105 if (body->Parts().count()==0) 117 if (body->Parts().count()==0)
106 { 118 {
107 return; 119 return;
108 } 120 }
109 AttachItem * curItem=0; 121 AttachItem * curItem=0;
110 AttachItem * parentItem = 0; 122 AttachItem * parentItem = 0;
111 QString type=body->Description()->Type()+"/"+body->Description()->Subtype(); 123 QString type=body->Description()->Type()+"/"+body->Description()->Subtype();
112 QString desc,fsize; 124 QString desc,fsize;
113 double s = body->Description()->Size(); 125 double s = body->Description()->Size();
114 int w; 126 int w;
115 w=0; 127 w=0;
116 128
117 while (s>1024) 129 while (s>1024)
118 { 130 {
119 s/=1024; 131 s/=1024;
120 ++w; 132 ++w;
121 if (w>=2) break; 133 if (w>=2) break;
122 } 134 }
123 135
124 QString q=""; 136 QString q="";
125 switch(w) 137 switch(w)
126 { 138 {
127 case 1: 139 case 1:
128 q="k"; 140 q="k";
129 break; 141 break;
130 case 2: 142 case 2:
131 q="M"; 143 q="M";
132 break; 144 break;
133 default: 145 default:
134 break; 146 break;
135 } 147 }
136 148
137 { 149 {
138 /* I did not found a method to make a CONTENT reset on a QTextStream 150 /* 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 151 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 152 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. 153 code is it will be destructed after finishing its small job.
142 */ 154 */
143 QTextOStream o(&fsize); 155 QTextOStream o(&fsize);
144 if (w>0) o.precision(2); else o.precision(0); 156 if (w>0) o.precision(2); else o.precision(0);
145 o.setf(QTextStream::fixed); 157 o.setf(QTextStream::fixed);
146 o << s << " " << q << "Byte"; 158 o << s << " " << q << "Byte";
147 } 159 }
148 160
149 curItem=new AttachItem(attachments,curItem,type,"Mailbody","",fsize,-1,body->Description()->Positionlist()); 161 curItem=new AttachItem(attachments,curItem,type,"Mailbody","",fsize,-1,body->Description()->Positionlist());
150 QString filename = ""; 162 QString filename = "";
151 163
152 for (unsigned int i = 0; i < body->Parts().count();++i) 164 for (unsigned int i = 0; i < body->Parts().count();++i)
153 { 165 {
154 filename = ""; 166 filename = "";
155 type = body->Parts()[i]->Type()+"/"+body->Parts()[i]->Subtype(); 167 type = body->Parts()[i]->Type()+"/"+body->Parts()[i]->Subtype();
156 part_plist_t::ConstIterator it = body->Parts()[i]->Parameters().begin(); 168 part_plist_t::ConstIterator it = body->Parts()[i]->Parameters().begin();
157 for (;it!=body->Parts()[i]->Parameters().end();++it) 169 for (;it!=body->Parts()[i]->Parameters().end();++it)
158 { 170 {
159 if (it.key().lower()=="name") 171 if (it.key().lower()=="name")
160 { 172 {
161 filename=it.data(); 173 filename=it.data();
162 } 174 }
163 } 175 }
164 s = body->Parts()[i]->Size(); 176 s = body->Parts()[i]->Size();
165 w = 0; 177 w = 0;
166 while (s>1024) 178 while (s>1024)
167 { 179 {
168 s/=1024; 180 s/=1024;
169 ++w; 181 ++w;
170 if (w>=2) break; 182 if (w>=2) break;
171 } 183 }
172 switch(w) 184 switch(w)
173 { 185 {
174 case 1: 186 case 1:
175 q="k"; 187 q="k";
176 break; 188 break;
177 case 2: 189 case 2:
178 q="M"; 190 q="M";
179 break; 191 break;
180 default: 192 default:
181 q=""; 193 q="";
182 break; 194 break;
183 } 195 }
184 QTextOStream o(&fsize); 196 QTextOStream o(&fsize);
185 if (w>0) o.precision(2); else o.precision(0); 197 if (w>0) o.precision(2); else o.precision(0);
186 o.setf(QTextStream::fixed); 198 o.setf(QTextStream::fixed);
187 o << s << " " << q << "Byte"; 199 o << s << " " << q << "Byte";
188 desc = body->Parts()[i]->Description(); 200 desc = body->Parts()[i]->Description();
189 parentItem = searchParent(body->Parts()[i]->Positionlist()); 201 parentItem = searchParent(body->Parts()[i]->Positionlist());
190 if (parentItem) 202 if (parentItem)
191 { 203 {
192 AttachItem*temp = lastChild(parentItem); 204 AttachItem*temp = lastChild(parentItem);
193 if (temp) curItem = temp; 205 if (temp) curItem = temp;
194 curItem=new AttachItem(parentItem,curItem,type,desc,filename,fsize,i,body->Parts()[i]->Positionlist()); 206 curItem=new AttachItem(parentItem,curItem,type,desc,filename,fsize,i,body->Parts()[i]->Positionlist());
195 attachments->setRootIsDecorated(true); 207 attachments->setRootIsDecorated(true);
196 curItem = parentItem; 208 curItem = parentItem;
197 } 209 }
198 else 210 else
199 { 211 {
200 curItem=new AttachItem(attachments,curItem,type,desc,filename,fsize,i,body->Parts()[i]->Positionlist()); 212 curItem=new AttachItem(attachments,curItem,type,desc,filename,fsize,i,body->Parts()[i]->Positionlist());
201 } 213 }
202 } 214 }
203} 215}
204 216
205 217
206void ViewMail::slotViewSource() 218void ViewMail::slotViewSource()
207{ 219{
208 220
209 if ( !sourceOn ) { 221 if ( !sourceOn ) {
210 sourceOn = true; 222 sourceOn = true;
211 viewSource->setText(i18n("View Body Text")); 223 viewSource->setText(i18n("View Body Text"));
212 encodedString*st = 0; 224 encodedString*st = 0;
213 st = m_recMail->Wrapper()->fetchRawBody(m_recMail); 225 st = m_recMail->Wrapper()->fetchRawBody(m_recMail);
214 if ( st ) { 226 if ( st ) {
215 QString source = QString::fromUtf8( st->Content(), st->Length()); 227 QString source = QString::fromUtf8( st->Content(), st->Length());
216 browser->setText( source ); 228 browser->setText( source );
217 delete st; 229 delete st;
218 } 230 }
219 } else 231 } else
220 setText(); 232 setText();
221 233
222 234
223} 235}
224void ViewMail::slotShowHtml( bool state ) 236void ViewMail::slotShowHtml( bool state )
225{ 237{
226 m_showHtml = state; 238 m_showHtml = state;
227 setText(); 239 setText();
228} 240}
229 241
230void ViewMail::slotItemClicked( QListViewItem * item , const QPoint & point, int ) 242void ViewMail::slotItemClicked( QListViewItem * item , const QPoint & point, int )
231{ 243{
232 if (!item ) 244 if (!item )
233 return; 245 return;
234 246
235 if ( ( ( AttachItem* )item )->Partnumber() == -1 ) 247 if ( ( ( AttachItem* )item )->Partnumber() == -1 )
236 { 248 {
237 setText(); 249 setText();
238 return; 250 return;
239 } 251 }
240 QPopupMenu *menu = new QPopupMenu(); 252 QPopupMenu *menu = new QPopupMenu();
241 int ret=0; 253 int ret=0;
242 254
243 if ( item->text( 0 ).left( 5 ) == "text/" || item->text(0)=="message/rfc822" ) 255 if ( item->text( 0 ).left( 5 ) == "text/" || item->text(0)=="message/rfc822" )
244 { 256 {
245 menu->insertItem( i18n( "Show Text" ), 1 ); 257 menu->insertItem( i18n( "Show Text" ), 1 );
246 } 258 }
247 if (item->text(0).left(6)=="image/") { 259 if (item->text(0).left(6)=="image/") {
248 menu->insertItem(i18n("Display image preview"),2); 260 menu->insertItem(i18n("Display image preview"),2);
249 } 261 }
250 menu->insertItem( i18n( "Save Attachment" ), 0 ); 262 menu->insertItem( i18n( "Save Attachment" ), 0 );
251 menu->insertSeparator(1); 263 menu->insertSeparator(1);
252 264
253 ret = menu->exec( point, 0 ); 265 ret = menu->exec( point, 0 );
254 266
255 switch(ret) 267 switch(ret)
256 { 268 {
257 case 0: 269 case 0:
258 { 270 {
259 //MimeTypes types; 271 //MimeTypes types;
260 //types.insert( "all", "*" ); 272 //types.insert( "all", "*" );
261 QString str = KFileDialog::getSaveFileName( "/", item->text( 2 ), this ); 273 QString str = KFileDialog::getSaveFileName( "/", item->text( 2 ), this );
262 274
263 if( !str.isEmpty() ) 275 if( !str.isEmpty() )
264 { 276 {
265 encodedString*content = m_recMail->Wrapper()->fetchDecodedPart( m_recMail, m_body->Parts()[ ( ( AttachItem* )item )->Partnumber() ] ); 277 encodedString*content = m_recMail->Wrapper()->fetchDecodedPart( m_recMail, m_body->Parts()[ ( ( AttachItem* )item )->Partnumber() ] );
266 if (content) 278 if (content)
267 { 279 {
268 QFile output(str); 280 QFile output(str);
269 output.open(IO_WriteOnly); 281 output.open(IO_WriteOnly);
270 output.writeBlock(content->Content(),content->Length()); 282 output.writeBlock(content->Content(),content->Length());
271 output.close(); 283 output.close();
272 delete content; 284 delete content;
273 } 285 }
274 } 286 }
275 } 287 }
276 break ; 288 break ;
277 289
278 case 2: 290 case 2:
279 { 291 {
280#ifdef DESKTOP_VERSION 292#ifdef DESKTOP_VERSION
281 QString tmpfile = locateLocal( "tmp", "opiemail-image"); 293 QString tmpfile = locateLocal( "tmp", "opiemail-image");
282#else 294#else
283 QString tmpfile = "/tmp/opiemail-image"; 295 QString tmpfile = "/tmp/opiemail-image";
284#endif 296#endif
285 encodedString*content = m_recMail->Wrapper()->fetchDecodedPart( m_recMail, m_body->Parts()[ ( ( AttachItem* )item )->Partnumber() ] ); 297 encodedString*content = m_recMail->Wrapper()->fetchDecodedPart( m_recMail, m_body->Parts()[ ( ( AttachItem* )item )->Partnumber() ] );
286 if (content) { 298 if (content) {
287 QFile output(tmpfile); 299 QFile output(tmpfile);
288 output.open(IO_WriteOnly); 300 output.open(IO_WriteOnly);
289 output.writeBlock(content->Content(),content->Length()); 301 output.writeBlock(content->Content(),content->Length());
290 output.close(); 302 output.close();
291 delete content; 303 delete content;
292 MailImageDlg iview(""); 304 MailImageDlg iview("");
293 iview.setName(tmpfile); 305 iview.setName(tmpfile);
294 KApplication::execDialog(&iview); 306 KApplication::execDialog(&iview);
295 output.remove(); 307 output.remove();
296 } 308 }
297 } 309 }
298 break; 310 break;
299 case 1: 311 case 1:
300 if ( ( ( AttachItem* )item )->Partnumber() == -1 ) 312 if ( ( ( AttachItem* )item )->Partnumber() == -1 )
301 { 313 {
302 setText(); 314 setText();
303 } 315 }
304 else 316 else
305 { 317 {
306 if ( m_recMail->Wrapper() != 0l ) 318 if ( m_recMail->Wrapper() != 0l )
307 { // make sure that there is a wrapper , even after delete or simular actions 319 { // make sure that there is a wrapper , even after delete or simular actions
308 browser->setText( m_recMail->Wrapper()->fetchTextPart( m_recMail, m_body->Parts()[ ( ( AttachItem* )item )->Partnumber() ] ) ); 320 browser->setText( m_recMail->Wrapper()->fetchTextPart( m_recMail, m_body->Parts()[ ( ( AttachItem* )item )->Partnumber() ] ) );
309 } 321 }
310 } 322 }
311 break; 323 break;
312 } 324 }
313 delete menu; 325 delete menu;
314} 326}
315 327
316 328
317void ViewMail::setMail(const RecMailP&mail ) 329void ViewMail::setMail(const RecMailP&mail )
318{ 330{
319 331
320 m_recMail = mail; 332 m_recMail = mail;
321 333
322 m_mail[0] = mail->getFrom(); 334 m_mail[0] = mail->getFrom();
323 m_mail[1] = mail->getSubject(); 335 m_mail[1] = mail->getSubject();
324 m_mail[3] = mail->getDate(); 336 m_mail[3] = mail->getDate();
325 m_mail[4] = mail->Msgid(); 337 m_mail[4] = mail->Msgid();
326 338
327 m_mail2[0] = mail->To(); 339 m_mail2[0] = mail->To();
328 m_mail2[1] = mail->CC(); 340 m_mail2[1] = mail->CC();
329 m_mail2[2] = mail->Bcc(); 341 m_mail2[2] = mail->Bcc();
330 342
331 setText(); 343 setText();
332} 344}
333 345
334 346void ViewMail::slotNextMail()
347{
348 nextMail->blockSignals( true );
349 setCaption(i18n("Displaying next mail...please wait!"));
350 qApp->processEvents();
351 emit showNextMail(this);
352 nextMail->blockSignals( false );
353}
335 354
336ViewMail::ViewMail( QWidget *parent, const char *name, WFlags fl) 355ViewMail::ViewMail( QWidget *parent, const char *name, WFlags fl)
337 : ViewMailBase(parent, name, fl), _inLoop(false) 356 : ViewMailBase(parent, name, fl), _inLoop(false)
338{ 357{
339 m_gotBody = false; 358 m_gotBody = false;
340 deleted = false; 359 deleted = false;
341 sourceOn = false; 360 sourceOn = false;
361 readConfig();
342 connect( reply, SIGNAL(activated()), SLOT(slotReply())); 362 connect( reply, SIGNAL(activated()), SLOT(slotReply()));
343 connect( forward, SIGNAL(activated()), SLOT(slotForward())); 363 connect( forward, SIGNAL(activated()), SLOT(slotForward()));
344 connect( deleteMail, SIGNAL( activated() ), SLOT( slotDeleteMail() ) ); 364 connect( deleteMail, SIGNAL( activated() ), SLOT( slotDeleteMail() ) );
345 connect( showHtml, SIGNAL( toggled(bool) ), SLOT( slotShowHtml(bool) ) ); 365 connect( showHtml, SIGNAL( toggled(bool) ), SLOT( slotShowHtml(bool) ) );
346 connect( closeMail, SIGNAL( activated() ), SLOT( close() ) ); 366 connect( closeMail, SIGNAL( activated() ), SLOT( close() ) );
347 connect( nextMail, SIGNAL( activated() ), SLOT( slotNextMail() ) ); 367 connect( nextMail, SIGNAL( activated() ), SLOT( slotNextMail() ) );
348 connect( viewSource, SIGNAL( activated() ), SLOT( slotViewSource() ) ); 368 connect( viewSource, SIGNAL( activated() ), SLOT( slotViewSource() ) );
349 connect( downloadMail, SIGNAL( activated() ), SIGNAL( signalDownloadMail() ) ); 369 connect( downloadMail, SIGNAL( activated() ), SIGNAL( signalDownloadMail() ) );
350 370
351 attachments->setEnabled(m_gotBody); 371 attachments->setEnabled(m_gotBody);
352 connect( attachments, SIGNAL( clicked(QListViewItem*,const QPoint&, int) ), SLOT( slotItemClicked(QListViewItem*,const QPoint&, int) ) ); 372 connect( attachments, SIGNAL( clicked(QListViewItem*,const QPoint&, int) ), SLOT( slotItemClicked(QListViewItem*,const QPoint&, int) ) );
353 373
354 readConfig();
355 attachments->setSorting(-1); 374 attachments->setSorting(-1);
356} 375}
357 376
358void ViewMail::readConfig() 377void ViewMail::readConfig()
359{ 378{
360 379
361 setFont ( KOPrefs::instance()->mReadFont ); 380 setFont ( KOPrefs::instance()->mReadFont );
362 m_showHtml = KOPrefs::instance()->mViewAsHtml; 381 m_showHtml = KOPrefs::instance()->mViewAsHtml;
363 showHtml->setOn( m_showHtml ); 382 showHtml->setOn( m_showHtml );
364} 383}
365 384
366void ViewMail::setText() 385void ViewMail::setText()
367{ 386{
368 387
369 viewSource->setText(i18n("View Source")); 388 viewSource->setText(i18n("View Source"));
370 sourceOn = false; 389 sourceOn = false;
371 QString toString; 390 QString toString;
372 QString ccString; 391 QString ccString;
373 QString bccString; 392 QString bccString;
374 393
375 394
376 toString = m_mail2[0].join(","); 395 toString = m_mail2[0].join(",");
377 ccString = m_mail2[1].join(","); 396 ccString = m_mail2[1].join(",");
378 bccString = m_mail2[2].join(","); 397 bccString = m_mail2[2].join(",");
379 398
380#ifdef DESKTOP_VERSION 399#ifdef DESKTOP_VERSION
381 setCaption( i18n("Size: ")+m_recMail->MsgsizeString()+" - "+i18n("E-Mail by %1").arg( m_mail[0] ) ); 400 setCaption( i18n("Size: ")+m_recMail->MsgsizeString()+" - "+i18n("E-Mail by %1").arg( m_mail[0] ) );
382#else 401#else
383 setCaption( m_recMail->MsgsizeString()+" - "+m_mail[0] ); 402 setCaption( m_recMail->MsgsizeString()+" - "+m_mail[0] );
384#endif 403#endif
385 404
386 m_mailHtml = "<html><body>" 405 m_mailHtml = "<html><body>"
387 "<table width=\"100%\" border=\"0\"><tr bgcolor=\"#FFDD76\"><td>" 406 "<table width=\"100%\" border=\"0\"><tr bgcolor=\"#FFDD76\"><td>"
388 "<div align=left><b>" + deHtml( m_mail[1] ) + "</b></div>" 407 "<div align=left><b>" + deHtml( m_mail[1] ) + "</b></div>"
389 "</td></tr><tr bgcolor=\"#EEEEE6\"><td>" 408 "</td></tr><tr bgcolor=\"#EEEEE6\"><td>"
390 "<b>" + i18n( "From" ) + ": </b><font color=#6C86C0>" + deHtml( m_mail[0] ) + "</font><br>" 409 "<b>" + i18n( "From" ) + ": </b><font color=#6C86C0>" + deHtml( m_mail[0] ) + "</font><br>"
391 "<b>" + i18n( "To" ) + ": </b><font color=#6C86C0>" + deHtml( toString ) + "</font><br><b>" + 410 "<b>" + i18n( "To" ) + ": </b><font color=#6C86C0>" + deHtml( toString ) + "</font><br><b>" +
392 i18n( "Cc" ) + ": </b>" + deHtml( ccString ) + "<br>" 411 i18n( "Cc" ) + ": </b>" + deHtml( ccString ) + "<br>"
393 "<b>" + i18n( "Date" ) + ": </b> " + m_mail[3] + 412 "<b>" + i18n( "Date" ) + ": </b> " + m_mail[3] +
394 "</td></tr></table><font>"; 413 "</td></tr></table><font>";
395 414
396 if ( !m_showHtml ) 415 if ( !m_showHtml )
397 { 416 {
398 browser->setText( QString( m_mailHtml) + deHtml( m_mail[2] ) + "</font></html>" ); 417 browser->setText( QString( m_mailHtml) + deHtml( m_mail[2] ) + "</font></html>" );
399 } 418 }
400 else 419 else
401 { 420 {
402 browser->setText( QString( m_mailHtml) + m_mail[2] + "</font></html>" ); 421 browser->setText( QString( m_mailHtml) + m_mail[2] + "</font></html>" );
403 } 422 }
404 // remove later in favor of a real handling 423 // remove later in favor of a real handling
405 m_gotBody = true; 424 m_gotBody = true;
406} 425}
407 426
408 427
409ViewMail::~ViewMail() 428ViewMail::~ViewMail()
410{ 429{
411 m_recMail->Wrapper()->cleanMimeCache(); 430 m_recMail->Wrapper()->cleanMimeCache();
412 hide(); 431 hide();
413} 432}
414 433
415void ViewMail::hide() 434void ViewMail::hide()
416{ 435{
417 QWidget::hide(); 436 QWidget::hide();
418 437
419 if (_inLoop) 438 if (_inLoop)
420 { 439 {
421 _inLoop = false; 440 _inLoop = false;
422 qApp->exit_loop(); 441 qApp->exit_loop();
423 442
424 } 443 }
425 444
426} 445}
427 446
428void ViewMail::exec() 447void ViewMail::exec()
429{ 448{
430 show(); 449 show();
431 450
432 if (!_inLoop) 451 if (!_inLoop)
433 { 452 {
434 _inLoop = true; 453 _inLoop = true;
435 qApp->enter_loop(); 454 qApp->enter_loop();
436 } 455 }
437 456
438} 457}
439 458
440QString ViewMail::deHtml(const QString &string) 459QString ViewMail::deHtml(const QString &string)
441{ 460{
442 QString string_ = string; 461 QString string_ = string;
443 string_.replace(QRegExp("&"), "&amp;"); 462 string_.replace(QRegExp("&"), "&amp;");
444 string_.replace(QRegExp("<"), "&lt;"); 463 string_.replace(QRegExp("<"), "&lt;");
445 string_.replace(QRegExp(">"), "&gt;"); 464 string_.replace(QRegExp(">"), "&gt;");
446 string_.replace(QRegExp("\\n"), "<br>"); 465 string_.replace(QRegExp("\\n"), "<br>");
447 return string_; 466 return string_;
448} 467}
449 468
450void ViewMail::slotReply() 469void ViewMail::slotReply()
451{ 470{
452 if (!m_gotBody) 471 if (!m_gotBody)
453 { 472 {
454 QMessageBox::information(this, i18n("Error"), i18n("<p>The mail body is not yet downloaded, so you cannot reply yet."), i18n("Ok")); 473 QMessageBox::information(this, i18n("Error"), i18n("<p>The mail body is not yet downloaded, so you cannot reply yet."), i18n("Ok"));
455 return; 474 return;
456 } 475 }
457 476
458 QString rtext; 477 QString rtext;
459 rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose 478 rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose
460 .arg( m_mail[0] ) 479 .arg( m_mail[0] )
461 .arg( m_mail[3] ); 480 .arg( m_mail[3] );
462 481
463 QString text = m_mail[2]; 482 QString text = m_mail[2];
464 QStringList lines = QStringList::split(QRegExp("\\n"), text); 483 QStringList lines = QStringList::split(QRegExp("\\n"), text);
465 QStringList::Iterator it; 484 QStringList::Iterator it;
466 for (it = lines.begin(); it != lines.end(); it++) 485 for (it = lines.begin(); it != lines.end(); it++)
467 { 486 {
468 rtext += "> " + *it + "\n"; 487 rtext += "> " + *it + "\n";
469 } 488 }
470 rtext += "\n"; 489 rtext += "\n";
471 490
472 QString prefix; 491 QString prefix;
473 if ( m_mail[1].find(QRegExp("^Re: .*$")) != -1) prefix = ""; 492 if ( m_mail[1].find(QRegExp("^Re: .*$")) != -1) prefix = "";
474 else prefix = "Re: "; // no i18n on purpose 493 else prefix = "Re: "; // no i18n on purpose
475 494
476 Settings *settings = new Settings(); 495 Settings *settings = new Settings();
477 ComposeMail composer( settings ,this, 0, true); 496 ComposeMail composer( settings ,this, 0, true);
478 if (m_recMail->Replyto().isEmpty()) { 497 if (m_recMail->Replyto().isEmpty()) {
479 composer.setTo(m_recMail->getFrom()); 498 composer.setTo(m_recMail->getFrom());
480 } else { 499 } else {
481 composer.setTo(m_recMail->Replyto()); 500 composer.setTo(m_recMail->Replyto());
482 } 501 }
483 composer.setSubject( prefix + m_mail[1] ); 502 composer.setSubject( prefix + m_mail[1] );
484 composer.setMessage( rtext ); 503 composer.setMessage( rtext );
485 composer.setInReplyTo(m_recMail->Msgid()); 504 composer.setInReplyTo(m_recMail->Msgid());
486 composer.setCharset( m_body->getCharset() ); 505 composer.setCharset( m_body->getCharset() );
487 506
488 if ( QDialog::Accepted == KApplication::execDialog( &composer ) ) 507 if ( QDialog::Accepted == KApplication::execDialog( &composer ) )
489 { 508 {
490 m_recMail->Wrapper()->answeredMail(m_recMail); 509 m_recMail->Wrapper()->answeredMail(m_recMail);
491 } 510 }
492 delete settings; 511 delete settings;
493} 512}
494 513
495void ViewMail::slotForward() 514void ViewMail::slotForward()
496{ 515{
497 if (!m_gotBody) 516 if (!m_gotBody)
498 { 517 {
499 QMessageBox::information(this, i18n("Error"), i18n("<p>The mail body is not yet downloaded, so you cannot forward yet."), i18n("Ok")); 518 QMessageBox::information(this, i18n("Error"), i18n("<p>The mail body is not yet downloaded, so you cannot forward yet."), i18n("Ok"));
500 return; 519 return;
501 } 520 }
502 521
503 QString ftext; 522 QString ftext;
504 ftext += QString("\n----- Forwarded message from %1 -----\n\n") 523 ftext += QString("\n----- Forwarded message from %1 -----\n\n")
505 .arg( m_mail[0] ); 524 .arg( m_mail[0] );
506 if (!m_mail[3].isNull()) 525 if (!m_mail[3].isNull())
507 ftext += QString("Date: %1\n") 526 ftext += QString("Date: %1\n")
508 .arg( m_mail[3] ); 527 .arg( m_mail[3] );
509 if (!m_mail[0].isNull()) 528 if (!m_mail[0].isNull())
510 ftext += QString("From: %1\n") 529 ftext += QString("From: %1\n")
511 .arg( m_mail[0] ); 530 .arg( m_mail[0] );
512 if (!m_mail[1].isNull()) 531 if (!m_mail[1].isNull())
513 ftext += QString("Subject: %1\n") 532 ftext += QString("Subject: %1\n")
514 .arg( m_mail[1] ); 533 .arg( m_mail[1] );
515 534
516 ftext += QString("\n%1\n") 535 ftext += QString("\n%1\n")
517 .arg( m_mail[2]); 536 .arg( m_mail[2]);
518 537
519 ftext += QString("----- End forwarded message -----\n"); 538 ftext += QString("----- End forwarded message -----\n");
520 539
521 Settings *settings = new Settings(); 540 Settings *settings = new Settings();
522 ComposeMail composer( settings ,this, 0, true); 541 ComposeMail composer( settings ,this, 0, true);
523 composer.setSubject( "Fwd: " + m_mail[1] ); 542 composer.setSubject( "Fwd: " + m_mail[1] );
524 composer.setMessage( ftext ); 543 composer.setMessage( ftext );
525 if ( QDialog::Accepted == KApplication::execDialog( &composer )) 544 if ( QDialog::Accepted == KApplication::execDialog( &composer ))
526 { 545 {
527 } 546 }
528} 547}
529 548
530void ViewMail::slotDeleteMail( ) 549void ViewMail::slotDeleteMail( )
531{ 550{
532 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 ) 551 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 )
533 { 552 {
534 emit deleteAndDisplayNextMail( this); 553 emit deleteAndDisplayNextMail( this);
535 //m_recMail->Wrapper()->deleteMail( m_recMail ); 554 //m_recMail->Wrapper()->deleteMail( m_recMail );
536 //hide(); 555 //hide();
537 deleted = true; 556 deleted = true;
538 } 557 }
539} 558}
540 559
541MailImageDlg::MailImageDlg(const QString&fname,QWidget *parent, const char *name, bool modal, WFlags f) 560MailImageDlg::MailImageDlg(const QString&fname,QWidget *parent, const char *name, bool modal, WFlags f)
542 : QDialog(parent,name,modal) 561 : QDialog(parent,name,modal)
543{ 562{
544 QVBoxLayout*dlglayout = new QVBoxLayout(this); 563 QVBoxLayout*dlglayout = new QVBoxLayout(this);
545 dlglayout->setSpacing(2); 564 dlglayout->setSpacing(2);
546 dlglayout->setMargin(1); 565 dlglayout->setMargin(1);
547 //m_imageview = new Opie::MM::OImageScrollView(this); 566 //m_imageview = new Opie::MM::OImageScrollView(this);
548 //dlglayout->addWidget(m_imageview); 567 //dlglayout->addWidget(m_imageview);
549} 568}
550 569
551MailImageDlg::~MailImageDlg() 570MailImageDlg::~MailImageDlg()
552{ 571{
553} 572}
554 573
555void MailImageDlg::setName(const QString&fname) 574void MailImageDlg::setName(const QString&fname)
556{ 575{
557 qDebug("viewmail.cpp: MailImageDlg::setName Pending"); 576 qDebug("viewmail.cpp: MailImageDlg::setName Pending");
558 // m_imageview->setImage(fname); 577 // m_imageview->setImage(fname);
559} 578}
560 579
diff --git a/kmicromail/viewmail.h b/kmicromail/viewmail.h
index fc5edcf..bb5b685 100644
--- a/kmicromail/viewmail.h
+++ b/kmicromail/viewmail.h
@@ -1,93 +1,93 @@
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#include <qapplication.h> 8#include <qapplication.h>
9 9
10#include <qlistview.h> 10#include <qlistview.h>
11#include <qmap.h> 11#include <qmap.h>
12#include <klocale.h> 12#include <klocale.h>
13#include <qstringlist.h> 13#include <qstringlist.h>
14#include <qvaluelist.h> 14#include <qvaluelist.h>
15 15
16//namespace Opie { namespace MM { class OImageScrollView; } } 16//namespace Opie { namespace MM { class OImageScrollView; } }
17 17
18class AttachItem : public QListViewItem 18class AttachItem : public QListViewItem
19{ 19{
20public: 20public:
21 AttachItem(QListView * parent,QListViewItem *after, const QString&mime,const QString&desc,const QString&file, 21 AttachItem(QListView * 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 AttachItem(QListViewItem * parent,QListViewItem *after, const QString&mime,const QString&desc,const QString&file, 23 AttachItem(QListViewItem * parent,QListViewItem *after, const QString&mime,const QString&desc,const QString&file,
24 const QString&fsize,int num,const QValueList<int>&path); 24 const QString&fsize,int num,const QValueList<int>&path);
25 int Partnumber() { return _partNum; } 25 int Partnumber() { return _partNum; }
26 bool isParentof(const QValueList<int>&path); 26 bool isParentof(const QValueList<int>&path);
27 27
28private: 28private:
29 int _partNum; 29 int _partNum;
30 /* needed for a better display of attachments */ 30 /* needed for a better display of attachments */
31 QValueList<int> _path; 31 QValueList<int> _path;
32}; 32};
33 33
34class ViewMail : public ViewMailBase 34class ViewMail : public ViewMailBase
35{ 35{
36 Q_OBJECT 36 Q_OBJECT
37 37
38public: 38public:
39 ViewMail( QWidget *parent = 0, const char *name = 0, WFlags fl = 0); 39 ViewMail( QWidget *parent = 0, const char *name = 0, WFlags fl = 0);
40 ~ViewMail(); 40 ~ViewMail();
41 41
42 void hide(); 42 void hide();
43 void exec(); 43 void exec();
44 void setMail(const RecMailP&mail ); 44 void setMail(const RecMailP&mail );
45 void setBody(const RecBodyP&body); 45 void setBody(const RecBodyP&body);
46 bool deleted; 46 bool deleted;
47 signals: 47 signals:
48 void showNextMail(ViewMail*); 48 void showNextMail(ViewMail*);
49 void deleteAndDisplayNextMail(ViewMail *); 49 void deleteAndDisplayNextMail(ViewMail *);
50 void signalDownloadMail(); 50 void signalDownloadMail();
51protected: 51protected:
52 QString deHtml(const QString &string); 52 QString deHtml(const QString &string);
53 AttachItem* searchParent(const QValueList<int>&path); 53 AttachItem* searchParent(const QValueList<int>&path);
54 AttachItem* lastChild(AttachItem*parent); 54 AttachItem* lastChild(AttachItem*parent);
55 55
56protected slots: 56protected slots:
57 void slotNextMail() { setCaption(i18n("Displaying next mail...please wait!")); qApp->processEvents();emit showNextMail(this); }; 57 void slotNextMail();
58 void slotReply(); 58 void slotReply();
59 void slotForward(); 59 void slotForward();
60 void setText(); 60 void setText();
61 void slotItemClicked( QListViewItem * item , const QPoint & point, int c ); 61 void slotItemClicked( QListViewItem * item , const QPoint & point, int c );
62 void slotDeleteMail( ); 62 void slotDeleteMail( );
63 void slotShowHtml( bool ); 63 void slotShowHtml( bool );
64 void slotViewSource(); 64 void slotViewSource();
65 65
66private: 66private:
67 void readConfig(); 67 void readConfig();
68 bool sourceOn;; 68 bool sourceOn;;
69 bool _inLoop; 69 bool _inLoop;
70 QString m_mailHtml; 70 QString m_mailHtml;
71 bool m_gotBody; 71 bool m_gotBody;
72 RecBodyP m_body; 72 RecBodyP m_body;
73 RecMailP m_recMail; 73 RecMailP m_recMail;
74 bool m_showHtml; 74 bool m_showHtml;
75 75
76 // 0 from 1 subject 2 bodytext 3 date 76 // 0 from 1 subject 2 bodytext 3 date
77 QMap <int,QString> m_mail; 77 QMap <int,QString> m_mail;
78 // 0 to 1 cc 2 bcc 78 // 0 to 1 cc 2 bcc
79 QMap <int,QStringList> m_mail2; 79 QMap <int,QStringList> m_mail2;
80}; 80};
81 81
82class MailImageDlg:public QDialog 82class MailImageDlg:public QDialog
83{ 83{
84 Q_OBJECT 84 Q_OBJECT
85public: 85public:
86 MailImageDlg(const QString&,QWidget *parent = 0, const char *name = 0, bool modal = true, WFlags f = 0); 86 MailImageDlg(const QString&,QWidget *parent = 0, const char *name = 0, bool modal = true, WFlags f = 0);
87 ~MailImageDlg(); 87 ~MailImageDlg();
88 void setName(const QString&); 88 void setName(const QString&);
89protected: 89protected:
90 //Opie::MM::OImageScrollView*m_imageview; 90 //Opie::MM::OImageScrollView*m_imageview;
91}; 91};
92 92
93#endif 93#endif