summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt4
-rw-r--r--korganizer/kolistview.cpp12
2 files changed, 16 insertions, 0 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index e769bd8..ef53ad9 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,773 +1,777 @@
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.16 ************ 3********** VERSION 2.0.16 ************
4OM/Pi: 4OM/Pi:
5Fixed the SMTP account setting the option. 5Fixed the SMTP account setting the option.
6Fixed something in mail sending.
7
8KO/Pi:
9Added possibility to export selected events/todos as vcal file.
6 10
7********** VERSION 2.0.15 ************ 11********** VERSION 2.0.15 ************
8 12
9PwM/Pi: 13PwM/Pi:
10Added keyboard shorcuts for 14Added keyboard shorcuts for
11- toggling summary view (space bar) 15- toggling summary view (space bar)
12- delete item (delete + backspace key) 16- delete item (delete + backspace key)
13- add new item ( i + n key) 17- add new item ( i + n key)
14Fixed length of info in the title. 18Fixed length of info in the title.
15 19
16KO/Pi-KA/Pi: 20KO/Pi-KA/Pi:
17Changed "ME" menu bar entry to an icon. 21Changed "ME" menu bar entry to an icon.
18 22
19KO/Pi: 23KO/Pi:
20Fixed two minor bugs in displaying todos. 24Fixed two minor bugs in displaying todos.
21If in month view a cell is selected, the key shortcut "d" shows now that date. 25If in month view a cell is selected, the key shortcut "d" shows now that date.
22Added complete info for a todo in month view as an icon left of the text. 26Added complete info for a todo in month view as an icon left of the text.
23Fixed problems of displaying data when "<" or ">" are used in summary/location/description. 27Fixed problems of displaying data when "<" or ">" are used in summary/location/description.
24Fixed problem of search dialog size when switching displays. 28Fixed problem of search dialog size when switching displays.
25Cancel key now closes date picker. 29Cancel key now closes date picker.
26Rearranged KO/Pi file menu structure. 30Rearranged KO/Pi file menu structure.
27 31
28OM/Pi: 32OM/Pi:
29Added to the SMTP account setting the option 33Added to the SMTP account setting the option
30"No secure connection". 34"No secure connection".
31You have to configure your SMTP accounts again, sorry. 35You have to configure your SMTP accounts again, sorry.
32 36
33KA/Pi: 37KA/Pi:
34Added support for importing quoted-printable. 38Added support for importing quoted-printable.
35Support was added by Peter P.. Thanks, Peter! 39Support was added by Peter P.. Thanks, Peter!
36 40
37 41
38********** VERSION 2.0.14 ************ 42********** VERSION 2.0.14 ************
39 43
40Made Passwordmanager PwM/Pi more userfriendly: 44Made Passwordmanager PwM/Pi more userfriendly:
41Rearranged some toolbar icons, optimized setting of focus, fixed layout problems and more. 45Rearranged some toolbar icons, optimized setting of focus, fixed layout problems and more.
42Fixed bug in KO/Pi todo printing. 46Fixed bug in KO/Pi todo printing.
43Made Qtopia calendar import possible on desktop . 47Made Qtopia calendar import possible on desktop .
44 48
45********** VERSION 2.0.13 ************ 49********** VERSION 2.0.13 ************
46 50
47Fixed a problem in the addressee select dialog and made it more user friendly by adding a minimize splitter. 51Fixed a problem in the addressee select dialog and made it more user friendly by adding a minimize splitter.
48 52
49In the search dialog you can switch now the focus from search line edit to the list view by pressing key "arrow down". 53In the search dialog you can switch now the focus from search line edit to the list view by pressing key "arrow down".
50 54
51OM/Pi: 55OM/Pi:
52Fixed a refresh problem of outgoing/sent/sendfailed folders after sending mails. 56Fixed a refresh problem of outgoing/sent/sendfailed folders after sending mails.
53Added missing German translation. 57Added missing German translation.
54Added warning if path is specified in local folder settings of account config. 58Added warning if path is specified in local folder settings of account config.
55 59
56********** VERSION 2.0.12 ************ 60********** VERSION 2.0.12 ************
57 61
58KO/Pi: 62KO/Pi:
59Fixed a bug in todo start/due date handling for non recurring todos with a start and due date. 63Fixed a bug in todo start/due date handling for non recurring todos with a start and due date.
60Fixed some layout problems in the KO/Pi agenda view when there were many conflicting itmes. 64Fixed some layout problems in the KO/Pi agenda view when there were many conflicting itmes.
61Fixed several problems of the keyboard focus in the desktop versions when opening the search dialog/event viewer. 65Fixed several problems of the keyboard focus in the desktop versions when opening the search dialog/event viewer.
62 66
63Fixed problem in pi-sync mode when wrong password was sent. 67Fixed problem in pi-sync mode when wrong password was sent.
64 68
65OM/Pi: 69OM/Pi:
66Fixed a crash when displaying mails with "Show mail as html" was checked in the config. 70Fixed a crash when displaying mails with "Show mail as html" was checked in the config.
67Added a check before displaying the mail if the mail is in html format, if "Show mail as html" is enabled. 71Added a check before displaying the mail if the mail is in html format, if "Show mail as html" is enabled.
68 72
69********** VERSION 2.0.11 ************ 73********** VERSION 2.0.11 ************
70 74
71Fixed some problems in pi-sync mode 75Fixed some problems in pi-sync mode
72(e.g. details of events were not synced properly) 76(e.g. details of events were not synced properly)
73 77
74********** VERSION 2.0.10 ************ 78********** VERSION 2.0.10 ************
75 79
76KO/Pi: 80KO/Pi:
77In the desktop versions the context menu in the search dialog was broken after introducing the What'sThis info for the list view. 81In the desktop versions the context menu in the search dialog was broken after introducing the What'sThis info for the list view.
78This is fixed. 82This is fixed.
79Changed the search dialog a bit to make it more user friendly. 83Changed the search dialog a bit to make it more user friendly.
80(E.g.: Removed message box about "no items found" and set key focus to search line edit after search). 84(E.g.: Removed message box about "no items found" and set key focus to search line edit after search).
81 85
82Added config option to hide the week number in KO/Pi toolbar. 86Added config option to hide the week number in KO/Pi toolbar.
83 87
84********** VERSION 2.0.9 ************ 88********** VERSION 2.0.9 ************
85 89
86Made month view icons for multiday events a bit nicer. 90Made month view icons for multiday events a bit nicer.
87Some minor fixes in KO/Pi 91Some minor fixes in KO/Pi
88(e.g. go to today did not work for new week view properly). 92(e.g. go to today did not work for new week view properly).
89 93
90 94
91********** VERSION 2.0.8 ************ 95********** VERSION 2.0.8 ************
92 96
93Fixed a problem in dependency info in the ipk files for the Zaurus. 97Fixed a problem in dependency info in the ipk files for the Zaurus.
94 98
95Added 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. 99Added 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.
96 100
97Added a "go today" button to the datepicker. 101Added a "go today" button to the datepicker.
98 102
99Added "created" and "last modified" to event/todo viewer (and What'sThis viewer) 103Added "created" and "last modified" to event/todo viewer (and What'sThis viewer)
100and made it configureable to show these values. 104and made it configureable to show these values.
101 105
102Fixed a problem for events (from external iCal files) that do have a duration but no end date. 106Fixed a problem for events (from external iCal files) that do have a duration but no end date.
103 107
104 108
105********** VERSION 2.0.7 ************ 109********** VERSION 2.0.7 ************
106 110
107Added global application font settings 111Added global application font settings
108(for all KDE-Pim/Pi apps) to the general settings. 112(for all KDE-Pim/Pi apps) to the general settings.
109 113
110Fixed a problem in OM/Pi when trying to login to some IMAP servers 114Fixed a problem in OM/Pi when trying to login to some IMAP servers
111(like the IMAP server of Apple: mail.mac.com ) 115(like the IMAP server of Apple: mail.mac.com )
112 116
113Added recurring todos to KO/Pi. 117Added recurring todos to KO/Pi.
114 118
115 119
116********** VERSION 2.0.6 ************ 120********** VERSION 2.0.6 ************
117 121
118Some bugfixes in the pi-sync mode. 122Some bugfixes in the pi-sync mode.
119Added German translation for pi-sync mode. 123Added German translation for pi-sync mode.
120 124
121KO/Pi: 125KO/Pi:
122Made the todolist using alternate background. 126Made the todolist using alternate background.
123 127
124Other minor fixes in KO/Pi. 128Other minor fixes in KO/Pi.
125 129
126 130
127********** VERSION 2.0.5 ************ 131********** VERSION 2.0.5 ************
128 132
129Bugfixes in KO/Pi. 133Bugfixes in KO/Pi.
130 134
131********** VERSION 2.0.4 ************ 135********** VERSION 2.0.4 ************
132 136
133KO/Pi: 137KO/Pi:
134Fixed problem loading translations for summary/location edit boxes in event/todo editor. 138Fixed problem loading translations for summary/location edit boxes in event/todo editor.
135 139
136Added a general "select week number" to the toolbar. 140Added a general "select week number" to the toolbar.
137 141
138Fixed some small problem of the new features introduced in version 2.0.3. 142Fixed some small problem of the new features introduced in version 2.0.3.
139 143
140Made it possible to specify one specific category as category color, 144Made it possible to specify one specific category as category color,
141if more than one categories are selected. 145if more than one categories are selected.
142 146
143Fixed a bug in saving colors for categories with non-ascii characters. 147Fixed a bug in saving colors for categories with non-ascii characters.
144(Like, e.g. German Umlauts). 148(Like, e.g. German Umlauts).
145Propably you have to set your colors again for those categories. 149Propably you have to set your colors again for those categories.
146 150
147 151
148********** VERSION 2.0.3 ************ 152********** VERSION 2.0.3 ************
149 153
150KO/Pi: 154KO/Pi:
151Added feature for changing alarm settings for many items at once: 155Added feature for changing alarm settings for many items at once:
152Open list view (or search dialog), select the desired items and choose in 156Open list view (or search dialog), select the desired items and choose in
153the popup menu: Set alarm for selected... 157the popup menu: Set alarm for selected...
154 158
155Added to the event/todo viewer the option to send an email to 159Added to the event/todo viewer the option to send an email to
156all attendees or all selected (with RSVP) attendees. 160all attendees or all selected (with RSVP) attendees.
157 161
158Made the week-month mode changing in month view faster. 162Made the week-month mode changing in month view faster.
159 163
160Made month view better useable with keyboard. 164Made month view better useable with keyboard.
161Now TAB key jumps to next cell with an event/todo. 165Now TAB key jumps to next cell with an event/todo.
162Scroll in cell with coursor keys, scroll in time (next week) with 166Scroll in cell with coursor keys, scroll in time (next week) with
163Shift/Control + coursorkeys. 167Shift/Control + coursorkeys.
164 168
165Fixed bug that the todo view flat mode was reset after first view update. 169Fixed bug that the todo view flat mode was reset after first view update.
166 170
167If a todo is displayed closed in the todo view, 171If a todo is displayed closed in the todo view,
168it is now displayed in overdue/due today color depending on the subtodos overdue/due today properties. 172it is now displayed in overdue/due today color depending on the subtodos overdue/due today properties.
169 173
170Added info about the numbers of years to the caption (title) information about a birthday event. 174Added info about the numbers of years to the caption (title) information about a birthday event.
171 175
172Made completion date in todo editor editable. 176Made completion date in todo editor editable.
173 177
174Added possibility to save/load templates for journals. 178Added possibility to save/load templates for journals.
175(Which is just a simple "save text to file" or "insert text from file". 179(Which is just a simple "save text to file" or "insert text from file".
176 180
177********** VERSION 2.0.2 ************ 181********** VERSION 2.0.2 ************
178 182
179KO/Pi: 183KO/Pi:
180Fixed the layout problem of the day label buttons 184Fixed the layout problem of the day label buttons
181of the agenda view introduced in version 2.0.1. 185of the agenda view introduced in version 2.0.1.
182 186
183Added WhatsThis support for the todo view and the list view. 187Added WhatsThis support for the todo view and the list view.
184 188
185Added a quite useful feature to the montview. 189Added a quite useful feature to the montview.
186Just click on the week numbers on the left. 190Just click on the week numbers on the left.
187And in the top right corner of month view/agenda view 191And in the top right corner of month view/agenda view
188there is now a "week number quick selector". 192there is now a "week number quick selector".
189(Click on the black triangle). 193(Click on the black triangle).
190 194
191Made the quite difficult timezone change in KO/Pi easy. 195Made the quite difficult timezone change in KO/Pi easy.
192 196
193OM/Pi: 197OM/Pi:
194Fixed too small icons on desktop. 198Fixed too small icons on desktop.
195Fixed non visible icons in mainwindow on Z with fastload enabled. 199Fixed non visible icons in mainwindow on Z with fastload enabled.
196Added signature file setting to smtp account config. 200Added signature file setting to smtp account config.
197And the signature can be edited and saved in the edit mail dialog. 201And the signature can be edited and saved in the edit mail dialog.
198That does mean: 202That does mean:
199Simply edit the signature for the selected smtp account in the 203Simply edit the signature for the selected smtp account in the
200edit new mail dialog and press the "save signature" button there. 204edit new mail dialog and press the "save signature" button there.
201Then the signature is saved to the file specified in the smtp account settings. 205Then the signature is saved to the file specified in the smtp account settings.
202If there is no file specified, it is saved automatically to the file 206If there is no file specified, it is saved automatically to the file
203kdepim/apps/kopiemail/<accountname>.sig. 207kdepim/apps/kopiemail/<accountname>.sig.
204 208
205 209
206 210
207********** VERSION 2.0.1 ************ 211********** VERSION 2.0.1 ************
208 212
209Oooops ... I forgot to test on the Zaurus 5500 ... 213Oooops ... I forgot to test on the Zaurus 5500 ...
210 214
211Fixed many problems of new (english) strings (and german translations) 215Fixed many problems of new (english) strings (and german translations)
212introduced in the latest versions, where the text was not fitting on the 216introduced in the latest versions, where the text was not fitting on the
213240x320 display of the Zaurus 5500. 217240x320 display of the Zaurus 5500.
214 218
215KO/Pi: 219KO/Pi:
216Added a popup menu ( press pen and hold to get popup ) to the agenda view 220Added a popup menu ( press pen and hold to get popup ) to the agenda view
217with many useful items (add event/todo, show next week, two weeks, month, journal). 221with many useful items (add event/todo, show next week, two weeks, month, journal).
218 222
219Added items to the todolist popup menu for: 223Added items to the todolist popup menu for:
220Display all opened, all closed or all todos flat. 224Display all opened, all closed or all todos flat.
221The "flat" view makes is possible to sort all todos after ,e.g., prio or date. 225The "flat" view makes is possible to sort all todos after ,e.g., prio or date.
222Made the reparenting of todos on the desktop possible via Drag&Drop. 226Made the reparenting of todos on the desktop possible via Drag&Drop.
223Fixed several bugs in setting the completed datetime for todos. 227Fixed several bugs in setting the completed datetime for todos.
224Added info about completed datetime of todos to the todo viewer. 228Added info about completed datetime of todos to the todo viewer.
225Now displaying a completed todo (with completed datetime set) in the agenda view 229Now displaying a completed todo (with completed datetime set) in the agenda view
226at the time of the completion. Such that now it is possible to see in the agenda view 230at the time of the completion. Such that now it is possible to see in the agenda view
227when what todo was completed. 231when what todo was completed.
228Fixed behaviour of automatic setting completion of todos with sub-todos/parent todos. 232Fixed behaviour of automatic setting completion of todos with sub-todos/parent todos.
229Now the behaviour is: 233Now the behaviour is:
230Setting a parent to complete sets all (sub)childs to complete. 234Setting a parent to complete sets all (sub)childs to complete.
231Setting a parent to uncomplete does not change the childs. 235Setting a parent to uncomplete does not change the childs.
232Setting a child to uncomplete sets all parent to uncomplete. 236Setting a child to uncomplete sets all parent to uncomplete.
233Setting a child to complete does not change the parents. 237Setting a child to complete does not change the parents.
234 238
235Smart updating and double buffering of the daymatrix. 239Smart updating and double buffering of the daymatrix.
236Showing holidays in the day matrix. 240Showing holidays in the day matrix.
237Many other small performance updates. 241Many other small performance updates.
238 242
239Made day labels in agenda clickable. By clicking a label, the day is displayed in single day mode. 243Made day labels in agenda clickable. By clicking a label, the day is displayed in single day mode.
240 244
241Now the translation file usertranslation.txt is supposed to be in utf8 format. 245Now the translation file usertranslation.txt is supposed to be in utf8 format.
242If 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. 246If 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.
243 247
244 248
245********** VERSION 2.0.0 ************ 249********** VERSION 2.0.0 ************
246 250
247Stable release 2.0.0! 251Stable release 2.0.0!
248 252
249KO/Pi: 253KO/Pi:
250Fixed problem in edit dialog recreation at startup. 254Fixed problem in edit dialog recreation at startup.
251Made "toggle view*" menu items enabled context sensitive. 255Made "toggle view*" menu items enabled context sensitive.
252Changed agenda size menu to items 1-10. 256Changed agenda size menu to items 1-10.
253Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down. 257Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down.
254Usebility enhancements in the KO/Pi menus. 258Usebility enhancements in the KO/Pi menus.
255Birthday import now adds year to summary. 259Birthday import now adds year to summary.
256What's Next view shows age in years for birthday. 260What's Next view shows age in years for birthday.
257 261
258OM/Pi: 262OM/Pi:
259Added three info lines to display subject, from and to of selected mails. 263Added three info lines to display subject, from and to of selected mails.
260 264
261KA/Pi: 265KA/Pi:
262Fixed jump bar behaviour on Zaurus. 266Fixed jump bar behaviour on Zaurus.
263Now KA/Pi search field supports searching for a range of starting characters. 267Now KA/Pi search field supports searching for a range of starting characters.
264E.g. to search for all contact beginning with b to n, type 268E.g. to search for all contact beginning with b to n, type
265b-n 269b-n
266in the search field. 270in the search field.
267 271
268********** VERSION 1.9.20 ************ 272********** VERSION 1.9.20 ************
269 273
270KO/Pi: 274KO/Pi:
271Added for the "dislplay one day" agenda mode 275Added for the "dislplay one day" agenda mode
272info in the caption and in the day lables: 276info in the caption and in the day lables:
273Now it is displayed, if the selected day is from "day before yesterday" 277Now it is displayed, if the selected day is from "day before yesterday"
274to "day after tomorrow". 278to "day after tomorrow".
275Made it possible to delete a Todo, which has sub-todos. 279Made it possible to delete a Todo, which has sub-todos.
276Fixed two small problems in the todo view. 280Fixed two small problems in the todo view.
277Added missing German translation for filter edit and print dialog. 281Added missing German translation for filter edit and print dialog.
278Made search dialog closeable by cancel key. 282Made search dialog closeable by cancel key.
279 283
280Made it possible to select in the date picker the (ligt grey ) 284Made it possible to select in the date picker the (ligt grey )
281dates of the prev./next month with the mouse. 285dates of the prev./next month with the mouse.
282 286
283OM/Pi: 287OM/Pi:
284"Delete mail" icon in main window now deletes all selected mails. 288"Delete mail" icon in main window now deletes all selected mails.
285Fixed the problem, that the state flag of imap mails was ignored. 289Fixed the problem, that the state flag of imap mails was ignored.
286Now mails with "FLAG_SEEN" on the imap server get no icon in the list view 290Now mails with "FLAG_SEEN" on the imap server get no icon in the list view
287to indecate that they are already seen. 291to indecate that they are already seen.
288Fixed the problem that the body of some mails was not displayed in the 292Fixed the problem that the body of some mails was not displayed in the
289mail viewer when fetching them from the imap server directly to read them. 293mail viewer when fetching them from the imap server directly to read them.
290Made it (configurable) possible to show the "To:" field in the list view. 294Made it (configurable) possible to show the "To:" field in the list view.
291Added to the mail viewer the option "View Source" to make it possible to see the raw mail data. 295Added to the mail viewer the option "View Source" to make it possible to see the raw mail data.
292Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the 296Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the
293local storage folder (specified in account settings) of the account of the mail. 297local storage folder (specified in account settings) of the account of the mail.
294Removed some memory leaks in OM/Pi. 298Removed some memory leaks in OM/Pi.
295 299
296 300
297********** VERSION 1.9.19 ************ 301********** VERSION 1.9.19 ************
298 302
299Added a lot of missing translations to KA/Pi, 303Added a lot of missing translations to KA/Pi,
300Added some missing translations to KO/Pi and OM/Pi. 304Added some missing translations to KO/Pi and OM/Pi.
301 305
302Fixed some minor problems in KA/Pi + KO/Pi. 306Fixed some minor problems in KA/Pi + KO/Pi.
303 307
304Fixed a crash when closing PwM/Pi. 308Fixed a crash when closing PwM/Pi.
305Added German translation for PwM/Pi. 309Added German translation for PwM/Pi.
306 310
307Made view change and Month View update faster in KO/Pi. 311Made view change and Month View update faster in KO/Pi.
308 312
309 313
310********** VERSION 1.9.18 ************ 314********** VERSION 1.9.18 ************
311 315
312FYI: The VERSION 1.9.17 was a testing release only. 316FYI: The VERSION 1.9.17 was a testing release only.
313Please read the changelog of VERSION 1.9.17 as well. 317Please read the changelog of VERSION 1.9.17 as well.
314 318
315Cleaned up the syncing config dialog. 319Cleaned up the syncing config dialog.
316Added sync config options for date range for events. 320Added sync config options for date range for events.
317Added sync config options for filters on incoming data. 321Added sync config options for filters on incoming data.
318Added sync config options for filters on outgoing data. 322Added sync config options for filters on outgoing data.
319Please read the updated SyncHowTo about the new filter settings. 323Please read the updated SyncHowTo about the new filter settings.
320These filter settings make it now possible to sync with shared 324These filter settings make it now possible to sync with shared
321calendars without writing back private or confidential data 325calendars without writing back private or confidential data
322(via the outgoing filters). 326(via the outgoing filters).
323To sync only with particular parts of a shared calendar, 327To sync only with particular parts of a shared calendar,
324the incoming filter settings can be used. 328the incoming filter settings can be used.
325An example can be found in the SyncHowTo. 329An example can be found in the SyncHowTo.
326Same for shared addressbooks. 330Same for shared addressbooks.
327 331
328Added a setting for the global kdepim data storage. 332Added a setting for the global kdepim data storage.
329Usually the data is stored in (yourhomedir/kdepim). 333Usually the data is stored in (yourhomedir/kdepim).
330Now you can set in the Global config dialog TAB, subTAB "Data storage path" 334Now you can set in the Global config dialog TAB, subTAB "Data storage path"
331a directory where all the kdepim data is stored. 335a directory where all the kdepim data is stored.
332That makes it easy to save all kdepim data on a SD card on the Z, for example. 336That makes it easy to save all kdepim data on a SD card on the Z, for example.
333 337
334KO/Pi: 338KO/Pi:
335The timeedit input has a pulldown list for times. 339The timeedit input has a pulldown list for times.
336If opened, this pulldown list should now has the right time highlighted. 340If opened, this pulldown list should now has the right time highlighted.
337Added the possibility to exclude events/todos/journals in a filter. 341Added the possibility to exclude events/todos/journals in a filter.
338You should exclude journals, if you do not want them to sync with a public calendar. 342You should exclude journals, if you do not want them to sync with a public calendar.
339 343
340KA/Pi: 344KA/Pi:
341Added the possibility to in/exclude public/private/confidential contacts to a filter. 345Added the possibility to in/exclude public/private/confidential contacts to a filter.
342If 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 ... 346If 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 ...
343Added printing of card view and details view on desktop. 347Added printing of card view and details view on desktop.
344Printing of list view is not working... 348Printing of list view is not working...
345Added button for removing pictures in contact editor. 349Added button for removing pictures in contact editor.
346Parsing data fix of KA/Pi version 1.9.17. 350Parsing data fix of KA/Pi version 1.9.17.
347Fixed the "parse name automatically" problem of KA/Pi version 1.9.17. 351Fixed the "parse name automatically" problem of KA/Pi version 1.9.17.
348Fixed some syncing merging problems. 352Fixed some syncing merging problems.
349 353
350 354
351********** VERSION 1.9.17 ************ 355********** VERSION 1.9.17 ************
352 356
353KO/Pi: 357KO/Pi:
354Fixed that tooltips were not updated after moving an item in agenda view. 358Fixed that tooltips were not updated after moving an item in agenda view.
355Fixed a bug in sorting start date for recurring events in list view. 359Fixed a bug in sorting start date for recurring events in list view.
356Changed the left button in todo viewer from "Agenda" to "Set completed". 360Changed the left button in todo viewer from "Agenda" to "Set completed".
357This 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. 361This 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.
358Added more info in the todo viewer: Startdate, parent/sub todos. 362Added more info in the todo viewer: Startdate, parent/sub todos.
359 363
360 364
361KA/Pi: 365KA/Pi:
362All fields search does now actually search all the (possible) fields, 366All fields search does now actually search all the (possible) fields,
363not only those listed in the contact list. 367not only those listed in the contact list.
364Made is possible to inline a picture in a vcard on the Z. 368Made is possible to inline a picture in a vcard on the Z.
365This was only possible on the desktop, now is it possible on the Z as well. 369This was only possible on the desktop, now is it possible on the Z as well.
366Fixed of missing save settings after filter configuration. 370Fixed of missing save settings after filter configuration.
367Made saving of addressbook much faster. 371Made saving of addressbook much faster.
368Fixed extension widget layout problem. 372Fixed extension widget layout problem.
369Fixed saving of default formatted name settings. 373Fixed saving of default formatted name settings.
370Fixed formatted name handling in edit dialog. 374Fixed formatted name handling in edit dialog.
371Added an option for changing formatted names of many contacts 375Added an option for changing formatted names of many contacts
372(menu: File - Change - Set formatted name). 376(menu: File - Change - Set formatted name).
373 377
374QWhatsThis was not working on the Z ( only black rectangle was shown). 378QWhatsThis was not working on the Z ( only black rectangle was shown).
375This is Fixed. 379This is Fixed.
376 380
377KDE-Sync: 381KDE-Sync:
378Now readonly KDE resources are synced as well. 382Now readonly KDE resources are synced as well.
379(They are not changed in KDE itself, of course). 383(They are not changed in KDE itself, of course).
380 384
381 385
382 386
383********** VERSION 1.9.16 ************ 387********** VERSION 1.9.16 ************
384 388
385KO/Pi: 389KO/Pi:
386Fixed search dialog size on Z 6000 (480x640 display). 390Fixed search dialog size on Z 6000 (480x640 display).
387Added setting to hide/show time in agenda items. 391Added setting to hide/show time in agenda items.
388Added setting to hide not running todos in todo view. 392Added setting to hide not running todos in todo view.
389Added columns for start date/time in todo view. 393Added columns for start date/time in todo view.
390Replaced the solid half-hour lines in agenda view by dot lines. 394Replaced the solid half-hour lines in agenda view by dot lines.
391Added possibility of printing the What's Next View on the desktop 395Added possibility of printing the What's Next View on the desktop
392(i.e. Windows and Linux). 396(i.e. Windows and Linux).
393Fixed a crash in KO/Pi when starting KO/Pi with What's Next view. 397Fixed a crash in KO/Pi when starting KO/Pi with What's Next view.
394Added tooltips in month view.(Tooltips only available on desktop) 398Added tooltips in month view.(Tooltips only available on desktop)
395 399
396Fixed a strange problem in KO/Pi alarm applet. 400Fixed a strange problem in KO/Pi alarm applet.
397Did not find the actual problem, 401Did not find the actual problem,
398such that now Qtopia reboots again if deinstalling the alarm applet. 402such that now Qtopia reboots again if deinstalling the alarm applet.
399But the alarm applet should work again. 403But the alarm applet should work again.
400 404
401KA/Pi: 405KA/Pi:
402Fixed the problem, that internal pictures were not saved. 406Fixed the problem, that internal pictures were not saved.
403 407
404Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes. 408Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes.
405 409
406Fixed some minor problems. (Like word wrap in help text windows). 410Fixed some minor problems. (Like word wrap in help text windows).
407 411
408Fixed a compiling problem in microkde/kresources. 412Fixed a compiling problem in microkde/kresources.
409 413
410KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM. 414KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM.
411This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9) 415This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9)
412such that now syncing KO/Pi with Sharp DTM should work on the 416such that now syncing KO/Pi with Sharp DTM should work on the
413Zaurus C 3000 model. 417Zaurus C 3000 model.
414 418
415********** VERSION 1.9.15 ************ 419********** VERSION 1.9.15 ************
416 420
417Usebilty enhancements in KO/Pi: 421Usebilty enhancements in KO/Pi:
418When clicking on the date in a month view cell, the day view is shown. 422When clicking on the date in a month view cell, the day view is shown.
419Old behaviour was, that the "new event" dialog popped up. 423Old behaviour was, that the "new event" dialog popped up.
420 424
421Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu). 425Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu).
422That means, you can restore the latest 426That means, you can restore the latest
423event/todo/journal you have deleted. 427event/todo/journal you have deleted.
424A journal is deleted, if you clear all the text of the journal. 428A journal is deleted, if you clear all the text of the journal.
425 429
426Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14. 430Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14.
427 431
428KA/Pi starting in 480x640 resolution: 432KA/Pi starting in 480x640 resolution:
429Hide the filter action in toolbar 433Hide the filter action in toolbar
430and added icons for undo/delete/redo in toolbar. 434and added icons for undo/delete/redo in toolbar.
431 435
432Change in OM/Pi ViewMail dialog: 436Change in OM/Pi ViewMail dialog:
433When clicking on the "delete" icon the mail is deleted after confirmation as usual. 437When clicking on the "delete" icon the mail is deleted after confirmation as usual.
434But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any). 438But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any).
435 439
436Fixed a crash when deleting mail-accounts in OM/Pi. 440Fixed a crash when deleting mail-accounts in OM/Pi.
437 441
438 442
439********** VERSION 1.9.14 ************ 443********** VERSION 1.9.14 ************
440 444
441Fixed some problems with the dialog sizes when switching 445Fixed some problems with the dialog sizes when switching
442portrait/landscape mode on 640x480 PDA display. 446portrait/landscape mode on 640x480 PDA display.
443 447
444Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi. 448Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi.
445 449
446Fixed an ugly bug in KOpieMail: 450Fixed an ugly bug in KOpieMail:
447KOpieMail was not able to write files (mails) to MSDOS file system, 451KOpieMail was not able to write files (mails) to MSDOS file system,
448like on an usual preformatted SD card. That should work now. 452like on an usual preformatted SD card. That should work now.
449To save your mail data on the Sd card do the following: 453To save your mail data on the Sd card do the following:
450Create a dir on the SD card: 454Create a dir on the SD card:
451mkdir /mnt/card/localmail 455mkdir /mnt/card/localmail
452Go to your home dir: 456Go to your home dir:
453cd 457cd
454Go to kopiemail data storage dir: 458Go to kopiemail data storage dir:
455cd kdepim/apps/kopiemail 459cd kdepim/apps/kopiemail
456Create a symlink to the SD card: 460Create a symlink to the SD card:
457ls -s /mnt/card/localmail 461ls -s /mnt/card/localmail
458Now KOpieMail will store all mails on the SD card. 462Now KOpieMail will store all mails on the SD card.
459 463
460KO/Pi Monthview: 464KO/Pi Monthview:
461Now "Go to Today" selects the current month from day 1-end, 465Now "Go to Today" selects the current month from day 1-end,
462not the current date + some days. 466not the current date + some days.
463I.e. "Go to Today" shows now always 467I.e. "Go to Today" shows now always
464the current month with first day of month in the first row. 468the current month with first day of month in the first row.
465 469
466Added missing German translation. 470Added missing German translation.
467 471
468Fixed icons of executeable on Wintendo. 472Fixed icons of executeable on Wintendo.
469 473
470Added a "Show next Mail" button to the OM/Pi 474Added a "Show next Mail" button to the OM/Pi
471mail viewer such that the mail below the current mail 475mail viewer such that the mail below the current mail
472in the mail list view of the current folder 476in the mail list view of the current folder
473can be read with a single click. 477can be read with a single click.
474 478
475 479
476********** VERSION 1.9.13 ************ 480********** VERSION 1.9.13 ************
477 481
478Fixed nasty PwM/Pi file reading bug, when 482Fixed nasty PwM/Pi file reading bug, when
479the used hash algo of file is different then the global 483the used hash algo of file is different then the global
480hash algo. 484hash algo.
481 485
482Added KA/Pi support for opie mailit mailapplication. 486Added KA/Pi support for opie mailit mailapplication.
483 487
484Fixed some bugs in OM/Pi. 488Fixed some bugs in OM/Pi.
485Now character conversion tables are available for the Zaurus 489Now character conversion tables are available for the Zaurus
486to make OM/Pi working properly. 490to make OM/Pi working properly.
487To get the character conversion in OM/Pi working, please download 491To get the character conversion in OM/Pi working, please download
488at the sourceforge project site the package 492at the sourceforge project site the package
489sr-character-conversion_SharpROM_arm.ipk.zip 493sr-character-conversion_SharpROM_arm.ipk.zip
490(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms) 494(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms)
491from the section "general files for KDE/Pim" 495from the section "general files for KDE/Pim"
492Instructions how to install this package are in a ReadMe in this file. 496Instructions how to install this package are in a ReadMe in this file.
493 497
494 498
495Fixed the orientation change problem in KA/Pi when switching 499Fixed the orientation change problem in KA/Pi when switching
496portrait/landscape mode. 500portrait/landscape mode.
497 501
498French translation available for KA/Pi and OM/Pi. 502French translation available for KA/Pi and OM/Pi.
499 503
500Fixed some problems with categories in KO/Pi in DTM sync. 504Fixed some problems with categories in KO/Pi in DTM sync.
501 505
502Added selection dialog for export to phone in KA/Pi. 506Added selection dialog for export to phone in KA/Pi.
503 507
504If in KO/Pi is an attendee selected to add to a meeting and this 508If in KO/Pi is an attendee selected to add to a meeting and this
505attendee is already in the list of attendees, this person is not added 509attendee is already in the list of attendees, this person is not added
506again. 510again.
507 511
508Some menu cleanup in KA/Pi. 512Some menu cleanup in KA/Pi.
509 513
510********** VERSION 1.9.12 ************ 514********** VERSION 1.9.12 ************
511 515
512Fix for the bug in KO/Pi What's Next view of version 1.9.11. 516Fix for the bug in KO/Pi What's Next view of version 1.9.11.
513 517
514Bugfix: Licence file is now shown again. 518Bugfix: Licence file is now shown again.
515 519
516OM/Pi now supports Unicode (utf8 charset). 520OM/Pi now supports Unicode (utf8 charset).
517Fixed some bugs in OM/Pi. 521Fixed some bugs in OM/Pi.
518 522
519KA/Pi has more German translation. 523KA/Pi has more German translation.
520 524
521 525
522********** VERSION 1.9.11 ************ 526********** VERSION 1.9.11 ************
523 527
524Fixed several problems in PWM/Pi, like 528Fixed several problems in PWM/Pi, like
525asking the user, if unsaved changed are pending 529asking the user, if unsaved changed are pending
526when closing the app. 530when closing the app.
527And PwM/Pi handles now different texts for the 531And PwM/Pi handles now different texts for the
528fields Description, Username, Password, configurable per category. 532fields Description, Username, Password, configurable per category.
529 533
530Fixed a crash in KO/Pi , when importing/loading vcs files 534Fixed a crash in KO/Pi , when importing/loading vcs files
531which have an entry with an attendee with state: 535which have an entry with an attendee with state:
532NEEDS ACTION 536NEEDS ACTION
533 537
534Fixed some problems in the German translation of OM/Pi, 538Fixed some problems in the German translation of OM/Pi,
535which makes some dialogs not fitting on the screen 539which makes some dialogs not fitting on the screen
536of the Z 5500. 540of the Z 5500.
537 541
538Fixed Qtopia crash, when disabling/deinstalling 542Fixed Qtopia crash, when disabling/deinstalling
539KO/Pi alarm applet. 543KO/Pi alarm applet.
540 544
541Implemented direct KDE<->KA/Pi sync for KA/Pi running 545Implemented direct KDE<->KA/Pi sync for KA/Pi running
542on Linux desktop. 546on Linux desktop.
543 547
544Added feature "remove sync info" to sync menu. 548Added feature "remove sync info" to sync menu.
545 549
546Tweaked the KO/Pi What's next view a bit, added 550Tweaked the KO/Pi What's next view a bit, added
547setting to hide events that are done. 551setting to hide events that are done.
548 552
549Disabled "beam receive enabled" on startup to 553Disabled "beam receive enabled" on startup to
550avoid problems if Fastload is enabled. 554avoid problems if Fastload is enabled.
551Please set "beam receive enabled", 555Please set "beam receive enabled",
552if you want to receive data via IR. 556if you want to receive data via IR.
553 557
554Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running 558Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running
555on Linux desktop. 559on Linux desktop.
556 560
557Made in KA/Pi scrolling possible, if details view is selected. 561Made in KA/Pi scrolling possible, if details view is selected.
558(The keyboard focus is set automatically to the search line) 562(The keyboard focus is set automatically to the search line)
559 563
560Fixed a bug in DMT sync, that a new entry in DTM was added 564Fixed a bug in DMT sync, that a new entry in DTM was added
561on every sync to Kx/Pi. 565on every sync to Kx/Pi.
562 566
563Fixed missing writing of KA/Pi categories to DMT entries when syncing. 567Fixed missing writing of KA/Pi categories to DMT entries when syncing.
564 568
565Fixed a bug in DMT sync with todos created in KO/Pi containing 569Fixed a bug in DMT sync with todos created in KO/Pi containing
566non-latin1 characters. 570non-latin1 characters.
567 571
568Rearranged package contents of Sharp-ipks and made all 572Rearranged package contents of Sharp-ipks and made all
569packages installable on SD again. 573packages installable on SD again.
570 574
571Fixed the writing of addressbook data in DTM sync. 575Fixed the writing of addressbook data in DTM sync.
572Empty fields in KA/Pi were not removed. 576Empty fields in KA/Pi were not removed.
573 577
574Added better category handling in KA/Pi: 578Added better category handling in KA/Pi:
575Added item 579Added item
576Edit Categories and 580Edit Categories and
577Manage new categories 581Manage new categories
578to the settings menu. 582to the settings menu.
579Possible to configure a view to display categories. 583Possible to configure a view to display categories.
580 584
581Added detailed "KDE Sync Howto" and "Multi Sync Howto" to Help menu. 585Added detailed "KDE Sync Howto" and "Multi Sync Howto" to Help menu.
582 586
583Fixed displaying of "free" days and time in KO Monthview and Agendaview. 587Fixed displaying of "free" days and time in KO Monthview and Agendaview.
584 588
585... and many other bugfixes. 589... and many other bugfixes.
586 590
587********** VERSION 1.9.10 ************ 591********** VERSION 1.9.10 ************
588 592
589Many internal small bugfixes. 593Many internal small bugfixes.
590And fix of the "big" bug in KO/Pi, 594And fix of the "big" bug in KO/Pi,
591that after Syncing the appointments had an offset by several hours. 595that after Syncing the appointments had an offset by several hours.
592That was a problem with the internal timezone setting, 596That was a problem with the internal timezone setting,
593introduced by the changed timezone configuration settings. 597introduced by the changed timezone configuration settings.
594 598
595German translation for OM/Pi is now available. 599German translation for OM/Pi is now available.
596 600
597 601
598********** VERSION 1.9.9 ************ 602********** VERSION 1.9.9 ************
599 603
600KDE-Pim/Pi has a new Member! 604KDE-Pim/Pi has a new Member!
601It is called PWM/Pi (Passwordmanager/platform-independent) 605It is called PWM/Pi (Passwordmanager/platform-independent)
602and it is available for the Zaurus. 606and it is available for the Zaurus.
603It is planned, that it will be available later for Windows. 607It is planned, that it will be available later for Windows.
604(And for Linux, of course). 608(And for Linux, of course).
605It is a port of the Passwordmanager of KDE. 609It is a port of the Passwordmanager of KDE.
606It will need the MicroKDElibs to run. 610It will need the MicroKDElibs to run.
607 611
608Made loading of addressbooks in KA/Pi up to 7 times faster! 612Made loading of addressbooks in KA/Pi up to 7 times faster!
609The bigger your addressbook file, the more starting speed 613The bigger your addressbook file, the more starting speed
610will you gain. (relatively) 614will you gain. (relatively)
611 615
612The Qtopia addressbook connector is now platform independend 616The Qtopia addressbook connector is now platform independend
613as well and should work on any platform for importing/exporting 617as well and should work on any platform for importing/exporting
614Qtopia and Opie XML files. 618Qtopia and Opie XML files.
615 619
616Added a +30min feature to the timezone settings to make 620Added a +30min feature to the timezone settings to make
617KDE-Pim/Pi useable in Australia and other parts on the 621KDE-Pim/Pi useable in Australia and other parts on the
618world with strange timezones ;-) 622world with strange timezones ;-)
619 623
620German "Umlaute" should now be sorted correctly on the Z in KA/Pi. 624German "Umlaute" should now be sorted correctly on the Z in KA/Pi.
621 625
622It is now possible to disable the 626It is now possible to disable the
623"receive data via infrared" feature, such that syncing with 627"receive data via infrared" feature, such that syncing with
624Outlook is now possible again with Kx/Pi runing. 628Outlook is now possible again with Kx/Pi runing.
625Please disable it, before syncing Sharp DTM with Outlook. 629Please disable it, before syncing Sharp DTM with Outlook.
626For your convenience, the "receive data via infrared" feature 630For your convenience, the "receive data via infrared" feature
627is disabled automatically, if you sync Kx/Pi with DTM. 631is disabled automatically, if you sync Kx/Pi with DTM.
628You have to enable it again manually after syncing. 632You have to enable it again manually after syncing.
629Enabling this feature makes it impossible to start the 633Enabling this feature makes it impossible to start the
630Sharp DTM apps. If this feature is enabled, you will only get the 634Sharp DTM apps. If this feature is enabled, you will only get the
631alarm notification from KO/Pi and not from the Sharp calendar. 635alarm notification from KO/Pi and not from the Sharp calendar.
632This is very useful if you sync KO/Pi with Sharp DTM, 636This is very useful if you sync KO/Pi with Sharp DTM,
633because after syncing you usually would get notified about 637because after syncing you usually would get notified about
634an alarm by KO/Pi and the Sharp Calendar. 638an alarm by KO/Pi and the Sharp Calendar.
635 639
636Together with the Linux desktop version of KO/Pi 640Together with the Linux desktop version of KO/Pi
637it is now possible to sync KO/Pi on the Zaurus 641it is now possible to sync KO/Pi on the Zaurus
638with the complete KDE-desktop (3.3 or later) 642with the complete KDE-desktop (3.3 or later)
639calendar data easily. 643calendar data easily.
640That makes it possible to sync the Z with one 644That makes it possible to sync the Z with one
641click of a mouse with the KDE-Desktop. 645click of a mouse with the KDE-Desktop.
642This feature it available for all Zaurus platforms KO/Pi 646This feature it available for all Zaurus platforms KO/Pi
643is running on. 647is running on.
644The only thing needed is a running KO/Pi on Linux and 648The only thing needed is a running KO/Pi on Linux and
645a compiled version of the small 649a compiled version of the small
646KDE-Pim/Pi<->KDE-Desktop access command line program, 650KDE-Pim/Pi<->KDE-Desktop access command line program,
647which is in the KDE-Pim/Pi sources available. 651which is in the KDE-Pim/Pi sources available.
648 652
649The "KDE-desktop" syncing feature for KA/Pi will follow 653The "KDE-desktop" syncing feature for KA/Pi will follow
650in the next releases. 654in the next releases.
651 655
652Fixed the vcard export bug, which had the version 1.9.8. 656Fixed the vcard export bug, which had the version 1.9.8.
653 657
654Added missing GERMAN translation to KO/Pi. 658Added missing GERMAN translation to KO/Pi.
655Hi PsionX, could you add the missing french translation?Thx! 659Hi PsionX, could you add the missing french translation?Thx!
656 660
657Translation files for KA/Pi are available as well. 661Translation files for KA/Pi are available as well.
658GERMAN translation will be available in the next release. 662GERMAN translation will be available in the next release.
659PsionX ( yres, you again ;-) ), could you start translating 663PsionX ( yres, you again ;-) ), could you start translating
660KA/Pi? Thx! 664KA/Pi? Thx!
661 665
662You can download the version 1.9.9 at 666You can download the version 1.9.9 at
663 667
664http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604 668http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604
665 669
666Note: 670Note:
667To run the mail program OM/Pi you need libopenssl. 671To run the mail program OM/Pi you need libopenssl.
668A link to a download loaction is available at 672A link to a download loaction is available at
669ZSI at www.killefiz.de 673ZSI at www.killefiz.de
670 674
671 675
672********** VERSION 1.9.8 ************ 676********** VERSION 1.9.8 ************
673 677
674Fixed character decoding in OM/Pi. 678Fixed character decoding in OM/Pi.
675(e.g. German "Umlaute" were not displayed properly.) 679(e.g. German "Umlaute" were not displayed properly.)
676 680
677Made is possible to reparent todos in KO/Pi. 681Made is possible to reparent todos in KO/Pi.
678Use contextmenu or keys (look at Help-Keys + Colors) for that. 682Use contextmenu or keys (look at Help-Keys + Colors) for that.
679 683
680Added the missing Sync-Howto and WhatsNew to the packages. 684Added the missing Sync-Howto and WhatsNew to the packages.
681 685
682KO/Pi on Linux desktop can now sync with KDE desktop. 686KO/Pi on Linux desktop can now sync with KDE desktop.
683That means: When using KO/Pi on Linux desktop for syncing with 687That means: When using KO/Pi on Linux desktop for syncing with
684KDE desktop and the Zaurus, the Zaurus can be synced now 688KDE desktop and the Zaurus, the Zaurus can be synced now
685with all KDE-Calendar resources, not only with one local file. 689with all KDE-Calendar resources, not only with one local file.
686(That makes it possible to sync the Zaurus with the 690(That makes it possible to sync the Zaurus with the
687calendar data on a Kolab server) 691calendar data on a Kolab server)
688 692
689KA/Pi syncing with KDE desktop will be available in the next version. 693KA/Pi syncing with KDE desktop will be available in the next version.
690 694
691 695
692********** VERSION 1.9.7 ************ 696********** VERSION 1.9.7 ************
693 697
694KO/Pi - KA/Pi on Windows: 698KO/Pi - KA/Pi on Windows:
695Now a directory can be defined by the user, where the 699Now a directory can be defined by the user, where the
696application/config data should be saved. 700application/config data should be saved.
697 Define your desired path in the evironment variable 701 Define your desired path in the evironment variable
698 MICROKDEHOME 702 MICROKDEHOME
699 before starting KO/Pi or KA/Pi. 703 before starting KO/Pi or KA/Pi.
700 704
701An easy Kx/Pi to Kx/Pi syncing is now possible 705An easy Kx/Pi to Kx/Pi syncing is now possible
702(it is called Pi-Sync) via network. 706(it is called Pi-Sync) via network.
703Please look at the Sync Howto. 707Please look at the Sync Howto.
704 708
705Exporting of calendar data and contacts to mobile phones is now possible. 709Exporting of calendar data and contacts to mobile phones is now possible.
706The SyncHowto is updated with information howto 710The SyncHowto is updated with information howto
707access/sync mobile phones. 711access/sync mobile phones.
708Please look at the Sync Howto. 712Please look at the Sync Howto.
709 713
710Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly. 714Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly.
711Please disable Fastload for the original contact/calendar applications 715Please disable Fastload for the original contact/calendar applications
712and close them. 716and close them.
713KO/Pi and KA/Pi must be running in order to receive the data. 717KO/Pi and KA/Pi must be running in order to receive the data.
714(KO/Pi and KA/Pi are always running if Fastload for them is enabled!) 718(KO/Pi and KA/Pi are always running if Fastload for them is enabled!)
715 719
716In the KA/Pi details view are now the preferred tel. numbers displayed on top 720In the KA/Pi details view are now the preferred tel. numbers displayed on top
717of the other data ( emails/tel.numbers/addresses) 721of the other data ( emails/tel.numbers/addresses)
718 722
719Fixed some syncing problems in KA/Pi. 723Fixed some syncing problems in KA/Pi.
720 724
721Added font settings for the KA/Pi details view. 725Added font settings for the KA/Pi details view.
722Added fields "children's name" and "gender" to KA/Pi. 726Added fields "children's name" and "gender" to KA/Pi.
723 727
724Made searching in KA/Pi better: 728Made searching in KA/Pi better:
725Now the first item in a view is selected after a search automatically and 729Now the first item in a view is selected after a search automatically and
726the views can be scrolled up/down when the search input field has the keyboard focus. 730the views can be scrolled up/down when the search input field has the keyboard focus.
727 731
728And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi. 732And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi.
729 733
730 734
731********** VERSION 1.9.6 ************ 735********** VERSION 1.9.6 ************
732 736
733Changes in the external application communication on the Zaurus 737Changes in the external application communication on the Zaurus
734in order to use less RAM when the apps are running. 738in order to use less RAM when the apps are running.
735First syncing of addressbooks (KA/Pi) is possible. 739First syncing of addressbooks (KA/Pi) is possible.
736 740
737 741
738********** VERSION 1.9.5a ************ 742********** VERSION 1.9.5a ************
739 743
740Fixed a bug in KO/Pi in the SharpDTM sync of version 1.9.5. 744Fixed a bug in KO/Pi in the SharpDTM sync of version 1.9.5.
741Fixed some small bugs. 745Fixed some small bugs.
742KA/Pi shows now the birthday in summary view. 746KA/Pi shows now the birthday in summary view.
743Now OM/Pi and KA/Pi are using the date format defined in KO/Pi 747Now OM/Pi and KA/Pi are using the date format defined in KO/Pi
744for displaying dates. 748for displaying dates.
745 749
746 750
747********** VERSION 1.9.5 ************ 751********** VERSION 1.9.5 ************
748 752
749There is still no Addressbook syncing! 753There is still no Addressbook syncing!
750 754
751New in 1.9.5: 755New in 1.9.5:
752 756
753Many bugfixes. 757Many bugfixes.
754Better searching in KA/Pi. 758Better searching in KA/Pi.
755You can configure in KA/Pi if you want to search only after 759You can configure in KA/Pi if you want to search only after
756<return> key pressed. 760<return> key pressed.
757 761
758Better mail downloading in OM/Pi. 762Better mail downloading in OM/Pi.
759 763
760First experimental alpha version of sync of KO/Pi with mobile phones. 764First experimental alpha version of sync of KO/Pi with mobile phones.
761See gammu documentation for supported phones. 765See gammu documentation for supported phones.
762You 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. 766You 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.
763Quick hint how to use: 767Quick hint how to use:
764NOTE: MOBILE PHONE SYNC IS EXPERIMENTAL! 768NOTE: MOBILE PHONE SYNC IS EXPERIMENTAL!
765Install kammu_1.9.5_arm.ipk , libbluetooth and libsdp. 769Install kammu_1.9.5_arm.ipk , libbluetooth and libsdp.
766Create syncprofile - mobile device 770Create syncprofile - mobile device
767Remove entry for model. (Leave empty ). 771Remove entry for model. (Leave empty ).
768Enable infrared on Zaurus and your Phone. 772Enable infrared on Zaurus and your Phone.
769Sync. 773Sync.
770To get a more detailed log, start kopi from konsole. 774To get a more detailed log, start kopi from konsole.
771 775
772********** VERSION 1.9.4 ************ 776********** VERSION 1.9.4 ************
773 777
diff --git a/korganizer/kolistview.cpp b/korganizer/kolistview.cpp
index f235705..3519985 100644
--- a/korganizer/kolistview.cpp
+++ b/korganizer/kolistview.cpp
@@ -1,1215 +1,1227 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 1999 Preston Brown 3 Copyright (c) 1999 Preston Brown
4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24 24
25#include <qlistview.h> 25#include <qlistview.h>
26#include <qlayout.h> 26#include <qlayout.h>
27#include <qlabel.h> 27#include <qlabel.h>
28#include <qpopupmenu.h> 28#include <qpopupmenu.h>
29#include <qprogressbar.h> 29#include <qprogressbar.h>
30#include <qfileinfo.h> 30#include <qfileinfo.h>
31#include <qmessagebox.h> 31#include <qmessagebox.h>
32#include <qdialog.h> 32#include <qdialog.h>
33#include <qtextstream.h> 33#include <qtextstream.h>
34#include <qdir.h> 34#include <qdir.h>
35#include <qwhatsthis.h> 35#include <qwhatsthis.h>
36#include <qregexp.h> 36#include <qregexp.h>
37 37
38#include <klocale.h> 38#include <klocale.h>
39#include <kdebug.h> 39#include <kdebug.h>
40#include <kiconloader.h> 40#include <kiconloader.h>
41#include <kglobal.h> 41#include <kglobal.h>
42 42
43#include <libkdepim/kpimglobalprefs.h> 43#include <libkdepim/kpimglobalprefs.h>
44#include <libkcal/calendar.h> 44#include <libkcal/calendar.h>
45#include <libkcal/calendarlocal.h> 45#include <libkcal/calendarlocal.h>
46#include <libkcal/icalformat.h> 46#include <libkcal/icalformat.h>
47#include <libkcal/vcalformat.h> 47#include <libkcal/vcalformat.h>
48#include <libkcal/recurrence.h> 48#include <libkcal/recurrence.h>
49#include <libkcal/filestorage.h> 49#include <libkcal/filestorage.h>
50#include <libkdepim/categoryselectdialog.h> 50#include <libkdepim/categoryselectdialog.h>
51#include <libkcal/kincidenceformatter.h> 51#include <libkcal/kincidenceformatter.h>
52#ifndef DESKTOP_VERSION 52#ifndef DESKTOP_VERSION
53#include <qpe/qpeapplication.h> 53#include <qpe/qpeapplication.h>
54#else 54#else
55#include <qapplication.h> 55#include <qapplication.h>
56#endif 56#endif
57 57
58#ifndef KORG_NOPRINTER 58#ifndef KORG_NOPRINTER
59#include "calprinter.h" 59#include "calprinter.h"
60#endif 60#endif
61#include "koglobals.h" 61#include "koglobals.h"
62#include "koprefs.h" 62#include "koprefs.h"
63#include "kfiledialog.h" 63#include "kfiledialog.h"
64 64
65#include "kolistview.h" 65#include "kolistview.h"
66 66
67 67
68 68
69 69
70class KOListViewWhatsThis :public QWhatsThis 70class KOListViewWhatsThis :public QWhatsThis
71{ 71{
72public: 72public:
73 KOListViewWhatsThis( QWidget *wid, KOListView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { }; 73 KOListViewWhatsThis( QWidget *wid, KOListView* view ) : QWhatsThis( wid ), _wid(wid),_view (view) { };
74 74
75protected: 75protected:
76 virtual QString text( const QPoint& p) 76 virtual QString text( const QPoint& p)
77 { 77 {
78 return _view->getWhatsThisText(p) ; 78 return _view->getWhatsThisText(p) ;
79 } 79 }
80private: 80private:
81 QWidget* _wid; 81 QWidget* _wid;
82 KOListView * _view; 82 KOListView * _view;
83}; 83};
84 84
85 85
86ListItemVisitor::ListItemVisitor(KOListViewItem *item, QDate date ) 86ListItemVisitor::ListItemVisitor(KOListViewItem *item, QDate date )
87{ 87{
88 mItem = item; 88 mItem = item;
89 mDate = date; 89 mDate = date;
90} 90}
91 91
92ListItemVisitor::~ListItemVisitor() 92ListItemVisitor::~ListItemVisitor()
93{ 93{
94} 94}
95 95
96bool ListItemVisitor::visit(Event *e) 96bool ListItemVisitor::visit(Event *e)
97{ 97{
98 98
99 bool ok = false; 99 bool ok = false;
100 QString start, end; 100 QString start, end;
101 QDate ds, de; 101 QDate ds, de;
102 if ( e->doesRecur() ) { 102 if ( e->doesRecur() ) {
103 ds = e->getNextOccurence( QDateTime( mDate, QTime(0,0,0)), &ok ).date(); 103 ds = e->getNextOccurence( QDateTime( mDate, QTime(0,0,0)), &ok ).date();
104 if ( ok ) { 104 if ( ok ) {
105 int days = e->dtStart().date().daysTo(e->dtEnd().date() ); 105 int days = e->dtStart().date().daysTo(e->dtEnd().date() );
106 start = KGlobal::locale()->formatDate(ds,true); 106 start = KGlobal::locale()->formatDate(ds,true);
107 de = ds.addDays( days); 107 de = ds.addDays( days);
108 end = KGlobal::locale()->formatDate(de,true); 108 end = KGlobal::locale()->formatDate(de,true);
109 } 109 }
110 110
111 } 111 }
112 if ( ! ok ) { 112 if ( ! ok ) {
113 start =e->dtStartDateStr(); 113 start =e->dtStartDateStr();
114 end = e->dtEndDateStr(); 114 end = e->dtEndDateStr();
115 ds = e->dtStart().date(); 115 ds = e->dtStart().date();
116 de = e->dtEnd().date(); 116 de = e->dtEnd().date();
117 } 117 }
118 mItem->setText(0,e->summary()); 118 mItem->setText(0,e->summary());
119 mItem->setText(1,start); 119 mItem->setText(1,start);
120 mItem->setText(2,e->dtStartTimeStr()); 120 mItem->setText(2,e->dtStartTimeStr());
121 mItem->setText(3,end); 121 mItem->setText(3,end);
122 mItem->setText(4,e->dtEndTimeStr()); 122 mItem->setText(4,e->dtEndTimeStr());
123 mItem->setText(5,e->isAlarmEnabled() ? i18n("Yes") : i18n("No")); 123 mItem->setText(5,e->isAlarmEnabled() ? i18n("Yes") : i18n("No"));
124 mItem->setText(6, e->recurrence()->recurrenceText()); 124 mItem->setText(6, e->recurrence()->recurrenceText());
125 mItem->setText(7,"---"); 125 mItem->setText(7,"---");
126 mItem->setText(8,"---"); 126 mItem->setText(8,"---");
127 mItem->setText(9, e->cancelled() ? i18n("Yes") : i18n("No")); 127 mItem->setText(9, e->cancelled() ? i18n("Yes") : i18n("No"));
128 mItem->setText(10,e->categoriesStr()); 128 mItem->setText(10,e->categoriesStr());
129 129
130 QString key; 130 QString key;
131 QTime t = e->doesFloat() ? QTime(0,0) : e->dtStart().time(); 131 QTime t = e->doesFloat() ? QTime(0,0) : e->dtStart().time();
132 key.sprintf("%04d%02d%02d%02d%02d",ds.year(),ds.month(),ds.day(),t.hour(),t.minute()); 132 key.sprintf("%04d%02d%02d%02d%02d",ds.year(),ds.month(),ds.day(),t.hour(),t.minute());
133 mItem->setSortKey(1,key); 133 mItem->setSortKey(1,key);
134 134
135 t = e->doesFloat() ? QTime(0,0) : e->dtEnd().time(); 135 t = e->doesFloat() ? QTime(0,0) : e->dtEnd().time();
136 key.sprintf("%04d%02d%02d%02d%02d",de.year(),de.month(),de.day(),t.hour(),t.minute()); 136 key.sprintf("%04d%02d%02d%02d%02d",de.year(),de.month(),de.day(),t.hour(),t.minute());
137 mItem->setSortKey(3,key); 137 mItem->setSortKey(3,key);
138 138
139 return true; 139 return true;
140} 140}
141 141
142bool ListItemVisitor::visit(Todo *t) 142bool ListItemVisitor::visit(Todo *t)
143{ 143{
144 mItem->setText(0,i18n("Todo: %1").arg(t->summary())); 144 mItem->setText(0,i18n("Todo: %1").arg(t->summary()));
145 if (t->hasStartDate()) { 145 if (t->hasStartDate()) {
146 mItem->setText(1,t->dtStartDateStr()); 146 mItem->setText(1,t->dtStartDateStr());
147 if (t->doesFloat()) { 147 if (t->doesFloat()) {
148 mItem->setText(2,"---"); 148 mItem->setText(2,"---");
149 } else { 149 } else {
150 mItem->setText(2,t->dtStartTimeStr()); 150 mItem->setText(2,t->dtStartTimeStr());
151 } 151 }
152 } else { 152 } else {
153 mItem->setText(1,"---"); 153 mItem->setText(1,"---");
154 mItem->setText(2,"---"); 154 mItem->setText(2,"---");
155 } 155 }
156 mItem->setText(3,"---"); 156 mItem->setText(3,"---");
157 mItem->setText(4,"---"); 157 mItem->setText(4,"---");
158 mItem->setText(5,t->isAlarmEnabled() ? i18n("Yes") : i18n("No")); 158 mItem->setText(5,t->isAlarmEnabled() ? i18n("Yes") : i18n("No"));
159 mItem->setText(6, t->recurrence()->recurrenceText()); 159 mItem->setText(6, t->recurrence()->recurrenceText());
160 if (t->hasDueDate()) { 160 if (t->hasDueDate()) {
161 mItem->setText(7,t->dtDueDateStr()); 161 mItem->setText(7,t->dtDueDateStr());
162 if (t->doesFloat()) { 162 if (t->doesFloat()) {
163 mItem->setText(8,"---"); 163 mItem->setText(8,"---");
164 } else { 164 } else {
165 mItem->setText(8,t->dtDueTimeStr()); 165 mItem->setText(8,t->dtDueTimeStr());
166 } 166 }
167 } else { 167 } else {
168 mItem->setText(7,"---"); 168 mItem->setText(7,"---");
169 mItem->setText(8,"---"); 169 mItem->setText(8,"---");
170 } 170 }
171 mItem->setText(9, t->cancelled() ? i18n("Yes") : i18n("No")); 171 mItem->setText(9, t->cancelled() ? i18n("Yes") : i18n("No"));
172 mItem->setText(10,t->categoriesStr()); 172 mItem->setText(10,t->categoriesStr());
173 173
174 QString key; 174 QString key;
175 QDate d; 175 QDate d;
176 if (t->hasDueDate()) { 176 if (t->hasDueDate()) {
177 d = t->dtDue().date(); 177 d = t->dtDue().date();
178 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtDue().time(); 178 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtDue().time();
179 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute()); 179 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute());
180 mItem->setSortKey(7,key); 180 mItem->setSortKey(7,key);
181 } 181 }
182 if ( t->hasStartDate() ) { 182 if ( t->hasStartDate() ) {
183 d = t->dtStart().date(); 183 d = t->dtStart().date();
184 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtStart().time(); 184 QTime tm = t->doesFloat() ? QTime(0,0) : t->dtStart().time();
185 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute()); 185 key.sprintf("%04d%02d%02d%02d%02d",d.year(),d.month(),d.day(),tm.hour(),tm.minute());
186 mItem->setSortKey(1,key); 186 mItem->setSortKey(1,key);
187 } 187 }
188 return true; 188 return true;
189} 189}
190 190
191bool ListItemVisitor::visit(Journal * j) 191bool ListItemVisitor::visit(Journal * j)
192{ 192{
193 QString des = j->description().left(30); 193 QString des = j->description().left(30);
194 des = des.simplifyWhiteSpace (); 194 des = des.simplifyWhiteSpace ();
195 des.replace (QRegExp ("\\n"),"" ); 195 des.replace (QRegExp ("\\n"),"" );
196 des.replace (QRegExp ("\\r"),"" ); 196 des.replace (QRegExp ("\\r"),"" );
197 mItem->setText(0,i18n("Journal: ")+des.left(25)); 197 mItem->setText(0,i18n("Journal: ")+des.left(25));
198 mItem->setText(1,j->dtStartDateStr()); 198 mItem->setText(1,j->dtStartDateStr());
199 mItem->setText(2,"---"); 199 mItem->setText(2,"---");
200 mItem->setText(3,"---"); 200 mItem->setText(3,"---");
201 mItem->setText(4,"---"); 201 mItem->setText(4,"---");
202 mItem->setText(5,"---"); 202 mItem->setText(5,"---");
203 mItem->setText(6,"---"); 203 mItem->setText(6,"---");
204 mItem->setText(7,j->dtStartDateStr()); 204 mItem->setText(7,j->dtStartDateStr());
205 mItem->setText(8,"---"); 205 mItem->setText(8,"---");
206 mItem->setText(9,"---"); 206 mItem->setText(9,"---");
207 mItem->setText(10,i18n("Last Modified: ")+ KGlobal::locale()->formatDateTime( j->lastModified() , true) ); 207 mItem->setText(10,i18n("Last Modified: ")+ KGlobal::locale()->formatDateTime( j->lastModified() , true) );
208 208
209 QString key; 209 QString key;
210 QDate d = j->dtStart().date(); 210 QDate d = j->dtStart().date();
211 key.sprintf("%04d%02d%02d",d.year(),d.month(),d.day()); 211 key.sprintf("%04d%02d%02d",d.year(),d.month(),d.day());
212 mItem->setSortKey(1,key); 212 mItem->setSortKey(1,key);
213 mItem->setSortKey(7,key); 213 mItem->setSortKey(7,key);
214 214
215 return true; 215 return true;
216} 216}
217 217
218KOListView::KOListView(Calendar *calendar, QWidget *parent, 218KOListView::KOListView(Calendar *calendar, QWidget *parent,
219 const char *name) 219 const char *name)
220 : KOEventView(calendar, parent, name) 220 : KOEventView(calendar, parent, name)
221{ 221{
222 mActiveItem = 0; 222 mActiveItem = 0;
223 mListView = new KOListViewListView(this); 223 mListView = new KOListViewListView(this);
224 mListView->addColumn(i18n("Summary")); 224 mListView->addColumn(i18n("Summary"));
225 mListView->addColumn(i18n("Start Date")); 225 mListView->addColumn(i18n("Start Date"));
226 mListView->addColumn(i18n("Start Time")); 226 mListView->addColumn(i18n("Start Time"));
227 mListView->addColumn(i18n("End Date")); 227 mListView->addColumn(i18n("End Date"));
228 mListView->addColumn(i18n("End Time")); 228 mListView->addColumn(i18n("End Time"));
229 mListView->addColumn(i18n("Alarm")); // alarm set? 229 mListView->addColumn(i18n("Alarm")); // alarm set?
230 mListView->addColumn(i18n("Recurs")); // recurs? 230 mListView->addColumn(i18n("Recurs")); // recurs?
231 mListView->addColumn(i18n("Due Date")); 231 mListView->addColumn(i18n("Due Date"));
232 mListView->addColumn(i18n("Due Time")); 232 mListView->addColumn(i18n("Due Time"));
233 mListView->addColumn(i18n("Cancelled")); 233 mListView->addColumn(i18n("Cancelled"));
234 mListView->addColumn(i18n("Categories")); 234 mListView->addColumn(i18n("Categories"));
235 235
236 mListView->setColumnAlignment(0,AlignLeft); 236 mListView->setColumnAlignment(0,AlignLeft);
237 mListView->setColumnAlignment(1,AlignLeft); 237 mListView->setColumnAlignment(1,AlignLeft);
238 mListView->setColumnAlignment(2,AlignHCenter); 238 mListView->setColumnAlignment(2,AlignHCenter);
239 mListView->setColumnAlignment(3,AlignLeft); 239 mListView->setColumnAlignment(3,AlignLeft);
240 mListView->setColumnAlignment(4,AlignHCenter); 240 mListView->setColumnAlignment(4,AlignHCenter);
241 mListView->setColumnAlignment(5,AlignLeft); 241 mListView->setColumnAlignment(5,AlignLeft);
242 mListView->setColumnAlignment(6,AlignLeft); 242 mListView->setColumnAlignment(6,AlignLeft);
243 mListView->setColumnAlignment(7,AlignLeft); 243 mListView->setColumnAlignment(7,AlignLeft);
244 mListView->setColumnAlignment(8,AlignLeft); 244 mListView->setColumnAlignment(8,AlignLeft);
245 mListView->setColumnAlignment(9,AlignLeft); 245 mListView->setColumnAlignment(9,AlignLeft);
246 mListView->setColumnAlignment(10,AlignLeft); 246 mListView->setColumnAlignment(10,AlignLeft);
247 mListView->setColumnWidthMode(10, QListView::Manual); 247 mListView->setColumnWidthMode(10, QListView::Manual);
248 new KOListViewWhatsThis(mListView->viewport(),this); 248 new KOListViewWhatsThis(mListView->viewport(),this);
249 249
250 int iii = 0; 250 int iii = 0;
251 for ( iii = 0; iii< 10 ; ++iii ) 251 for ( iii = 0; iii< 10 ; ++iii )
252 mListView->setColumnWidthMode( iii, QListView::Manual ); 252 mListView->setColumnWidthMode( iii, QListView::Manual );
253 253
254 QBoxLayout *layoutTop = new QVBoxLayout(this); 254 QBoxLayout *layoutTop = new QVBoxLayout(this);
255 layoutTop->addWidget(mListView); 255 layoutTop->addWidget(mListView);
256 mListView->setFont ( KOPrefs::instance()->mListViewFont ); 256 mListView->setFont ( KOPrefs::instance()->mListViewFont );
257 mPopupMenu = eventPopup(); 257 mPopupMenu = eventPopup();
258 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 258 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
259 i18n("Select all"),this, 259 i18n("Select all"),this,
260 SLOT(allSelection()),true); 260 SLOT(allSelection()),true);
261 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 261 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
262 i18n("Deselect all"),this, 262 i18n("Deselect all"),this,
263 SLOT(clearSelection()),true); 263 SLOT(clearSelection()),true);
264 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 264 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
265 i18n("Delete all selected"),this, 265 i18n("Delete all selected"),this,
266 SLOT(deleteAll()),true); 266 SLOT(deleteAll()),true);
267 mPopupMenu->insertSeparator(); 267 mPopupMenu->insertSeparator();
268 QPopupMenu * exportPO = new QPopupMenu ( this ); 268 QPopupMenu * exportPO = new QPopupMenu ( this );
269 mPopupMenu->insertItem( i18n("Export selected"), exportPO ); 269 mPopupMenu->insertItem( i18n("Export selected"), exportPO );
270 exportPO->insertItem( i18n("As iCal (ics) file..."),this, 270 exportPO->insertItem( i18n("As iCal (ics) file..."),this,
271 SLOT(saveToFile())); 271 SLOT(saveToFile()));
272 exportPO->insertItem( i18n("As vCal (vcs) file..."),this, 272 exportPO->insertItem( i18n("As vCal (vcs) file..."),this,
273 SLOT(saveToFileVCS())); 273 SLOT(saveToFileVCS()));
274 exportPO->insertItem( i18n("Journal/Details..."),this, 274 exportPO->insertItem( i18n("Journal/Details..."),this,
275 SLOT(saveDescriptionToFile())); 275 SLOT(saveDescriptionToFile()));
276 // mPopupMenu->insertSeparator(); 276 // mPopupMenu->insertSeparator();
277 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 277 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
278 i18n("Add Categ. to selected..."),this, 278 i18n("Add Categ. to selected..."),this,
279 SLOT(addCat()),true); 279 SLOT(addCat()),true);
280 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 280 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
281 i18n("Set Categ. for selected..."),this, 281 i18n("Set Categ. for selected..."),this,
282 SLOT(setCat()),true); 282 SLOT(setCat()),true);
283 //mPopupMenu->insertSeparator(); 283 //mPopupMenu->insertSeparator();
284 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 284 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
285 i18n("Set alarm for selected..."),this, 285 i18n("Set alarm for selected..."),this,
286 SLOT(setAlarm()),true); 286 SLOT(setAlarm()),true);
287 287
288 288
289#ifndef DESKTOP_VERSION 289#ifndef DESKTOP_VERSION
290 mPopupMenu->insertSeparator(); 290 mPopupMenu->insertSeparator();
291 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 291 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
292 i18n("Beam selected via IR"),this, 292 i18n("Beam selected via IR"),this,
293 SLOT(beamSelected()),true); 293 SLOT(beamSelected()),true);
294#endif 294#endif
295 /* 295 /*
296 mPopupMenu = new QPopupMenu; 296 mPopupMenu = new QPopupMenu;
297 mPopupMenu->insertItem(i18n("Edit Event"), this, 297 mPopupMenu->insertItem(i18n("Edit Event"), this,
298 SLOT (editEvent())); 298 SLOT (editEvent()));
299 mPopupMenu->insertItem(SmallIcon("delete"), i18n("Delete Event"), this, 299 mPopupMenu->insertItem(SmallIcon("delete"), i18n("Delete Event"), this,
300 SLOT (deleteEvent())); 300 SLOT (deleteEvent()));
301 mPopupMenu->insertSeparator(); 301 mPopupMenu->insertSeparator();
302 mPopupMenu->insertItem(i18n("Show Dates"), this, 302 mPopupMenu->insertItem(i18n("Show Dates"), this,
303 SLOT(showDates())); 303 SLOT(showDates()));
304 mPopupMenu->insertItem(i18n("Hide Dates"), this, 304 mPopupMenu->insertItem(i18n("Hide Dates"), this,
305 SLOT(hideDates())); 305 SLOT(hideDates()));
306 */ 306 */
307 QObject::connect(mListView,SIGNAL( newEvent()), 307 QObject::connect(mListView,SIGNAL( newEvent()),
308 this,SIGNAL(signalNewEvent())); 308 this,SIGNAL(signalNewEvent()));
309 QObject::connect(mListView,SIGNAL(doubleClicked(QListViewItem *)), 309 QObject::connect(mListView,SIGNAL(doubleClicked(QListViewItem *)),
310 this,SLOT(defaultItemAction(QListViewItem *))); 310 this,SLOT(defaultItemAction(QListViewItem *)));
311 QObject::connect(mListView,SIGNAL(rightButtonClicked ( QListViewItem *, 311 QObject::connect(mListView,SIGNAL(rightButtonClicked ( QListViewItem *,
312 const QPoint &, int )), 312 const QPoint &, int )),
313 this,SLOT(popupMenu(QListViewItem *,const QPoint &,int))); 313 this,SLOT(popupMenu(QListViewItem *,const QPoint &,int)));
314 QObject::connect(mListView,SIGNAL(currentChanged(QListViewItem *)), 314 QObject::connect(mListView,SIGNAL(currentChanged(QListViewItem *)),
315 SLOT(processSelectionChange(QListViewItem *))); 315 SLOT(processSelectionChange(QListViewItem *)));
316 QObject::connect(mListView,SIGNAL(showIncidence(Incidence *)), 316 QObject::connect(mListView,SIGNAL(showIncidence(Incidence *)),
317 SIGNAL(showIncidenceSignal(Incidence *)) ); 317 SIGNAL(showIncidenceSignal(Incidence *)) );
318 318
319 readSettings(KOGlobals::config(),"KOListView Layout"); 319 readSettings(KOGlobals::config(),"KOListView Layout");
320} 320}
321 321
322KOListView::~KOListView() 322KOListView::~KOListView()
323{ 323{
324 delete mPopupMenu; 324 delete mPopupMenu;
325} 325}
326QString KOListView::getWhatsThisText(QPoint p) 326QString KOListView::getWhatsThisText(QPoint p)
327{ 327{
328 KOListViewItem* item = ( KOListViewItem* ) mListView->itemAt( p ); 328 KOListViewItem* item = ( KOListViewItem* ) mListView->itemAt( p );
329 if ( item ) 329 if ( item )
330 return KIncidenceFormatter::instance()->getFormattedText( item->data(), 330 return KIncidenceFormatter::instance()->getFormattedText( item->data(),
331 KOPrefs::instance()->mWTshowDetails, 331 KOPrefs::instance()->mWTshowDetails,
332 KOPrefs::instance()->mWTshowCreated, 332 KOPrefs::instance()->mWTshowCreated,
333 KOPrefs::instance()->mWTshowChanged); 333 KOPrefs::instance()->mWTshowChanged);
334 return i18n("That is the list view" ); 334 return i18n("That is the list view" );
335 335
336} 336}
337 337
338void KOListView::updateList() 338void KOListView::updateList()
339{ 339{
340 // qDebug(" KOListView::updateList() "); 340 // qDebug(" KOListView::updateList() ");
341 341
342} 342}
343 343
344void KOListView::addCat( ) 344void KOListView::addCat( )
345{ 345{
346 setCategories( false ); 346 setCategories( false );
347} 347}
348void KOListView::setCat() 348void KOListView::setCat()
349{ 349{
350 setCategories( true ); 350 setCategories( true );
351} 351}
352void KOListView::setAlarm() 352void KOListView::setAlarm()
353{ 353{
354 KOAlarmPrefs kap( this); 354 KOAlarmPrefs kap( this);
355 if ( !kap.exec() ) 355 if ( !kap.exec() )
356 return; 356 return;
357 357
358 358
359 QStringList itemList; 359 QStringList itemList;
360 QPtrList<KOListViewItem> sel ; 360 QPtrList<KOListViewItem> sel ;
361 QListViewItem *qitem = mListView->firstChild (); 361 QListViewItem *qitem = mListView->firstChild ();
362 while ( qitem ) { 362 while ( qitem ) {
363 if ( qitem->isSelected() ) { 363 if ( qitem->isSelected() ) {
364 Incidence* inc = ((KOListViewItem *) qitem)->data(); 364 Incidence* inc = ((KOListViewItem *) qitem)->data();
365 if ( inc->type() != "Journal" ) { 365 if ( inc->type() != "Journal" ) {
366 if ( inc->type() == "Todo" ) { 366 if ( inc->type() == "Todo" ) {
367 if ( ((Todo*)inc)->hasDueDate() ) 367 if ( ((Todo*)inc)->hasDueDate() )
368 sel.append(((KOListViewItem *)qitem)); 368 sel.append(((KOListViewItem *)qitem));
369 } else 369 } else
370 sel.append(((KOListViewItem *)qitem)); 370 sel.append(((KOListViewItem *)qitem));
371 } 371 }
372 } 372 }
373 qitem = qitem->nextSibling(); 373 qitem = qitem->nextSibling();
374 } 374 }
375 int count = 0; 375 int count = 0;
376 KOListViewItem * item, *temp; 376 KOListViewItem * item, *temp;
377 item = sel.first(); 377 item = sel.first();
378 Incidence* inc; 378 Incidence* inc;
379 while ( item ) { 379 while ( item ) {
380 inc = item->data(); 380 inc = item->data();
381 ++count; 381 ++count;
382 if (kap.mAlarmButton->isChecked()) { 382 if (kap.mAlarmButton->isChecked()) {
383 if (inc->alarms().count() == 0) 383 if (inc->alarms().count() == 0)
384 inc->newAlarm(); 384 inc->newAlarm();
385 QPtrList<Alarm> alarms = inc->alarms(); 385 QPtrList<Alarm> alarms = inc->alarms();
386 Alarm *alarm; 386 Alarm *alarm;
387 for (alarm = alarms.first(); alarm; alarm = alarms.next() ) { 387 for (alarm = alarms.first(); alarm; alarm = alarms.next() ) {
388 alarm->setEnabled(true); 388 alarm->setEnabled(true);
389 int j = kap.mAlarmTimeEdit->value()* -60; 389 int j = kap.mAlarmTimeEdit->value()* -60;
390 if (kap.mAlarmIncrCombo->currentItem() == 1) 390 if (kap.mAlarmIncrCombo->currentItem() == 1)
391 j = j * 60; 391 j = j * 60;
392 else if (kap.mAlarmIncrCombo->currentItem() == 2) 392 else if (kap.mAlarmIncrCombo->currentItem() == 2)
393 j = j * (60 * 24); 393 j = j * (60 * 24);
394 alarm->setStartOffset( j ); 394 alarm->setStartOffset( j );
395 395
396 if (!kap.mAlarmProgram.isEmpty() && kap.mAlarmProgramButton->isOn()) { 396 if (!kap.mAlarmProgram.isEmpty() && kap.mAlarmProgramButton->isOn()) {
397 alarm->setProcedureAlarm(kap.mAlarmProgram); 397 alarm->setProcedureAlarm(kap.mAlarmProgram);
398 } 398 }
399 else if (!kap.mAlarmSound.isEmpty() && kap.mAlarmSoundButton->isOn()) 399 else if (!kap.mAlarmSound.isEmpty() && kap.mAlarmSoundButton->isOn())
400 alarm->setAudioAlarm(kap.mAlarmSound); 400 alarm->setAudioAlarm(kap.mAlarmSound);
401 else 401 else
402 alarm->setType(Alarm::Invalid); 402 alarm->setType(Alarm::Invalid);
403 //alarm->setAudioAlarm("default"); 403 //alarm->setAudioAlarm("default");
404 // TODO: Deal with multiple alarms 404 // TODO: Deal with multiple alarms
405 break; // For now, stop after the first alarm 405 break; // For now, stop after the first alarm
406 } 406 }
407 } else { 407 } else {
408 Alarm* alarm = inc->alarms().first(); 408 Alarm* alarm = inc->alarms().first();
409 if ( alarm ) { 409 if ( alarm ) {
410 alarm->setEnabled(false); 410 alarm->setEnabled(false);
411 alarm->setType(Alarm::Invalid); 411 alarm->setType(Alarm::Invalid);
412 } 412 }
413 } 413 }
414 temp = item; 414 temp = item;
415 item = sel.next(); 415 item = sel.next();
416 mUidDict.remove( inc->uid() ); 416 mUidDict.remove( inc->uid() );
417 delete temp;; 417 delete temp;;
418 addIncidence( inc ); 418 addIncidence( inc );
419 } 419 }
420 topLevelWidget()->setCaption( i18n("Canged alarm for %1 items").arg( count ) ); 420 topLevelWidget()->setCaption( i18n("Canged alarm for %1 items").arg( count ) );
421 qDebug("KO: Set alarm for %d items", count); 421 qDebug("KO: Set alarm for %d items", count);
422 calendar()->reInitAlarmSettings(); 422 calendar()->reInitAlarmSettings();
423} 423}
424void KOListView::setCategories( bool removeOld ) 424void KOListView::setCategories( bool removeOld )
425{ 425{
426 426
427 KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 ); 427 KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 );
428 if (! csd->exec()) { 428 if (! csd->exec()) {
429 delete csd; 429 delete csd;
430 return; 430 return;
431 } 431 }
432 QStringList catList = csd->selectedCategories(); 432 QStringList catList = csd->selectedCategories();
433 delete csd; 433 delete csd;
434 // if ( catList.count() == 0 ) 434 // if ( catList.count() == 0 )
435 // return; 435 // return;
436 catList.sort(); 436 catList.sort();
437 QString categoriesStr = catList.join(","); 437 QString categoriesStr = catList.join(",");
438 int i; 438 int i;
439 QStringList itemList; 439 QStringList itemList;
440 QPtrList<KOListViewItem> sel ; 440 QPtrList<KOListViewItem> sel ;
441 QListViewItem *qitem = mListView->firstChild (); 441 QListViewItem *qitem = mListView->firstChild ();
442 while ( qitem ) { 442 while ( qitem ) {
443 if ( qitem->isSelected() ) { 443 if ( qitem->isSelected() ) {
444 sel.append(((KOListViewItem *)qitem)); 444 sel.append(((KOListViewItem *)qitem));
445 } 445 }
446 qitem = qitem->nextSibling(); 446 qitem = qitem->nextSibling();
447 } 447 }
448 KOListViewItem * item, *temp; 448 KOListViewItem * item, *temp;
449 item = sel.first(); 449 item = sel.first();
450 Incidence* inc; 450 Incidence* inc;
451 while ( item ) { 451 while ( item ) {
452 inc = item->data(); 452 inc = item->data();
453 if ( removeOld ) { 453 if ( removeOld ) {
454 inc->setCategories( categoriesStr ); 454 inc->setCategories( categoriesStr );
455 } else { 455 } else {
456 itemList = QStringList::split (",", inc->categoriesStr() ); 456 itemList = QStringList::split (",", inc->categoriesStr() );
457 for( i = 0; i< catList.count(); ++i ) { 457 for( i = 0; i< catList.count(); ++i ) {
458 if ( !itemList.contains (catList[i])) 458 if ( !itemList.contains (catList[i]))
459 itemList.append( catList[i] ); 459 itemList.append( catList[i] );
460 } 460 }
461 itemList.sort(); 461 itemList.sort();
462 inc->setCategories( itemList.join(",") ); 462 inc->setCategories( itemList.join(",") );
463 } 463 }
464 temp = item; 464 temp = item;
465 item = sel.next(); 465 item = sel.next();
466 mUidDict.remove( inc->uid() ); 466 mUidDict.remove( inc->uid() );
467 delete temp;; 467 delete temp;;
468 addIncidence( inc ); 468 addIncidence( inc );
469 } 469 }
470} 470}
471 471
472void KOListView::beamSelected() 472void KOListView::beamSelected()
473{ 473{
474 int icount = 0; 474 int icount = 0;
475 QPtrList<Incidence> delSel ; 475 QPtrList<Incidence> delSel ;
476 QListViewItem *item = mListView->firstChild (); 476 QListViewItem *item = mListView->firstChild ();
477 while ( item ) { 477 while ( item ) {
478 if ( item->isSelected() ) { 478 if ( item->isSelected() ) {
479 delSel.append(((KOListViewItem *)item)->data()); 479 delSel.append(((KOListViewItem *)item)->data());
480 ++icount; 480 ++icount;
481 } 481 }
482 482
483 item = item->nextSibling(); 483 item = item->nextSibling();
484 } 484 }
485 if ( icount ) { 485 if ( icount ) {
486 emit beamIncidenceList( delSel ); 486 emit beamIncidenceList( delSel );
487 return; 487 return;
488 QString fn ; 488 QString fn ;
489 fn = QDir::homeDirPath()+"/kopitempbeamfile.vcs"; 489 fn = QDir::homeDirPath()+"/kopitempbeamfile.vcs";
490 QString mes; 490 QString mes;
491 bool createbup = true; 491 bool createbup = true;
492 if ( createbup ) { 492 if ( createbup ) {
493 QString description = "\n"; 493 QString description = "\n";
494 CalendarLocal* cal = new CalendarLocal(); 494 CalendarLocal* cal = new CalendarLocal();
495 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 495 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
496 Incidence *incidence = delSel.first(); 496 Incidence *incidence = delSel.first();
497 while ( incidence ) { 497 while ( incidence ) {
498 Incidence *in = incidence->clone(); 498 Incidence *in = incidence->clone();
499 description += in->summary() + "\n"; 499 description += in->summary() + "\n";
500 cal->addIncidence( in ); 500 cal->addIncidence( in );
501 incidence = delSel.next(); 501 incidence = delSel.next();
502 } 502 }
503 FileStorage storage( cal, fn, new VCalFormat ); 503 FileStorage storage( cal, fn, new VCalFormat );
504 storage.save(); 504 storage.save();
505 delete cal; 505 delete cal;
506 mes = i18n("KO/Pi: Ready for beaming"); 506 mes = i18n("KO/Pi: Ready for beaming");
507 topLevelWidget()->setCaption(mes); 507 topLevelWidget()->setCaption(mes);
508 508
509#ifndef DESKTOP_VERSION 509#ifndef DESKTOP_VERSION
510 Ir *ir = new Ir( this ); 510 Ir *ir = new Ir( this );
511 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 511 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
512 ir->send( fn, description, "text/x-vCalendar" ); 512 ir->send( fn, description, "text/x-vCalendar" );
513#endif 513#endif
514 } 514 }
515 } 515 }
516} 516}
517void KOListView::beamDone( Ir *ir ) 517void KOListView::beamDone( Ir *ir )
518{ 518{
519#ifndef DESKTOP_VERSION 519#ifndef DESKTOP_VERSION
520 delete ir; 520 delete ir;
521#endif 521#endif
522 topLevelWidget()->setCaption(i18n("KO/Pi:Beaming done")); 522 topLevelWidget()->setCaption(i18n("KO/Pi:Beaming done"));
523} 523}
524 524
525void KOListView::saveDescriptionToFile() 525void KOListView::saveDescriptionToFile()
526{ 526{
527 527
528 int result = QMessageBox::warning( this, i18n("KO/Pi: Information!"), 528 int result = QMessageBox::warning( this, i18n("KO/Pi: Information!"),
529 i18n("This saves the text/details of selected\nJournals and Events/Todos\nto a text file."), 529 i18n("This saves the text/details of selected\nJournals and Events/Todos\nto a text file."),
530 i18n("Continue"), i18n("Cancel"), 0, 530 i18n("Continue"), i18n("Cancel"), 0,
531 0, 1 ); 531 0, 1 );
532 if ( result != 0 ) { 532 if ( result != 0 ) {
533 return; 533 return;
534 } 534 }
535 int icount = 0; 535 int icount = 0;
536 QPtrList<Incidence> delSel ; 536 QPtrList<Incidence> delSel ;
537 QListViewItem *item = mListView->firstChild (); 537 QListViewItem *item = mListView->firstChild ();
538 while ( item ) { 538 while ( item ) {
539 if ( item->isSelected() ) { 539 if ( item->isSelected() ) {
540 delSel.append(((KOListViewItem *)item)->data()); 540 delSel.append(((KOListViewItem *)item)->data());
541 ++icount; 541 ++icount;
542 } 542 }
543 543
544 item = item->nextSibling(); 544 item = item->nextSibling();
545 } 545 }
546 if ( icount ) { 546 if ( icount ) {
547 QString fn = KOPrefs::instance()->mLastSaveFile; 547 QString fn = KOPrefs::instance()->mLastSaveFile;
548 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this ); 548 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this );
549 549
550 if ( fn == "" ) 550 if ( fn == "" )
551 return; 551 return;
552 QFileInfo info; 552 QFileInfo info;
553 info.setFile( fn ); 553 info.setFile( fn );
554 QString mes; 554 QString mes;
555 bool createbup = true; 555 bool createbup = true;
556 if ( info. exists() ) { 556 if ( info. exists() ) {
557 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); 557 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) );
558 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, 558 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes,
559 i18n("Overwrite!"), i18n("Cancel"), 0, 559 i18n("Overwrite!"), i18n("Cancel"), 0,
560 0, 1 ); 560 0, 1 );
561 if ( result != 0 ) { 561 if ( result != 0 ) {
562 createbup = false; 562 createbup = false;
563 } 563 }
564 } 564 }
565 if ( createbup ) { 565 if ( createbup ) {
566 QString text = i18n("KO/Pi Description/Journal save file.\nSave date: ") + 566 QString text = i18n("KO/Pi Description/Journal save file.\nSave date: ") +
567 KGlobal::locale()->formatDateTime(QDateTime::currentDateTime(), false); 567 KGlobal::locale()->formatDateTime(QDateTime::currentDateTime(), false);
568 Incidence *incidence = delSel.first(); 568 Incidence *incidence = delSel.first();
569 icount = 0; 569 icount = 0;
570 while ( incidence ) { 570 while ( incidence ) {
571 if ( incidence->type() == "Journal" ) { 571 if ( incidence->type() == "Journal" ) {
572 text += "\n************************************\n"; 572 text += "\n************************************\n";
573 text += i18n("Journal from: ") +incidence->dtStartDateStr( false ); 573 text += i18n("Journal from: ") +incidence->dtStartDateStr( false );
574 text +="\n" + i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false); 574 text +="\n" + i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false);
575 text +="\n" + i18n("Description: ") + "\n"+ incidence->description(); 575 text +="\n" + i18n("Description: ") + "\n"+ incidence->description();
576 ++icount; 576 ++icount;
577 577
578 } else { 578 } else {
579 if ( !incidence->description().isEmpty() ) { 579 if ( !incidence->description().isEmpty() ) {
580 text += "\n************************************\n"; 580 text += "\n************************************\n";
581 if ( incidence->type() == "Todo" ) 581 if ( incidence->type() == "Todo" )
582 text += i18n("To-Do: "); 582 text += i18n("To-Do: ");
583 text += incidence->summary(); 583 text += incidence->summary();
584 if ( incidence->hasStartDate() ) 584 if ( incidence->hasStartDate() )
585 text +="\n"+ i18n("Start Date: ") + incidence->dtStartStr( false ); 585 text +="\n"+ i18n("Start Date: ") + incidence->dtStartStr( false );
586 text +="\n"+ i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false); 586 text +="\n"+ i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false);
587 if ( !incidence->location().isEmpty() ) 587 if ( !incidence->location().isEmpty() )
588 text += "\n" +i18n("Location: ") + incidence->location(); 588 text += "\n" +i18n("Location: ") + incidence->location();
589 text += "\n" + i18n("Description: ") + "\n" + incidence->description(); 589 text += "\n" + i18n("Description: ") + "\n" + incidence->description();
590 ++icount; 590 ++icount;
591 591
592 } 592 }
593 } 593 }
594 incidence = delSel.next(); 594 incidence = delSel.next();
595 } 595 }
596 QFile file( fn ); 596 QFile file( fn );
597 if (!file.open( IO_WriteOnly ) ) { 597 if (!file.open( IO_WriteOnly ) ) {
598 topLevelWidget()->setCaption(i18n("File open error - nothing saved!") ); 598 topLevelWidget()->setCaption(i18n("File open error - nothing saved!") );
599 return; 599 return;
600 } 600 }
601 QTextStream ts( &file ); 601 QTextStream ts( &file );
602 ts << text; 602 ts << text;
603 file.close(); 603 file.close();
604 //qDebug("%s ", text.latin1()); 604 //qDebug("%s ", text.latin1());
605 mes = i18n("KO/Pi:Saved %1 descriptions/journals").arg(icount ); 605 mes = i18n("KO/Pi:Saved %1 descriptions/journals").arg(icount );
606 KOPrefs::instance()->mLastSaveFile = fn; 606 KOPrefs::instance()->mLastSaveFile = fn;
607 topLevelWidget()->setCaption(mes); 607 topLevelWidget()->setCaption(mes);
608 } 608 }
609 } 609 }
610} 610}
611void KOListView::saveToFileVCS() 611void KOListView::saveToFileVCS()
612{ 612{
613 writeToFile( false ); 613 writeToFile( false );
614} 614}
615void KOListView::saveToFile() 615void KOListView::saveToFile()
616{ 616{
617 writeToFile( true ); 617 writeToFile( true );
618} 618}
619void KOListView::writeToFile( bool iCal ) 619void KOListView::writeToFile( bool iCal )
620{ 620{
621 621
622 int icount = 0; 622 int icount = 0;
623 QPtrList<Incidence> delSel ; 623 QPtrList<Incidence> delSel ;
624 QListViewItem *item = mListView->firstChild (); 624 QListViewItem *item = mListView->firstChild ();
625 bool journal = iCal; // warn only for vCal
625 while ( item ) { 626 while ( item ) {
626 if ( item->isSelected() ) { 627 if ( item->isSelected() ) {
628 if ( !journal )
629 if ( ((KOListViewItem *)item)->data()->type() == "Journal")
630 journal = true;
627 delSel.append(((KOListViewItem *)item)->data()); 631 delSel.append(((KOListViewItem *)item)->data());
628 ++icount; 632 ++icount;
629 } 633 }
630 634
631 item = item->nextSibling(); 635 item = item->nextSibling();
632 } 636 }
637 if ( !iCal && journal ) {
638 int result = KMessageBox::warningContinueCancel(this,
639 i18n("The journal entries can not be\nexported to a vCalendar file."),
640 i18n("Data Loss Warning"),i18n("Proceed"),i18n("Cancel"),
641 true);
642 if (result != KMessageBox::Continue) return;
643 }
633 if ( icount ) { 644 if ( icount ) {
634 QString fn = KOPrefs::instance()->mLastSaveFile; 645 QString fn = KOPrefs::instance()->mLastSaveFile;
635 QString extension; 646 QString extension;
636 if ( iCal ) { 647 if ( iCal ) {
637 if ( fn.right( 4 ).lower() == ".vcs" ) { 648 if ( fn.right( 4 ).lower() == ".vcs" ) {
638 fn = fn.left( fn.length() -3) + "ics"; 649 fn = fn.left( fn.length() -3) + "ics";
639 } 650 }
640 } else { 651 } else {
641 if ( fn.right( 4 ).lower() == ".ics" ) { 652 if ( fn.right( 4 ).lower() == ".ics" ) {
642 fn = fn.left( fn.length() -3) + "vcs"; 653 fn = fn.left( fn.length() -3) + "vcs";
643 } 654 }
644 } 655 }
645 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this ); 656 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this );
646 657
647 if ( fn == "" ) 658 if ( fn == "" )
648 return; 659 return;
649 QFileInfo info; 660 QFileInfo info;
650 info.setFile( fn ); 661 info.setFile( fn );
651 QString mes; 662 QString mes;
652 bool createbup = true; 663 bool createbup = true;
653 if ( info. exists() ) { 664 if ( info. exists() ) {
654 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); 665 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) );
655 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, 666 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes,
656 i18n("Overwrite!"), i18n("Cancel"), 0, 667 i18n("Overwrite!"), i18n("Cancel"), 0,
657 0, 1 ); 668 0, 1 );
658 if ( result != 0 ) { 669 if ( result != 0 ) {
659 createbup = false; 670 createbup = false;
660 } 671 }
661 } 672 }
662 if ( createbup ) { 673 if ( createbup ) {
663 CalendarLocal cal; 674 CalendarLocal cal;
664 cal.setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 675 cal.setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
665 Incidence *incidence = delSel.first(); 676 Incidence *incidence = delSel.first();
666 while ( incidence ) { 677 while ( incidence ) {
667 cal.addIncidence( incidence->clone() ); 678 cal.addIncidence( incidence->clone() );
668 incidence = delSel.next(); 679 incidence = delSel.next();
669 } 680 }
670 if ( iCal ) { 681 if ( iCal ) {
671 ICalFormat format; 682 ICalFormat format;
672 format.save( &cal, fn ); 683 format.save( &cal, fn );
673 } else { 684 } else {
685
674 VCalFormat format; 686 VCalFormat format;
675 format.save( &cal, fn ); 687 format.save( &cal, fn );
676 } 688 }
677 mes = i18n("KO/Pi:Saved %1").arg(fn ); 689 mes = i18n("KO/Pi:Saved %1").arg(fn );
678 KOPrefs::instance()->mLastSaveFile = fn; 690 KOPrefs::instance()->mLastSaveFile = fn;
679 topLevelWidget()->setCaption(mes); 691 topLevelWidget()->setCaption(mes);
680 } 692 }
681 } 693 }
682} 694}
683void KOListView::deleteAll() 695void KOListView::deleteAll()
684{ 696{
685 int icount = 0; 697 int icount = 0;
686 QPtrList<Incidence> delSel ; 698 QPtrList<Incidence> delSel ;
687 QListViewItem *item = mListView->firstChild (); 699 QListViewItem *item = mListView->firstChild ();
688 while ( item ) { 700 while ( item ) {
689 if ( item->isSelected() ) { 701 if ( item->isSelected() ) {
690 delSel.append(((KOListViewItem *)item)->data()); 702 delSel.append(((KOListViewItem *)item)->data());
691 ++icount; 703 ++icount;
692 } 704 }
693 705
694 item = item->nextSibling(); 706 item = item->nextSibling();
695 } 707 }
696 if ( icount ) { 708 if ( icount ) {
697 Incidence *incidence = delSel.first(); 709 Incidence *incidence = delSel.first();
698 Incidence *toDelete; 710 Incidence *toDelete;
699 KOPrefs *p = KOPrefs::instance(); 711 KOPrefs *p = KOPrefs::instance();
700 bool confirm = p->mConfirm; 712 bool confirm = p->mConfirm;
701 QString mess; 713 QString mess;
702 mess = mess.sprintf( i18n("You have %d item(s) selected.\n"), icount ); 714 mess = mess.sprintf( i18n("You have %d item(s) selected.\n"), icount );
703 if ( KMessageBox::Continue == KMessageBox::warningContinueCancel(this, mess + i18n("All selected items will be\npermanently deleted.\n(Deleting items will take\nsome time on a PDA)\n"), i18n("KO/Pi Confirmation"),i18n("Delete")) ) { 715 if ( KMessageBox::Continue == KMessageBox::warningContinueCancel(this, mess + i18n("All selected items will be\npermanently deleted.\n(Deleting items will take\nsome time on a PDA)\n"), i18n("KO/Pi Confirmation"),i18n("Delete")) ) {
704 p->mConfirm = false; 716 p->mConfirm = false;
705 int delCounter = 0; 717 int delCounter = 0;
706 QDialog dia ( this, "p-dialog", true ); 718 QDialog dia ( this, "p-dialog", true );
707 QLabel lab (i18n("Close dialog to abort deletion!"), &dia ); 719 QLabel lab (i18n("Close dialog to abort deletion!"), &dia );
708 QVBoxLayout lay( &dia ); 720 QVBoxLayout lay( &dia );
709 lay.setMargin(7); 721 lay.setMargin(7);
710 lay.setSpacing(7); 722 lay.setSpacing(7);
711 lay.addWidget( &lab); 723 lay.addWidget( &lab);
712 QProgressBar bar( icount, &dia ); 724 QProgressBar bar( icount, &dia );
713 lay.addWidget( &bar); 725 lay.addWidget( &bar);
714 int w = 220; 726 int w = 220;
715 int h = 50; 727 int h = 50;
716 int dw = QApplication::desktop()->width(); 728 int dw = QApplication::desktop()->width();
717 int dh = QApplication::desktop()->height(); 729 int dh = QApplication::desktop()->height();
718 dia.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 730 dia.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
719 //dia.resize( 240,50 ); 731 //dia.resize( 240,50 );
720 dia.show(); 732 dia.show();
721 733
722 while ( incidence ) { 734 while ( incidence ) {
723 bar.setProgress( delCounter ); 735 bar.setProgress( delCounter );
724 mess = mess.sprintf( i18n("Deleting item %d ..."), ++delCounter ); 736 mess = mess.sprintf( i18n("Deleting item %d ..."), ++delCounter );
725 dia.setCaption( mess ); 737 dia.setCaption( mess );
726 qApp->processEvents(); 738 qApp->processEvents();
727 toDelete = (incidence); 739 toDelete = (incidence);
728 incidence = delSel.next(); 740 incidence = delSel.next();
729 emit deleteIncidenceSignal(toDelete ); 741 emit deleteIncidenceSignal(toDelete );
730 if ( dia.result() != 0 ) 742 if ( dia.result() != 0 )
731 break; 743 break;
732 744
733 } 745 }
734 mess = mess.sprintf( i18n("%d items remaining in list."), count() ); 746 mess = mess.sprintf( i18n("%d items remaining in list."), count() );
735 topLevelWidget ()->setCaption( mess ); 747 topLevelWidget ()->setCaption( mess );
736 p->mConfirm = confirm; 748 p->mConfirm = confirm;
737 } 749 }
738 } 750 }
739 751
740 752
741} 753}
742int KOListView::maxDatesHint() 754int KOListView::maxDatesHint()
743{ 755{
744 return 0; 756 return 0;
745} 757}
746 758
747int KOListView::currentDateCount() 759int KOListView::currentDateCount()
748{ 760{
749 return 0; 761 return 0;
750} 762}
751 763
752QPtrList<Incidence> KOListView::selectedIncidences() 764QPtrList<Incidence> KOListView::selectedIncidences()
753{ 765{
754 QPtrList<Incidence> eventList; 766 QPtrList<Incidence> eventList;
755 QListViewItem *item = mListView->firstChild (); 767 QListViewItem *item = mListView->firstChild ();
756 while ( item ) { 768 while ( item ) {
757 if ( item->isSelected() ) { 769 if ( item->isSelected() ) {
758 eventList.append(((KOListViewItem *)item)->data()); 770 eventList.append(((KOListViewItem *)item)->data());
759 } 771 }
760 772
761 item = item->nextSibling(); 773 item = item->nextSibling();
762 } 774 }
763 775
764 // // QListViewItem *item = mListView->selectedItem(); 776 // // QListViewItem *item = mListView->selectedItem();
765 //if (item) eventList.append(((KOListViewItem *)item)->data()); 777 //if (item) eventList.append(((KOListViewItem *)item)->data());
766 778
767 return eventList; 779 return eventList;
768} 780}
769 781
770DateList KOListView::selectedDates() 782DateList KOListView::selectedDates()
771{ 783{
772 DateList eventList; 784 DateList eventList;
773 return eventList; 785 return eventList;
774} 786}
775 787
776void KOListView::showDates(bool show) 788void KOListView::showDates(bool show)
777{ 789{
778 // Shouldn't we set it to a value greater 0? When showDates is called with 790 // Shouldn't we set it to a value greater 0? When showDates is called with
779 // show == true at first, then the columnwidths are set to zero. 791 // show == true at first, then the columnwidths are set to zero.
780 static int oldColWidth1 = 0; 792 static int oldColWidth1 = 0;
781 static int oldColWidth3 = 0; 793 static int oldColWidth3 = 0;
782 794
783 if (!show) { 795 if (!show) {
784 oldColWidth1 = mListView->columnWidth(1); 796 oldColWidth1 = mListView->columnWidth(1);
785 oldColWidth3 = mListView->columnWidth(3); 797 oldColWidth3 = mListView->columnWidth(3);
786 mListView->setColumnWidth(1, 0); 798 mListView->setColumnWidth(1, 0);
787 mListView->setColumnWidth(3, 0); 799 mListView->setColumnWidth(3, 0);
788 } else { 800 } else {
789 mListView->setColumnWidth(1, oldColWidth1); 801 mListView->setColumnWidth(1, oldColWidth1);
790 mListView->setColumnWidth(3, oldColWidth3); 802 mListView->setColumnWidth(3, oldColWidth3);
791 } 803 }
792 mListView->repaint(); 804 mListView->repaint();
793} 805}
794 806
795void KOListView::printPreview(CalPrinter *calPrinter, const QDate &fd, 807void KOListView::printPreview(CalPrinter *calPrinter, const QDate &fd,
796 const QDate &td) 808 const QDate &td)
797{ 809{
798#ifndef KORG_NOPRINTER 810#ifndef KORG_NOPRINTER
799 calPrinter->preview(CalPrinter::Day, fd, td); 811 calPrinter->preview(CalPrinter::Day, fd, td);
800#endif 812#endif
801} 813}
802 814
803void KOListView::showDates() 815void KOListView::showDates()
804{ 816{
805 showDates(true); 817 showDates(true);
806} 818}
807 819
808void KOListView::hideDates() 820void KOListView::hideDates()
809{ 821{
810 showDates(false); 822 showDates(false);
811} 823}
812void KOListView::resetFocus() 824void KOListView::resetFocus()
813{ 825{
814 mListView->setFocus(); 826 mListView->setFocus();
815} 827}
816void KOListView::updateView() 828void KOListView::updateView()
817{ 829{
818 mListView->setFocus(); 830 mListView->setFocus();
819 if ( mListView->firstChild () ) 831 if ( mListView->firstChild () )
820 mListView->setCurrentItem( mListView->firstChild () ); 832 mListView->setCurrentItem( mListView->firstChild () );
821} 833}
822void KOListView::updateConfig() 834void KOListView::updateConfig()
823{ 835{
824 836
825 mListView->setFont ( KOPrefs::instance()->mListViewFont ); 837 mListView->setFont ( KOPrefs::instance()->mListViewFont );
826 updateView(); 838 updateView();
827 839
828} 840}
829void KOListView::setStartDate(const QDate &start) 841void KOListView::setStartDate(const QDate &start)
830{ 842{
831 mStartDate = start; 843 mStartDate = start;
832} 844}
833 845
834void KOListView::showDates(const QDate &start, const QDate &end) 846void KOListView::showDates(const QDate &start, const QDate &end)
835{ 847{
836 clear(); 848 clear();
837 mStartDate = start; 849 mStartDate = start;
838 QDate date = start; 850 QDate date = start;
839 QPtrList<Journal> j_list; 851 QPtrList<Journal> j_list;
840 while( date <= end ) { 852 while( date <= end ) {
841 addEvents(calendar()->events(date)); 853 addEvents(calendar()->events(date));
842 addTodos(calendar()->todos(date)); 854 addTodos(calendar()->todos(date));
843 Journal* jo = calendar()->journal(date); 855 Journal* jo = calendar()->journal(date);
844 if ( jo ) 856 if ( jo )
845 j_list.append( jo ); 857 j_list.append( jo );
846 date = date.addDays( 1 ); 858 date = date.addDays( 1 );
847 } 859 }
848 addJournals(j_list); 860 addJournals(j_list);
849 emit incidenceSelected( 0 ); 861 emit incidenceSelected( 0 );
850 updateView(); 862 updateView();
851 863
852} 864}
853 865
854void KOListView::addEvents(QPtrList<Event> eventList) 866void KOListView::addEvents(QPtrList<Event> eventList)
855{ 867{
856 Event *ev; 868 Event *ev;
857 for(ev = eventList.first(); ev; ev = eventList.next()) { 869 for(ev = eventList.first(); ev; ev = eventList.next()) {
858 addIncidence(ev); 870 addIncidence(ev);
859 } 871 }
860 if ( !mListView->currentItem() ){ 872 if ( !mListView->currentItem() ){
861 updateView(); 873 updateView();
862 } 874 }
863} 875}
864 876
865void KOListView::addTodos(QPtrList<Todo> eventList) 877void KOListView::addTodos(QPtrList<Todo> eventList)
866{ 878{
867 Todo *ev; 879 Todo *ev;
868 for(ev = eventList.first(); ev; ev = eventList.next()) { 880 for(ev = eventList.first(); ev; ev = eventList.next()) {
869 addIncidence(ev); 881 addIncidence(ev);
870 } 882 }
871 if ( !mListView->currentItem() ){ 883 if ( !mListView->currentItem() ){
872 updateView(); 884 updateView();
873 } 885 }
874} 886}
875void KOListView::addJournals(QPtrList<Journal> eventList) 887void KOListView::addJournals(QPtrList<Journal> eventList)
876{ 888{
877 Journal *ev; 889 Journal *ev;
878 for(ev = eventList.first(); ev; ev = eventList.next()) { 890 for(ev = eventList.first(); ev; ev = eventList.next()) {
879 addIncidence(ev); 891 addIncidence(ev);
880 } 892 }
881 if ( !mListView->currentItem() ){ 893 if ( !mListView->currentItem() ){
882 updateView(); 894 updateView();
883 } 895 }
884} 896}
885 897
886void KOListView::addIncidence(Incidence *incidence) 898void KOListView::addIncidence(Incidence *incidence)
887{ 899{
888 if ( mUidDict.find( incidence->uid() ) ) return; 900 if ( mUidDict.find( incidence->uid() ) ) return;
889 901
890 // mListView->setFont ( KOPrefs::instance()->mListViewFont ); 902 // mListView->setFont ( KOPrefs::instance()->mListViewFont );
891 mUidDict.insert( incidence->uid(), incidence ); 903 mUidDict.insert( incidence->uid(), incidence );
892 904
893 KOListViewItem *item = new KOListViewItem( incidence, mListView ); 905 KOListViewItem *item = new KOListViewItem( incidence, mListView );
894 ListItemVisitor v(item, mStartDate ); 906 ListItemVisitor v(item, mStartDate );
895 if (incidence->accept(v)) return; 907 if (incidence->accept(v)) return;
896 else delete item; 908 else delete item;
897 //qDebug("delete item "); 909 //qDebug("delete item ");
898} 910}
899 911
900void KOListView::showEvents(QPtrList<Event> eventList) 912void KOListView::showEvents(QPtrList<Event> eventList)
901{ 913{
902 clear(); 914 clear();
903 915
904 addEvents(eventList); 916 addEvents(eventList);
905 917
906 // After new creation of list view no events are selected. 918 // After new creation of list view no events are selected.
907 emit incidenceSelected( 0 ); 919 emit incidenceSelected( 0 );
908} 920}
909int KOListView::count() 921int KOListView::count()
910{ 922{
911 return mListView->childCount(); 923 return mListView->childCount();
912} 924}
913 925
914void KOListView::changeEventDisplay(Event *event, int action) 926void KOListView::changeEventDisplay(Event *event, int action)
915{ 927{
916 KOListViewItem *item; 928 KOListViewItem *item;
917 929
918 switch(action) { 930 switch(action) {
919 case KOGlobals::EVENTADDED: 931 case KOGlobals::EVENTADDED:
920 addIncidence( event ); 932 addIncidence( event );
921 break; 933 break;
922 case KOGlobals::EVENTEDITED: 934 case KOGlobals::EVENTEDITED:
923 item = getItemForEvent(event); 935 item = getItemForEvent(event);
924 if (item) { 936 if (item) {
925 mUidDict.remove( event->uid() ); 937 mUidDict.remove( event->uid() );
926 delete item; 938 delete item;
927 addIncidence( event ); 939 addIncidence( event );
928 } 940 }
929 break; 941 break;
930 case KOGlobals::EVENTDELETED: 942 case KOGlobals::EVENTDELETED:
931 item = getItemForEvent(event); 943 item = getItemForEvent(event);
932 if (item) { 944 if (item) {
933 mUidDict.remove( event->uid() ); 945 mUidDict.remove( event->uid() );
934 delete item; 946 delete item;
935 } 947 }
936 break; 948 break;
937 default: 949 default:
938 ; 950 ;
939 } 951 }
940} 952}
941 953
942KOListViewItem *KOListView::getItemForEvent(Event *event) 954KOListViewItem *KOListView::getItemForEvent(Event *event)
943{ 955{
944 KOListViewItem *item = (KOListViewItem *)mListView->firstChild(); 956 KOListViewItem *item = (KOListViewItem *)mListView->firstChild();
945 while (item) { 957 while (item) {
946 if (item->data() == event) return item; 958 if (item->data() == event) return item;
947 item = (KOListViewItem *)item->nextSibling(); 959 item = (KOListViewItem *)item->nextSibling();
948 } 960 }
949 return 0; 961 return 0;
950} 962}
951 963
952void KOListView::defaultItemAction(QListViewItem *i) 964void KOListView::defaultItemAction(QListViewItem *i)
953{ 965{
954 KOListViewItem *item = static_cast<KOListViewItem *>( i ); 966 KOListViewItem *item = static_cast<KOListViewItem *>( i );
955 if ( item ) defaultAction( item->data() ); 967 if ( item ) defaultAction( item->data() );
956 968
957} 969}
958 970
959void KOListView::popupMenu(QListViewItem *item,const QPoint &,int) 971void KOListView::popupMenu(QListViewItem *item,const QPoint &,int)
960{ 972{
961 mActiveItem = (KOListViewItem *)item; 973 mActiveItem = (KOListViewItem *)item;
962 if (mActiveItem) { 974 if (mActiveItem) {
963 Incidence *incidence = mActiveItem->data(); 975 Incidence *incidence = mActiveItem->data();
964 mPopupMenu->showIncidencePopup(incidence); 976 mPopupMenu->showIncidencePopup(incidence);
965 977
966 /* 978 /*
967 if ( incidence && incidence->type() == "Event" ) { 979 if ( incidence && incidence->type() == "Event" ) {
968 Event *event = static_cast<Event *>( incidence ); 980 Event *event = static_cast<Event *>( incidence );
969 mPopupMenu->showEventPopup(event); 981 mPopupMenu->showEventPopup(event);
970 } 982 }
971 */ 983 */
972 } 984 }
973} 985}
974 986
975void KOListView::readSettings(KConfig *config, QString setting) 987void KOListView::readSettings(KConfig *config, QString setting)
976{ 988{
977 // qDebug("KOListView::readSettings "); 989 // qDebug("KOListView::readSettings ");
978 mListView->restoreLayout(config,setting); 990 mListView->restoreLayout(config,setting);
979} 991}
980 992
981void KOListView::writeSettings(KConfig *config, QString setting) 993void KOListView::writeSettings(KConfig *config, QString setting)
982{ 994{
983 // qDebug("KOListView::writeSettings "); 995 // qDebug("KOListView::writeSettings ");
984 mListView->saveLayout(config, setting); 996 mListView->saveLayout(config, setting);
985} 997}
986 998
987void KOListView::processSelectionChange(QListViewItem *) 999void KOListView::processSelectionChange(QListViewItem *)
988{ 1000{
989 1001
990 KOListViewItem *item = 1002 KOListViewItem *item =
991 static_cast<KOListViewItem *>( mListView->currentItem() ); 1003 static_cast<KOListViewItem *>( mListView->currentItem() );
992 1004
993 if ( !item ) { 1005 if ( !item ) {
994 emit incidenceSelected( 0 ); 1006 emit incidenceSelected( 0 );
995 } else { 1007 } else {
996 emit incidenceSelected( item->data() ); 1008 emit incidenceSelected( item->data() );
997 } 1009 }
998} 1010}
999 1011
1000void KOListView::clearSelection() 1012void KOListView::clearSelection()
1001{ 1013{
1002 mListView->selectAll( false ); 1014 mListView->selectAll( false );
1003} 1015}
1004void KOListView::allSelection() 1016void KOListView::allSelection()
1005{ 1017{
1006 mListView->selectAll( true ); 1018 mListView->selectAll( true );
1007} 1019}
1008 1020
1009void KOListView::clear() 1021void KOListView::clear()
1010{ 1022{
1011 mListView->clear(); 1023 mListView->clear();
1012 mUidDict.clear(); 1024 mUidDict.clear();
1013} 1025}
1014 1026
1015Incidence* KOListView::currentItem() 1027Incidence* KOListView::currentItem()
1016{ 1028{
1017 if ( mListView->currentItem() ) 1029 if ( mListView->currentItem() )
1018 return ((KOListViewItem*) mListView->currentItem())->data(); 1030 return ((KOListViewItem*) mListView->currentItem())->data();
1019 return 0; 1031 return 0;
1020} 1032}
1021void KOListView::keyPressEvent ( QKeyEvent *e) 1033void KOListView::keyPressEvent ( QKeyEvent *e)
1022{ 1034{
1023 1035
1024 if ( e->key() == Qt::Key_Delete || e->key() == Qt::Key_Backspace ) { 1036 if ( e->key() == Qt::Key_Delete || e->key() == Qt::Key_Backspace ) {
1025 deleteAll(); 1037 deleteAll();
1026 return; 1038 return;
1027 } 1039 }
1028 1040
1029 e->ignore(); 1041 e->ignore();
1030} 1042}
1031void KOListViewListView::keyPressEvent ( QKeyEvent *e) 1043void KOListViewListView::keyPressEvent ( QKeyEvent *e)
1032{ 1044{
1033 1045
1034 switch ( e->key() ) { 1046 switch ( e->key() ) {
1035 case Qt::Key_Down: 1047 case Qt::Key_Down:
1036 if ( e->state() == ShiftButton ) { 1048 if ( e->state() == ShiftButton ) {
1037 QListViewItem* cn = currentItem(); 1049 QListViewItem* cn = currentItem();
1038 if ( !cn ) 1050 if ( !cn )
1039 cn = firstChild(); 1051 cn = firstChild();
1040 if ( !cn ) 1052 if ( !cn )
1041 return; 1053 return;
1042 while ( cn->nextSibling() ) 1054 while ( cn->nextSibling() )
1043 cn = cn->nextSibling(); 1055 cn = cn->nextSibling();
1044 setCurrentItem ( cn ); 1056 setCurrentItem ( cn );
1045 ensureItemVisible ( cn ); 1057 ensureItemVisible ( cn );
1046 1058
1047 e->accept(); 1059 e->accept();
1048 return; 1060 return;
1049 } 1061 }
1050 if ( e->state() == ControlButton ) { 1062 if ( e->state() == ControlButton ) {
1051 int count = childCount (); 1063 int count = childCount ();
1052 int jump = count / 5; 1064 int jump = count / 5;
1053 QListViewItem* cn; 1065 QListViewItem* cn;
1054 cn = currentItem(); 1066 cn = currentItem();
1055 if ( ! cn ) 1067 if ( ! cn )
1056 return; 1068 return;
1057 if ( jump == 0 ) 1069 if ( jump == 0 )
1058 jump = 1; 1070 jump = 1;
1059 while ( jump && cn->nextSibling() ) { 1071 while ( jump && cn->nextSibling() ) {
1060 cn = cn->nextSibling(); 1072 cn = cn->nextSibling();
1061 --jump; 1073 --jump;
1062 } 1074 }
1063 setCurrentItem ( cn ); 1075 setCurrentItem ( cn );
1064 ensureItemVisible ( cn ); 1076 ensureItemVisible ( cn );
1065 1077
1066 } else 1078 } else
1067 QListView::keyPressEvent ( e ) ; 1079 QListView::keyPressEvent ( e ) ;
1068 e->accept(); 1080 e->accept();
1069 break; 1081 break;
1070 1082
1071 case Qt::Key_Up: 1083 case Qt::Key_Up:
1072 if ( e->state() == ShiftButton ) { 1084 if ( e->state() == ShiftButton ) {
1073 QListViewItem* cn = firstChild(); 1085 QListViewItem* cn = firstChild();
1074 if ( cn ) { 1086 if ( cn ) {
1075 setCurrentItem ( cn ); 1087 setCurrentItem ( cn );
1076 ensureItemVisible ( cn ); 1088 ensureItemVisible ( cn );
1077 } 1089 }
1078 e->accept(); 1090 e->accept();
1079 return; 1091 return;
1080 } 1092 }
1081 if ( e->state() == ControlButton ) { 1093 if ( e->state() == ControlButton ) {
1082 int count = childCount (); 1094 int count = childCount ();
1083 int jump = count / 5; 1095 int jump = count / 5;
1084 QListViewItem* cn; 1096 QListViewItem* cn;
1085 cn = currentItem(); 1097 cn = currentItem();
1086 if ( ! cn ) 1098 if ( ! cn )
1087 return; 1099 return;
1088 if ( jump == 0 ) 1100 if ( jump == 0 )
1089 jump = 1; 1101 jump = 1;
1090 while ( jump && cn->itemAbove ()) { 1102 while ( jump && cn->itemAbove ()) {
1091 cn = cn->itemAbove (); 1103 cn = cn->itemAbove ();
1092 --jump; 1104 --jump;
1093 } 1105 }
1094 setCurrentItem ( cn ); 1106 setCurrentItem ( cn );
1095 ensureItemVisible ( cn ); 1107 ensureItemVisible ( cn );
1096 } else 1108 } else
1097 QListView::keyPressEvent ( e ) ; 1109 QListView::keyPressEvent ( e ) ;
1098 e->accept(); 1110 e->accept();
1099 break; 1111 break;
1100 case Qt::Key_I: { 1112 case Qt::Key_I: {
1101 QListViewItem* cn; 1113 QListViewItem* cn;
1102 cn = currentItem(); 1114 cn = currentItem();
1103 if ( cn ) { 1115 if ( cn ) {
1104 KOListViewItem* ci = (KOListViewItem*)( cn ); 1116 KOListViewItem* ci = (KOListViewItem*)( cn );
1105 if ( ci ){ 1117 if ( ci ){
1106 //emit showIncidence( ci->data()); 1118 //emit showIncidence( ci->data());
1107 cn = cn->nextSibling(); 1119 cn = cn->nextSibling();
1108 if ( cn ) { 1120 if ( cn ) {
1109 setCurrentItem ( cn ); 1121 setCurrentItem ( cn );
1110 ensureItemVisible ( cn ); 1122 ensureItemVisible ( cn );
1111 } 1123 }
1112 emit showIncidence( ci->data()); 1124 emit showIncidence( ci->data());
1113 } 1125 }
1114 } 1126 }
1115 e->accept(); 1127 e->accept();
1116 } 1128 }
1117 break; 1129 break;
1118 case Qt::Key_Return: 1130 case Qt::Key_Return:
1119 case Qt::Key_Enter: 1131 case Qt::Key_Enter:
1120 { 1132 {
1121 QListViewItem* cn; 1133 QListViewItem* cn;
1122 cn = currentItem(); 1134 cn = currentItem();
1123 if ( cn ) { 1135 if ( cn ) {
1124 KOListViewItem* ci = (KOListViewItem*)( cn ); 1136 KOListViewItem* ci = (KOListViewItem*)( cn );
1125 if ( ci ){ 1137 if ( ci ){
1126 if ( e->state() == ShiftButton ) 1138 if ( e->state() == ShiftButton )
1127 ci->setSelected( false ); 1139 ci->setSelected( false );
1128 else 1140 else
1129 ci->setSelected( true ); 1141 ci->setSelected( true );
1130 cn = cn->nextSibling(); 1142 cn = cn->nextSibling();
1131 if ( cn ) { 1143 if ( cn ) {
1132 setCurrentItem ( cn ); 1144 setCurrentItem ( cn );
1133 ensureItemVisible ( cn ); 1145 ensureItemVisible ( cn );
1134 } 1146 }
1135 } 1147 }
1136 } 1148 }
1137 e->accept(); 1149 e->accept();
1138 } 1150 }
1139 break; 1151 break;
1140 default: 1152 default:
1141 e->ignore(); 1153 e->ignore();
1142 } 1154 }
1143} 1155}
1144KOListViewListView::KOListViewListView(KOListView * lv ) 1156KOListViewListView::KOListViewListView(KOListView * lv )
1145 : KListView( lv ) 1157 : KListView( lv )
1146{ 1158{
1147#ifndef DESKTOP_VERSION 1159#ifndef DESKTOP_VERSION
1148 QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold ); 1160 QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold );
1149#endif 1161#endif
1150 mYMousePos = -1000; 1162 mYMousePos = -1000;
1151 setSelectionMode( QListView::Multi ); 1163 setSelectionMode( QListView::Multi );
1152 setMultiSelection( true); 1164 setMultiSelection( true);
1153 mAllowPopupMenu = true; 1165 mAllowPopupMenu = true;
1154 mMouseDown = false; 1166 mMouseDown = false;
1155 1167
1156} 1168}
1157void KOListViewListView::contentsMouseDoubleClickEvent(QMouseEvent *e) 1169void KOListViewListView::contentsMouseDoubleClickEvent(QMouseEvent *e)
1158{ 1170{
1159 if (!e) return; 1171 if (!e) return;
1160 QPoint vp = contentsToViewport(e->pos()); 1172 QPoint vp = contentsToViewport(e->pos());
1161 QListViewItem *item = itemAt(vp); 1173 QListViewItem *item = itemAt(vp);
1162 if (!item) { 1174 if (!item) {
1163 emit newEvent(); 1175 emit newEvent();
1164 return; 1176 return;
1165 } 1177 }
1166 KListView::contentsMouseDoubleClickEvent(e); 1178 KListView::contentsMouseDoubleClickEvent(e);
1167} 1179}
1168 1180
1169 1181
1170void KOListViewListView::contentsMousePressEvent(QMouseEvent *e) 1182void KOListViewListView::contentsMousePressEvent(QMouseEvent *e)
1171{ 1183{
1172 //qDebug("contentsMousePressEvent++++ "); 1184 //qDebug("contentsMousePressEvent++++ ");
1173 if (! mMouseDown ) { 1185 if (! mMouseDown ) {
1174 mAllowPopupMenu = true; 1186 mAllowPopupMenu = true;
1175 mYMousePos = mapToGlobal( (e->pos())).y(); 1187 mYMousePos = mapToGlobal( (e->pos())).y();
1176 } 1188 }
1177 if ( e->button() == RightButton && mMouseDown ) 1189 if ( e->button() == RightButton && mMouseDown )
1178 return; 1190 return;
1179 if ( e->button() == LeftButton ) 1191 if ( e->button() == LeftButton )
1180 mMouseDown = true; 1192 mMouseDown = true;
1181 KListView::contentsMousePressEvent( e ); 1193 KListView::contentsMousePressEvent( e );
1182} 1194}
1183void KOListViewListView::contentsMouseReleaseEvent(QMouseEvent *e) 1195void KOListViewListView::contentsMouseReleaseEvent(QMouseEvent *e)
1184{ 1196{
1185 //qDebug("contentsMouseReleaseEv---- "); 1197 //qDebug("contentsMouseReleaseEv---- ");
1186 if ( ! mMouseDown ) { 1198 if ( ! mMouseDown ) {
1187 if ( e->button() == RightButton && ! mAllowPopupMenu ) 1199 if ( e->button() == RightButton && ! mAllowPopupMenu )
1188 return; 1200 return;
1189 QListViewItem* ci = currentItem(); 1201 QListViewItem* ci = currentItem();
1190 if ( ci ) 1202 if ( ci )
1191 ci->setSelected( true ); 1203 ci->setSelected( true );
1192 KListView::contentsMouseReleaseEvent(e); 1204 KListView::contentsMouseReleaseEvent(e);
1193 return; 1205 return;
1194 } 1206 }
1195 if ( e->button() == LeftButton ) 1207 if ( e->button() == LeftButton )
1196 mMouseDown = false; 1208 mMouseDown = false;
1197 if ( e->button() == RightButton && ! mAllowPopupMenu ) 1209 if ( e->button() == RightButton && ! mAllowPopupMenu )
1198 return; 1210 return;
1199 if ( e->button() == RightButton ) { 1211 if ( e->button() == RightButton ) {
1200 QListViewItem* ci = currentItem(); 1212 QListViewItem* ci = currentItem();
1201 if ( ci ) 1213 if ( ci )
1202 ci->setSelected( true ); 1214 ci->setSelected( true );
1203 } 1215 }
1204 KListView::contentsMouseReleaseEvent(e); 1216 KListView::contentsMouseReleaseEvent(e);
1205} 1217}
1206void KOListViewListView::contentsMouseMoveEvent(QMouseEvent *e) 1218void KOListViewListView::contentsMouseMoveEvent(QMouseEvent *e)
1207{ 1219{
1208 // qDebug("contentsMouseMoveEv....... "); 1220 // qDebug("contentsMouseMoveEv....... ");
1209 // qDebug("start: %d current %d ",mYMousePos , mapToGlobal( (e->pos())).y() ); 1221 // qDebug("start: %d current %d ",mYMousePos , mapToGlobal( (e->pos())).y() );
1210 int diff = mYMousePos - mapToGlobal( (e->pos())).y(); 1222 int diff = mYMousePos - mapToGlobal( (e->pos())).y();
1211 if ( diff < 0 ) diff = -diff; 1223 if ( diff < 0 ) diff = -diff;
1212 if ( diff > 20 ) 1224 if ( diff > 20 )
1213 mAllowPopupMenu = false; 1225 mAllowPopupMenu = false;
1214 KListView::contentsMouseMoveEvent(e); 1226 KListView::contentsMouseMoveEvent(e);
1215} 1227}