summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt6
-rw-r--r--desktop/rpm/kdepim_rpm2
-rw-r--r--kabc/addresseedialog.cpp40
-rw-r--r--korganizer/koeventviewerdialog.cpp6
-rw-r--r--korganizer/kolistview.cpp2
-rw-r--r--korganizer/searchdialog.cpp9
-rw-r--r--korganizer/searchdialog.h4
-rw-r--r--microkde/kdialogbase.cpp8
-rw-r--r--version2
9 files changed, 59 insertions, 20 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 86ac9b5..dc22fc6 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,1009 +1,1015 @@
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.13 ************
4
5Fixed a problem in the addressee select dialog and made it more user friendly by adding a minimize splitter.
6
7In the search dialog you can switch now the focus from search line edit to the list view by pressing key "arrow down".
8
3********** VERSION 2.0.12 ************ 9********** VERSION 2.0.12 ************
4 10
5KO/Pi: 11KO/Pi:
6Fixed a bug in todo start/due date handling for non recurring todos with a start and due date. 12Fixed a bug in todo start/due date handling for non recurring todos with a start and due date.
7Fixed some layout problems in the KO/Pi agenda view when there were many conflicting itmes. 13Fixed some layout problems in the KO/Pi agenda view when there were many conflicting itmes.
8Fixed several problems of the keyboard focus in the desktop versions when opening the search dialog/event viewer. 14Fixed several problems of the keyboard focus in the desktop versions when opening the search dialog/event viewer.
9 15
10Fixed problem in pi-sync mode when wrong password was sent. 16Fixed problem in pi-sync mode when wrong password was sent.
11 17
12OM/Pi: 18OM/Pi:
13Fixed a crash when displaying mails with "Show mail as html" was checked in the config. 19Fixed a crash when displaying mails with "Show mail as html" was checked in the config.
14Added a check before displaying the mail if the mail is in html format, if "Show mail as html" is enabled. 20Added a check before displaying the mail if the mail is in html format, if "Show mail as html" is enabled.
15 21
16********** VERSION 2.0.11 ************ 22********** VERSION 2.0.11 ************
17 23
18Fixed some problems in pi-sync mode 24Fixed some problems in pi-sync mode
19(e.g. details of events were not synced properly) 25(e.g. details of events were not synced properly)
20 26
21********** VERSION 2.0.10 ************ 27********** VERSION 2.0.10 ************
22 28
23KO/Pi: 29KO/Pi:
24In the desktop versions the context menu in the search dialog was broken after introducing the What'sThis info for the list view. 30In the desktop versions the context menu in the search dialog was broken after introducing the What'sThis info for the list view.
25This is fixed. 31This is fixed.
26Changed the search dialog a bit to make it more user friendly. 32Changed the search dialog a bit to make it more user friendly.
27(E.g.: Removed message box about "no items found" and set key focus to search line edit after search). 33(E.g.: Removed message box about "no items found" and set key focus to search line edit after search).
28 34
29Added config option to hide the week number in KO/Pi toolbar. 35Added config option to hide the week number in KO/Pi toolbar.
30 36
31********** VERSION 2.0.9 ************ 37********** VERSION 2.0.9 ************
32 38
33Made month view icons for multiday events a bit nicer. 39Made month view icons for multiday events a bit nicer.
34Some minor fixes in KO/Pi 40Some minor fixes in KO/Pi
35(e.g. go to today did not work for new week view properly). 41(e.g. go to today did not work for new week view properly).
36 42
37 43
38********** VERSION 2.0.8 ************ 44********** VERSION 2.0.8 ************
39 45
40Fixed a problem in dependency info in the ipk files for the Zaurus. 46Fixed a problem in dependency info in the ipk files for the Zaurus.
41 47
42Added icon for the stealth new week view and made navigation more user friendly in monthview by adding a prev/next week button to the navigator bar. 48Added 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.
43 49
44Added a "go today" button to the datepicker. 50Added a "go today" button to the datepicker.
45 51
46Added "created" and "last modified" to event/todo viewer (and What'sThis viewer) 52Added "created" and "last modified" to event/todo viewer (and What'sThis viewer)
47and made it configureable to show these values. 53and made it configureable to show these values.
48 54
49Fixed a problem for events (from external iCal files) that do have a duration but no end date. 55Fixed a problem for events (from external iCal files) that do have a duration but no end date.
50 56
51 57
52********** VERSION 2.0.7 ************ 58********** VERSION 2.0.7 ************
53 59
54Added global application font settings 60Added global application font settings
55(for all KDE-Pim/Pi apps) to the general settings. 61(for all KDE-Pim/Pi apps) to the general settings.
56 62
57Fixed a problem in OM/Pi when trying to login to some IMAP servers 63Fixed a problem in OM/Pi when trying to login to some IMAP servers
58(like the IMAP server of Apple: mail.mac.com ) 64(like the IMAP server of Apple: mail.mac.com )
59 65
60Added recurring todos to KO/Pi. 66Added recurring todos to KO/Pi.
61 67
62 68
63********** VERSION 2.0.6 ************ 69********** VERSION 2.0.6 ************
64 70
65Some bugfixes in the pi-sync mode. 71Some bugfixes in the pi-sync mode.
66Added German translation for pi-sync mode. 72Added German translation for pi-sync mode.
67 73
68KO/Pi: 74KO/Pi:
69Made the todolist using alternate background. 75Made the todolist using alternate background.
70 76
71Other minor fixes in KO/Pi. 77Other minor fixes in KO/Pi.
72 78
73 79
74********** VERSION 2.0.5 ************ 80********** VERSION 2.0.5 ************
75 81
76Bugfixes in KO/Pi. 82Bugfixes in KO/Pi.
77 83
78********** VERSION 2.0.4 ************ 84********** VERSION 2.0.4 ************
79 85
80KO/Pi: 86KO/Pi:
81Fixed problem loading translations for summary/location edit boxes in event/todo editor. 87Fixed problem loading translations for summary/location edit boxes in event/todo editor.
82 88
83Added a general "select week number" to the toolbar. 89Added a general "select week number" to the toolbar.
84 90
85Fixed some small problem of the new features introduced in version 2.0.3. 91Fixed some small problem of the new features introduced in version 2.0.3.
86 92
87Made it possible to specify one specific category as category color, 93Made it possible to specify one specific category as category color,
88if more than one categories are selected. 94if more than one categories are selected.
89 95
90Fixed a bug in saving colors for categories with non-ascii characters. 96Fixed a bug in saving colors for categories with non-ascii characters.
91(Like, e.g. German Umlauts). 97(Like, e.g. German Umlauts).
92Propably you have to set your colors again for those categories. 98Propably you have to set your colors again for those categories.
93 99
94 100
95********** VERSION 2.0.3 ************ 101********** VERSION 2.0.3 ************
96 102
97KO/Pi: 103KO/Pi:
98Added feature for changing alarm settings for many items at once: 104Added feature for changing alarm settings for many items at once:
99Open list view (or search dialog), select the desired items and choose in 105Open list view (or search dialog), select the desired items and choose in
100the popup menu: Set alarm for selected... 106the popup menu: Set alarm for selected...
101 107
102Added to the event/todo viewer the option to send an email to 108Added to the event/todo viewer the option to send an email to
103all attendees or all selected (with RSVP) attendees. 109all attendees or all selected (with RSVP) attendees.
104 110
105Made the week-month mode changing in month view faster. 111Made the week-month mode changing in month view faster.
106 112
107Made month view better useable with keyboard. 113Made month view better useable with keyboard.
108Now TAB key jumps to next cell with an event/todo. 114Now TAB key jumps to next cell with an event/todo.
109Scroll in cell with coursor keys, scroll in time (next week) with 115Scroll in cell with coursor keys, scroll in time (next week) with
110Shift/Control + coursorkeys. 116Shift/Control + coursorkeys.
111 117
112Fixed bug that the todo view flat mode was reset after first view update. 118Fixed bug that the todo view flat mode was reset after first view update.
113 119
114If a todo is displayed closed in the todo view, 120If a todo is displayed closed in the todo view,
115it is now displayed in overdue/due today color depending on the subtodos overdue/due today properties. 121it is now displayed in overdue/due today color depending on the subtodos overdue/due today properties.
116 122
117Added info about the numbers of years to the caption (title) information about a birthday event. 123Added info about the numbers of years to the caption (title) information about a birthday event.
118 124
119Made completion date in todo editor editable. 125Made completion date in todo editor editable.
120 126
121Added possibility to save/load templates for journals. 127Added possibility to save/load templates for journals.
122(Which is just a simple "save text to file" or "insert text from file". 128(Which is just a simple "save text to file" or "insert text from file".
123 129
124********** VERSION 2.0.2 ************ 130********** VERSION 2.0.2 ************
125 131
126KO/Pi: 132KO/Pi:
127Fixed the layout problem of the day label buttons 133Fixed the layout problem of the day label buttons
128of the agenda view introduced in version 2.0.1. 134of the agenda view introduced in version 2.0.1.
129 135
130Added WhatsThis support for the todo view and the list view. 136Added WhatsThis support for the todo view and the list view.
131 137
132Added a quite useful feature to the montview. 138Added a quite useful feature to the montview.
133Just click on the week numbers on the left. 139Just click on the week numbers on the left.
134And in the top right corner of month view/agenda view 140And in the top right corner of month view/agenda view
135there is now a "week number quick selector". 141there is now a "week number quick selector".
136(Click on the black triangle). 142(Click on the black triangle).
137 143
138Made the quite difficult timezone change in KO/Pi easy. 144Made the quite difficult timezone change in KO/Pi easy.
139 145
140OM/Pi: 146OM/Pi:
141Fixed too small icons on desktop. 147Fixed too small icons on desktop.
142Fixed non visible icons in mainwindow on Z with fastload enabled. 148Fixed non visible icons in mainwindow on Z with fastload enabled.
143Added signature file setting to smtp account config. 149Added signature file setting to smtp account config.
144And the signature can be edited and saved in the edit mail dialog. 150And the signature can be edited and saved in the edit mail dialog.
145That does mean: 151That does mean:
146Simply edit the signature for the selected smtp account in the 152Simply edit the signature for the selected smtp account in the
147edit new mail dialog and press the "save signature" button there. 153edit new mail dialog and press the "save signature" button there.
148Then the signature is saved to the file specified in the smtp account settings. 154Then the signature is saved to the file specified in the smtp account settings.
149If there is no file specified, it is saved automatically to the file 155If there is no file specified, it is saved automatically to the file
150kdepim/apps/kopiemail/<accountname>.sig. 156kdepim/apps/kopiemail/<accountname>.sig.
151 157
152 158
153 159
154********** VERSION 2.0.1 ************ 160********** VERSION 2.0.1 ************
155 161
156Oooops ... I forgot to test on the Zaurus 5500 ... 162Oooops ... I forgot to test on the Zaurus 5500 ...
157 163
158Fixed many problems of new (english) strings (and german translations) 164Fixed many problems of new (english) strings (and german translations)
159introduced in the latest versions, where the text was not fitting on the 165introduced in the latest versions, where the text was not fitting on the
160240x320 display of the Zaurus 5500. 166240x320 display of the Zaurus 5500.
161 167
162KO/Pi: 168KO/Pi:
163Added a popup menu ( press pen and hold to get popup ) to the agenda view 169Added a popup menu ( press pen and hold to get popup ) to the agenda view
164with many useful items (add event/todo, show next week, two weeks, month, journal). 170with many useful items (add event/todo, show next week, two weeks, month, journal).
165 171
166Added items to the todolist popup menu for: 172Added items to the todolist popup menu for:
167Display all opened, all closed or all todos flat. 173Display all opened, all closed or all todos flat.
168The "flat" view makes is possible to sort all todos after ,e.g., prio or date. 174The "flat" view makes is possible to sort all todos after ,e.g., prio or date.
169Made the reparenting of todos on the desktop possible via Drag&Drop. 175Made the reparenting of todos on the desktop possible via Drag&Drop.
170Fixed several bugs in setting the completed datetime for todos. 176Fixed several bugs in setting the completed datetime for todos.
171Added info about completed datetime of todos to the todo viewer. 177Added info about completed datetime of todos to the todo viewer.
172Now displaying a completed todo (with completed datetime set) in the agenda view 178Now displaying a completed todo (with completed datetime set) in the agenda view
173at the time of the completion. Such that now it is possible to see in the agenda view 179at the time of the completion. Such that now it is possible to see in the agenda view
174when what todo was completed. 180when what todo was completed.
175Fixed behaviour of automatic setting completion of todos with sub-todos/parent todos. 181Fixed behaviour of automatic setting completion of todos with sub-todos/parent todos.
176Now the behaviour is: 182Now the behaviour is:
177Setting a parent to complete sets all (sub)childs to complete. 183Setting a parent to complete sets all (sub)childs to complete.
178Setting a parent to uncomplete does not change the childs. 184Setting a parent to uncomplete does not change the childs.
179Setting a child to uncomplete sets all parent to uncomplete. 185Setting a child to uncomplete sets all parent to uncomplete.
180Setting a child to complete does not change the parents. 186Setting a child to complete does not change the parents.
181 187
182Smart updating and double buffering of the daymatrix. 188Smart updating and double buffering of the daymatrix.
183Showing holidays in the day matrix. 189Showing holidays in the day matrix.
184Many other small performance updates. 190Many other small performance updates.
185 191
186Made day labels in agenda clickable. By clicking a label, the day is displayed in single day mode. 192Made day labels in agenda clickable. By clicking a label, the day is displayed in single day mode.
187 193
188Now the translation file usertranslation.txt is supposed to be in utf8 format. 194Now the translation file usertranslation.txt is supposed to be in utf8 format.
189If you want to translate a language from western europe, just change the germantranslation.txt file. Please read the updated Usertranslation HowTo in KO/Pi Help menu. 195If 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.
190 196
191 197
192********** VERSION 2.0.0 ************ 198********** VERSION 2.0.0 ************
193 199
194Stable release 2.0.0! 200Stable release 2.0.0!
195 201
196KO/Pi: 202KO/Pi:
197Fixed problem in edit dialog recreation at startup. 203Fixed problem in edit dialog recreation at startup.
198Made "toggle view*" menu items enabled context sensitive. 204Made "toggle view*" menu items enabled context sensitive.
199Changed agenda size menu to items 1-10. 205Changed agenda size menu to items 1-10.
200Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down. 206Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down.
201Usebility enhancements in the KO/Pi menus. 207Usebility enhancements in the KO/Pi menus.
202Birthday import now adds year to summary. 208Birthday import now adds year to summary.
203What's Next view shows age in years for birthday. 209What's Next view shows age in years for birthday.
204 210
205OM/Pi: 211OM/Pi:
206Added three info lines to display subject, from and to of selected mails. 212Added three info lines to display subject, from and to of selected mails.
207 213
208KA/Pi: 214KA/Pi:
209Fixed jump bar behaviour on Zaurus. 215Fixed jump bar behaviour on Zaurus.
210Now KA/Pi search field supports searching for a range of starting characters. 216Now KA/Pi search field supports searching for a range of starting characters.
211E.g. to search for all contact beginning with b to n, type 217E.g. to search for all contact beginning with b to n, type
212b-n 218b-n
213in the search field. 219in the search field.
214 220
215********** VERSION 1.9.20 ************ 221********** VERSION 1.9.20 ************
216 222
217KO/Pi: 223KO/Pi:
218Added for the "dislplay one day" agenda mode 224Added for the "dislplay one day" agenda mode
219info in the caption and in the day lables: 225info in the caption and in the day lables:
220Now it is displayed, if the selected day is from "day before yesterday" 226Now it is displayed, if the selected day is from "day before yesterday"
221to "day after tomorrow". 227to "day after tomorrow".
222Made it possible to delete a Todo, which has sub-todos. 228Made it possible to delete a Todo, which has sub-todos.
223Fixed two small problems in the todo view. 229Fixed two small problems in the todo view.
224Added missing German translation for filter edit and print dialog. 230Added missing German translation for filter edit and print dialog.
225Made search dialog closeable by cancel key. 231Made search dialog closeable by cancel key.
226 232
227Made it possible to select in the date picker the (ligt grey ) 233Made it possible to select in the date picker the (ligt grey )
228dates of the prev./next month with the mouse. 234dates of the prev./next month with the mouse.
229 235
230OM/Pi: 236OM/Pi:
231"Delete mail" icon in main window now deletes all selected mails. 237"Delete mail" icon in main window now deletes all selected mails.
232Fixed the problem, that the state flag of imap mails was ignored. 238Fixed the problem, that the state flag of imap mails was ignored.
233Now mails with "FLAG_SEEN" on the imap server get no icon in the list view 239Now mails with "FLAG_SEEN" on the imap server get no icon in the list view
234to indecate that they are already seen. 240to indecate that they are already seen.
235Fixed the problem that the body of some mails was not displayed in the 241Fixed the problem that the body of some mails was not displayed in the
236mail viewer when fetching them from the imap server directly to read them. 242mail viewer when fetching them from the imap server directly to read them.
237Made it (configurable) possible to show the "To:" field in the list view. 243Made it (configurable) possible to show the "To:" field in the list view.
238Added to the mail viewer the option "View Source" to make it possible to see the raw mail data. 244Added to the mail viewer the option "View Source" to make it possible to see the raw mail data.
239Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the 245Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the
240local storage folder (specified in account settings) of the account of the mail. 246local storage folder (specified in account settings) of the account of the mail.
241Removed some memory leaks in OM/Pi. 247Removed some memory leaks in OM/Pi.
242 248
243 249
244********** VERSION 1.9.19 ************ 250********** VERSION 1.9.19 ************
245 251
246Added a lot of missing translations to KA/Pi, 252Added a lot of missing translations to KA/Pi,
247Added some missing translations to KO/Pi and OM/Pi. 253Added some missing translations to KO/Pi and OM/Pi.
248 254
249Fixed some minor problems in KA/Pi + KO/Pi. 255Fixed some minor problems in KA/Pi + KO/Pi.
250 256
251Fixed a crash when closing PwM/Pi. 257Fixed a crash when closing PwM/Pi.
252Added German translation for PwM/Pi. 258Added German translation for PwM/Pi.
253 259
254Made view change and Month View update faster in KO/Pi. 260Made view change and Month View update faster in KO/Pi.
255 261
256 262
257********** VERSION 1.9.18 ************ 263********** VERSION 1.9.18 ************
258 264
259FYI: The VERSION 1.9.17 was a testing release only. 265FYI: The VERSION 1.9.17 was a testing release only.
260Please read the changelog of VERSION 1.9.17 as well. 266Please read the changelog of VERSION 1.9.17 as well.
261 267
262Cleaned up the syncing config dialog. 268Cleaned up the syncing config dialog.
263Added sync config options for date range for events. 269Added sync config options for date range for events.
264Added sync config options for filters on incoming data. 270Added sync config options for filters on incoming data.
265Added sync config options for filters on outgoing data. 271Added sync config options for filters on outgoing data.
266Please read the updated SyncHowTo about the new filter settings. 272Please read the updated SyncHowTo about the new filter settings.
267These filter settings make it now possible to sync with shared 273These filter settings make it now possible to sync with shared
268calendars without writing back private or confidential data 274calendars without writing back private or confidential data
269(via the outgoing filters). 275(via the outgoing filters).
270To sync only with particular parts of a shared calendar, 276To sync only with particular parts of a shared calendar,
271the incoming filter settings can be used. 277the incoming filter settings can be used.
272An example can be found in the SyncHowTo. 278An example can be found in the SyncHowTo.
273Same for shared addressbooks. 279Same for shared addressbooks.
274 280
275Added a setting for the global kdepim data storage. 281Added a setting for the global kdepim data storage.
276Usually the data is stored in (yourhomedir/kdepim). 282Usually the data is stored in (yourhomedir/kdepim).
277Now you can set in the Global config dialog TAB, subTAB "Data storage path" 283Now you can set in the Global config dialog TAB, subTAB "Data storage path"
278a directory where all the kdepim data is stored. 284a directory where all the kdepim data is stored.
279That makes it easy to save all kdepim data on a SD card on the Z, for example. 285That makes it easy to save all kdepim data on a SD card on the Z, for example.
280 286
281KO/Pi: 287KO/Pi:
282The timeedit input has a pulldown list for times. 288The timeedit input has a pulldown list for times.
283If opened, this pulldown list should now has the right time highlighted. 289If opened, this pulldown list should now has the right time highlighted.
284Added the possibility to exclude events/todos/journals in a filter. 290Added the possibility to exclude events/todos/journals in a filter.
285You should exclude journals, if you do not want them to sync with a public calendar. 291You should exclude journals, if you do not want them to sync with a public calendar.
286 292
287KA/Pi: 293KA/Pi:
288Added the possibility to in/exclude public/private/confidential contacts to a filter. 294Added the possibility to in/exclude public/private/confidential contacts to a filter.
289If you have already defined filterrules in KA/Pi you have to adjust them all by setting the "include public/private/confidential" property manually. Sorry for that ... 295If 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 ...
290Added printing of card view and details view on desktop. 296Added printing of card view and details view on desktop.
291Printing of list view is not working... 297Printing of list view is not working...
292Added button for removing pictures in contact editor. 298Added button for removing pictures in contact editor.
293Parsing data fix of KA/Pi version 1.9.17. 299Parsing data fix of KA/Pi version 1.9.17.
294Fixed the "parse name automatically" problem of KA/Pi version 1.9.17. 300Fixed the "parse name automatically" problem of KA/Pi version 1.9.17.
295Fixed some syncing merging problems. 301Fixed some syncing merging problems.
296 302
297 303
298********** VERSION 1.9.17 ************ 304********** VERSION 1.9.17 ************
299 305
300KO/Pi: 306KO/Pi:
301Fixed that tooltips were not updated after moving an item in agenda view. 307Fixed that tooltips were not updated after moving an item in agenda view.
302Fixed a bug in sorting start date for recurring events in list view. 308Fixed a bug in sorting start date for recurring events in list view.
303Changed the left button in todo viewer from "Agenda" to "Set completed". 309Changed the left button in todo viewer from "Agenda" to "Set completed".
304This makes it possible to change a todo in the What's Next View quickly to the completed state without leaving the What's Next View. 310This 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.
305Added more info in the todo viewer: Startdate, parent/sub todos. 311Added more info in the todo viewer: Startdate, parent/sub todos.
306 312
307 313
308KA/Pi: 314KA/Pi:
309All fields search does now actually search all the (possible) fields, 315All fields search does now actually search all the (possible) fields,
310not only those listed in the contact list. 316not only those listed in the contact list.
311Made is possible to inline a picture in a vcard on the Z. 317Made is possible to inline a picture in a vcard on the Z.
312This was only possible on the desktop, now is it possible on the Z as well. 318This was only possible on the desktop, now is it possible on the Z as well.
313Fixed of missing save settings after filter configuration. 319Fixed of missing save settings after filter configuration.
314Made saving of addressbook much faster. 320Made saving of addressbook much faster.
315Fixed extension widget layout problem. 321Fixed extension widget layout problem.
316Fixed saving of default formatted name settings. 322Fixed saving of default formatted name settings.
317Fixed formatted name handling in edit dialog. 323Fixed formatted name handling in edit dialog.
318Added an option for changing formatted names of many contacts 324Added an option for changing formatted names of many contacts
319(menu: File - Change - Set formatted name). 325(menu: File - Change - Set formatted name).
320 326
321QWhatsThis was not working on the Z ( only black rectangle was shown). 327QWhatsThis was not working on the Z ( only black rectangle was shown).
322This is Fixed. 328This is Fixed.
323 329
324KDE-Sync: 330KDE-Sync:
325Now readonly KDE resources are synced as well. 331Now readonly KDE resources are synced as well.
326(They are not changed in KDE itself, of course). 332(They are not changed in KDE itself, of course).
327 333
328 334
329 335
330********** VERSION 1.9.16 ************ 336********** VERSION 1.9.16 ************
331 337
332KO/Pi: 338KO/Pi:
333Fixed search dialog size on Z 6000 (480x640 display). 339Fixed search dialog size on Z 6000 (480x640 display).
334Added setting to hide/show time in agenda items. 340Added setting to hide/show time in agenda items.
335Added setting to hide not running todos in todo view. 341Added setting to hide not running todos in todo view.
336Added columns for start date/time in todo view. 342Added columns for start date/time in todo view.
337Replaced the solid half-hour lines in agenda view by dot lines. 343Replaced the solid half-hour lines in agenda view by dot lines.
338Added possibility of printing the What's Next View on the desktop 344Added possibility of printing the What's Next View on the desktop
339(i.e. Windows and Linux). 345(i.e. Windows and Linux).
340Fixed a crash in KO/Pi when starting KO/Pi with What's Next view. 346Fixed a crash in KO/Pi when starting KO/Pi with What's Next view.
341Added tooltips in month view.(Tooltips only available on desktop) 347Added tooltips in month view.(Tooltips only available on desktop)
342 348
343Fixed a strange problem in KO/Pi alarm applet. 349Fixed a strange problem in KO/Pi alarm applet.
344Did not find the actual problem, 350Did not find the actual problem,
345such that now Qtopia reboots again if deinstalling the alarm applet. 351such that now Qtopia reboots again if deinstalling the alarm applet.
346But the alarm applet should work again. 352But the alarm applet should work again.
347 353
348KA/Pi: 354KA/Pi:
349Fixed the problem, that internal pictures were not saved. 355Fixed the problem, that internal pictures were not saved.
350 356
351Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes. 357Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes.
352 358
353Fixed some minor problems. (Like word wrap in help text windows). 359Fixed some minor problems. (Like word wrap in help text windows).
354 360
355Fixed a compiling problem in microkde/kresources. 361Fixed a compiling problem in microkde/kresources.
356 362
357KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM. 363KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM.
358This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9) 364This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9)
359such that now syncing KO/Pi with Sharp DTM should work on the 365such that now syncing KO/Pi with Sharp DTM should work on the
360Zaurus C 3000 model. 366Zaurus C 3000 model.
361 367
362********** VERSION 1.9.15 ************ 368********** VERSION 1.9.15 ************
363 369
364Usebilty enhancements in KO/Pi: 370Usebilty enhancements in KO/Pi:
365When clicking on the date in a month view cell, the day view is shown. 371When clicking on the date in a month view cell, the day view is shown.
366Old behaviour was, that the "new event" dialog popped up. 372Old behaviour was, that the "new event" dialog popped up.
367 373
368Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu). 374Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu).
369That means, you can restore the latest 375That means, you can restore the latest
370event/todo/journal you have deleted. 376event/todo/journal you have deleted.
371A journal is deleted, if you clear all the text of the journal. 377A journal is deleted, if you clear all the text of the journal.
372 378
373Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14. 379Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14.
374 380
375KA/Pi starting in 480x640 resolution: 381KA/Pi starting in 480x640 resolution:
376Hide the filter action in toolbar 382Hide the filter action in toolbar
377and added icons for undo/delete/redo in toolbar. 383and added icons for undo/delete/redo in toolbar.
378 384
379Change in OM/Pi ViewMail dialog: 385Change in OM/Pi ViewMail dialog:
380When clicking on the "delete" icon the mail is deleted after confirmation as usual. 386When clicking on the "delete" icon the mail is deleted after confirmation as usual.
381But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any). 387But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any).
382 388
383Fixed a crash when deleting mail-accounts in OM/Pi. 389Fixed a crash when deleting mail-accounts in OM/Pi.
384 390
385 391
386********** VERSION 1.9.14 ************ 392********** VERSION 1.9.14 ************
387 393
388Fixed some problems with the dialog sizes when switching 394Fixed some problems with the dialog sizes when switching
389portrait/landscape mode on 640x480 PDA display. 395portrait/landscape mode on 640x480 PDA display.
390 396
391Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi. 397Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi.
392 398
393Fixed an ugly bug in KOpieMail: 399Fixed an ugly bug in KOpieMail:
394KOpieMail was not able to write files (mails) to MSDOS file system, 400KOpieMail was not able to write files (mails) to MSDOS file system,
395like on an usual preformatted SD card. That should work now. 401like on an usual preformatted SD card. That should work now.
396To save your mail data on the Sd card do the following: 402To save your mail data on the Sd card do the following:
397Create a dir on the SD card: 403Create a dir on the SD card:
398mkdir /mnt/card/localmail 404mkdir /mnt/card/localmail
399Go to your home dir: 405Go to your home dir:
400cd 406cd
401Go to kopiemail data storage dir: 407Go to kopiemail data storage dir:
402cd kdepim/apps/kopiemail 408cd kdepim/apps/kopiemail
403Create a symlink to the SD card: 409Create a symlink to the SD card:
404ls -s /mnt/card/localmail 410ls -s /mnt/card/localmail
405Now KOpieMail will store all mails on the SD card. 411Now KOpieMail will store all mails on the SD card.
406 412
407KO/Pi Monthview: 413KO/Pi Monthview:
408Now "Go to Today" selects the current month from day 1-end, 414Now "Go to Today" selects the current month from day 1-end,
409not the current date + some days. 415not the current date + some days.
410I.e. "Go to Today" shows now always 416I.e. "Go to Today" shows now always
411the current month with first day of month in the first row. 417the current month with first day of month in the first row.
412 418
413Added missing German translation. 419Added missing German translation.
414 420
415Fixed icons of executeable on Wintendo. 421Fixed icons of executeable on Wintendo.
416 422
417Added a "Show next Mail" button to the OM/Pi 423Added a "Show next Mail" button to the OM/Pi
418mail viewer such that the mail below the current mail 424mail viewer such that the mail below the current mail
419in the mail list view of the current folder 425in the mail list view of the current folder
420can be read with a single click. 426can be read with a single click.
421 427
422 428
423********** VERSION 1.9.13 ************ 429********** VERSION 1.9.13 ************
424 430
425Fixed nasty PwM/Pi file reading bug, when 431Fixed nasty PwM/Pi file reading bug, when
426the used hash algo of file is different then the global 432the used hash algo of file is different then the global
427hash algo. 433hash algo.
428 434
429Added KA/Pi support for opie mailit mailapplication. 435Added KA/Pi support for opie mailit mailapplication.
430 436
431Fixed some bugs in OM/Pi. 437Fixed some bugs in OM/Pi.
432Now character conversion tables are available for the Zaurus 438Now character conversion tables are available for the Zaurus
433to make OM/Pi working properly. 439to make OM/Pi working properly.
434To get the character conversion in OM/Pi working, please download 440To get the character conversion in OM/Pi working, please download
435at the sourceforge project site the package 441at the sourceforge project site the package
436sr-character-conversion_SharpROM_arm.ipk.zip 442sr-character-conversion_SharpROM_arm.ipk.zip
437(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms) 443(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms)
438from the section "general files for KDE/Pim" 444from the section "general files for KDE/Pim"
439Instructions how to install this package are in a ReadMe in this file. 445Instructions how to install this package are in a ReadMe in this file.
440 446
441 447
442Fixed the orientation change problem in KA/Pi when switching 448Fixed the orientation change problem in KA/Pi when switching
443portrait/landscape mode. 449portrait/landscape mode.
444 450
445French translation available for KA/Pi and OM/Pi. 451French translation available for KA/Pi and OM/Pi.
446 452
447Fixed some problems with categories in KO/Pi in DTM sync. 453Fixed some problems with categories in KO/Pi in DTM sync.
448 454
449Added selection dialog for export to phone in KA/Pi. 455Added selection dialog for export to phone in KA/Pi.
450 456
451If in KO/Pi is an attendee selected to add to a meeting and this 457If in KO/Pi is an attendee selected to add to a meeting and this
452attendee is already in the list of attendees, this person is not added 458attendee is already in the list of attendees, this person is not added
453again. 459again.
454 460
455Some menu cleanup in KA/Pi. 461Some menu cleanup in KA/Pi.
456 462
457********** VERSION 1.9.12 ************ 463********** VERSION 1.9.12 ************
458 464
459Fix for the bug in KO/Pi What's Next view of version 1.9.11. 465Fix for the bug in KO/Pi What's Next view of version 1.9.11.
460 466
461Bugfix: Licence file is now shown again. 467Bugfix: Licence file is now shown again.
462 468
463OM/Pi now supports Unicode (utf8 charset). 469OM/Pi now supports Unicode (utf8 charset).
464Fixed some bugs in OM/Pi. 470Fixed some bugs in OM/Pi.
465 471
466KA/Pi has more German translation. 472KA/Pi has more German translation.
467 473
468 474
469********** VERSION 1.9.11 ************ 475********** VERSION 1.9.11 ************
470 476
471Fixed several problems in PWM/Pi, like 477Fixed several problems in PWM/Pi, like
472asking the user, if unsaved changed are pending 478asking the user, if unsaved changed are pending
473when closing the app. 479when closing the app.
474And PwM/Pi handles now different texts for the 480And PwM/Pi handles now different texts for the
475fields Description, Username, Password, configurable per category. 481fields Description, Username, Password, configurable per category.
476 482
477Fixed a crash in KO/Pi , when importing/loading vcs files 483Fixed a crash in KO/Pi , when importing/loading vcs files
478which have an entry with an attendee with state: 484which have an entry with an attendee with state:
479NEEDS ACTION 485NEEDS ACTION
480 486
481Fixed some problems in the German translation of OM/Pi, 487Fixed some problems in the German translation of OM/Pi,
482which makes some dialogs not fitting on the screen 488which makes some dialogs not fitting on the screen
483of the Z 5500. 489of the Z 5500.
484 490
485Fixed Qtopia crash, when disabling/deinstalling 491Fixed Qtopia crash, when disabling/deinstalling
486KO/Pi alarm applet. 492KO/Pi alarm applet.
487 493
488Implemented direct KDE<->KA/Pi sync for KA/Pi running 494Implemented direct KDE<->KA/Pi sync for KA/Pi running
489on Linux desktop. 495on Linux desktop.
490 496
491Added feature "remove sync info" to sync menu. 497Added feature "remove sync info" to sync menu.
492 498
493Tweaked the KO/Pi What's next view a bit, added 499Tweaked the KO/Pi What's next view a bit, added
494setting to hide events that are done. 500setting to hide events that are done.
495 501
496Disabled "beam receive enabled" on startup to 502Disabled "beam receive enabled" on startup to
497avoid problems if Fastload is enabled. 503avoid problems if Fastload is enabled.
498Please set "beam receive enabled", 504Please set "beam receive enabled",
499if you want to receive data via IR. 505if you want to receive data via IR.
500 506
501Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running 507Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running
502on Linux desktop. 508on Linux desktop.
503 509
504Made in KA/Pi scrolling possible, if details view is selected. 510Made in KA/Pi scrolling possible, if details view is selected.
505(The keyboard focus is set automatically to the search line) 511(The keyboard focus is set automatically to the search line)
506 512
507Fixed a bug in DMT sync, that a new entry in DTM was added 513Fixed a bug in DMT sync, that a new entry in DTM was added
508on every sync to Kx/Pi. 514on every sync to Kx/Pi.
509 515
510Fixed missing writing of KA/Pi categories to DMT entries when syncing. 516Fixed missing writing of KA/Pi categories to DMT entries when syncing.
511 517
512Fixed a bug in DMT sync with todos created in KO/Pi containing 518Fixed a bug in DMT sync with todos created in KO/Pi containing
513non-latin1 characters. 519non-latin1 characters.
514 520
515Rearranged package contents of Sharp-ipks and made all 521Rearranged package contents of Sharp-ipks and made all
516packages installable on SD again. 522packages installable on SD again.
517 523
518Fixed the writing of addressbook data in DTM sync. 524Fixed the writing of addressbook data in DTM sync.
519Empty fields in KA/Pi were not removed. 525Empty fields in KA/Pi were not removed.
520 526
521Added better category handling in KA/Pi: 527Added better category handling in KA/Pi:
522Added item 528Added item
523Edit Categories and 529Edit Categories and
524Manage new categories 530Manage new categories
525to the settings menu. 531to the settings menu.
526Possible to configure a view to display categories. 532Possible to configure a view to display categories.
527 533
528Added detailed "KDE Sync Howto" and "Multi Sync Howto" to Help menu. 534Added detailed "KDE Sync Howto" and "Multi Sync Howto" to Help menu.
529 535
530Fixed displaying of "free" days and time in KO Monthview and Agendaview. 536Fixed displaying of "free" days and time in KO Monthview and Agendaview.
531 537
532... and many other bugfixes. 538... and many other bugfixes.
533 539
534********** VERSION 1.9.10 ************ 540********** VERSION 1.9.10 ************
535 541
536Many internal small bugfixes. 542Many internal small bugfixes.
537And fix of the "big" bug in KO/Pi, 543And fix of the "big" bug in KO/Pi,
538that after Syncing the appointments had an offset by several hours. 544that after Syncing the appointments had an offset by several hours.
539That was a problem with the internal timezone setting, 545That was a problem with the internal timezone setting,
540introduced by the changed timezone configuration settings. 546introduced by the changed timezone configuration settings.
541 547
542German translation for OM/Pi is now available. 548German translation for OM/Pi is now available.
543 549
544 550
545********** VERSION 1.9.9 ************ 551********** VERSION 1.9.9 ************
546 552
547KDE-Pim/Pi has a new Member! 553KDE-Pim/Pi has a new Member!
548It is called PWM/Pi (Passwordmanager/platform-independent) 554It is called PWM/Pi (Passwordmanager/platform-independent)
549and it is available for the Zaurus. 555and it is available for the Zaurus.
550It is planned, that it will be available later for Windows. 556It is planned, that it will be available later for Windows.
551(And for Linux, of course). 557(And for Linux, of course).
552It is a port of the Passwordmanager of KDE. 558It is a port of the Passwordmanager of KDE.
553It will need the MicroKDElibs to run. 559It will need the MicroKDElibs to run.
554 560
555Made loading of addressbooks in KA/Pi up to 7 times faster! 561Made loading of addressbooks in KA/Pi up to 7 times faster!
556The bigger your addressbook file, the more starting speed 562The bigger your addressbook file, the more starting speed
557will you gain. (relatively) 563will you gain. (relatively)
558 564
559The Qtopia addressbook connector is now platform independend 565The Qtopia addressbook connector is now platform independend
560as well and should work on any platform for importing/exporting 566as well and should work on any platform for importing/exporting
561Qtopia and Opie XML files. 567Qtopia and Opie XML files.
562 568
563Added a +30min feature to the timezone settings to make 569Added a +30min feature to the timezone settings to make
564KDE-Pim/Pi useable in Australia and other parts on the 570KDE-Pim/Pi useable in Australia and other parts on the
565world with strange timezones ;-) 571world with strange timezones ;-)
566 572
567German "Umlaute" should now be sorted correctly on the Z in KA/Pi. 573German "Umlaute" should now be sorted correctly on the Z in KA/Pi.
568 574
569It is now possible to disable the 575It is now possible to disable the
570"receive data via infrared" feature, such that syncing with 576"receive data via infrared" feature, such that syncing with
571Outlook is now possible again with Kx/Pi runing. 577Outlook is now possible again with Kx/Pi runing.
572Please disable it, before syncing Sharp DTM with Outlook. 578Please disable it, before syncing Sharp DTM with Outlook.
573For your convenience, the "receive data via infrared" feature 579For your convenience, the "receive data via infrared" feature
574is disabled automatically, if you sync Kx/Pi with DTM. 580is disabled automatically, if you sync Kx/Pi with DTM.
575You have to enable it again manually after syncing. 581You have to enable it again manually after syncing.
576Enabling this feature makes it impossible to start the 582Enabling this feature makes it impossible to start the
577Sharp DTM apps. If this feature is enabled, you will only get the 583Sharp DTM apps. If this feature is enabled, you will only get the
578alarm notification from KO/Pi and not from the Sharp calendar. 584alarm notification from KO/Pi and not from the Sharp calendar.
579This is very useful if you sync KO/Pi with Sharp DTM, 585This is very useful if you sync KO/Pi with Sharp DTM,
580because after syncing you usually would get notified about 586because after syncing you usually would get notified about
581an alarm by KO/Pi and the Sharp Calendar. 587an alarm by KO/Pi and the Sharp Calendar.
582 588
583Together with the Linux desktop version of KO/Pi 589Together with the Linux desktop version of KO/Pi
584it is now possible to sync KO/Pi on the Zaurus 590it is now possible to sync KO/Pi on the Zaurus
585with the complete KDE-desktop (3.3 or later) 591with the complete KDE-desktop (3.3 or later)
586calendar data easily. 592calendar data easily.
587That makes it possible to sync the Z with one 593That makes it possible to sync the Z with one
588click of a mouse with the KDE-Desktop. 594click of a mouse with the KDE-Desktop.
589This feature it available for all Zaurus platforms KO/Pi 595This feature it available for all Zaurus platforms KO/Pi
590is running on. 596is running on.
591The only thing needed is a running KO/Pi on Linux and 597The only thing needed is a running KO/Pi on Linux and
592a compiled version of the small 598a compiled version of the small
593KDE-Pim/Pi<->KDE-Desktop access command line program, 599KDE-Pim/Pi<->KDE-Desktop access command line program,
594which is in the KDE-Pim/Pi sources available. 600which is in the KDE-Pim/Pi sources available.
595 601
596The "KDE-desktop" syncing feature for KA/Pi will follow 602The "KDE-desktop" syncing feature for KA/Pi will follow
597in the next releases. 603in the next releases.
598 604
599Fixed the vcard export bug, which had the version 1.9.8. 605Fixed the vcard export bug, which had the version 1.9.8.
600 606
601Added missing GERMAN translation to KO/Pi. 607Added missing GERMAN translation to KO/Pi.
602Hi PsionX, could you add the missing french translation?Thx! 608Hi PsionX, could you add the missing french translation?Thx!
603 609
604Translation files for KA/Pi are available as well. 610Translation files for KA/Pi are available as well.
605GERMAN translation will be available in the next release. 611GERMAN translation will be available in the next release.
606PsionX ( yres, you again ;-) ), could you start translating 612PsionX ( yres, you again ;-) ), could you start translating
607KA/Pi? Thx! 613KA/Pi? Thx!
608 614
609You can download the version 1.9.9 at 615You can download the version 1.9.9 at
610 616
611http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604 617http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604
612 618
613Note: 619Note:
614To run the mail program OM/Pi you need libopenssl. 620To run the mail program OM/Pi you need libopenssl.
615A link to a download loaction is available at 621A link to a download loaction is available at
616ZSI at www.killefiz.de 622ZSI at www.killefiz.de
617 623
618 624
619********** VERSION 1.9.8 ************ 625********** VERSION 1.9.8 ************
620 626
621Fixed character decoding in OM/Pi. 627Fixed character decoding in OM/Pi.
622(e.g. German "Umlaute" were not displayed properly.) 628(e.g. German "Umlaute" were not displayed properly.)
623 629
624Made is possible to reparent todos in KO/Pi. 630Made is possible to reparent todos in KO/Pi.
625Use contextmenu or keys (look at Help-Keys + Colors) for that. 631Use contextmenu or keys (look at Help-Keys + Colors) for that.
626 632
627Added the missing Sync-Howto and WhatsNew to the packages. 633Added the missing Sync-Howto and WhatsNew to the packages.
628 634
629KO/Pi on Linux desktop can now sync with KDE desktop. 635KO/Pi on Linux desktop can now sync with KDE desktop.
630That means: When using KO/Pi on Linux desktop for syncing with 636That means: When using KO/Pi on Linux desktop for syncing with
631KDE desktop and the Zaurus, the Zaurus can be synced now 637KDE desktop and the Zaurus, the Zaurus can be synced now
632with all KDE-Calendar resources, not only with one local file. 638with all KDE-Calendar resources, not only with one local file.
633(That makes it possible to sync the Zaurus with the 639(That makes it possible to sync the Zaurus with the
634calendar data on a Kolab server) 640calendar data on a Kolab server)
635 641
636KA/Pi syncing with KDE desktop will be available in the next version. 642KA/Pi syncing with KDE desktop will be available in the next version.
637 643
638 644
639********** VERSION 1.9.7 ************ 645********** VERSION 1.9.7 ************
640 646
641KO/Pi - KA/Pi on Windows: 647KO/Pi - KA/Pi on Windows:
642Now a directory can be defined by the user, where the 648Now a directory can be defined by the user, where the
643application/config data should be saved. 649application/config data should be saved.
644 Define your desired path in the evironment variable 650 Define your desired path in the evironment variable
645 MICROKDEHOME 651 MICROKDEHOME
646 before starting KO/Pi or KA/Pi. 652 before starting KO/Pi or KA/Pi.
647 653
648An easy Kx/Pi to Kx/Pi syncing is now possible 654An easy Kx/Pi to Kx/Pi syncing is now possible
649(it is called Pi-Sync) via network. 655(it is called Pi-Sync) via network.
650Please look at the Sync Howto. 656Please look at the Sync Howto.
651 657
652Exporting of calendar data and contacts to mobile phones is now possible. 658Exporting of calendar data and contacts to mobile phones is now possible.
653The SyncHowto is updated with information howto 659The SyncHowto is updated with information howto
654access/sync mobile phones. 660access/sync mobile phones.
655Please look at the Sync Howto. 661Please look at the Sync Howto.
656 662
657Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly. 663Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly.
658Please disable Fastload for the original contact/calendar applications 664Please disable Fastload for the original contact/calendar applications
659and close them. 665and close them.
660KO/Pi and KA/Pi must be running in order to receive the data. 666KO/Pi and KA/Pi must be running in order to receive the data.
661(KO/Pi and KA/Pi are always running if Fastload for them is enabled!) 667(KO/Pi and KA/Pi are always running if Fastload for them is enabled!)
662 668
663In the KA/Pi details view are now the preferred tel. numbers displayed on top 669In the KA/Pi details view are now the preferred tel. numbers displayed on top
664of the other data ( emails/tel.numbers/addresses) 670of the other data ( emails/tel.numbers/addresses)
665 671
666Fixed some syncing problems in KA/Pi. 672Fixed some syncing problems in KA/Pi.
667 673
668Added font settings for the KA/Pi details view. 674Added font settings for the KA/Pi details view.
669Added fields "children's name" and "gender" to KA/Pi. 675Added fields "children's name" and "gender" to KA/Pi.
670 676
671Made searching in KA/Pi better: 677Made searching in KA/Pi better:
672Now the first item in a view is selected after a search automatically and 678Now the first item in a view is selected after a search automatically and
673the views can be scrolled up/down when the search input field has the keyboard focus. 679the views can be scrolled up/down when the search input field has the keyboard focus.
674 680
675And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi. 681And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi.
676 682
677 683
678********** VERSION 1.9.6 ************ 684********** VERSION 1.9.6 ************
679 685
680Changes in the external application communication on the Zaurus 686Changes in the external application communication on the Zaurus
681in order to use less RAM when the apps are running. 687in order to use less RAM when the apps are running.
682First syncing of addressbooks (KA/Pi) is possible. 688First syncing of addressbooks (KA/Pi) is possible.
683 689
684 690
685********** VERSION 1.9.5a ************ 691********** VERSION 1.9.5a ************
686 692
687Fixed a bug in KO/Pi in the SharpDTM sync of version 1.9.5. 693Fixed a bug in KO/Pi in the SharpDTM sync of version 1.9.5.
688Fixed some small bugs. 694Fixed some small bugs.
689KA/Pi shows now the birthday in summary view. 695KA/Pi shows now the birthday in summary view.
690Now OM/Pi and KA/Pi are using the date format defined in KO/Pi 696Now OM/Pi and KA/Pi are using the date format defined in KO/Pi
691for displaying dates. 697for displaying dates.
692 698
693 699
694********** VERSION 1.9.5 ************ 700********** VERSION 1.9.5 ************
695 701
696There is still no Addressbook syncing! 702There is still no Addressbook syncing!
697 703
698New in 1.9.5: 704New in 1.9.5:
699 705
700Many bugfixes. 706Many bugfixes.
701Better searching in KA/Pi. 707Better searching in KA/Pi.
702You can configure in KA/Pi if you want to search only after 708You can configure in KA/Pi if you want to search only after
703<return> key pressed. 709<return> key pressed.
704 710
705Better mail downloading in OM/Pi. 711Better mail downloading in OM/Pi.
706 712
707First experimental alpha version of sync of KO/Pi with mobile phones. 713First experimental alpha version of sync of KO/Pi with mobile phones.
708See gammu documentation for supported phones. 714See gammu documentation for supported phones.
709You 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. 715You 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.
710Quick hint how to use: 716Quick hint how to use:
711NOTE: MOBILE PHONE SYNC IS EXPERIMENTAL! 717NOTE: MOBILE PHONE SYNC IS EXPERIMENTAL!
712Install kammu_1.9.5_arm.ipk , libbluetooth and libsdp. 718Install kammu_1.9.5_arm.ipk , libbluetooth and libsdp.
713Create syncprofile - mobile device 719Create syncprofile - mobile device
714Remove entry for model. (Leave empty ). 720Remove entry for model. (Leave empty ).
715Enable infrared on Zaurus and your Phone. 721Enable infrared on Zaurus and your Phone.
716Sync. 722Sync.
717To get a more detailed log, start kopi from konsole. 723To get a more detailed log, start kopi from konsole.
718 724
719********** VERSION 1.9.4 ************ 725********** VERSION 1.9.4 ************
720 726
721This is the version 1.9.4 of KDE-Pim/Pi for the Zaurus. 727This is the version 1.9.4 of KDE-Pim/Pi for the Zaurus.
722 728
723WARNING: 729WARNING:
724PLEASE BACKUP ALL YOUR DATA! 730PLEASE BACKUP ALL YOUR DATA!
725We have changed a lot and maybe there are some unknown problems. 731We have changed a lot and maybe there are some unknown problems.
726 732
727SYNC HANDLING HAS CHANGED! 733SYNC HANDLING HAS CHANGED!
728Such that, if you sync now with an already synded device, you will duplicated entries after the first sync. 734Such that, if you sync now with an already synded device, you will duplicated entries after the first sync.
729(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks). 735(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks).
730 736
731You need the kmicrokdelibs_1.9.4_arm.ipk as a base for the other programs. 737You need the kmicrokdelibs_1.9.4_arm.ipk as a base for the other programs.
732If you get the error: "Install only possible in main memory", just try it again to install it on SD card. That worked for me. And it was reported that rebooting Qtopia did help in this case as well. 738If you get the error: "Install only possible in main memory", just try it again to install it on SD card. That worked for me. And it was reported that rebooting Qtopia did help in this case as well.
733 739
734As programs are available: 740As programs are available:
735KO/Pi (korganizer ipk) - a calendar program. 741KO/Pi (korganizer ipk) - a calendar program.
736KA/Pi (kaddressbook ipk ) - an addressbook 742KA/Pi (kaddressbook ipk ) - an addressbook
737OM/Pi (kopiemail ipk ) an email program with pop/smtp and IMAP support. 743OM/Pi (kopiemail ipk ) an email program with pop/smtp and IMAP support.
738 744
739An alarm notification program ( korganizer-alarm ipk ) for KO/Pi that notifies you about alarms, even if the Zaurus is in suspend mode. 745An alarm notification program ( korganizer-alarm ipk ) for KO/Pi that notifies you about alarms, even if the Zaurus is in suspend mode.
740(If you do not see an icon in the taskbar after installing korganizer-alarm, please restart Qtopia) 746(If you do not see an icon in the taskbar after installing korganizer-alarm, please restart Qtopia)
741 747
742All the applications are installed in a "Pim" TAB. 748All the applications are installed in a "Pim" TAB.
743If this TAB is new on your system, you can get an icon in this TAB by installing pim_TAB_icon_1.9.4_arm.ipk 749If this TAB is new on your system, you can get an icon in this TAB by installing pim_TAB_icon_1.9.4_arm.ipk
744 750
745All the application are integrated. 751All the application are integrated.
746Such that you can choose in KO/Pi the attendees of a meeting from the addresses in KA/Pi. When you click in KA/Pi on the email address, OM/Pi is started to write the mail. 752Such that you can choose in KO/Pi the attendees of a meeting from the addresses in KA/Pi. When you click in KA/Pi on the email address, OM/Pi is started to write the mail.
747 753
748HINT: 754HINT:
749If you install KPhone/Pi 0.9.7, it will be called, if you click in KA/Pi on a phone number. 755If you install KPhone/Pi 0.9.7, it will be called, if you click in KA/Pi on a phone number.
750 756
751What's new? 757What's new?
752 758
753SYNC HANDLING HAS CHANGED! 759SYNC HANDLING HAS CHANGED!
754Such that, if you sync now with an already synded device, you will duplicated entries after the first sync. 760Such that, if you sync now with an already synded device, you will duplicated entries after the first sync.
755(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks). 761(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks).
756 762
757New in OM/Pi: 763New in OM/Pi:
758When copying(i.e. downloading mails) , you can specify, that only mails of a given size should be downloaded. Added mail copy possibility for selected mails. 764When copying(i.e. downloading mails) , you can specify, that only mails of a given size should be downloaded. Added mail copy possibility for selected mails.
759 765
760New in KO/Pi: 766New in KO/Pi:
761French is now available for KO/Pi. 767French is now available for KO/Pi.
762Choose menu:Actions - Configure:TAB locale 768Choose menu:Actions - Configure:TAB locale
763Syncing has changed. 769Syncing has changed.
764Phone sync available soon. 770Phone sync available soon.
765Not much changes, I cannot remember them ... 771Not much changes, I cannot remember them ...
766 772
767New in KA/Pi: 773New in KA/Pi:
768Beaming possible. 774Beaming possible.
769Sharp DTM readonly access possible( create a new DTM resource ); 775Sharp DTM readonly access possible( create a new DTM resource );
770Better searching possible. 776Better searching possible.
771Search is performed only after pressing the return key. 777Search is performed only after pressing the return key.
772Use wildcard * to specify parts of a name. 778Use wildcard * to specify parts of a name.
773 779
774Better name/email selection dialog (called from KO/Pi or OM/Pi). In this dialog, now searching is possible. Like in KA/Pi, use return key and wildcard * . 780Better name/email selection dialog (called from KO/Pi or OM/Pi). In this dialog, now searching is possible. Like in KA/Pi, use return key and wildcard * .
775 781
776A big improvement is the new management of the contact access. 782A big improvement is the new management of the contact access.
777In version 1.9.3, every application was using their own addressbook access data. 783In version 1.9.3, every application was using their own addressbook access data.
778That means, the addressbook was loaded up to three times in the memory, when accessed by KA/Pi, KO/Pi and OM/Pi. 784That means, the addressbook was loaded up to three times in the memory, when accessed by KA/Pi, KO/Pi and OM/Pi.
779That was wasting of memory, if you had several hundreds of contacts. 785That was wasting of memory, if you had several hundreds of contacts.
780 786
781Now only KA/Pi accesses the addressbook. 787Now only KA/Pi accesses the addressbook.
782If KO/Pi or OM/Pi want to get some name/email data, they request KA/Pi to open the name/email selection dialog and send it back to them. 788If KO/Pi or OM/Pi want to get some name/email data, they request KA/Pi to open the name/email selection dialog and send it back to them.
783If you click on an attendee in a meeting, its contact data is displayed in KA/Pi directly. 789If you click on an attendee in a meeting, its contact data is displayed in KA/Pi directly.
784That means, if KO/Pi or OM/Pi want to access contact data, KA/Pi is started first. 790That means, if KO/Pi or OM/Pi want to access contact data, KA/Pi is started first.
785 791
786New in the KO/Pi alarm applet: 792New in the KO/Pi alarm applet:
787Configure your own timer popup menu! 793Configure your own timer popup menu!
788(Text and minutes for timer countdown) 794(Text and minutes for timer countdown)
789Just edit the file 795Just edit the file
790(yourhomedir)/.kopialarmtimerrc 796(yourhomedir)/.kopialarmtimerrc
791and start/stop a timer to get a new menu with the data of this file. 797and start/stop a timer to get a new menu with the data of this file.
792 798
793********** VERSION 1.9.3 ************ 799********** VERSION 1.9.3 ************
7941) 8001)
795Now KO/Pi on Windows imports directly the calendar data of 801Now KO/Pi on Windows imports directly the calendar data of
796an installed Outlook. Should work with OL version >= 2000. 802an installed Outlook. Should work with OL version >= 2000.
797 803
798********** VERSION 1.9.2 ************ 804********** VERSION 1.9.2 ************
7991) 8051)
800KDE-Pim/Pi has got a new member: 806KDE-Pim/Pi has got a new member:
801KmicroMail (KM/Pi) is a mail program, 807KmicroMail (KM/Pi) is a mail program,
802which can handle IMAP and POP mail access. 808which can handle IMAP and POP mail access.
803It is based on Opie-Mail v3. 809It is based on Opie-Mail v3.
804All dependencies to the Opie libraries ar removed, 810All dependencies to the Opie libraries ar removed,
805such that no additional Opie lib is needed. 811such that no additional Opie lib is needed.
806It is already integrated in KO/Pi and KA/Pi. 812It is already integrated in KO/Pi and KA/Pi.
807It it now available for the Zaurus,probably it 813It it now available for the Zaurus,probably it
808will be available for other platforms later. 814will be available for other platforms later.
809Hint: 815Hint:
810Create your own contact (name + email) 816Create your own contact (name + email)
811in KA/Pi, select this contact and choose menu: 817in KA/Pi, select this contact and choose menu:
812Settings - Set Who Am I. 818Settings - Set Who Am I.
813Now the settings of this contact are used as 819Now the settings of this contact are used as
814the sender data in KM/Pi. 820the sender data in KM/Pi.
8152) 8212)
816KDE-Pim/Pi is split up in five different 822KDE-Pim/Pi is split up in five different
817packages now precompiled for Sharp Zaurus: 823packages now precompiled for Sharp Zaurus:
818--kmicrokdelibs_1.9.2_arm.ipk 824--kmicrokdelibs_1.9.2_arm.ipk
819The libs are needed for any 825The libs are needed for any
820of the following programs: 826of the following programs:
821--kaddressbook_1.9.2_arm.ipk 827--kaddressbook_1.9.2_arm.ipk
822--kmicromail_1.9.2_arm.ipk 828--kmicromail_1.9.2_arm.ipk
823--korganizer_1.9.2_arm.ipk 829--korganizer_1.9.2_arm.ipk
824Independ from that, there is the alarm applet 830Independ from that, there is the alarm applet
825available for KO/Pi, which also offers 831available for KO/Pi, which also offers
826quick access for a new mail or 832quick access for a new mail or
827showing the addressbook.: 833showing the addressbook.:
828--korganizer-alarm_1.9.2_arm.ipk 834--korganizer-alarm_1.9.2_arm.ipk
829Independend means, that the alarm applet 835Independend means, that the alarm applet
830does not need any of the libs or programs above to run. 836does not need any of the libs or programs above to run.
831But it would be quite useless without these programs. 837But it would be quite useless without these programs.
832NOTE: 838NOTE:
833If you get a 839If you get a
834"This application depends on other programs" 840"This application depends on other programs"
835during installation of 841during installation of
836--kmicrokdelibs_1.9.2_arm.ipk 842--kmicrokdelibs_1.9.2_arm.ipk
837you probably do not have to care about that. 843you probably do not have to care about that.
838kmicrokdelibs_1.9.2 will come with some 844kmicrokdelibs_1.9.2 will come with some
839resource plugins, which needs additional libraries. 845resource plugins, which needs additional libraries.
840(E.g. libopie1, if you want to use the 846(E.g. libopie1, if you want to use the
841opie resource connector in KA/Pi). 847opie resource connector in KA/Pi).
842If you do not have this libraries installed, 848If you do not have this libraries installed,
843you simply cannot use the resource. 849you simply cannot use the resource.
844To make it clear: 850To make it clear:
845If the libraries are missing, the applications 851If the libraries are missing, the applications
846using kmicrokdelibs will start, 852using kmicrokdelibs will start,
847because the resources are plugins. 853because the resources are plugins.
8483) 8543)
849KO/Pi and friends are now installable on SD-Card! 855KO/Pi and friends are now installable on SD-Card!
850It is recommended to install all libs and apps 856It is recommended to install all libs and apps
851on the SD card or all in the internal storage. 857on the SD card or all in the internal storage.
852There may be problems, if this is mixed. 858There may be problems, if this is mixed.
8534) 8594)
854Fixed two bugs in the alarm notification on Windows. 860Fixed two bugs in the alarm notification on Windows.
8555) 8615)
856Great improvement! 862Great improvement!
857KO/Pi uses now the latest version of libical. 863KO/Pi uses now the latest version of libical.
858Libical is the library which actually reads 864Libical is the library which actually reads
859the calendar files and extract the data from it. 865the calendar files and extract the data from it.
860With the old version, there were problems 866With the old version, there were problems
861(crashes or program hangs) when licical did read 867(crashes or program hangs) when licical did read
862files, which were not stored from KO/Pi. 868files, which were not stored from KO/Pi.
863I do not know, if the new libical works perfect, 869I do not know, if the new libical works perfect,
864but actually it works much better than 870but actually it works much better than
865the old version. 871the old version.
866There are no problems with compatibility with 872There are no problems with compatibility with
867old calendar files of KO/Pi, of course! 873old calendar files of KO/Pi, of course!
8686) 8746)
869New in KA/Pi: 875New in KA/Pi:
870Opie addressbook resource connector available! 876Opie addressbook resource connector available!
871You will need libopie1 and the opie addressbook, 877You will need libopie1 and the opie addressbook,
872of course. 878of course.
873With the Opie addressbook resource connector, 879With the Opie addressbook resource connector,
874you can access the Opie addressbook readonly in KA/Pi. 880you can access the Opie addressbook readonly in KA/Pi.
875If you want to edit or import the data into KA/Pi, 881If you want to edit or import the data into KA/Pi,
876do this: 882do this:
877a) Create an Opie resource. 883a) Create an Opie resource.
878 (Menu: Settings-Configure Resources). 884 (Menu: Settings-Configure Resources).
879After configuration and restarting KA/Pi you should see 885After configuration and restarting KA/Pi you should see
880the Opie contacts in KA/Pi. 886the Opie contacts in KA/Pi.
881b) Select some or all Opie contacts. 887b) Select some or all Opie contacts.
882(NOTE: +++++ 888(NOTE: +++++
883To know exactly, what contacts are Opie contacts, 889To know exactly, what contacts are Opie contacts,
884do this: Choose menu: 890do this: Choose menu:
885View-Modify View - TAB Fields. 891View-Modify View - TAB Fields.
886Select in the above list "Resource" and click 892Select in the above list "Resource" and click
887down arrow to add it to the "Selected fields". 893down arrow to add it to the "Selected fields".
888Click OK. 894Click OK.
889Now you have a new column "Resource" in your list, 895Now you have a new column "Resource" in your list,
890where you can see, what an Opie resource is. 896where you can see, what an Opie resource is.
891++++ NOTE end.) 897++++ NOTE end.)
892Ok, we do have now some Opie contacts seleted. 898Ok, we do have now some Opie contacts seleted.
893(Use SHIFT or CTRL key in order to multiple select). 899(Use SHIFT or CTRL key in order to multiple select).
894c) Choose menu: Edit-Copy. 900c) Choose menu: Edit-Copy.
895d) Choose menu: Edit-Paste. 901d) Choose menu: Edit-Paste.
896e) Select the resource, you want to add the contacts to. 902e) Select the resource, you want to add the contacts to.
897Congrats! Now you have read/write access to the copied 903Congrats! Now you have read/write access to the copied
898opie contacts as "real" KA/Pi contacts. 904opie contacts as "real" KA/Pi contacts.
899 905
900 906
901********** VERSION 1.9.1 ************ 907********** VERSION 1.9.1 ************
9021) 9081)
903 +++ IMPORTANT 1 +++ 909 +++ IMPORTANT 1 +++
904 910
905The storing place of the default calendar 911The storing place of the default calendar
906file has changed! 912file has changed!
907The default calendar file was 913The default calendar file was
908Applications/korganizer/mycalendar.ics 914Applications/korganizer/mycalendar.ics
909on Zaurus and 915on Zaurus and
910(yourHomeDir)/korganizer/mycalendar.ics 916(yourHomeDir)/korganizer/mycalendar.ics
911on Windows/Linux desktop. Now it is 917on Windows/Linux desktop. Now it is
912(yourHomeDir)/kdepim/korganizer/mycalendar.ics 918(yourHomeDir)/kdepim/korganizer/mycalendar.ics
913on Zaurus, Windows and Linux. 919on Zaurus, Windows and Linux.
914To load the old file, choose menu 920To load the old file, choose menu
915File-Load calendar backup. 921File-Load calendar backup.
916(It should be loaded automatically 922(It should be loaded automatically
917at startup with a warning message displayed). 923at startup with a warning message displayed).
918The place of the configuration file has changed too. 924The place of the configuration file has changed too.
919If you want to use your old KO/Pi config, 925If you want to use your old KO/Pi config,
920copy it to 926copy it to
921(yourHomeDir)/kdepim/config/korganizerrc 927(yourHomeDir)/kdepim/config/korganizerrc
922Please read VERSION 1.9.0 - topic 3) as well! 928Please read VERSION 1.9.0 - topic 3) as well!
923 929
924 +++ IMPORTANT 2 +++ 930 +++ IMPORTANT 2 +++
925 931
926Because of the new paths, you will need 932Because of the new paths, you will need
927a new version of the KO/Pi alarm applet 933a new version of the KO/Pi alarm applet
928for Zaurus. 934for Zaurus.
929Use version >= 1.9.1 935Use version >= 1.9.1
930 936
9312) 9372)
932Now the QWhat'sThis Icon works for items 938Now the QWhat'sThis Icon works for items
933in the month view as well. 939in the month view as well.
934(See VERSION 1.7.8 Topic 1) ). 940(See VERSION 1.7.8 Topic 1) ).
9353) 9413)
936You can import birtsdays/anniversaries 942You can import birtsdays/anniversaries
937from KA/Pi into KO/Pi. 943from KA/Pi into KO/Pi.
938Choose menu File-Import birthdays. 944Choose menu File-Import birthdays.
939If you import twice, already imported items 945If you import twice, already imported items
940will not be imported again, if they 946will not be imported again, if they
941have not been changed in KO/Pi. 947have not been changed in KO/Pi.
9424) 9484)
943When syncing with sharp DTM, now a progress 949When syncing with sharp DTM, now a progress
944is shown, when the data is written back. 950is shown, when the data is written back.
945If there is much data in KO/Pi and no data 951If there is much data in KO/Pi and no data
946in DTM, that can take a long time. 952in DTM, that can take a long time.
947(But only for the first time ). 953(But only for the first time ).
9485) 9545)
949In the search dialog, you can search 955In the search dialog, you can search
950now for the name/email of an attendee 956now for the name/email of an attendee
951of an event/todo. 957of an event/todo.
952To get more space for displaying 958To get more space for displaying
953search results, the buttons 959search results, the buttons
954for "search" and "close" on the 960for "search" and "close" on the
955bottom are removed in the PDA version. 961bottom are removed in the PDA version.
956You have to click OK in the top right 962You have to click OK in the top right
957corner to do a search. 963corner to do a search.
9586) 9646)
959Now it is possible to disable the displaying 965Now it is possible to disable the displaying
960of todo items in the Allday part of the Agenda. 966of todo items in the Allday part of the Agenda.
961Choose Menu Action-Configure, 967Choose Menu Action-Configure,
962TAB Todo View, checkbox 968TAB Todo View, checkbox
963"Allday Agenda view shows todos" 969"Allday Agenda view shows todos"
9647) 9707)
965If FastLoad is enabled, now the settings and the 971If FastLoad is enabled, now the settings and the
966calendar data are saved, when KO/Pi is closed. 972calendar data are saved, when KO/Pi is closed.
967(If no Fastload is enabled, KO/Pi saves 973(If no Fastload is enabled, KO/Pi saves
968the data as well, of course) 974the data as well, of course)
9698) 9758)
970The Agenda View has a minimize-splitter now, 976The Agenda View has a minimize-splitter now,
971such that the height of the allday part can be 977such that the height of the allday part can be
972changed quickly. 978changed quickly.
973 979
974********** VERSION 1.9.0 ************ 980********** VERSION 1.9.0 ************
9751) 9811)
976KO/Pi is now merged with the new microKDE from KA/Pi. 982KO/Pi is now merged with the new microKDE from KA/Pi.
977KO/Pi accesses now KA/Pi as the addressbook. 983KO/Pi accesses now KA/Pi as the addressbook.
978The other ddressbook-plugins are not working any longer. 984The other ddressbook-plugins are not working any longer.
979(It is planned, that later KA/Pi itself uses these plugins) 985(It is planned, that later KA/Pi itself uses these plugins)
980New versions of KO/Pi are only available 986New versions of KO/Pi are only available
981together with KA/Pi as the KDE-Pim/Pi package. 987together with KA/Pi as the KDE-Pim/Pi package.
9822) 9882)
983If you click on an attendee of a meeting in the 989If you click on an attendee of a meeting in the
984event viewer, a detailed summary of the 990event viewer, a detailed summary of the
985attendee is shown. 991attendee is shown.
9863) 9923)
987The place of the configuration file has changed. 993The place of the configuration file has changed.
988If you want to use your old KO/Pi config, copy 994If you want to use your old KO/Pi config, copy
989Applications/korganizer/config_korganizerrc 995Applications/korganizer/config_korganizerrc
990to 996to
991Applications/korganizer/config/korganizerrc 997Applications/korganizer/config/korganizerrc
992 998
993********** VERSION 1.7.8 ************ 999********** VERSION 1.7.8 ************
9941) 10001)
995Now the QWhat'sThis ist working. 1001Now the QWhat'sThis ist working.
996Enable the QWhat'sThis icon in the toolbar. 1002Enable the QWhat'sThis icon in the toolbar.
997(You have to restart to reload the changed toolbar config). 1003(You have to restart to reload the changed toolbar config).
998Now click on the QWhat'sThis Icon 1004Now click on the QWhat'sThis Icon
999in the top right corner of KO/Pi. 1005in the top right corner of KO/Pi.
1000Then click on an item in the Agenda View: 1006Then click on an item in the Agenda View:
1001You will get a detailed display of the items content. 1007You will get a detailed display of the items content.
10022) 10082)
1003Some other very minor changes. 1009Some other very minor changes.
1004But I have forgotten the details ... 1010But I have forgotten the details ...
1005For that reason I start this log here: 1011For that reason I start this log here:
1006To document my changes, when I am doing it. 1012To document my changes, when I am doing it.
1007 1013
1008********** VERSION 1.7.7 ************ 1014********** VERSION 1.7.7 ************
1009Stable Version of KO/Pi 1015Stable Version of KO/Pi
diff --git a/desktop/rpm/kdepim_rpm b/desktop/rpm/kdepim_rpm
index 0d4c9d6..ff9f2dc 100644
--- a/desktop/rpm/kdepim_rpm
+++ b/desktop/rpm/kdepim_rpm
@@ -1,84 +1,84 @@
1Summary: A collection of PIM programs 1Summary: A collection of PIM programs
2Name: KDE-Pim-Pi 2Name: KDE-Pim-Pi
3Version: 2.0.12 3Version: 2.0.13
4Release: SuSE_9.2 4Release: SuSE_9.2
5Copyright:GPL 5Copyright:GPL
6Group: Productivity/Pim 6Group: Productivity/Pim
7Source:http://sourceforge.net/projects/kdepimpi/ 7Source:http://sourceforge.net/projects/kdepimpi/
8URL:http://sourceforge.net/projects/kdepimpi/ 8URL:http://sourceforge.net/projects/kdepimpi/
9Packager: zautrix 9Packager: zautrix
10 10
11%description 11%description
12This package contains the platform-independent PIM programs from 12This package contains the platform-independent PIM programs from
13www.pi-sync.net, compiled for SuSE 9.2: 13www.pi-sync.net, compiled for SuSE 9.2:
14KTimeTacker/Pi 14KTimeTacker/Pi
15KPhone/Pi 15KPhone/Pi
16KAddressbook/Pi 16KAddressbook/Pi
17KOrganizer/Pi 17KOrganizer/Pi
18PasswordManager/Pi 18PasswordManager/Pi
19KOPieMail/Pi 19KOPieMail/Pi
20 20
21These applications do not need anything from the KDE-desktop 21These applications do not need anything from the KDE-desktop
22at all to run on Linux. However, there is a dependency from 22at all to run on Linux. However, there is a dependency from
23two KDE libs, because a small command line program is included 23two KDE libs, because a small command line program is included
24to make it possible to sync with the KDE-desktop applications. 24to make it possible to sync with the KDE-desktop applications.
25 25
26These applications are independent from the KDE-desktop 26These applications are independent from the KDE-desktop
27environment. That means, nothing of your existing 27environment. That means, nothing of your existing
28KDE-desktop setup will be changed, or any data 28KDE-desktop setup will be changed, or any data
29(calendar-addressbook) used by the KDE-desktop 29(calendar-addressbook) used by the KDE-desktop
30applications will be changed or accessed. 30applications will be changed or accessed.
31These applications stores their data and config in 31These applications stores their data and config in
32$HOME/kdepim/ 32$HOME/kdepim/
33However, because the same file format is used, 33However, because the same file format is used,
34an easy exchange of data with the KDE-desktop 34an easy exchange of data with the KDE-desktop
35is possible. 35is possible.
36A small command line program is included 36A small command line program is included
37to make it possible to sync with the KDE-desktop applications. 37to make it possible to sync with the KDE-desktop applications.
38You do not need to call this program from the commandline, 38You do not need to call this program from the commandline,
39it is called from the KDE-Pim/Pi apps when you choose there: 39it is called from the KDE-Pim/Pi apps when you choose there:
40Sync with KDE_Desktop. 40Sync with KDE_Desktop.
41If something is going wrong, please start the 41If something is going wrong, please start the
42KDE-Pim/Pi program itself from the console to get detailed output. 42KDE-Pim/Pi program itself from the console to get detailed output.
43 43
44After installation, you should have a 44After installation, you should have a
45PIM-pi 45PIM-pi
46folder in your KDE start menu, where you can 46folder in your KDE start menu, where you can
47start the applications from. 47start the applications from.
48 48
49These programs makes it possible to sync your Zaurus easily 49These programs makes it possible to sync your Zaurus easily
50(with the KDE-Pim/Pi programs running on the Zaurus) 50(with the KDE-Pim/Pi programs running on the Zaurus)
51with the KDE-desktop calendar/addressbook data. 51with the KDE-desktop calendar/addressbook data.
52If you want to use that, you have to update your 52If you want to use that, you have to update your
53KDE-desktop to version 3.3.0 or higher. 53KDE-desktop to version 3.3.0 or higher.
54SuSE 9.2 contains KDE 3.3.0 such that no update is needed. 54SuSE 9.2 contains KDE 3.3.0 such that no update is needed.
55Actually - after the (non difficult) configuration is set up - 55Actually - after the (non difficult) configuration is set up -
56with two mouseklicks on the Zaurus, 56with two mouseklicks on the Zaurus,
57the Zaurus syncs with the corresponding KDE-Pim/Pi 57the Zaurus syncs with the corresponding KDE-Pim/Pi
58program on the Linux Desktop which syncs automatically 58program on the Linux Desktop which syncs automatically
59with the KDE-desktop data. 59with the KDE-desktop data.
60 60
61If you want to use the KDE-desktop calendar/addressbook applications, 61If you want to use the KDE-desktop calendar/addressbook applications,
62just install these apps in this package and use them as a syncing tool for the 62just install these apps in this package and use them as a syncing tool for the
63Zaurus <-> KDE-desktop sync. 63Zaurus <-> KDE-desktop sync.
64The sync requires a network connection from your Zaurus to 64The sync requires a network connection from your Zaurus to
65the PC. A detailed Sync HowTo is available in the 65the PC. A detailed Sync HowTo is available in the
66Help menu of the applications. 66Help menu of the applications.
67 67
68These applications makes it also possible, that you can sync 68These applications makes it also possible, that you can sync
69(or just export the data to) your mobile phone with your 69(or just export the data to) your mobile phone with your
70data of the KDE-desktop calendar/addressbook applications. 70data of the KDE-desktop calendar/addressbook applications.
71This is tested and working for Nokia mobile phones, 71This is tested and working for Nokia mobile phones,
72it may work with others as well. 72it may work with others as well.
73(More info about that: -> Sync HowTo) 73(More info about that: -> Sync HowTo)
74 74
75NOTE: 75NOTE:
76When using SuSE 9.1 you have to update your KDE to 3.3.x 76When using SuSE 9.1 you have to update your KDE to 3.3.x
77and you have to make an online update in SuSE 9.1 to make it 77and you have to make an online update in SuSE 9.1 to make it
78possible to get the infrared connection working, such that 78possible to get the infrared connection working, such that
79you can sync your (Nokia) mobile phone via infrared. 79you can sync your (Nokia) mobile phone via infrared.
80 80
81%files 81%files
82/opt/kde3/share/applnk/PIM-pi/ 82/opt/kde3/share/applnk/PIM-pi/
83/opt/kdepimpi/ 83/opt/kdepimpi/
84/usr/lib/libmicro* 84/usr/lib/libmicro*
diff --git a/kabc/addresseedialog.cpp b/kabc/addresseedialog.cpp
index 34f4160..b3429e3 100644
--- a/kabc/addresseedialog.cpp
+++ b/kabc/addresseedialog.cpp
@@ -1,293 +1,309 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21#include <qlayout.h> 21#include <qlayout.h>
22#include <qpushbutton.h> 22#include <qpushbutton.h>
23#include <qgroupbox.h> 23#include <qgroupbox.h>
24#include <qapplication.h> 24#include <qapplication.h>
25#include <qregexp.h> 25#include <qregexp.h>
26#include <qvbox.h>
27#include <qlabel.h>
26 28
27#include <klocale.h> 29#include <klocale.h>
28#include <kdebug.h> 30#include <kdebug.h>
29#include <kglobalsettings.h> 31#include <kglobalsettings.h>
30 32
31#include "stdaddressbook.h" 33#include "stdaddressbook.h"
32 34
33#include "addresseedialog.h" 35#include "addresseedialog.h"
36#include "KDGanttMinimizeSplitter.h"
34//#include "addresseedialog.moc" 37//#include "addresseedialog.moc"
35 38
36using namespace KABC; 39using namespace KABC;
37 40
38AddresseeItem::AddresseeItem( QListView *parent, const Addressee &addressee ) : 41AddresseeItem::AddresseeItem( QListView *parent, const Addressee &addressee ) :
39 QListViewItem( parent ), 42 QListViewItem( parent ),
40 mAddressee( addressee ) 43 mAddressee( addressee )
41{ 44{
42 QString name = addressee.familyName()+", "+ addressee.givenName(); 45 QString name = addressee.familyName()+", "+ addressee.givenName();
43 if ( name.length() == 2 ) 46 if ( name.length() == 2 )
44 name = addressee.organization(); 47 name = addressee.organization();
45 setText( Name,name); 48 setText( Name,name);
46 setText( Email, addressee.preferredEmail() ); 49 setText( Email, addressee.preferredEmail() );
47} 50}
48 51
49QString AddresseeItem::key( int column, bool ) const 52QString AddresseeItem::key( int column, bool ) const
50{ 53{
51 54
52 if (column == Email) { 55 if (column == Email) {
53 QString value = text(Email); 56 QString value = text(Email);
54 int val = value.findRev("@"); 57 int val = value.findRev("@");
55 return value.mid( val) + value.left( val ); 58 return value.mid( val) + value.left( val );
56 } 59 }
57 return text(column).lower(); 60 return text(column).lower();
58} 61}
59 62
60AddresseeDialog::AddresseeDialog( QWidget *parent, bool multiple ) : 63AddresseeDialog::AddresseeDialog( QWidget *parent, bool multiple ) :
61 KDialogBase( KDialogBase::Plain, i18n("Select Addressee"), 64 KDialogBase( KDialogBase::Plain, i18n("Select Addressee"),
62 Ok|Cancel, Ok, parent ), mMultiple( multiple ) 65 Ok|Cancel, No, parent ), mMultiple( multiple )
63{ 66{
64 QWidget *topWidget = plainPage(); 67 QWidget *topWidget = plainPage();
65 68
66 QBoxLayout *topLayout = new QHBoxLayout( topWidget ); 69 QBoxLayout *topLayout = new QHBoxLayout( topWidget );
67 QBoxLayout *listLayout = new QVBoxLayout;
68 topLayout->addLayout( listLayout );
69 70
70 mAddresseeList = new KListView( topWidget ); 71
72 KDGanttMinimizeSplitter* mMiniSplitter = new KDGanttMinimizeSplitter( Qt::Horizontal, topWidget);
73 mMiniSplitter->setMinimizeDirection ( KDGanttMinimizeSplitter::Right );
74
75 topLayout->addWidget(mMiniSplitter );
76
77 QWidget *listWidget = new QWidget( mMiniSplitter );
78
79 QBoxLayout *listLayout = new QVBoxLayout (listWidget) ;
80 //topLayout->addLayout( listLayout );
81
82 mAddresseeList = new KListView( listWidget );
71 mAddresseeList->addColumn( i18n("Name") ); 83 mAddresseeList->addColumn( i18n("Name") );
72 mAddresseeList->addColumn( i18n("Email") ); 84 mAddresseeList->addColumn( i18n("Email") );
73 mAddresseeList->setAllColumnsShowFocus( true ); 85 mAddresseeList->setAllColumnsShowFocus( true );
74 mAddresseeList->setFullWidth( true ); 86 mAddresseeList->setFullWidth( true );
75 listLayout->addWidget( mAddresseeList ); 87 listLayout->addWidget( mAddresseeList );
76 connect( mAddresseeList, SIGNAL( doubleClicked( QListViewItem * ) ), 88 connect( mAddresseeList, SIGNAL( doubleClicked( QListViewItem * ) ),
77 SLOT( slotOk() ) ); 89 SLOT( slotOk() ) );
78 90
79 mAddresseeEdit = new QLineEdit( topWidget ); 91 mAddresseeEdit = new QLineEdit( listWidget );
80 connect( mAddresseeEdit, SIGNAL( returnPressed() ), 92 connect( mAddresseeEdit, SIGNAL( returnPressed() ),
81 SLOT( loadAddressBook() ) ); 93 SLOT( loadAddressBook() ) );
82 mAddresseeEdit->setFocus(); 94 mAddresseeEdit->setFocus();
83 95
84 listLayout->addWidget( mAddresseeEdit ); 96 listLayout->addWidget( mAddresseeEdit );
85 97
86 if ( mMultiple ) { 98 if ( mMultiple ) {
87 QBoxLayout *selectedLayout = new QVBoxLayout; 99 //QBoxLayout *selectedLayout = new QVBoxLayout;
88 topLayout->addLayout( selectedLayout ); 100 //topLayout->addLayout( selectedLayout );
89 topLayout->setSpacing( spacingHint() ); 101 //topLayout->setSpacing( spacingHint() );
90 102
91 QGroupBox *selectedGroup = new QGroupBox( 1, Horizontal, i18n("Selected"), 103 QVBox *selectedGroup = new QVBox( mMiniSplitter );
92 topWidget ); 104 new QLabel ( i18n("Selected:"), selectedGroup );
93 selectedLayout->addWidget( selectedGroup ); 105 //selectedLayout->addWidget( selectedGroup );
94 106
95 mSelectedList = new KListView( selectedGroup ); 107 mSelectedList = new KListView( selectedGroup );
96 mSelectedList->addColumn( i18n("Name") ); 108 mSelectedList->addColumn( i18n("Name") );
97 mSelectedList->addColumn( i18n("Email") ); 109 mSelectedList->addColumn( i18n("Email") );
98 mSelectedList->setAllColumnsShowFocus( true ); 110 mSelectedList->setAllColumnsShowFocus( true );
99 mSelectedList->setFullWidth( true ); 111 mSelectedList->setFullWidth( true );
100 connect( mSelectedList, SIGNAL( doubleClicked( QListViewItem * ) ), 112 connect( mSelectedList, SIGNAL( doubleClicked( QListViewItem * ) ),
101 SLOT( removeSelected() ) ); 113 SLOT( removeSelected() ) );
102 114
103 QPushButton *unselectButton = new QPushButton( i18n("Unselect"), selectedGroup ); 115 QPushButton *unselectButton = new QPushButton( i18n("Unselect"), selectedGroup );
104 connect ( unselectButton, SIGNAL( clicked() ), SLOT( removeSelected() ) ); 116 connect ( unselectButton, SIGNAL( clicked() ), SLOT( removeSelected() ) );
105 117
106 connect( mAddresseeList, SIGNAL( clicked( QListViewItem * ) ), 118 connect( mAddresseeList, SIGNAL( clicked( QListViewItem * ) ),
107 SLOT( addSelected( QListViewItem * ) ) ); 119 SLOT( addSelected( QListViewItem * ) ) );
108 connect( mAddresseeList, SIGNAL( returnPressed( QListViewItem * ) ), 120 connect( mAddresseeList, SIGNAL( returnPressed( QListViewItem * ) ),
109 SLOT( selectNextItem( QListViewItem * ) ) ); 121 SLOT( selectNextItem( QListViewItem * ) ) );
110 122
111 } 123 }
112 124
113 mAddressBook = StdAddressBook::self( true ); 125 mAddressBook = StdAddressBook::self( true );
114 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook* ) ), 126 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook* ) ),
115 SLOT( addressBookChanged() ) ); 127 SLOT( addressBookChanged() ) );
116 connect( mAddressBook, SIGNAL( loadingFinished( Resource* ) ), 128 connect( mAddressBook, SIGNAL( loadingFinished( Resource* ) ),
117 SLOT( addressBookChanged() ) ); 129 SLOT( addressBookChanged() ) );
118 130
119 loadAddressBook(); 131 loadAddressBook();
132 QValueList<int> splitterSize;
133 splitterSize.append( ( width() / 5 ) * 3 );
134 splitterSize.append( ( width() / 5 ) *2 );
135 mMiniSplitter->setSizes( splitterSize );
120} 136}
121 137
122AddresseeDialog::~AddresseeDialog() 138AddresseeDialog::~AddresseeDialog()
123{ 139{
124} 140}
125 141
126void AddresseeDialog::loadAddressBook() 142void AddresseeDialog::loadAddressBook()
127{ 143{
128 mAddresseeList->clear(); 144 mAddresseeList->clear();
129 mItemDict.clear(); 145 mItemDict.clear();
130 if ( mAddresseeEdit->text().isEmpty() ) { 146 if ( mAddresseeEdit->text().isEmpty() ) {
131 AddressBook::Iterator it; 147 AddressBook::Iterator it;
132 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { 148 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) {
133 if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) 149 if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") )
134 continue; 150 continue;
135 new AddresseeItem( mAddresseeList, (*it) ); 151 new AddresseeItem( mAddresseeList, (*it) );
136 } 152 }
137 return; 153 return;
138 } 154 }
139 //mAddresseeEdit->completionObject()->clear(); 155 //mAddresseeEdit->completionObject()->clear();
140 QRegExp re; 156 QRegExp re;
141 re.setWildcard(true); // most people understand these better. 157 re.setWildcard(true); // most people understand these better.
142 re.setCaseSensitive(false); 158 re.setCaseSensitive(false);
143 re.setPattern( "*"+ mAddresseeEdit->text() + "*"); 159 re.setPattern( "*"+ mAddresseeEdit->text() + "*");
144 160
145 AddressBook::Iterator it; 161 AddressBook::Iterator it;
146 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) { 162 for( it = mAddressBook->begin(); it != mAddressBook->end(); ++it ) {
147 if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) 163 if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") )
148 continue; 164 continue;
149 QString name = (*it).familyName()+", "+ (*it).givenName(); 165 QString name = (*it).familyName()+", "+ (*it).givenName();
150 if ( name.length() == 2 ) 166 if ( name.length() == 2 )
151 name = (*it).realName(); 167 name = (*it).realName();
152 name += (*it).preferredEmail(); 168 name += (*it).preferredEmail();
153#if QT_VERSION >= 0x030000 169#if QT_VERSION >= 0x030000
154 if (re.search(name) != -1) 170 if (re.search(name) != -1)
155#else 171#else
156 if (re.match(name) != -1) 172 if (re.match(name) != -1)
157#endif 173#endif
158 AddresseeItem *item = new AddresseeItem( mAddresseeList, (*it) ); 174 AddresseeItem *item = new AddresseeItem( mAddresseeList, (*it) );
159 } 175 }
160} 176}
161 177
162void AddresseeDialog::addCompletionItem( const QString &str, QListViewItem *item ) 178void AddresseeDialog::addCompletionItem( const QString &str, QListViewItem *item )
163{ 179{
164 if ( str.isEmpty() ) return; 180 if ( str.isEmpty() ) return;
165 181
166 mItemDict.insert( str, item ); 182 mItemDict.insert( str, item );
167 //mAddresseeEdit->completionObject()->addItem( str ); 183 //mAddresseeEdit->completionObject()->addItem( str );
168} 184}
169 185
170void AddresseeDialog::selectItem( const QString &str ) 186void AddresseeDialog::selectItem( const QString &str )
171{ 187{
172 if ( str.isEmpty() ) return; 188 if ( str.isEmpty() ) return;
173 189
174 QListViewItem *item = mItemDict.find( str ); 190 QListViewItem *item = mItemDict.find( str );
175 if ( item ) { 191 if ( item ) {
176 mAddresseeList->blockSignals( true ); 192 mAddresseeList->blockSignals( true );
177 mAddresseeList->setSelected( item, true ); 193 mAddresseeList->setSelected( item, true );
178 mAddresseeList->ensureItemVisible( item ); 194 mAddresseeList->ensureItemVisible( item );
179 mAddresseeList->blockSignals( false ); 195 mAddresseeList->blockSignals( false );
180 } 196 }
181} 197}
182 198
183void AddresseeDialog::updateEdit( QListViewItem *item ) 199void AddresseeDialog::updateEdit( QListViewItem *item )
184{ 200{
185 mAddresseeEdit->setText( item->text( 0 ) ); 201 mAddresseeEdit->setText( item->text( 0 ) );
186 mAddresseeEdit->setSelection( 0, item->text( 0 ).length() ); 202 mAddresseeEdit->setSelection( 0, item->text( 0 ).length() );
187} 203}
188 204
189void AddresseeDialog::selectNextItem( QListViewItem *item ) 205void AddresseeDialog::selectNextItem( QListViewItem *item )
190{ 206{
191 addSelected( item ); 207 addSelected( item );
192 QListViewItem *next = item->nextSibling(); 208 QListViewItem *next = item->nextSibling();
193 if ( next ) { 209 if ( next ) {
194 next->setSelected( true ); 210 next->setSelected( true );
195 item->setSelected( false ); 211 item->setSelected( false );
196 mAddresseeList->setCurrentItem( next ); 212 mAddresseeList->setCurrentItem( next );
197 } 213 }
198} 214}
199void AddresseeDialog::addSelected( QListViewItem *item ) 215void AddresseeDialog::addSelected( QListViewItem *item )
200{ 216{
201 AddresseeItem *addrItem = (AddresseeItem *)( item ); 217 AddresseeItem *addrItem = (AddresseeItem *)( item );
202 if ( !addrItem ) return; 218 if ( !addrItem ) return;
203 219
204 Addressee a = addrItem->addressee(); 220 Addressee a = addrItem->addressee();
205 221
206 QListViewItem *selectedItem = mSelectedDict.find( a.uid() ); 222 QListViewItem *selectedItem = mSelectedDict.find( a.uid() );
207 if ( !selectedItem ) { 223 if ( !selectedItem ) {
208 selectedItem = new AddresseeItem( mSelectedList, a ); 224 selectedItem = new AddresseeItem( mSelectedList, a );
209 mSelectedDict.insert( a.uid(), selectedItem ); 225 mSelectedDict.insert( a.uid(), selectedItem );
210 } 226 }
211 227
212} 228}
213 229
214void AddresseeDialog::removeSelected() 230void AddresseeDialog::removeSelected()
215{ 231{
216 QListViewItem *item = mSelectedList->selectedItem(); 232 QListViewItem *item = mSelectedList->selectedItem();
217 AddresseeItem *addrItem = (AddresseeItem *)( item ); 233 AddresseeItem *addrItem = (AddresseeItem *)( item );
218 if ( !addrItem ) return; 234 if ( !addrItem ) return;
219 QListViewItem *next = item->nextSibling(); 235 QListViewItem *next = item->nextSibling();
220 mSelectedDict.remove( addrItem->addressee().uid() ); 236 mSelectedDict.remove( addrItem->addressee().uid() );
221 delete addrItem; 237 delete addrItem;
222 if ( next ) 238 if ( next )
223 next->setSelected( true ); 239 next->setSelected( true );
224} 240}
225 241
226Addressee AddresseeDialog::addressee() 242Addressee AddresseeDialog::addressee()
227{ 243{
228 AddresseeItem *aItem = 0; 244 AddresseeItem *aItem = 0;
229 245
230 if ( mMultiple ) 246 if ( mMultiple )
231 aItem = (AddresseeItem *)( mSelectedList->firstChild() ); 247 aItem = (AddresseeItem *)( mSelectedList->firstChild() );
232 else 248 else
233 aItem = (AddresseeItem *)( mAddresseeList->selectedItem() ); 249 aItem = (AddresseeItem *)( mAddresseeList->selectedItem() );
234 250
235 if (aItem) return aItem->addressee(); 251 if (aItem) return aItem->addressee();
236 return Addressee(); 252 return Addressee();
237} 253}
238 254
239Addressee::List AddresseeDialog::addressees() 255Addressee::List AddresseeDialog::addressees()
240{ 256{
241 Addressee::List al; 257 Addressee::List al;
242 AddresseeItem *aItem = 0; 258 AddresseeItem *aItem = 0;
243 259
244 if ( mMultiple ) { 260 if ( mMultiple ) {
245 QListViewItem *item = mSelectedList->firstChild(); 261 QListViewItem *item = mSelectedList->firstChild();
246 while( item ) { 262 while( item ) {
247 aItem = (AddresseeItem *)( item ); 263 aItem = (AddresseeItem *)( item );
248 if ( aItem ) al.append( aItem->addressee() ); 264 if ( aItem ) al.append( aItem->addressee() );
249 item = item->nextSibling(); 265 item = item->nextSibling();
250 } 266 }
251 } 267 }
252 else 268 else
253 { 269 {
254 aItem = (AddresseeItem *)( mAddresseeList->selectedItem() ); 270 aItem = (AddresseeItem *)( mAddresseeList->selectedItem() );
255 if (aItem) al.append( aItem->addressee() ); 271 if (aItem) al.append( aItem->addressee() );
256 } 272 }
257 273
258 return al; 274 return al;
259} 275}
260 276
261Addressee AddresseeDialog::getAddressee( QWidget *parent ) 277Addressee AddresseeDialog::getAddressee( QWidget *parent )
262{ 278{
263 AddresseeDialog *dlg = new AddresseeDialog( parent ); 279 AddresseeDialog *dlg = new AddresseeDialog( parent );
264 Addressee addressee; 280 Addressee addressee;
265 int result = dlg->exec(); 281 int result = dlg->exec();
266 282
267 if ( result == QDialog::Accepted ) { 283 if ( result == QDialog::Accepted ) {
268 addressee = dlg->addressee(); 284 addressee = dlg->addressee();
269 } 285 }
270 286
271 delete dlg; 287 delete dlg;
272 return addressee; 288 return addressee;
273} 289}
274 290
275Addressee::List AddresseeDialog::getAddressees( QWidget *parent ) 291Addressee::List AddresseeDialog::getAddressees( QWidget *parent )
276{ 292{
277 AddresseeDialog *dlg = new AddresseeDialog( parent, true ); 293 AddresseeDialog *dlg = new AddresseeDialog( parent, true );
278 Addressee::List addressees; 294 Addressee::List addressees;
279 if ( QApplication::desktop()->width() <= 640 ) 295 if ( QApplication::desktop()->width() <= 640 )
280 dlg->showMaximized(); 296 dlg->showMaximized();
281 int result = dlg->exec(); 297 int result = dlg->exec();
282 if ( result == QDialog::Accepted ) { 298 if ( result == QDialog::Accepted ) {
283 addressees = dlg->addressees(); 299 addressees = dlg->addressees();
284 } 300 }
285 301
286 delete dlg; 302 delete dlg;
287 return addressees; 303 return addressees;
288} 304}
289 305
290void AddresseeDialog::addressBookChanged() 306void AddresseeDialog::addressBookChanged()
291{ 307{
292 loadAddressBook(); 308 loadAddressBook();
293} 309}
diff --git a/korganizer/koeventviewerdialog.cpp b/korganizer/koeventviewerdialog.cpp
index e2c8e6e..f606124 100644
--- a/korganizer/koeventviewerdialog.cpp
+++ b/korganizer/koeventviewerdialog.cpp
@@ -1,292 +1,298 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18*/ 18*/
19 19
20#include <klocale.h> 20#include <klocale.h>
21 21
22#include <libkcal/event.h> 22#include <libkcal/event.h>
23#include <qtimer.h> 23#include <qtimer.h>
24#include <qpushbutton.h> 24#include <qpushbutton.h>
25 25
26#include "koeventviewer.h" 26#include "koeventviewer.h"
27#include "koprefs.h" 27#include "koprefs.h"
28#include <libkcal/todo.h> 28#include <libkcal/todo.h>
29#include "qapp.h" 29#include "qapp.h"
30 30
31#include "koeventviewerdialog.h" 31#include "koeventviewerdialog.h"
32extern int globalFlagBlockAgenda; 32extern int globalFlagBlockAgenda;
33 33
34KOEventViewerDialog::KOEventViewerDialog(QWidget *parent,const char *name) 34KOEventViewerDialog::KOEventViewerDialog(QWidget *parent,const char *name)
35 : KDialogBase(parent,name, 35 : KDialogBase(parent,name,
36#ifndef DESKTOP_VERSION 36#ifndef DESKTOP_VERSION
37 true , 37 true ,
38#else 38#else
39 false, 39 false,
40#endif 40#endif
41 i18n("Event Viewer"),Ok|User1|Close,Close, false, i18n("Agenda")) 41 i18n("Event Viewer"),Ok|User1|Close,Close, false, i18n("Agenda"))
42{ 42{
43 sendSignalViewerClosed = true; 43 sendSignalViewerClosed = true;
44 mEventViewer = new KOEventViewer(this); 44 mEventViewer = new KOEventViewer(this);
45 mEventViewer->setFont( KOPrefs::instance()->mEventViewFont ); 45 mEventViewer->setFont( KOPrefs::instance()->mEventViewFont );
46 setMainWidget(mEventViewer); 46 setMainWidget(mEventViewer);
47 setButtonText(Ok, i18n("Edit") ); 47 setButtonText(Ok, i18n("Edit") );
48 48
49 QObject::connect(findButton( Ok ),SIGNAL(clicked()), 49 QObject::connect(findButton( Ok ),SIGNAL(clicked()),
50 SLOT(editIncidence())); 50 SLOT(editIncidence()));
51 QObject::connect(this,SIGNAL(user1Clicked()), 51 QObject::connect(this,SIGNAL(user1Clicked()),
52 SLOT(showIncidence())); 52 SLOT(showIncidence()));
53 mIncidence = 0; 53 mIncidence = 0;
54 // TODO: Set a sensible size (based on the content?). 54 // TODO: Set a sensible size (based on the content?).
55 //showMaximized(); 55 //showMaximized();
56 //qDebug("++++++++++++KOEventViewerDialog() "); 56 //qDebug("++++++++++++KOEventViewerDialog() ");
57 // if ( KOPrefs::instance()->mCompactDialogs ) { 57 // if ( KOPrefs::instance()->mCompactDialogs ) {
58// setFixedSize( 240,284 ); 58// setFixedSize( 240,284 );
59// move( 0, 15 ); 59// move( 0, 15 );
60// } else { 60// } else {
61// setMinimumSize(300,200); 61// setMinimumSize(300,200);
62// resize(320,300); 62// resize(320,300);
63// } 63// }
64 mSyncMode = false; 64 mSyncMode = false;
65 mSyncResult = 0; 65 mSyncResult = 0;
66 66
67} 67}
68 68
69KOEventViewerDialog::~KOEventViewerDialog() 69KOEventViewerDialog::~KOEventViewerDialog()
70{ 70{
71 //qDebug("-------~KOEventViewerDialog() "); 71 //qDebug("-------~KOEventViewerDialog() ");
72} 72}
73void KOEventViewerDialog::showMe() 73void KOEventViewerDialog::showMe()
74{ 74{
75 75
76#ifdef DESKTOP_VERSION 76#ifdef DESKTOP_VERSION
77 int x,y,w,h; 77 int x,y,w,h;
78 x = geometry().x(); 78 x = geometry().x();
79 y = geometry().y(); 79 y = geometry().y();
80 w = width(); 80 w = width();
81 h = height(); 81 h = height();
82 show(); 82 show();
83 setGeometry(x,y,w,h); 83 setGeometry(x,y,w,h);
84#else 84#else
85 showMaximized(); 85 showMaximized();
86#endif 86#endif
87 raise(); 87 raise();
88 setActiveWindow(); 88 setActiveWindow();
89 mEventViewer->setFocus(); 89 mEventViewer->setFocus();
90 90
91} 91}
92void KOEventViewerDialog::setSyncMode( bool b ) 92void KOEventViewerDialog::setSyncMode( bool b )
93{ 93{
94 mSyncMode = b; 94 mSyncMode = b;
95 //qDebug("KOEventViewerDialog::setSyncMode %d ",mSyncMode ); 95 //qDebug("KOEventViewerDialog::setSyncMode %d ",mSyncMode );
96 if ( mSyncMode ) { 96 if ( mSyncMode ) {
97 findButton( Close )->setText( i18n("Cancel Sync")); 97 findButton( Close )->setText( i18n("Cancel Sync"));
98 findButton( Ok )->setText( i18n("Remote")); 98 findButton( Ok )->setText( i18n("Remote"));
99 findButton( User1 )->setText( i18n("Local")); 99 findButton( User1 )->setText( i18n("Local"));
100 } else { 100 } else {
101 findButton( Close )->setText( i18n("Close")); 101 findButton( Close )->setText( i18n("Close"));
102 findButton( Ok )->setText( i18n("Edit")); 102 findButton( Ok )->setText( i18n("Edit"));
103 findButton( User1 )->setText( i18n("Agenda")); 103 findButton( User1 )->setText( i18n("Agenda"));
104 } 104 }
105 mEventViewer->setSyncMode( b ); 105 mEventViewer->setSyncMode( b );
106} 106}
107void KOEventViewerDialog::setColorMode( int m ) 107void KOEventViewerDialog::setColorMode( int m )
108{ 108{
109 mEventViewer->setColorMode( m ); 109 mEventViewer->setColorMode( m );
110} 110}
111int KOEventViewerDialog::executeS( bool local ) 111int KOEventViewerDialog::executeS( bool local )
112{ 112{
113 mSyncResult = 3; 113 mSyncResult = 3;
114 if ( local ) 114 if ( local )
115 findButton( User1 )->setFocus(); 115 findButton( User1 )->setFocus();
116 else 116 else
117 findButton( Ok )->setFocus(); 117 findButton( Ok )->setFocus();
118 exec(); 118 exec();
119 return mSyncResult; 119 return mSyncResult;
120} 120}
121 121
122void KOEventViewerDialog::updateConfig() 122void KOEventViewerDialog::updateConfig()
123{ 123{
124 mEventViewer->setFont( KOPrefs::instance()->mEventViewFont ); 124 mEventViewer->setFont( KOPrefs::instance()->mEventViewFont );
125 125
126} 126}
127void KOEventViewerDialog::setEvent(Event *event) 127void KOEventViewerDialog::setEvent(Event *event)
128{ 128{
129 mEventViewer->setEvent(event); 129 mEventViewer->setEvent(event);
130 mIncidence = event; 130 mIncidence = event;
131 mEventViewer->setFocus(); 131 mEventViewer->setFocus();
132 //findButton( Close )->setFocus(); 132 //findButton( Close )->setFocus();
133 if ( !mSyncMode ) { 133 if ( !mSyncMode ) {
134 findButton( User1 )->setText( i18n("Agenda")); 134 findButton( User1 )->setText( i18n("Agenda"));
135 } 135 }
136} 136}
137void KOEventViewerDialog::setIncidence(Incidence *in ) 137void KOEventViewerDialog::setIncidence(Incidence *in )
138{ 138{
139 if ( in->type() == "Event" ) 139 if ( in->type() == "Event" )
140 setEvent( (Event*) in ); 140 setEvent( (Event*) in );
141 else if ( in->type() =="Todo" ) 141 else if ( in->type() =="Todo" )
142 setTodo( (Todo*) in ); 142 setTodo( (Todo*) in );
143 else if ( in->type() =="Journal" ) 143 else if ( in->type() =="Journal" )
144 setJournal( (Journal*) in ); 144 setJournal( (Journal*) in );
145} 145}
146void KOEventViewerDialog::addIncidence(Incidence *in) 146void KOEventViewerDialog::addIncidence(Incidence *in)
147{ 147{
148 if ( in->type() == "Event" ) 148 if ( in->type() == "Event" )
149 addEvent( (Event*) in ); 149 addEvent( (Event*) in );
150 else if ( in->type() =="Todo" ) 150 else if ( in->type() =="Todo" )
151 mEventViewer->setTodo( (Todo*) in, false ); 151 mEventViewer->setTodo( (Todo*) in, false );
152 else if ( in->type() =="Journal" ) 152 else if ( in->type() =="Journal" )
153 mEventViewer->setJournal( (Journal*) in, false ); 153 mEventViewer->setJournal( (Journal*) in, false );
154 if ( mSyncMode ) { 154 if ( mSyncMode ) {
155 findButton( User1 )->setFocus(); 155 findButton( User1 )->setFocus();
156 setCaption(i18n("Conflict! Please choose entry")); 156 setCaption(i18n("Conflict! Please choose entry"));
157 } 157 }
158} 158}
159 159
160void KOEventViewerDialog::addEvent(Event *event) 160void KOEventViewerDialog::addEvent(Event *event)
161{ 161{
162 mEventViewer->addEvent(event); 162 mEventViewer->addEvent(event);
163 mIncidence = event; 163 mIncidence = event;
164 mEventViewer->setFocus(); 164 mEventViewer->setFocus();
165 //findButton( Close )->setFocus(); 165 //findButton( Close )->setFocus();
166 if ( !mSyncMode ) { 166 if ( !mSyncMode ) {
167 findButton( User1 )->setText( i18n("Agenda")); 167 findButton( User1 )->setText( i18n("Agenda"));
168 } 168 }
169} 169}
170 170
171void KOEventViewerDialog::setTodo(Todo *event) 171void KOEventViewerDialog::setTodo(Todo *event)
172{ 172{
173 mEventViewer->setTodo(event); 173 mEventViewer->setTodo(event);
174 mIncidence = (Incidence*)event; 174 mIncidence = (Incidence*)event;
175 mEventViewer->setFocus(); 175 mEventViewer->setFocus();
176 //findButton( Close )->setFocus(); 176 //findButton( Close )->setFocus();
177 if ( !mSyncMode ) { 177 if ( !mSyncMode ) {
178 findButton( User1 )->setText( i18n("Set complete")); 178 findButton( User1 )->setText( i18n("Set complete"));
179 } 179 }
180} 180}
181void KOEventViewerDialog::setJournal(Journal *j) 181void KOEventViewerDialog::setJournal(Journal *j)
182{ 182{
183 mEventViewer->setJournal(j); 183 mEventViewer->setJournal(j);
184 mIncidence = (Incidence*)j; 184 mIncidence = (Incidence*)j;
185 mEventViewer->setFocus(); 185 mEventViewer->setFocus();
186 //findButton( Close )->setFocus(); 186 //findButton( Close )->setFocus();
187 if ( !mSyncMode ) { 187 if ( !mSyncMode ) {
188 findButton( User1 )->setText( i18n("Agenda")); 188 findButton( User1 )->setText( i18n("Agenda"));
189 } 189 }
190} 190}
191 191
192void KOEventViewerDialog::addText(QString text) 192void KOEventViewerDialog::addText(QString text)
193{ 193{
194 mEventViewer->addText(text); 194 mEventViewer->addText(text);
195 mEventViewer->setFocus(); 195 mEventViewer->setFocus();
196 //findButton( Close )->setFocus(); 196 //findButton( Close )->setFocus();
197} 197}
198void KOEventViewerDialog::editIncidence() 198void KOEventViewerDialog::editIncidence()
199{ 199{
200 sendSignalViewerClosed = false; 200 sendSignalViewerClosed = false;
201 if ( mSyncMode ) { 201 if ( mSyncMode ) {
202 mSyncResult = 2; 202 mSyncResult = 2;
203 accept(); 203 accept();
204 return; 204 return;
205 } 205 }
206 if ( mIncidence ){ 206 if ( mIncidence ){
207#ifndef DESKTOP_VERSION 207#ifndef DESKTOP_VERSION
208 hide(); 208 hide();
209#endif 209#endif
210 emit editIncidence( mIncidence ); 210 emit editIncidence( mIncidence );
211 } 211 }
212} 212}
213void KOEventViewerDialog::showIncidence() 213void KOEventViewerDialog::showIncidence()
214{ 214{
215 sendSignalViewerClosed = false; 215 sendSignalViewerClosed = false;
216 if ( mSyncMode ) { 216 if ( mSyncMode ) {
217 mSyncResult = 1; 217 mSyncResult = 1;
218 accept(); 218 accept();
219 return; 219 return;
220 } 220 }
221 221
222 if ( mIncidence ){ 222 if ( mIncidence ){
223#ifndef DESKTOP_VERSION 223#ifndef DESKTOP_VERSION
224 hide(); 224 hide();
225#endif 225#endif
226 QDate date; 226 QDate date;
227 if ( mIncidence->type() == "Todo" ) { 227 if ( mIncidence->type() == "Todo" ) {
228 /* 228 /*
229 if ( ((Todo*)mIncidence)->hasDueDate() ) 229 if ( ((Todo*)mIncidence)->hasDueDate() )
230 date = ((Todo*)mIncidence)->dtDue().date(); 230 date = ((Todo*)mIncidence)->dtDue().date();
231 else { 231 else {
232 globalFlagBlockAgenda = 2; 232 globalFlagBlockAgenda = 2;
233 emit showAgendaView( false ); 233 emit showAgendaView( false );
234 return; 234 return;
235 } 235 }
236 */ 236 */
237 ((Todo*)mIncidence)->setCompleted( true ); 237 ((Todo*)mIncidence)->setCompleted( true );
238 ((Todo*)mIncidence)->setCompleted(QDateTime::currentDateTime() ); 238 ((Todo*)mIncidence)->setCompleted(QDateTime::currentDateTime() );
239 hide(); 239 hide();
240 emit todoCompleted(((Todo*)mIncidence)); 240 emit todoCompleted(((Todo*)mIncidence));
241 return; 241 return;
242 242
243 } else 243 } else
244 date = mIncidence->dtStart().date(); 244 date = mIncidence->dtStart().date();
245 globalFlagBlockAgenda = 1; 245 globalFlagBlockAgenda = 1;
246 emit showAgendaView( false ); 246 emit showAgendaView( false );
247 globalFlagBlockAgenda = 2; 247 globalFlagBlockAgenda = 2;
248 emit jumpToTime( date ); 248 emit jumpToTime( date );
249 } 249 }
250} 250}
251void KOEventViewerDialog::keyPressEvent ( QKeyEvent * e ) 251void KOEventViewerDialog::keyPressEvent ( QKeyEvent * e )
252{ 252{
253 switch ( e->key() ) { 253 switch ( e->key() ) {
254 254
255 case Qt::Key_A : 255 case Qt::Key_A :
256 case Qt::Key_L : 256 case Qt::Key_L :
257 showIncidence(); 257 showIncidence();
258 break; 258 break;
259 case Qt::Key_E : 259 case Qt::Key_E :
260 case Qt::Key_R : 260 case Qt::Key_R :
261 editIncidence(); 261 editIncidence();
262 break; 262 break;
263 case Qt::Key_C: 263 case Qt::Key_C:
264 case Qt::Key_Escape: 264 case Qt::Key_Escape:
265 sendSignalViewerClosed = true;
265 close(); 266 close();
266 break; 267 break;
267 case Qt::Key_I: 268 case Qt::Key_I:
269#ifndef DESKTOP_VERSION
270 sendSignalViewerClosed = true;
271 close();
272#else
268 sendSignalViewerClosed = true; 273 sendSignalViewerClosed = true;
269 slotViewerClosed(); 274 slotViewerClosed();
270 //accept(); 275 //accept();
276#endif
271 break; 277 break;
272 default: 278 default:
273 KDialogBase::keyPressEvent ( e ); 279 KDialogBase::keyPressEvent ( e );
274 break; 280 break;
275 } 281 }
276 282
277} 283}
278void KOEventViewerDialog::hideEvent ( QHideEvent * e ) 284void KOEventViewerDialog::hideEvent ( QHideEvent * e )
279{ 285{
280 KDialogBase::hideEvent ( e ); 286 KDialogBase::hideEvent ( e );
281 QTimer::singleShot( 1, this, SLOT (slotViewerClosed() ) ); 287 QTimer::singleShot( 1, this, SLOT (slotViewerClosed() ) );
282} 288}
283 289
284void KOEventViewerDialog::slotViewerClosed() 290void KOEventViewerDialog::slotViewerClosed()
285{ 291{
286 if ( sendSignalViewerClosed ) { 292 if ( sendSignalViewerClosed ) {
287 //qDebug("KOEventViewerDialog::hideEvent "); 293 //qDebug("KOEventViewerDialog::hideEvent ");
288 emit signalViewerClosed(); 294 emit signalViewerClosed();
289 } 295 }
290 sendSignalViewerClosed = true; 296 sendSignalViewerClosed = true;
291} 297}
292 298
diff --git a/korganizer/kolistview.cpp b/korganizer/kolistview.cpp
index 6acee75..710a9f9 100644
--- a/korganizer/kolistview.cpp
+++ b/korganizer/kolistview.cpp
@@ -62,1129 +62,1129 @@
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 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 268 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
269 i18n("Save selected to file..."),this, 269 i18n("Save selected to file..."),this,
270 SLOT(saveToFile()),true); 270 SLOT(saveToFile()),true);
271 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 271 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
272 i18n("Save Journal/Description..."),this, 272 i18n("Save Journal/Description..."),this,
273 SLOT(saveDescriptionToFile()),true); 273 SLOT(saveDescriptionToFile()),true);
274 // mPopupMenu->insertSeparator(); 274 // mPopupMenu->insertSeparator();
275 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 275 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
276 i18n("Add Categ. to selected..."),this, 276 i18n("Add Categ. to selected..."),this,
277 SLOT(addCat()),true); 277 SLOT(addCat()),true);
278 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 278 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
279 i18n("Set Categ. for selected..."),this, 279 i18n("Set Categ. for selected..."),this,
280 SLOT(setCat()),true); 280 SLOT(setCat()),true);
281 //mPopupMenu->insertSeparator(); 281 //mPopupMenu->insertSeparator();
282 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 282 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
283 i18n("Set alarm for selected..."),this, 283 i18n("Set alarm for selected..."),this,
284 SLOT(setAlarm()),true); 284 SLOT(setAlarm()),true);
285 285
286 286
287#ifndef DESKTOP_VERSION 287#ifndef DESKTOP_VERSION
288 mPopupMenu->insertSeparator(); 288 mPopupMenu->insertSeparator();
289 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()), 289 mPopupMenu->addAdditionalItem(QIconSet(QPixmap()),
290 i18n("Beam selected via IR"),this, 290 i18n("Beam selected via IR"),this,
291 SLOT(beamSelected()),true); 291 SLOT(beamSelected()),true);
292#endif 292#endif
293 /* 293 /*
294 mPopupMenu = new QPopupMenu; 294 mPopupMenu = new QPopupMenu;
295 mPopupMenu->insertItem(i18n("Edit Event"), this, 295 mPopupMenu->insertItem(i18n("Edit Event"), this,
296 SLOT (editEvent())); 296 SLOT (editEvent()));
297 mPopupMenu->insertItem(SmallIcon("delete"), i18n("Delete Event"), this, 297 mPopupMenu->insertItem(SmallIcon("delete"), i18n("Delete Event"), this,
298 SLOT (deleteEvent())); 298 SLOT (deleteEvent()));
299 mPopupMenu->insertSeparator(); 299 mPopupMenu->insertSeparator();
300 mPopupMenu->insertItem(i18n("Show Dates"), this, 300 mPopupMenu->insertItem(i18n("Show Dates"), this,
301 SLOT(showDates())); 301 SLOT(showDates()));
302 mPopupMenu->insertItem(i18n("Hide Dates"), this, 302 mPopupMenu->insertItem(i18n("Hide Dates"), this,
303 SLOT(hideDates())); 303 SLOT(hideDates()));
304 */ 304 */
305 QObject::connect(mListView,SIGNAL( newEvent()), 305 QObject::connect(mListView,SIGNAL( newEvent()),
306 this,SIGNAL(signalNewEvent())); 306 this,SIGNAL(signalNewEvent()));
307 QObject::connect(mListView,SIGNAL(doubleClicked(QListViewItem *)), 307 QObject::connect(mListView,SIGNAL(doubleClicked(QListViewItem *)),
308 this,SLOT(defaultItemAction(QListViewItem *))); 308 this,SLOT(defaultItemAction(QListViewItem *)));
309 QObject::connect(mListView,SIGNAL(rightButtonClicked ( QListViewItem *, 309 QObject::connect(mListView,SIGNAL(rightButtonClicked ( QListViewItem *,
310 const QPoint &, int )), 310 const QPoint &, int )),
311 this,SLOT(popupMenu(QListViewItem *,const QPoint &,int))); 311 this,SLOT(popupMenu(QListViewItem *,const QPoint &,int)));
312 QObject::connect(mListView,SIGNAL(currentChanged(QListViewItem *)), 312 QObject::connect(mListView,SIGNAL(currentChanged(QListViewItem *)),
313 SLOT(processSelectionChange(QListViewItem *))); 313 SLOT(processSelectionChange(QListViewItem *)));
314 QObject::connect(mListView,SIGNAL(showIncidence(Incidence *)), 314 QObject::connect(mListView,SIGNAL(showIncidence(Incidence *)),
315 SIGNAL(showIncidenceSignal(Incidence *)) ); 315 SIGNAL(showIncidenceSignal(Incidence *)) );
316 316
317 readSettings(KOGlobals::config(),"KOListView Layout"); 317 readSettings(KOGlobals::config(),"KOListView Layout");
318} 318}
319 319
320KOListView::~KOListView() 320KOListView::~KOListView()
321{ 321{
322 delete mPopupMenu; 322 delete mPopupMenu;
323} 323}
324QString KOListView::getWhatsThisText(QPoint p) 324QString KOListView::getWhatsThisText(QPoint p)
325{ 325{
326 KOListViewItem* item = ( KOListViewItem* ) mListView->itemAt( p ); 326 KOListViewItem* item = ( KOListViewItem* ) mListView->itemAt( p );
327 if ( item ) 327 if ( item )
328 return KIncidenceFormatter::instance()->getFormattedText( item->data(), 328 return KIncidenceFormatter::instance()->getFormattedText( item->data(),
329 KOPrefs::instance()->mWTshowDetails, 329 KOPrefs::instance()->mWTshowDetails,
330 KOPrefs::instance()->mWTshowCreated, 330 KOPrefs::instance()->mWTshowCreated,
331 KOPrefs::instance()->mWTshowChanged); 331 KOPrefs::instance()->mWTshowChanged);
332 return i18n("That is the list view" ); 332 return i18n("That is the list view" );
333 333
334} 334}
335 335
336void KOListView::updateList() 336void KOListView::updateList()
337{ 337{
338 // qDebug(" KOListView::updateList() "); 338 // qDebug(" KOListView::updateList() ");
339 339
340} 340}
341 341
342void KOListView::addCat( ) 342void KOListView::addCat( )
343{ 343{
344 setCategories( false ); 344 setCategories( false );
345} 345}
346void KOListView::setCat() 346void KOListView::setCat()
347{ 347{
348 setCategories( true ); 348 setCategories( true );
349} 349}
350void KOListView::setAlarm() 350void KOListView::setAlarm()
351{ 351{
352 KOAlarmPrefs kap( this); 352 KOAlarmPrefs kap( this);
353 if ( !kap.exec() ) 353 if ( !kap.exec() )
354 return; 354 return;
355 355
356 356
357 QStringList itemList; 357 QStringList itemList;
358 QPtrList<KOListViewItem> sel ; 358 QPtrList<KOListViewItem> sel ;
359 QListViewItem *qitem = mListView->firstChild (); 359 QListViewItem *qitem = mListView->firstChild ();
360 while ( qitem ) { 360 while ( qitem ) {
361 if ( qitem->isSelected() ) { 361 if ( qitem->isSelected() ) {
362 Incidence* inc = ((KOListViewItem *) qitem)->data(); 362 Incidence* inc = ((KOListViewItem *) qitem)->data();
363 if ( inc->type() != "Journal" ) { 363 if ( inc->type() != "Journal" ) {
364 if ( inc->type() == "Todo" ) { 364 if ( inc->type() == "Todo" ) {
365 if ( ((Todo*)inc)->hasDueDate() ) 365 if ( ((Todo*)inc)->hasDueDate() )
366 sel.append(((KOListViewItem *)qitem)); 366 sel.append(((KOListViewItem *)qitem));
367 } else 367 } else
368 sel.append(((KOListViewItem *)qitem)); 368 sel.append(((KOListViewItem *)qitem));
369 } 369 }
370 } 370 }
371 qitem = qitem->nextSibling(); 371 qitem = qitem->nextSibling();
372 } 372 }
373 int count = 0; 373 int count = 0;
374 KOListViewItem * item, *temp; 374 KOListViewItem * item, *temp;
375 item = sel.first(); 375 item = sel.first();
376 Incidence* inc; 376 Incidence* inc;
377 while ( item ) { 377 while ( item ) {
378 inc = item->data(); 378 inc = item->data();
379 ++count; 379 ++count;
380 if (kap.mAlarmButton->isChecked()) { 380 if (kap.mAlarmButton->isChecked()) {
381 if (inc->alarms().count() == 0) 381 if (inc->alarms().count() == 0)
382 inc->newAlarm(); 382 inc->newAlarm();
383 QPtrList<Alarm> alarms = inc->alarms(); 383 QPtrList<Alarm> alarms = inc->alarms();
384 Alarm *alarm; 384 Alarm *alarm;
385 for (alarm = alarms.first(); alarm; alarm = alarms.next() ) { 385 for (alarm = alarms.first(); alarm; alarm = alarms.next() ) {
386 alarm->setEnabled(true); 386 alarm->setEnabled(true);
387 int j = kap.mAlarmTimeEdit->value()* -60; 387 int j = kap.mAlarmTimeEdit->value()* -60;
388 if (kap.mAlarmIncrCombo->currentItem() == 1) 388 if (kap.mAlarmIncrCombo->currentItem() == 1)
389 j = j * 60; 389 j = j * 60;
390 else if (kap.mAlarmIncrCombo->currentItem() == 2) 390 else if (kap.mAlarmIncrCombo->currentItem() == 2)
391 j = j * (60 * 24); 391 j = j * (60 * 24);
392 alarm->setStartOffset( j ); 392 alarm->setStartOffset( j );
393 393
394 if (!kap.mAlarmProgram.isEmpty() && kap.mAlarmProgramButton->isOn()) { 394 if (!kap.mAlarmProgram.isEmpty() && kap.mAlarmProgramButton->isOn()) {
395 alarm->setProcedureAlarm(kap.mAlarmProgram); 395 alarm->setProcedureAlarm(kap.mAlarmProgram);
396 } 396 }
397 else if (!kap.mAlarmSound.isEmpty() && kap.mAlarmSoundButton->isOn()) 397 else if (!kap.mAlarmSound.isEmpty() && kap.mAlarmSoundButton->isOn())
398 alarm->setAudioAlarm(kap.mAlarmSound); 398 alarm->setAudioAlarm(kap.mAlarmSound);
399 else 399 else
400 alarm->setType(Alarm::Invalid); 400 alarm->setType(Alarm::Invalid);
401 //alarm->setAudioAlarm("default"); 401 //alarm->setAudioAlarm("default");
402 // TODO: Deal with multiple alarms 402 // TODO: Deal with multiple alarms
403 break; // For now, stop after the first alarm 403 break; // For now, stop after the first alarm
404 } 404 }
405 } else { 405 } else {
406 Alarm* alarm = inc->alarms().first(); 406 Alarm* alarm = inc->alarms().first();
407 if ( alarm ) { 407 if ( alarm ) {
408 alarm->setEnabled(false); 408 alarm->setEnabled(false);
409 alarm->setType(Alarm::Invalid); 409 alarm->setType(Alarm::Invalid);
410 } 410 }
411 } 411 }
412 temp = item; 412 temp = item;
413 item = sel.next(); 413 item = sel.next();
414 mUidDict.remove( inc->uid() ); 414 mUidDict.remove( inc->uid() );
415 delete temp;; 415 delete temp;;
416 addIncidence( inc ); 416 addIncidence( inc );
417 } 417 }
418 topLevelWidget()->setCaption( i18n("Canged alarm for %1 items").arg( count ) ); 418 topLevelWidget()->setCaption( i18n("Canged alarm for %1 items").arg( count ) );
419 qDebug("KO: Set alarm for %d items", count); 419 qDebug("KO: Set alarm for %d items", count);
420 calendar()->reInitAlarmSettings(); 420 calendar()->reInitAlarmSettings();
421} 421}
422void KOListView::setCategories( bool removeOld ) 422void KOListView::setCategories( bool removeOld )
423{ 423{
424 424
425 KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 ); 425 KPIM::CategorySelectDialog* csd = new KPIM::CategorySelectDialog( KOPrefs::instance(), 0 );
426 if (! csd->exec()) { 426 if (! csd->exec()) {
427 delete csd; 427 delete csd;
428 return; 428 return;
429 } 429 }
430 QStringList catList = csd->selectedCategories(); 430 QStringList catList = csd->selectedCategories();
431 delete csd; 431 delete csd;
432 // if ( catList.count() == 0 ) 432 // if ( catList.count() == 0 )
433 // return; 433 // return;
434 catList.sort(); 434 catList.sort();
435 QString categoriesStr = catList.join(","); 435 QString categoriesStr = catList.join(",");
436 int i; 436 int i;
437 QStringList itemList; 437 QStringList itemList;
438 QPtrList<KOListViewItem> sel ; 438 QPtrList<KOListViewItem> sel ;
439 QListViewItem *qitem = mListView->firstChild (); 439 QListViewItem *qitem = mListView->firstChild ();
440 while ( qitem ) { 440 while ( qitem ) {
441 if ( qitem->isSelected() ) { 441 if ( qitem->isSelected() ) {
442 sel.append(((KOListViewItem *)qitem)); 442 sel.append(((KOListViewItem *)qitem));
443 } 443 }
444 qitem = qitem->nextSibling(); 444 qitem = qitem->nextSibling();
445 } 445 }
446 KOListViewItem * item, *temp; 446 KOListViewItem * item, *temp;
447 item = sel.first(); 447 item = sel.first();
448 Incidence* inc; 448 Incidence* inc;
449 while ( item ) { 449 while ( item ) {
450 inc = item->data(); 450 inc = item->data();
451 if ( removeOld ) { 451 if ( removeOld ) {
452 inc->setCategories( categoriesStr ); 452 inc->setCategories( categoriesStr );
453 } else { 453 } else {
454 itemList = QStringList::split (",", inc->categoriesStr() ); 454 itemList = QStringList::split (",", inc->categoriesStr() );
455 for( i = 0; i< catList.count(); ++i ) { 455 for( i = 0; i< catList.count(); ++i ) {
456 if ( !itemList.contains (catList[i])) 456 if ( !itemList.contains (catList[i]))
457 itemList.append( catList[i] ); 457 itemList.append( catList[i] );
458 } 458 }
459 itemList.sort(); 459 itemList.sort();
460 inc->setCategories( itemList.join(",") ); 460 inc->setCategories( itemList.join(",") );
461 } 461 }
462 temp = item; 462 temp = item;
463 item = sel.next(); 463 item = sel.next();
464 mUidDict.remove( inc->uid() ); 464 mUidDict.remove( inc->uid() );
465 delete temp;; 465 delete temp;;
466 addIncidence( inc ); 466 addIncidence( inc );
467 } 467 }
468} 468}
469 469
470void KOListView::beamSelected() 470void KOListView::beamSelected()
471{ 471{
472 int icount = 0; 472 int icount = 0;
473 QPtrList<Incidence> delSel ; 473 QPtrList<Incidence> delSel ;
474 QListViewItem *item = mListView->firstChild (); 474 QListViewItem *item = mListView->firstChild ();
475 while ( item ) { 475 while ( item ) {
476 if ( item->isSelected() ) { 476 if ( item->isSelected() ) {
477 delSel.append(((KOListViewItem *)item)->data()); 477 delSel.append(((KOListViewItem *)item)->data());
478 ++icount; 478 ++icount;
479 } 479 }
480 480
481 item = item->nextSibling(); 481 item = item->nextSibling();
482 } 482 }
483 if ( icount ) { 483 if ( icount ) {
484 emit beamIncidenceList( delSel ); 484 emit beamIncidenceList( delSel );
485 return; 485 return;
486 QString fn ; 486 QString fn ;
487 fn = QDir::homeDirPath()+"/kopitempbeamfile.vcs"; 487 fn = QDir::homeDirPath()+"/kopitempbeamfile.vcs";
488 QString mes; 488 QString mes;
489 bool createbup = true; 489 bool createbup = true;
490 if ( createbup ) { 490 if ( createbup ) {
491 QString description = "\n"; 491 QString description = "\n";
492 CalendarLocal* cal = new CalendarLocal(); 492 CalendarLocal* cal = new CalendarLocal();
493 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 493 cal->setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
494 Incidence *incidence = delSel.first(); 494 Incidence *incidence = delSel.first();
495 while ( incidence ) { 495 while ( incidence ) {
496 Incidence *in = incidence->clone(); 496 Incidence *in = incidence->clone();
497 description += in->summary() + "\n"; 497 description += in->summary() + "\n";
498 cal->addIncidence( in ); 498 cal->addIncidence( in );
499 incidence = delSel.next(); 499 incidence = delSel.next();
500 } 500 }
501 FileStorage storage( cal, fn, new VCalFormat ); 501 FileStorage storage( cal, fn, new VCalFormat );
502 storage.save(); 502 storage.save();
503 delete cal; 503 delete cal;
504 mes = i18n("KO/Pi: Ready for beaming"); 504 mes = i18n("KO/Pi: Ready for beaming");
505 topLevelWidget()->setCaption(mes); 505 topLevelWidget()->setCaption(mes);
506 506
507#ifndef DESKTOP_VERSION 507#ifndef DESKTOP_VERSION
508 Ir *ir = new Ir( this ); 508 Ir *ir = new Ir( this );
509 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 509 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
510 ir->send( fn, description, "text/x-vCalendar" ); 510 ir->send( fn, description, "text/x-vCalendar" );
511#endif 511#endif
512 } 512 }
513 } 513 }
514} 514}
515void KOListView::beamDone( Ir *ir ) 515void KOListView::beamDone( Ir *ir )
516{ 516{
517#ifndef DESKTOP_VERSION 517#ifndef DESKTOP_VERSION
518 delete ir; 518 delete ir;
519#endif 519#endif
520 topLevelWidget()->setCaption(i18n("KO/Pi:Beaming done")); 520 topLevelWidget()->setCaption(i18n("KO/Pi:Beaming done"));
521} 521}
522 522
523void KOListView::saveDescriptionToFile() 523void KOListView::saveDescriptionToFile()
524{ 524{
525 525
526 int result = QMessageBox::warning( this, i18n("KO/Pi: Information!"), 526 int result = QMessageBox::warning( this, i18n("KO/Pi: Information!"),
527 i18n("This saves the text/details of selected\nJournals and Events/Todos\nto a text file."), 527 i18n("This saves the text/details of selected\nJournals and Events/Todos\nto a text file."),
528 i18n("Continue"), i18n("Cancel"), 0, 528 i18n("Continue"), i18n("Cancel"), 0,
529 0, 1 ); 529 0, 1 );
530 if ( result != 0 ) { 530 if ( result != 0 ) {
531 return; 531 return;
532 } 532 }
533 int icount = 0; 533 int icount = 0;
534 QPtrList<Incidence> delSel ; 534 QPtrList<Incidence> delSel ;
535 QListViewItem *item = mListView->firstChild (); 535 QListViewItem *item = mListView->firstChild ();
536 while ( item ) { 536 while ( item ) {
537 if ( item->isSelected() ) { 537 if ( item->isSelected() ) {
538 delSel.append(((KOListViewItem *)item)->data()); 538 delSel.append(((KOListViewItem *)item)->data());
539 ++icount; 539 ++icount;
540 } 540 }
541 541
542 item = item->nextSibling(); 542 item = item->nextSibling();
543 } 543 }
544 if ( icount ) { 544 if ( icount ) {
545 QString fn = KOPrefs::instance()->mLastSaveFile; 545 QString fn = KOPrefs::instance()->mLastSaveFile;
546 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this ); 546 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this );
547 547
548 if ( fn == "" ) 548 if ( fn == "" )
549 return; 549 return;
550 QFileInfo info; 550 QFileInfo info;
551 info.setFile( fn ); 551 info.setFile( fn );
552 QString mes; 552 QString mes;
553 bool createbup = true; 553 bool createbup = true;
554 if ( info. exists() ) { 554 if ( info. exists() ) {
555 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); 555 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) );
556 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, 556 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes,
557 i18n("Overwrite!"), i18n("Cancel"), 0, 557 i18n("Overwrite!"), i18n("Cancel"), 0,
558 0, 1 ); 558 0, 1 );
559 if ( result != 0 ) { 559 if ( result != 0 ) {
560 createbup = false; 560 createbup = false;
561 } 561 }
562 } 562 }
563 if ( createbup ) { 563 if ( createbup ) {
564 QString text = i18n("KO/Pi Description/Journal save file.\nSave date: ") + 564 QString text = i18n("KO/Pi Description/Journal save file.\nSave date: ") +
565 KGlobal::locale()->formatDateTime(QDateTime::currentDateTime(), false); 565 KGlobal::locale()->formatDateTime(QDateTime::currentDateTime(), false);
566 Incidence *incidence = delSel.first(); 566 Incidence *incidence = delSel.first();
567 icount = 0; 567 icount = 0;
568 while ( incidence ) { 568 while ( incidence ) {
569 if ( incidence->type() == "Journal" ) { 569 if ( incidence->type() == "Journal" ) {
570 text += "\n************************************\n"; 570 text += "\n************************************\n";
571 text += i18n("Journal from: ") +incidence->dtStartDateStr( false ); 571 text += i18n("Journal from: ") +incidence->dtStartDateStr( false );
572 text +="\n" + i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false); 572 text +="\n" + i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false);
573 text +="\n" + i18n("Description: ") + "\n"+ incidence->description(); 573 text +="\n" + i18n("Description: ") + "\n"+ incidence->description();
574 ++icount; 574 ++icount;
575 575
576 } else { 576 } else {
577 if ( !incidence->description().isEmpty() ) { 577 if ( !incidence->description().isEmpty() ) {
578 text += "\n************************************\n"; 578 text += "\n************************************\n";
579 if ( incidence->type() == "Todo" ) 579 if ( incidence->type() == "Todo" )
580 text += i18n("To-Do: "); 580 text += i18n("To-Do: ");
581 text += incidence->summary(); 581 text += incidence->summary();
582 if ( incidence->hasStartDate() ) 582 if ( incidence->hasStartDate() )
583 text +="\n"+ i18n("Start Date: ") + incidence->dtStartStr( false ); 583 text +="\n"+ i18n("Start Date: ") + incidence->dtStartStr( false );
584 text +="\n"+ i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false); 584 text +="\n"+ i18n("Last modified: ") +KGlobal::locale()->formatDateTime(incidence->lastModified(), false);
585 if ( !incidence->location().isEmpty() ) 585 if ( !incidence->location().isEmpty() )
586 text += "\n" +i18n("Location: ") + incidence->location(); 586 text += "\n" +i18n("Location: ") + incidence->location();
587 text += "\n" + i18n("Description: ") + "\n" + incidence->description(); 587 text += "\n" + i18n("Description: ") + "\n" + incidence->description();
588 ++icount; 588 ++icount;
589 589
590 } 590 }
591 } 591 }
592 incidence = delSel.next(); 592 incidence = delSel.next();
593 } 593 }
594 QFile file( fn ); 594 QFile file( fn );
595 if (!file.open( IO_WriteOnly ) ) { 595 if (!file.open( IO_WriteOnly ) ) {
596 topLevelWidget()->setCaption(i18n("File open error - nothing saved!") ); 596 topLevelWidget()->setCaption(i18n("File open error - nothing saved!") );
597 return; 597 return;
598 } 598 }
599 QTextStream ts( &file ); 599 QTextStream ts( &file );
600 ts << text; 600 ts << text;
601 file.close(); 601 file.close();
602 //qDebug("%s ", text.latin1()); 602 //qDebug("%s ", text.latin1());
603 mes = i18n("KO/Pi:Saved %1 descriptions/journals").arg(icount ); 603 mes = i18n("KO/Pi:Saved %1 descriptions/journals").arg(icount );
604 KOPrefs::instance()->mLastSaveFile = fn; 604 KOPrefs::instance()->mLastSaveFile = fn;
605 topLevelWidget()->setCaption(mes); 605 topLevelWidget()->setCaption(mes);
606 } 606 }
607 } 607 }
608} 608}
609void KOListView::saveToFile() 609void KOListView::saveToFile()
610{ 610{
611 611
612 int icount = 0; 612 int icount = 0;
613 QPtrList<Incidence> delSel ; 613 QPtrList<Incidence> delSel ;
614 QListViewItem *item = mListView->firstChild (); 614 QListViewItem *item = mListView->firstChild ();
615 while ( item ) { 615 while ( item ) {
616 if ( item->isSelected() ) { 616 if ( item->isSelected() ) {
617 delSel.append(((KOListViewItem *)item)->data()); 617 delSel.append(((KOListViewItem *)item)->data());
618 ++icount; 618 ++icount;
619 } 619 }
620 620
621 item = item->nextSibling(); 621 item = item->nextSibling();
622 } 622 }
623 if ( icount ) { 623 if ( icount ) {
624 QString fn = KOPrefs::instance()->mLastSaveFile; 624 QString fn = KOPrefs::instance()->mLastSaveFile;
625 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this ); 625 fn = KFileDialog::getSaveFileName( fn, i18n("Save filename"), this );
626 626
627 if ( fn == "" ) 627 if ( fn == "" )
628 return; 628 return;
629 QFileInfo info; 629 QFileInfo info;
630 info.setFile( fn ); 630 info.setFile( fn );
631 QString mes; 631 QString mes;
632 bool createbup = true; 632 bool createbup = true;
633 if ( info. exists() ) { 633 if ( info. exists() ) {
634 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) ); 634 mes = i18n("File already exists!\nOld file from:\n%1\nOverwrite?\n").arg (KGlobal::locale()->formatDateTime(info.lastModified (), true, false ) );
635 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes, 635 int result = QMessageBox::warning( this, i18n("KO/Pi: Warning!"),mes,
636 i18n("Overwrite!"), i18n("Cancel"), 0, 636 i18n("Overwrite!"), i18n("Cancel"), 0,
637 0, 1 ); 637 0, 1 );
638 if ( result != 0 ) { 638 if ( result != 0 ) {
639 createbup = false; 639 createbup = false;
640 } 640 }
641 } 641 }
642 if ( createbup ) { 642 if ( createbup ) {
643 CalendarLocal cal; 643 CalendarLocal cal;
644 cal.setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId); 644 cal.setTimeZoneId(KPimGlobalPrefs::instance()->mTimeZoneId);
645 Incidence *incidence = delSel.first(); 645 Incidence *incidence = delSel.first();
646 while ( incidence ) { 646 while ( incidence ) {
647 cal.addIncidence( incidence->clone() ); 647 cal.addIncidence( incidence->clone() );
648 incidence = delSel.next(); 648 incidence = delSel.next();
649 } 649 }
650 ICalFormat format; 650 ICalFormat format;
651 format.save( &cal, fn ); 651 format.save( &cal, fn );
652 mes = i18n("KO/Pi:Saved %1").arg(fn ); 652 mes = i18n("KO/Pi:Saved %1").arg(fn );
653 KOPrefs::instance()->mLastSaveFile = fn; 653 KOPrefs::instance()->mLastSaveFile = fn;
654 topLevelWidget()->setCaption(mes); 654 topLevelWidget()->setCaption(mes);
655 } 655 }
656 } 656 }
657} 657}
658void KOListView::deleteAll() 658void KOListView::deleteAll()
659{ 659{
660 int icount = 0; 660 int icount = 0;
661 QPtrList<Incidence> delSel ; 661 QPtrList<Incidence> delSel ;
662 QListViewItem *item = mListView->firstChild (); 662 QListViewItem *item = mListView->firstChild ();
663 while ( item ) { 663 while ( item ) {
664 if ( item->isSelected() ) { 664 if ( item->isSelected() ) {
665 delSel.append(((KOListViewItem *)item)->data()); 665 delSel.append(((KOListViewItem *)item)->data());
666 ++icount; 666 ++icount;
667 } 667 }
668 668
669 item = item->nextSibling(); 669 item = item->nextSibling();
670 } 670 }
671 if ( icount ) { 671 if ( icount ) {
672 Incidence *incidence = delSel.first(); 672 Incidence *incidence = delSel.first();
673 Incidence *toDelete; 673 Incidence *toDelete;
674 KOPrefs *p = KOPrefs::instance(); 674 KOPrefs *p = KOPrefs::instance();
675 bool confirm = p->mConfirm; 675 bool confirm = p->mConfirm;
676 QString mess; 676 QString mess;
677 mess = mess.sprintf( i18n("You have %d item(s) selected.\n"), icount ); 677 mess = mess.sprintf( i18n("You have %d item(s) selected.\n"), icount );
678 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")) ) { 678 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")) ) {
679 p->mConfirm = false; 679 p->mConfirm = false;
680 int delCounter = 0; 680 int delCounter = 0;
681 QDialog dia ( this, "p-dialog", true ); 681 QDialog dia ( this, "p-dialog", true );
682 QLabel lab (i18n("Close dialog to abort deletion!"), &dia ); 682 QLabel lab (i18n("Close dialog to abort deletion!"), &dia );
683 QVBoxLayout lay( &dia ); 683 QVBoxLayout lay( &dia );
684 lay.setMargin(7); 684 lay.setMargin(7);
685 lay.setSpacing(7); 685 lay.setSpacing(7);
686 lay.addWidget( &lab); 686 lay.addWidget( &lab);
687 QProgressBar bar( icount, &dia ); 687 QProgressBar bar( icount, &dia );
688 lay.addWidget( &bar); 688 lay.addWidget( &bar);
689 int w = 220; 689 int w = 220;
690 int h = 50; 690 int h = 50;
691 int dw = QApplication::desktop()->width(); 691 int dw = QApplication::desktop()->width();
692 int dh = QApplication::desktop()->height(); 692 int dh = QApplication::desktop()->height();
693 dia.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 693 dia.setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
694 //dia.resize( 240,50 ); 694 //dia.resize( 240,50 );
695 dia.show(); 695 dia.show();
696 696
697 while ( incidence ) { 697 while ( incidence ) {
698 bar.setProgress( delCounter ); 698 bar.setProgress( delCounter );
699 mess = mess.sprintf( i18n("Deleting item %d ..."), ++delCounter ); 699 mess = mess.sprintf( i18n("Deleting item %d ..."), ++delCounter );
700 dia.setCaption( mess ); 700 dia.setCaption( mess );
701 qApp->processEvents(); 701 qApp->processEvents();
702 toDelete = (incidence); 702 toDelete = (incidence);
703 incidence = delSel.next(); 703 incidence = delSel.next();
704 emit deleteIncidenceSignal(toDelete ); 704 emit deleteIncidenceSignal(toDelete );
705 if ( dia.result() != 0 ) 705 if ( dia.result() != 0 )
706 break; 706 break;
707 707
708 } 708 }
709 mess = mess.sprintf( i18n("%d items remaining in list."), count() ); 709 mess = mess.sprintf( i18n("%d items remaining in list."), count() );
710 topLevelWidget ()->setCaption( mess ); 710 topLevelWidget ()->setCaption( mess );
711 p->mConfirm = confirm; 711 p->mConfirm = confirm;
712 } 712 }
713 } 713 }
714 714
715 715
716} 716}
717int KOListView::maxDatesHint() 717int KOListView::maxDatesHint()
718{ 718{
719 return 0; 719 return 0;
720} 720}
721 721
722int KOListView::currentDateCount() 722int KOListView::currentDateCount()
723{ 723{
724 return 0; 724 return 0;
725} 725}
726 726
727QPtrList<Incidence> KOListView::selectedIncidences() 727QPtrList<Incidence> KOListView::selectedIncidences()
728{ 728{
729 QPtrList<Incidence> eventList; 729 QPtrList<Incidence> eventList;
730 QListViewItem *item = mListView->firstChild (); 730 QListViewItem *item = mListView->firstChild ();
731 while ( item ) { 731 while ( item ) {
732 if ( item->isSelected() ) { 732 if ( item->isSelected() ) {
733 eventList.append(((KOListViewItem *)item)->data()); 733 eventList.append(((KOListViewItem *)item)->data());
734 } 734 }
735 735
736 item = item->nextSibling(); 736 item = item->nextSibling();
737 } 737 }
738 738
739 // // QListViewItem *item = mListView->selectedItem(); 739 // // QListViewItem *item = mListView->selectedItem();
740 //if (item) eventList.append(((KOListViewItem *)item)->data()); 740 //if (item) eventList.append(((KOListViewItem *)item)->data());
741 741
742 return eventList; 742 return eventList;
743} 743}
744 744
745DateList KOListView::selectedDates() 745DateList KOListView::selectedDates()
746{ 746{
747 DateList eventList; 747 DateList eventList;
748 return eventList; 748 return eventList;
749} 749}
750 750
751void KOListView::showDates(bool show) 751void KOListView::showDates(bool show)
752{ 752{
753 // Shouldn't we set it to a value greater 0? When showDates is called with 753 // Shouldn't we set it to a value greater 0? When showDates is called with
754 // show == true at first, then the columnwidths are set to zero. 754 // show == true at first, then the columnwidths are set to zero.
755 static int oldColWidth1 = 0; 755 static int oldColWidth1 = 0;
756 static int oldColWidth3 = 0; 756 static int oldColWidth3 = 0;
757 757
758 if (!show) { 758 if (!show) {
759 oldColWidth1 = mListView->columnWidth(1); 759 oldColWidth1 = mListView->columnWidth(1);
760 oldColWidth3 = mListView->columnWidth(3); 760 oldColWidth3 = mListView->columnWidth(3);
761 mListView->setColumnWidth(1, 0); 761 mListView->setColumnWidth(1, 0);
762 mListView->setColumnWidth(3, 0); 762 mListView->setColumnWidth(3, 0);
763 } else { 763 } else {
764 mListView->setColumnWidth(1, oldColWidth1); 764 mListView->setColumnWidth(1, oldColWidth1);
765 mListView->setColumnWidth(3, oldColWidth3); 765 mListView->setColumnWidth(3, oldColWidth3);
766 } 766 }
767 mListView->repaint(); 767 mListView->repaint();
768} 768}
769 769
770void KOListView::printPreview(CalPrinter *calPrinter, const QDate &fd, 770void KOListView::printPreview(CalPrinter *calPrinter, const QDate &fd,
771 const QDate &td) 771 const QDate &td)
772{ 772{
773#ifndef KORG_NOPRINTER 773#ifndef KORG_NOPRINTER
774 calPrinter->preview(CalPrinter::Day, fd, td); 774 calPrinter->preview(CalPrinter::Day, fd, td);
775#endif 775#endif
776} 776}
777 777
778void KOListView::showDates() 778void KOListView::showDates()
779{ 779{
780 showDates(true); 780 showDates(true);
781} 781}
782 782
783void KOListView::hideDates() 783void KOListView::hideDates()
784{ 784{
785 showDates(false); 785 showDates(false);
786} 786}
787void KOListView::resetFocus() 787void KOListView::resetFocus()
788{ 788{
789 mListView->setFocus(); 789 mListView->setFocus();
790} 790}
791void KOListView::updateView() 791void KOListView::updateView()
792{ 792{
793 mListView->setFocus(); 793 mListView->setFocus();
794 if ( mListView->firstChild () ) 794 if ( mListView->firstChild () )
795 mListView->setCurrentItem( mListView->firstChild () ); 795 mListView->setCurrentItem( mListView->firstChild () );
796} 796}
797void KOListView::updateConfig() 797void KOListView::updateConfig()
798{ 798{
799 799
800 mListView->setFont ( KOPrefs::instance()->mListViewFont ); 800 mListView->setFont ( KOPrefs::instance()->mListViewFont );
801 updateView(); 801 updateView();
802 802
803} 803}
804void KOListView::setStartDate(const QDate &start) 804void KOListView::setStartDate(const QDate &start)
805{ 805{
806 mStartDate = start; 806 mStartDate = start;
807} 807}
808 808
809void KOListView::showDates(const QDate &start, const QDate &end) 809void KOListView::showDates(const QDate &start, const QDate &end)
810{ 810{
811 clear(); 811 clear();
812 mStartDate = start; 812 mStartDate = start;
813 QDate date = start; 813 QDate date = start;
814 QPtrList<Journal> j_list; 814 QPtrList<Journal> j_list;
815 while( date <= end ) { 815 while( date <= end ) {
816 addEvents(calendar()->events(date)); 816 addEvents(calendar()->events(date));
817 addTodos(calendar()->todos(date)); 817 addTodos(calendar()->todos(date));
818 Journal* jo = calendar()->journal(date); 818 Journal* jo = calendar()->journal(date);
819 if ( jo ) 819 if ( jo )
820 j_list.append( jo ); 820 j_list.append( jo );
821 date = date.addDays( 1 ); 821 date = date.addDays( 1 );
822 } 822 }
823 addJournals(j_list); 823 addJournals(j_list);
824 emit incidenceSelected( 0 ); 824 emit incidenceSelected( 0 );
825 updateView(); 825 updateView();
826 826
827} 827}
828 828
829void KOListView::addEvents(QPtrList<Event> eventList) 829void KOListView::addEvents(QPtrList<Event> eventList)
830{ 830{
831 Event *ev; 831 Event *ev;
832 for(ev = eventList.first(); ev; ev = eventList.next()) { 832 for(ev = eventList.first(); ev; ev = eventList.next()) {
833 addIncidence(ev); 833 addIncidence(ev);
834 } 834 }
835 if ( !mListView->currentItem() ){ 835 if ( !mListView->currentItem() ){
836 updateView(); 836 updateView();
837 } 837 }
838} 838}
839 839
840void KOListView::addTodos(QPtrList<Todo> eventList) 840void KOListView::addTodos(QPtrList<Todo> eventList)
841{ 841{
842 Todo *ev; 842 Todo *ev;
843 for(ev = eventList.first(); ev; ev = eventList.next()) { 843 for(ev = eventList.first(); ev; ev = eventList.next()) {
844 addIncidence(ev); 844 addIncidence(ev);
845 } 845 }
846 if ( !mListView->currentItem() ){ 846 if ( !mListView->currentItem() ){
847 updateView(); 847 updateView();
848 } 848 }
849} 849}
850void KOListView::addJournals(QPtrList<Journal> eventList) 850void KOListView::addJournals(QPtrList<Journal> eventList)
851{ 851{
852 Journal *ev; 852 Journal *ev;
853 for(ev = eventList.first(); ev; ev = eventList.next()) { 853 for(ev = eventList.first(); ev; ev = eventList.next()) {
854 addIncidence(ev); 854 addIncidence(ev);
855 } 855 }
856 if ( !mListView->currentItem() ){ 856 if ( !mListView->currentItem() ){
857 updateView(); 857 updateView();
858 } 858 }
859} 859}
860 860
861void KOListView::addIncidence(Incidence *incidence) 861void KOListView::addIncidence(Incidence *incidence)
862{ 862{
863 if ( mUidDict.find( incidence->uid() ) ) return; 863 if ( mUidDict.find( incidence->uid() ) ) return;
864 864
865 // mListView->setFont ( KOPrefs::instance()->mListViewFont ); 865 // mListView->setFont ( KOPrefs::instance()->mListViewFont );
866 mUidDict.insert( incidence->uid(), incidence ); 866 mUidDict.insert( incidence->uid(), incidence );
867 867
868 KOListViewItem *item = new KOListViewItem( incidence, mListView ); 868 KOListViewItem *item = new KOListViewItem( incidence, mListView );
869 ListItemVisitor v(item, mStartDate ); 869 ListItemVisitor v(item, mStartDate );
870 if (incidence->accept(v)) return; 870 if (incidence->accept(v)) return;
871 else delete item; 871 else delete item;
872 //qDebug("delete item "); 872 //qDebug("delete item ");
873} 873}
874 874
875void KOListView::showEvents(QPtrList<Event> eventList) 875void KOListView::showEvents(QPtrList<Event> eventList)
876{ 876{
877 clear(); 877 clear();
878 878
879 addEvents(eventList); 879 addEvents(eventList);
880 880
881 // After new creation of list view no events are selected. 881 // After new creation of list view no events are selected.
882 emit incidenceSelected( 0 ); 882 emit incidenceSelected( 0 );
883} 883}
884int KOListView::count() 884int KOListView::count()
885{ 885{
886 return mListView->childCount(); 886 return mListView->childCount();
887} 887}
888 888
889void KOListView::changeEventDisplay(Event *event, int action) 889void KOListView::changeEventDisplay(Event *event, int action)
890{ 890{
891 KOListViewItem *item; 891 KOListViewItem *item;
892 892
893 switch(action) { 893 switch(action) {
894 case KOGlobals::EVENTADDED: 894 case KOGlobals::EVENTADDED:
895 addIncidence( event ); 895 addIncidence( event );
896 break; 896 break;
897 case KOGlobals::EVENTEDITED: 897 case KOGlobals::EVENTEDITED:
898 item = getItemForEvent(event); 898 item = getItemForEvent(event);
899 if (item) { 899 if (item) {
900 mUidDict.remove( event->uid() ); 900 mUidDict.remove( event->uid() );
901 delete item; 901 delete item;
902 addIncidence( event ); 902 addIncidence( event );
903 } 903 }
904 break; 904 break;
905 case KOGlobals::EVENTDELETED: 905 case KOGlobals::EVENTDELETED:
906 item = getItemForEvent(event); 906 item = getItemForEvent(event);
907 if (item) { 907 if (item) {
908 mUidDict.remove( event->uid() ); 908 mUidDict.remove( event->uid() );
909 delete item; 909 delete item;
910 } 910 }
911 break; 911 break;
912 default: 912 default:
913 ; 913 ;
914 } 914 }
915} 915}
916 916
917KOListViewItem *KOListView::getItemForEvent(Event *event) 917KOListViewItem *KOListView::getItemForEvent(Event *event)
918{ 918{
919 KOListViewItem *item = (KOListViewItem *)mListView->firstChild(); 919 KOListViewItem *item = (KOListViewItem *)mListView->firstChild();
920 while (item) { 920 while (item) {
921 if (item->data() == event) return item; 921 if (item->data() == event) return item;
922 item = (KOListViewItem *)item->nextSibling(); 922 item = (KOListViewItem *)item->nextSibling();
923 } 923 }
924 return 0; 924 return 0;
925} 925}
926 926
927void KOListView::defaultItemAction(QListViewItem *i) 927void KOListView::defaultItemAction(QListViewItem *i)
928{ 928{
929 KOListViewItem *item = static_cast<KOListViewItem *>( i ); 929 KOListViewItem *item = static_cast<KOListViewItem *>( i );
930 if ( item ) defaultAction( item->data() ); 930 if ( item ) defaultAction( item->data() );
931 931
932} 932}
933 933
934void KOListView::popupMenu(QListViewItem *item,const QPoint &,int) 934void KOListView::popupMenu(QListViewItem *item,const QPoint &,int)
935{ 935{
936 mActiveItem = (KOListViewItem *)item; 936 mActiveItem = (KOListViewItem *)item;
937 if (mActiveItem) { 937 if (mActiveItem) {
938 Incidence *incidence = mActiveItem->data(); 938 Incidence *incidence = mActiveItem->data();
939 mPopupMenu->showIncidencePopup(incidence); 939 mPopupMenu->showIncidencePopup(incidence);
940 940
941 /* 941 /*
942 if ( incidence && incidence->type() == "Event" ) { 942 if ( incidence && incidence->type() == "Event" ) {
943 Event *event = static_cast<Event *>( incidence ); 943 Event *event = static_cast<Event *>( incidence );
944 mPopupMenu->showEventPopup(event); 944 mPopupMenu->showEventPopup(event);
945 } 945 }
946 */ 946 */
947 } 947 }
948} 948}
949 949
950void KOListView::readSettings(KConfig *config, QString setting) 950void KOListView::readSettings(KConfig *config, QString setting)
951{ 951{
952 // qDebug("KOListView::readSettings "); 952 // qDebug("KOListView::readSettings ");
953 mListView->restoreLayout(config,setting); 953 mListView->restoreLayout(config,setting);
954} 954}
955 955
956void KOListView::writeSettings(KConfig *config, QString setting) 956void KOListView::writeSettings(KConfig *config, QString setting)
957{ 957{
958 // qDebug("KOListView::writeSettings "); 958 // qDebug("KOListView::writeSettings ");
959 mListView->saveLayout(config, setting); 959 mListView->saveLayout(config, setting);
960} 960}
961 961
962void KOListView::processSelectionChange(QListViewItem *) 962void KOListView::processSelectionChange(QListViewItem *)
963{ 963{
964 964
965 KOListViewItem *item = 965 KOListViewItem *item =
966 static_cast<KOListViewItem *>( mListView->currentItem() ); 966 static_cast<KOListViewItem *>( mListView->currentItem() );
967 967
968 if ( !item ) { 968 if ( !item ) {
969 emit incidenceSelected( 0 ); 969 emit incidenceSelected( 0 );
970 } else { 970 } else {
971 emit incidenceSelected( item->data() ); 971 emit incidenceSelected( item->data() );
972 } 972 }
973} 973}
974 974
975void KOListView::clearSelection() 975void KOListView::clearSelection()
976{ 976{
977 mListView->selectAll( false ); 977 mListView->selectAll( false );
978} 978}
979void KOListView::allSelection() 979void KOListView::allSelection()
980{ 980{
981 mListView->selectAll( true ); 981 mListView->selectAll( true );
982} 982}
983 983
984void KOListView::clear() 984void KOListView::clear()
985{ 985{
986 mListView->clear(); 986 mListView->clear();
987 mUidDict.clear(); 987 mUidDict.clear();
988} 988}
989 989
990Incidence* KOListView::currentItem() 990Incidence* KOListView::currentItem()
991{ 991{
992 if ( mListView->currentItem() ) 992 if ( mListView->currentItem() )
993 return ((KOListViewItem*) mListView->currentItem())->data(); 993 return ((KOListViewItem*) mListView->currentItem())->data();
994 return 0; 994 return 0;
995} 995}
996void KOListView::keyPressEvent ( QKeyEvent *e) 996void KOListView::keyPressEvent ( QKeyEvent *e)
997{ 997{
998 998
999 if ( e->key() == Qt::Key_Delete || e->key() == Qt::Key_Backspace ) { 999 if ( e->key() == Qt::Key_Delete || e->key() == Qt::Key_Backspace ) {
1000 deleteAll(); 1000 deleteAll();
1001 return; 1001 return;
1002 } 1002 }
1003 1003
1004 e->ignore(); 1004 e->ignore();
1005} 1005}
1006void KOListViewListView::keyPressEvent ( QKeyEvent *e) 1006void KOListViewListView::keyPressEvent ( QKeyEvent *e)
1007{ 1007{
1008 1008
1009 switch ( e->key() ) { 1009 switch ( e->key() ) {
1010 case Qt::Key_Down: 1010 case Qt::Key_Down:
1011 if ( e->state() == ShiftButton ) { 1011 if ( e->state() == ShiftButton ) {
1012 QListViewItem* cn = currentItem(); 1012 QListViewItem* cn = currentItem();
1013 if ( !cn ) 1013 if ( !cn )
1014 cn = firstChild(); 1014 cn = firstChild();
1015 if ( !cn ) 1015 if ( !cn )
1016 return; 1016 return;
1017 while ( cn->nextSibling() ) 1017 while ( cn->nextSibling() )
1018 cn = cn->nextSibling(); 1018 cn = cn->nextSibling();
1019 setCurrentItem ( cn ); 1019 setCurrentItem ( cn );
1020 ensureItemVisible ( cn ); 1020 ensureItemVisible ( cn );
1021 1021
1022 e->accept(); 1022 e->accept();
1023 return; 1023 return;
1024 } 1024 }
1025 if ( e->state() == ControlButton ) { 1025 if ( e->state() == ControlButton ) {
1026 int count = childCount (); 1026 int count = childCount ();
1027 int jump = count / 5; 1027 int jump = count / 5;
1028 QListViewItem* cn; 1028 QListViewItem* cn;
1029 cn = currentItem(); 1029 cn = currentItem();
1030 if ( ! cn ) 1030 if ( ! cn )
1031 return; 1031 return;
1032 if ( jump == 0 ) 1032 if ( jump == 0 )
1033 jump = 1; 1033 jump = 1;
1034 while ( jump && cn->nextSibling() ) { 1034 while ( jump && cn->nextSibling() ) {
1035 cn = cn->nextSibling(); 1035 cn = cn->nextSibling();
1036 --jump; 1036 --jump;
1037 } 1037 }
1038 setCurrentItem ( cn ); 1038 setCurrentItem ( cn );
1039 ensureItemVisible ( cn ); 1039 ensureItemVisible ( cn );
1040 1040
1041 } else 1041 } else
1042 QListView::keyPressEvent ( e ) ; 1042 QListView::keyPressEvent ( e ) ;
1043 e->accept(); 1043 e->accept();
1044 break; 1044 break;
1045 1045
1046 case Qt::Key_Up: 1046 case Qt::Key_Up:
1047 if ( e->state() == ShiftButton ) { 1047 if ( e->state() == ShiftButton ) {
1048 QListViewItem* cn = firstChild(); 1048 QListViewItem* cn = firstChild();
1049 if ( cn ) { 1049 if ( cn ) {
1050 setCurrentItem ( cn ); 1050 setCurrentItem ( cn );
1051 ensureItemVisible ( cn ); 1051 ensureItemVisible ( cn );
1052 } 1052 }
1053 e->accept(); 1053 e->accept();
1054 return; 1054 return;
1055 } 1055 }
1056 if ( e->state() == ControlButton ) { 1056 if ( e->state() == ControlButton ) {
1057 int count = childCount (); 1057 int count = childCount ();
1058 int jump = count / 5; 1058 int jump = count / 5;
1059 QListViewItem* cn; 1059 QListViewItem* cn;
1060 cn = currentItem(); 1060 cn = currentItem();
1061 if ( ! cn ) 1061 if ( ! cn )
1062 return; 1062 return;
1063 if ( jump == 0 ) 1063 if ( jump == 0 )
1064 jump = 1; 1064 jump = 1;
1065 while ( jump && cn->itemAbove ()) { 1065 while ( jump && cn->itemAbove ()) {
1066 cn = cn->itemAbove (); 1066 cn = cn->itemAbove ();
1067 --jump; 1067 --jump;
1068 } 1068 }
1069 setCurrentItem ( cn ); 1069 setCurrentItem ( cn );
1070 ensureItemVisible ( cn ); 1070 ensureItemVisible ( cn );
1071 } else 1071 } else
1072 QListView::keyPressEvent ( e ) ; 1072 QListView::keyPressEvent ( e ) ;
1073 e->accept(); 1073 e->accept();
1074 break; 1074 break;
1075 case Qt::Key_I: { 1075 case Qt::Key_I: {
1076 QListViewItem* cn; 1076 QListViewItem* cn;
1077 cn = currentItem(); 1077 cn = currentItem();
1078 if ( cn ) { 1078 if ( cn ) {
1079 KOListViewItem* ci = (KOListViewItem*)( cn ); 1079 KOListViewItem* ci = (KOListViewItem*)( cn );
1080 if ( ci ){ 1080 if ( ci ){
1081 //emit showIncidence( ci->data()); 1081 //emit showIncidence( ci->data());
1082 cn = cn->nextSibling(); 1082 cn = cn->nextSibling();
1083 if ( cn ) { 1083 if ( cn ) {
1084 setCurrentItem ( cn ); 1084 setCurrentItem ( cn );
1085 ensureItemVisible ( cn ); 1085 ensureItemVisible ( cn );
1086 emit showIncidence( ci->data());
1087 } 1086 }
1087 emit showIncidence( ci->data());
1088 } 1088 }
1089 } 1089 }
1090 e->accept(); 1090 e->accept();
1091 } 1091 }
1092 break; 1092 break;
1093 case Qt::Key_Return: 1093 case Qt::Key_Return:
1094 case Qt::Key_Enter: 1094 case Qt::Key_Enter:
1095 { 1095 {
1096 QListViewItem* cn; 1096 QListViewItem* cn;
1097 cn = currentItem(); 1097 cn = currentItem();
1098 if ( cn ) { 1098 if ( cn ) {
1099 KOListViewItem* ci = (KOListViewItem*)( cn ); 1099 KOListViewItem* ci = (KOListViewItem*)( cn );
1100 if ( ci ){ 1100 if ( ci ){
1101 if ( e->state() == ShiftButton ) 1101 if ( e->state() == ShiftButton )
1102 ci->setSelected( false ); 1102 ci->setSelected( false );
1103 else 1103 else
1104 ci->setSelected( true ); 1104 ci->setSelected( true );
1105 cn = cn->nextSibling(); 1105 cn = cn->nextSibling();
1106 if ( cn ) { 1106 if ( cn ) {
1107 setCurrentItem ( cn ); 1107 setCurrentItem ( cn );
1108 ensureItemVisible ( cn ); 1108 ensureItemVisible ( cn );
1109 } 1109 }
1110 } 1110 }
1111 } 1111 }
1112 e->accept(); 1112 e->accept();
1113 } 1113 }
1114 break; 1114 break;
1115 default: 1115 default:
1116 e->ignore(); 1116 e->ignore();
1117 } 1117 }
1118} 1118}
1119KOListViewListView::KOListViewListView(KOListView * lv ) 1119KOListViewListView::KOListViewListView(KOListView * lv )
1120 : KListView( lv ) 1120 : KListView( lv )
1121{ 1121{
1122#ifndef DESKTOP_VERSION 1122#ifndef DESKTOP_VERSION
1123 QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold ); 1123 QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold );
1124#endif 1124#endif
1125 mYMousePos = -1000; 1125 mYMousePos = -1000;
1126 setSelectionMode( QListView::Multi ); 1126 setSelectionMode( QListView::Multi );
1127 setMultiSelection( true); 1127 setMultiSelection( true);
1128 mAllowPopupMenu = true; 1128 mAllowPopupMenu = true;
1129 mMouseDown = false; 1129 mMouseDown = false;
1130 1130
1131} 1131}
1132void KOListViewListView::contentsMouseDoubleClickEvent(QMouseEvent *e) 1132void KOListViewListView::contentsMouseDoubleClickEvent(QMouseEvent *e)
1133{ 1133{
1134 if (!e) return; 1134 if (!e) return;
1135 QPoint vp = contentsToViewport(e->pos()); 1135 QPoint vp = contentsToViewport(e->pos());
1136 QListViewItem *item = itemAt(vp); 1136 QListViewItem *item = itemAt(vp);
1137 if (!item) { 1137 if (!item) {
1138 emit newEvent(); 1138 emit newEvent();
1139 return; 1139 return;
1140 } 1140 }
1141 KListView::contentsMouseDoubleClickEvent(e); 1141 KListView::contentsMouseDoubleClickEvent(e);
1142} 1142}
1143 1143
1144 1144
1145void KOListViewListView::contentsMousePressEvent(QMouseEvent *e) 1145void KOListViewListView::contentsMousePressEvent(QMouseEvent *e)
1146{ 1146{
1147 //qDebug("contentsMousePressEvent++++ "); 1147 //qDebug("contentsMousePressEvent++++ ");
1148 if (! mMouseDown ) { 1148 if (! mMouseDown ) {
1149 mAllowPopupMenu = true; 1149 mAllowPopupMenu = true;
1150 mYMousePos = mapToGlobal( (e->pos())).y(); 1150 mYMousePos = mapToGlobal( (e->pos())).y();
1151 } 1151 }
1152 if ( e->button() == RightButton && mMouseDown ) 1152 if ( e->button() == RightButton && mMouseDown )
1153 return; 1153 return;
1154 if ( e->button() == LeftButton ) 1154 if ( e->button() == LeftButton )
1155 mMouseDown = true; 1155 mMouseDown = true;
1156 KListView::contentsMousePressEvent( e ); 1156 KListView::contentsMousePressEvent( e );
1157} 1157}
1158void KOListViewListView::contentsMouseReleaseEvent(QMouseEvent *e) 1158void KOListViewListView::contentsMouseReleaseEvent(QMouseEvent *e)
1159{ 1159{
1160 //qDebug("contentsMouseReleaseEv---- "); 1160 //qDebug("contentsMouseReleaseEv---- ");
1161 if ( ! mMouseDown ) { 1161 if ( ! mMouseDown ) {
1162 if ( e->button() == RightButton && ! mAllowPopupMenu ) 1162 if ( e->button() == RightButton && ! mAllowPopupMenu )
1163 return; 1163 return;
1164 QListViewItem* ci = currentItem(); 1164 QListViewItem* ci = currentItem();
1165 if ( ci ) 1165 if ( ci )
1166 ci->setSelected( true ); 1166 ci->setSelected( true );
1167 KListView::contentsMouseReleaseEvent(e); 1167 KListView::contentsMouseReleaseEvent(e);
1168 return; 1168 return;
1169 } 1169 }
1170 if ( e->button() == LeftButton ) 1170 if ( e->button() == LeftButton )
1171 mMouseDown = false; 1171 mMouseDown = false;
1172 if ( e->button() == RightButton && ! mAllowPopupMenu ) 1172 if ( e->button() == RightButton && ! mAllowPopupMenu )
1173 return; 1173 return;
1174 if ( e->button() == RightButton ) { 1174 if ( e->button() == RightButton ) {
1175 QListViewItem* ci = currentItem(); 1175 QListViewItem* ci = currentItem();
1176 if ( ci ) 1176 if ( ci )
1177 ci->setSelected( true ); 1177 ci->setSelected( true );
1178 } 1178 }
1179 KListView::contentsMouseReleaseEvent(e); 1179 KListView::contentsMouseReleaseEvent(e);
1180} 1180}
1181void KOListViewListView::contentsMouseMoveEvent(QMouseEvent *e) 1181void KOListViewListView::contentsMouseMoveEvent(QMouseEvent *e)
1182{ 1182{
1183 // qDebug("contentsMouseMoveEv....... "); 1183 // qDebug("contentsMouseMoveEv....... ");
1184 // qDebug("start: %d current %d ",mYMousePos , mapToGlobal( (e->pos())).y() ); 1184 // qDebug("start: %d current %d ",mYMousePos , mapToGlobal( (e->pos())).y() );
1185 int diff = mYMousePos - mapToGlobal( (e->pos())).y(); 1185 int diff = mYMousePos - mapToGlobal( (e->pos())).y();
1186 if ( diff < 0 ) diff = -diff; 1186 if ( diff < 0 ) diff = -diff;
1187 if ( diff > 20 ) 1187 if ( diff > 20 )
1188 mAllowPopupMenu = false; 1188 mAllowPopupMenu = false;
1189 KListView::contentsMouseMoveEvent(e); 1189 KListView::contentsMouseMoveEvent(e);
1190} 1190}
diff --git a/korganizer/searchdialog.cpp b/korganizer/searchdialog.cpp
index cef59a2..678e1bd 100644
--- a/korganizer/searchdialog.cpp
+++ b/korganizer/searchdialog.cpp
@@ -1,405 +1,412 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 1998 Preston Brown 3 Copyright (c) 1998 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 <qlayout.h> 25#include <qlayout.h>
26#include <qcheckbox.h> 26#include <qcheckbox.h>
27#include <qgroupbox.h> 27#include <qgroupbox.h>
28#include <qlabel.h> 28#include <qlabel.h>
29#include <qlistview.h>
29#include <qwhatsthis.h> 30#include <qwhatsthis.h>
30#include <qlineedit.h> 31#include <qlineedit.h>
31#include <qpushbutton.h> 32#include <qpushbutton.h>
32 33
33#include <klocale.h> 34#include <klocale.h>
34#include <kmessagebox.h> 35#include <kmessagebox.h>
35 36
36#include <libkdepim/kdateedit.h> 37#include <libkdepim/kdateedit.h>
37 38
38#include "koglobals.h" 39#include "koglobals.h"
39#include "koprefs.h" 40#include "koprefs.h"
41#include "klineedit.h"
40 42
41#include "calendarview.h" 43#include "calendarview.h"
42#include "koviewmanager.h" 44#include "koviewmanager.h"
43#include "searchdialog.h" 45#include "searchdialog.h"
44 46
45SearchDialog::SearchDialog(Calendar *calendar,CalendarView *parent) 47SearchDialog::SearchDialog(Calendar *calendar,CalendarView *parent)
46 : QVBox( 0 ) 48 : QVBox( 0 )
47 49
48{ 50{
49 mCalendar = calendar; 51 mCalendar = calendar;
50 QFrame *topFrame = new QFrame( this ) ;//plainPage(); 52 QFrame *topFrame = new QFrame( this ) ;//plainPage();
51 QVBoxLayout *layout = new QVBoxLayout(topFrame,KDialog::marginHint(),KDialog::spacingHint()); 53 QVBoxLayout *layout = new QVBoxLayout(topFrame,KDialog::marginHint(),KDialog::spacingHint());
52 54
53 // Search expression 55 // Search expression
54 QHBoxLayout *subLayout = new QHBoxLayout(); 56 QHBoxLayout *subLayout = new QHBoxLayout();
55 layout->addLayout(subLayout); 57 layout->addLayout(subLayout);
56 searchLabel = new QLabel(topFrame); 58 searchLabel = new QLabel(topFrame);
57 searchLabel->setText(i18n("Search for:")); 59 searchLabel->setText(i18n("Search for:"));
58 subLayout->addWidget(searchLabel); 60 subLayout->addWidget(searchLabel);
59 61
60 searchEdit = new QLineEdit(topFrame); 62 searchEdit = new KLineEdit(topFrame);
61 subLayout->addWidget(searchEdit); 63 subLayout->addWidget(searchEdit);
62 QPushButton *OkButton = new QPushButton( i18n("&Find"), topFrame ); 64 QPushButton *OkButton = new QPushButton( i18n("&Find"), topFrame );
63 //OkButton->setDefault( true ); 65 //OkButton->setDefault( true );
64 connect(OkButton,SIGNAL(clicked()),SLOT(doSearch())); 66 connect(OkButton,SIGNAL(clicked()),SLOT(doSearch()));
65 subLayout->addWidget(OkButton); 67 subLayout->addWidget(OkButton);
66 searchEdit->setText("*"); // Find all events by default 68 searchEdit->setText("*"); // Find all events by default
67 searchEdit->setFocus(); 69 searchEdit->setFocus();
68 connect(searchEdit, SIGNAL(textChanged ( const QString & )),this,SLOT(searchTextChanged( const QString & ))); 70 connect(searchEdit, SIGNAL(textChanged ( const QString & )),this,SLOT(searchTextChanged( const QString & )));
69 connect(searchEdit, SIGNAL( returnPressed () ),this,SLOT(doSearch())); 71 connect(searchEdit, SIGNAL( returnPressed () ),this,SLOT(doSearch()));
70 // Subjects to search 72 // Subjects to search
71 // QGroupBox *subjectGroup = new QGroupBox(1,Vertical,i18n("Search In"), 73 // QGroupBox *subjectGroup = new QGroupBox(1,Vertical,i18n("Search In"),
72 // topFrame); 74 // topFrame);
73 75
74 QHBox *incidenceGroup = new QHBox( topFrame ); 76 QHBox *incidenceGroup = new QHBox( topFrame );
75 layout->addWidget(incidenceGroup); 77 layout->addWidget(incidenceGroup);
76 78
77 mSearchEvent = new QCheckBox(i18n("Events"),incidenceGroup); 79 mSearchEvent = new QCheckBox(i18n("Events"),incidenceGroup);
78 mSearchEvent->setChecked(true); 80 mSearchEvent->setChecked(true);
79 mSearchTodo = new QCheckBox(i18n("Todos"),incidenceGroup); 81 mSearchTodo = new QCheckBox(i18n("Todos"),incidenceGroup);
80 mSearchJournal = new QCheckBox(i18n("Journals"),incidenceGroup); 82 mSearchJournal = new QCheckBox(i18n("Journals"),incidenceGroup);
81 83
82 QHBox *subjectGroup = new QHBox( topFrame ); 84 QHBox *subjectGroup = new QHBox( topFrame );
83 layout->addWidget(subjectGroup); 85 layout->addWidget(subjectGroup);
84 86
85 mSummaryCheck = new QCheckBox(i18n("Summary/Loc."),subjectGroup); 87 mSummaryCheck = new QCheckBox(i18n("Summary/Loc."),subjectGroup);
86 mSummaryCheck->setChecked(true); 88 mSummaryCheck->setChecked(true);
87 mDescriptionCheck = new QCheckBox(i18n("Details"),subjectGroup); 89 mDescriptionCheck = new QCheckBox(i18n("Details"),subjectGroup);
88 mCategoryCheck = new QCheckBox(i18n("Categories"),subjectGroup); 90 mCategoryCheck = new QCheckBox(i18n("Categories"),subjectGroup);
89 91
90 QHBox *attendeeGroup = new QHBox( topFrame ); 92 QHBox *attendeeGroup = new QHBox( topFrame );
91 layout->addWidget(attendeeGroup ); 93 layout->addWidget(attendeeGroup );
92 new QLabel( i18n("Attendee:"),attendeeGroup ); 94 new QLabel( i18n("Attendee:"),attendeeGroup );
93 mSearchAName = new QCheckBox(i18n("Name"),attendeeGroup ); 95 mSearchAName = new QCheckBox(i18n("Name"),attendeeGroup );
94 mSearchAEmail = new QCheckBox(i18n("Email"), attendeeGroup ); 96 mSearchAEmail = new QCheckBox(i18n("Email"), attendeeGroup );
95 // Date range 97 // Date range
96 // QGroupBox *rangeGroup = new QGroupBox(1,Horizontal,i18n("Date Range"), 98 // QGroupBox *rangeGroup = new QGroupBox(1,Horizontal,i18n("Date Range"),
97 // topFrame); 99 // topFrame);
98 // layout->addWidget(rangeGroup); 100 // layout->addWidget(rangeGroup);
99 101
100 QWidget *rangeWidget = new QWidget(topFrame); 102 QWidget *rangeWidget = new QWidget(topFrame);
101 QHBoxLayout *rangeLayout = new QHBoxLayout(rangeWidget,0,KDialog::spacingHint()); 103 QHBoxLayout *rangeLayout = new QHBoxLayout(rangeWidget,0,KDialog::spacingHint());
102 rangeLayout->addWidget(new QLabel(i18n("From:"),rangeWidget)); 104 rangeLayout->addWidget(new QLabel(i18n("From:"),rangeWidget));
103 mStartDate = new KDateEdit(rangeWidget); 105 mStartDate = new KDateEdit(rangeWidget);
104 rangeLayout->addWidget(mStartDate); 106 rangeLayout->addWidget(mStartDate);
105 rangeLayout->addWidget(new QLabel(i18n("To:"),rangeWidget)); 107 rangeLayout->addWidget(new QLabel(i18n("To:"),rangeWidget));
106 mEndDate = new KDateEdit(rangeWidget); 108 mEndDate = new KDateEdit(rangeWidget);
107 mEndDate->setDate(QDate::currentDate().addDays(365)); 109 mEndDate->setDate(QDate::currentDate().addDays(365));
108 rangeLayout->addWidget(mEndDate); 110 rangeLayout->addWidget(mEndDate);
109 QToolButton *wt = QWhatsThis::whatsThisButton ( rangeWidget ); 111 QToolButton *wt = QWhatsThis::whatsThisButton ( rangeWidget );
110 rangeLayout->addWidget( (QWidget*)wt ); 112 rangeLayout->addWidget( (QWidget*)wt );
111 layout->addWidget(rangeWidget); 113 layout->addWidget(rangeWidget);
112 // Results list view 114 // Results list view
113 listView = new KOListView(mCalendar,topFrame); 115 listView = new KOListView(mCalendar,topFrame);
114 layout->addWidget(listView); 116 layout->addWidget(listView);
115 117
116 listView->readSettings(KOGlobals::config(),"SearchListView Layout"); 118 listView->readSettings(KOGlobals::config(),"SearchListView Layout");
119 connect(searchEdit,SIGNAL(scrollDOWN()),SLOT(setFocusToList()));
117 120
118 setCaption( i18n("KO/Pi Find: ")); 121 setCaption( i18n("KO/Pi Find: "));
119#ifdef DESKTOP_VERSION 122#ifdef DESKTOP_VERSION
120 OkButton = new QPushButton( i18n("Close"), this ); 123 OkButton = new QPushButton( i18n("Close"), this );
121 connect(OkButton,SIGNAL(clicked()),SLOT(hide())); 124 connect(OkButton,SIGNAL(clicked()),SLOT(hide()));
122#endif 125#endif
123} 126}
124 127
125SearchDialog::~SearchDialog() 128SearchDialog::~SearchDialog()
126{ 129{
127 130
128} 131}
132void SearchDialog::setFocusToList()
133{
134 listView->resetFocus();
135}
129void SearchDialog::accept() 136void SearchDialog::accept()
130{ 137{
131 doSearch(); 138 doSearch();
132} 139}
133void SearchDialog::updateList() 140void SearchDialog::updateList()
134{ 141{
135 //listView->updateList(); 142 //listView->updateList();
136 if ( isVisible() ) { 143 if ( isVisible() ) {
137 updateView(); 144 updateView();
138 //qDebug("SearchDialog::updated "); 145 //qDebug("SearchDialog::updated ");
139 } 146 }
140 else { 147 else {
141 listView->clear(); 148 listView->clear();
142 //qDebug("SearchDialog::cleared "); 149 //qDebug("SearchDialog::cleared ");
143 150
144 } 151 }
145} 152}
146void SearchDialog::searchTextChanged( const QString &_text ) 153void SearchDialog::searchTextChanged( const QString &_text )
147{ 154{
148#if 0 155#if 0
149 enableButton( KDialogBase::User1, !_text.isEmpty() ); 156 enableButton( KDialogBase::User1, !_text.isEmpty() );
150#endif 157#endif
151} 158}
152 159
153void SearchDialog::doSearch() 160void SearchDialog::doSearch()
154{ 161{
155 QRegExp re; 162 QRegExp re;
156 163
157 re.setWildcard(true); // most people understand these better. 164 re.setWildcard(true); // most people understand these better.
158 re.setCaseSensitive(false); 165 re.setCaseSensitive(false);
159 re.setPattern(searchEdit->text()); 166 re.setPattern(searchEdit->text());
160 if (!re.isValid() ) { 167 if (!re.isValid() ) {
161 KMessageBox::sorry(this, 168 KMessageBox::sorry(this,
162 i18n("Invalid search expression,\ncannot perform " 169 i18n("Invalid search expression,\ncannot perform "
163 "the search.\nPlease enter a search expression\n" 170 "the search.\nPlease enter a search expression\n"
164 "using the wildcard characters\n '*' and '?'" 171 "using the wildcard characters\n '*' and '?'"
165 "where needed.")); 172 "where needed."));
166 return; 173 return;
167 } 174 }
168 175
169 search(re); 176 search(re);
170 177
171 listView->setStartDate( mStartDate->date() ); 178 listView->setStartDate( mStartDate->date() );
172 listView->showEvents(mMatchedEvents); 179 listView->showEvents(mMatchedEvents);
173 listView->addTodos(mMatchedTodos); 180 listView->addTodos(mMatchedTodos);
174 listView->addJournals(mMatchedJournals); 181 listView->addJournals(mMatchedJournals);
175 182
176 if (mMatchedEvents.count() + mMatchedJournals.count() + mMatchedTodos.count() == 0) { 183 if (mMatchedEvents.count() + mMatchedJournals.count() + mMatchedTodos.count() == 0) {
177 setCaption(i18n("No items found. Use '*' and '?' where needed.")); 184 setCaption(i18n("No items found. Use '*' and '?' where needed."));
178 } else { 185 } else {
179 QString mess; 186 QString mess;
180 mess = mess.sprintf( i18n("%d item(s) found."), mMatchedEvents.count()+ mMatchedJournals.count() + mMatchedTodos.count() ); 187 mess = mess.sprintf( i18n("%d item(s) found."), mMatchedEvents.count()+ mMatchedJournals.count() + mMatchedTodos.count() );
181 setCaption( i18n("KO/Pi Find: ") + mess); 188 setCaption( i18n("KO/Pi Find: ") + mess);
182 189
183 } 190 }
184 searchEdit->setFocus(); 191 searchEdit->setFocus();
185} 192}
186void SearchDialog::updateConfig() 193void SearchDialog::updateConfig()
187{ 194{
188 listView->updateConfig(); 195 listView->updateConfig();
189} 196}
190void SearchDialog::updateView() 197void SearchDialog::updateView()
191{ 198{
192 199
193 QRegExp re; 200 QRegExp re;
194 re.setWildcard(true); // most people understand these better. 201 re.setWildcard(true); // most people understand these better.
195 re.setCaseSensitive(false); 202 re.setCaseSensitive(false);
196 re.setPattern(searchEdit->text()); 203 re.setPattern(searchEdit->text());
197 if (re.isValid()) { 204 if (re.isValid()) {
198 search(re); 205 search(re);
199 } else { 206 } else {
200 mMatchedEvents.clear(); 207 mMatchedEvents.clear();
201 mMatchedTodos.clear(); 208 mMatchedTodos.clear();
202 mMatchedJournals.clear(); 209 mMatchedJournals.clear();
203 } 210 }
204 listView->setStartDate( mStartDate->date() ); 211 listView->setStartDate( mStartDate->date() );
205 listView->showEvents(mMatchedEvents); 212 listView->showEvents(mMatchedEvents);
206 listView->addTodos(mMatchedTodos); 213 listView->addTodos(mMatchedTodos);
207 listView->addJournals(mMatchedJournals); 214 listView->addJournals(mMatchedJournals);
208} 215}
209 216
210void SearchDialog::search(const QRegExp &re) 217void SearchDialog::search(const QRegExp &re)
211{ 218{
212 QPtrList<Event> events = mCalendar->events( mStartDate->date(), 219 QPtrList<Event> events = mCalendar->events( mStartDate->date(),
213 mEndDate->date(), 220 mEndDate->date(),
214 false /*mInclusiveCheck->isChecked()*/ ); 221 false /*mInclusiveCheck->isChecked()*/ );
215 222
216 mMatchedEvents.clear(); 223 mMatchedEvents.clear();
217 if ( mSearchEvent->isChecked() ) { 224 if ( mSearchEvent->isChecked() ) {
218 Event *ev; 225 Event *ev;
219 for(ev=events.first();ev;ev=events.next()) { 226 for(ev=events.first();ev;ev=events.next()) {
220 if (mSummaryCheck->isChecked()) { 227 if (mSummaryCheck->isChecked()) {
221#if QT_VERSION >= 0x030000 228#if QT_VERSION >= 0x030000
222 if (re.search(ev->summary()) != -1) 229 if (re.search(ev->summary()) != -1)
223#else 230#else
224 if (re.match(ev->summary()) != -1) 231 if (re.match(ev->summary()) != -1)
225#endif 232#endif
226 { 233 {
227 mMatchedEvents.append(ev); 234 mMatchedEvents.append(ev);
228 continue; 235 continue;
229 } 236 }
230#if QT_VERSION >= 0x030000 237#if QT_VERSION >= 0x030000
231 if (re.search(ev->location()) != -1) 238 if (re.search(ev->location()) != -1)
232#else 239#else
233 if (re.match(ev->location()) != -1) 240 if (re.match(ev->location()) != -1)
234#endif 241#endif
235 { 242 {
236 mMatchedEvents.append(ev); 243 mMatchedEvents.append(ev);
237 continue; 244 continue;
238 } 245 }
239 } 246 }
240 if (mDescriptionCheck->isChecked()) { 247 if (mDescriptionCheck->isChecked()) {
241#if QT_VERSION >= 0x030000 248#if QT_VERSION >= 0x030000
242 if (re.search(ev->description()) != -1) 249 if (re.search(ev->description()) != -1)
243#else 250#else
244 if (re.match(ev->description()) != -1) 251 if (re.match(ev->description()) != -1)
245#endif 252#endif
246 { 253 {
247 mMatchedEvents.append(ev); 254 mMatchedEvents.append(ev);
248 continue; 255 continue;
249 } 256 }
250 } 257 }
251 if (mCategoryCheck->isChecked()) { 258 if (mCategoryCheck->isChecked()) {
252#if QT_VERSION >= 0x030000 259#if QT_VERSION >= 0x030000
253 if (re.search(ev->categoriesStr()) != -1) 260 if (re.search(ev->categoriesStr()) != -1)
254#else 261#else
255 if (re.match(ev->categoriesStr()) != -1) 262 if (re.match(ev->categoriesStr()) != -1)
256#endif 263#endif
257 { 264 {
258 mMatchedEvents.append(ev); 265 mMatchedEvents.append(ev);
259 continue; 266 continue;
260 } 267 }
261 } 268 }
262 if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) { 269 if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) {
263 QPtrList<Attendee> tmpAList = ev->attendees(); 270 QPtrList<Attendee> tmpAList = ev->attendees();
264 Attendee *a; 271 Attendee *a;
265 for (a = tmpAList.first(); a; a = tmpAList.next()) { 272 for (a = tmpAList.first(); a; a = tmpAList.next()) {
266 if (mSearchAName->isChecked()) { 273 if (mSearchAName->isChecked()) {
267#if QT_VERSION >= 0x030000 274#if QT_VERSION >= 0x030000
268 if (re.search(a->name()) != -1) 275 if (re.search(a->name()) != -1)
269#else 276#else
270 if (re.match(a->name()) != -1) 277 if (re.match(a->name()) != -1)
271#endif 278#endif
272 { 279 {
273 mMatchedEvents.append(ev); 280 mMatchedEvents.append(ev);
274 break; 281 break;
275 } 282 }
276 } 283 }
277 if (mSearchAEmail->isChecked()) { 284 if (mSearchAEmail->isChecked()) {
278#if QT_VERSION >= 0x030000 285#if QT_VERSION >= 0x030000
279 if (re.search(a->email()) != -1) 286 if (re.search(a->email()) != -1)
280#else 287#else
281 if (re.match(a->email()) != -1) 288 if (re.match(a->email()) != -1)
282#endif 289#endif
283 { 290 {
284 mMatchedEvents.append(ev); 291 mMatchedEvents.append(ev);
285 break; 292 break;
286 } 293 }
287 } 294 }
288 } 295 }
289 } 296 }
290 } 297 }
291 } 298 }
292 QPtrList<Todo> todos = mCalendar->todos( ); 299 QPtrList<Todo> todos = mCalendar->todos( );
293 mMatchedTodos.clear(); 300 mMatchedTodos.clear();
294 if ( mSearchTodo->isChecked() ) { 301 if ( mSearchTodo->isChecked() ) {
295 Todo *tod; 302 Todo *tod;
296 for(tod=todos.first();tod;tod=todos.next()) { 303 for(tod=todos.first();tod;tod=todos.next()) {
297 if (mSummaryCheck->isChecked()) { 304 if (mSummaryCheck->isChecked()) {
298#if QT_VERSION >= 0x030000 305#if QT_VERSION >= 0x030000
299 if (re.search(tod->summary()) != -1) 306 if (re.search(tod->summary()) != -1)
300#else 307#else
301 if (re.match(tod->summary()) != -1) 308 if (re.match(tod->summary()) != -1)
302#endif 309#endif
303 { 310 {
304 mMatchedTodos.append(tod); 311 mMatchedTodos.append(tod);
305 continue; 312 continue;
306 } 313 }
307 } 314 }
308 if (mDescriptionCheck->isChecked()) { 315 if (mDescriptionCheck->isChecked()) {
309#if QT_VERSION >= 0x030000 316#if QT_VERSION >= 0x030000
310 if (re.search(tod->description()) != -1) 317 if (re.search(tod->description()) != -1)
311#else 318#else
312 if (re.match(tod->description()) != -1) 319 if (re.match(tod->description()) != -1)
313#endif 320#endif
314 { 321 {
315 mMatchedTodos.append(tod); 322 mMatchedTodos.append(tod);
316 continue; 323 continue;
317 } 324 }
318 } 325 }
319 if (mCategoryCheck->isChecked()) { 326 if (mCategoryCheck->isChecked()) {
320#if QT_VERSION >= 0x030000 327#if QT_VERSION >= 0x030000
321 if (re.search(tod->categoriesStr()) != -1) 328 if (re.search(tod->categoriesStr()) != -1)
322#else 329#else
323 if (re.match(tod->categoriesStr()) != -1) 330 if (re.match(tod->categoriesStr()) != -1)
324#endif 331#endif
325 { 332 {
326 mMatchedTodos.append(tod); 333 mMatchedTodos.append(tod);
327 continue; 334 continue;
328 } 335 }
329 } 336 }
330 if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) { 337 if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) {
331 QPtrList<Attendee> tmpAList = tod->attendees(); 338 QPtrList<Attendee> tmpAList = tod->attendees();
332 Attendee *a; 339 Attendee *a;
333 for (a = tmpAList.first(); a; a = tmpAList.next()) { 340 for (a = tmpAList.first(); a; a = tmpAList.next()) {
334 if (mSearchAName->isChecked()) { 341 if (mSearchAName->isChecked()) {
335#if QT_VERSION >= 0x030000 342#if QT_VERSION >= 0x030000
336 if (re.search(a->name()) != -1) 343 if (re.search(a->name()) != -1)
337#else 344#else
338 if (re.match(a->name()) != -1) 345 if (re.match(a->name()) != -1)
339#endif 346#endif
340 { 347 {
341 mMatchedTodos.append(tod); 348 mMatchedTodos.append(tod);
342 break; 349 break;
343 } 350 }
344 } 351 }
345 if (mSearchAEmail->isChecked()) { 352 if (mSearchAEmail->isChecked()) {
346#if QT_VERSION >= 0x030000 353#if QT_VERSION >= 0x030000
347 if (re.search(a->email()) != -1) 354 if (re.search(a->email()) != -1)
348#else 355#else
349 if (re.match(a->email()) != -1) 356 if (re.match(a->email()) != -1)
350#endif 357#endif
351 { 358 {
352 mMatchedTodos.append(tod); 359 mMatchedTodos.append(tod);
353 break; 360 break;
354 } 361 }
355 } 362 }
356 } 363 }
357 } 364 }
358 } 365 }
359 } 366 }
360 mMatchedJournals.clear(); 367 mMatchedJournals.clear();
361 if (mSearchJournal->isChecked() ) { 368 if (mSearchJournal->isChecked() ) {
362 QPtrList<Journal> journals = mCalendar->journals( ); 369 QPtrList<Journal> journals = mCalendar->journals( );
363 Journal* journ; 370 Journal* journ;
364 371
365 for(journ=journals.first();journ;journ=journals.next()) { 372 for(journ=journals.first();journ;journ=journals.next()) {
366 if ( journ->dtStart().date() <= mEndDate->date() 373 if ( journ->dtStart().date() <= mEndDate->date()
367 &&journ->dtStart().date() >= mStartDate->date()) { 374 &&journ->dtStart().date() >= mStartDate->date()) {
368#if QT_VERSION >= 0x030000 375#if QT_VERSION >= 0x030000
369 if (re.search(journ->description()) != -1) 376 if (re.search(journ->description()) != -1)
370#else 377#else
371 if (re.match(journ->description()) != -1) 378 if (re.match(journ->description()) != -1)
372#endif 379#endif
373 { 380 {
374 mMatchedJournals.append(journ); 381 mMatchedJournals.append(journ);
375 continue; 382 continue;
376 } 383 }
377 } 384 }
378 } 385 }
379 } 386 }
380 387
381} 388}
382 389
383void SearchDialog::keyPressEvent ( QKeyEvent *e) 390void SearchDialog::keyPressEvent ( QKeyEvent *e)
384{ 391{
385 switch ( e->key() ) { 392 switch ( e->key() ) {
386 case Qt::Key_Escape: 393 case Qt::Key_Escape:
387 hide(); 394 hide();
388 break; 395 break;
389 case Qt::Key_F: 396 case Qt::Key_F:
390 if ( e->state() == Qt::ControlButton ) { 397 if ( e->state() == Qt::ControlButton ) {
391 qDebug("full "); 398 qDebug("full ");
392 399
393 } 400 }
394 break; 401 break;
395 case Qt::Key_Return: 402 case Qt::Key_Return:
396 case Qt::Key_Enter: 403 case Qt::Key_Enter:
397 doSearch(); 404 doSearch();
398 break; 405 break;
399 406
400 default: 407 default:
401 e->ignore(); 408 e->ignore();
402 } 409 }
403} 410}
404 411
405//mMatchedJournals; 412//mMatchedJournals;
diff --git a/korganizer/searchdialog.h b/korganizer/searchdialog.h
index f4aad9e..b730ed5 100644
--- a/korganizer/searchdialog.h
+++ b/korganizer/searchdialog.h
@@ -1,92 +1,94 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 1998 Preston Brown 3 Copyright (c) 1998 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#ifndef SEARCHDIALOG_H 24#ifndef SEARCHDIALOG_H
25#define SEARCHDIALOG_H 25#define SEARCHDIALOG_H
26 26
27#include <qregexp.h> 27#include <qregexp.h>
28 28
29#include <kdialogbase.h> 29#include <kdialogbase.h>
30#include <qvbox.h> 30#include <qvbox.h>
31 31
32#include <libkcal/calendar.h> 32#include <libkcal/calendar.h>
33 33
34#include "kolistview.h" 34#include "kolistview.h"
35 35
36class KDateEdit; 36class KDateEdit;
37class QCheckBox; 37class QCheckBox;
38class QLineEdit; 38class QLineEdit;
39class KLineEdit;
39class QLabel; 40class QLabel;
40class CalendarView; 41class CalendarView;
41 42
42using namespace KCal; 43using namespace KCal;
43class SearchDialog : public QVBox 44class SearchDialog : public QVBox
44{ 45{
45 Q_OBJECT 46 Q_OBJECT
46 public: 47 public:
47 SearchDialog(Calendar *calendar,CalendarView *parent=0); 48 SearchDialog(Calendar *calendar,CalendarView *parent=0);
48 virtual ~SearchDialog(); 49 virtual ~SearchDialog();
49 KOListView *listview(){ return listView;} 50 KOListView *listview(){ return listView;}
50 void updateView(); 51 void updateView();
51 52
52 public slots: 53 public slots:
53 void changeEventDisplay(Event *, int) { updateView(); } 54 void changeEventDisplay(Event *, int) { updateView(); }
54 void updateConfig(); 55 void updateConfig();
55 void updateList(); 56 void updateList();
56 protected slots: 57 protected slots:
58 void setFocusToList();
57 void accept(); 59 void accept();
58 void doSearch(); 60 void doSearch();
59 void searchTextChanged( const QString &_text ); 61 void searchTextChanged( const QString &_text );
60 62
61 signals: 63 signals:
62 void showEventSignal(Event *); 64 void showEventSignal(Event *);
63 void editEventSignal(Event *); 65 void editEventSignal(Event *);
64 void deleteEventSignal(Event *); 66 void deleteEventSignal(Event *);
65 67
66 private: 68 private:
67 void search(const QRegExp &); 69 void search(const QRegExp &);
68 70
69 Calendar *mCalendar; 71 Calendar *mCalendar;
70 72
71 QPtrList<Event> mMatchedEvents; 73 QPtrList<Event> mMatchedEvents;
72 QPtrList<Todo> mMatchedTodos; 74 QPtrList<Todo> mMatchedTodos;
73 QPtrList<Journal> mMatchedJournals; 75 QPtrList<Journal> mMatchedJournals;
74 76
75 QLabel *searchLabel; 77 QLabel *searchLabel;
76 QLineEdit *searchEdit; 78 KLineEdit *searchEdit;
77 KOListView *listView; 79 KOListView *listView;
78 80
79 KDateEdit *mStartDate; 81 KDateEdit *mStartDate;
80 KDateEdit *mEndDate; 82 KDateEdit *mEndDate;
81 QCheckBox *mSummaryCheck; 83 QCheckBox *mSummaryCheck;
82 QCheckBox *mDescriptionCheck; 84 QCheckBox *mDescriptionCheck;
83 QCheckBox *mCategoryCheck; 85 QCheckBox *mCategoryCheck;
84 QCheckBox *mSearchEvent; 86 QCheckBox *mSearchEvent;
85 QCheckBox *mSearchTodo; 87 QCheckBox *mSearchTodo;
86 QCheckBox *mSearchJournal; 88 QCheckBox *mSearchJournal;
87 QCheckBox *mSearchAName; 89 QCheckBox *mSearchAName;
88 QCheckBox *mSearchAEmail; 90 QCheckBox *mSearchAEmail;
89 void keyPressEvent ( QKeyEvent *e) ; 91 void keyPressEvent ( QKeyEvent *e) ;
90}; 92};
91 93
92#endif 94#endif
diff --git a/microkde/kdialogbase.cpp b/microkde/kdialogbase.cpp
index 801094a..f453331 100644
--- a/microkde/kdialogbase.cpp
+++ b/microkde/kdialogbase.cpp
@@ -1,292 +1,294 @@
1#include <qtabwidget.h> 1#include <qtabwidget.h>
2#include <qpushbutton.h> 2#include <qpushbutton.h>
3#include <qlayout.h> 3#include <qlayout.h>
4#include <qframe.h> 4#include <qframe.h>
5 5
6 6
7#include "klocale.h" 7#include "klocale.h"
8#include "kdebug.h" 8#include "kdebug.h"
9 9
10#include "kdialogbase.h" 10#include "kdialogbase.h"
11 11
12KDialogBase::KDialogBase() 12KDialogBase::KDialogBase()
13{ 13{
14} 14}
15 15
16KDialogBase::KDialogBase( QWidget *parent, const char *name, bool modal, 16KDialogBase::KDialogBase( QWidget *parent, const char *name, bool modal,
17 const QString &caption, 17 const QString &caption,
18 int buttonMask, ButtonCode defaultButton, 18 int buttonMask, ButtonCode defaultButton,
19 bool separator, 19 bool separator,
20 const QString &user1, 20 const QString &user1,
21 const QString &user2, 21 const QString &user2,
22 const QString &user3) : 22 const QString &user3) :
23 KDialog( parent, name, modal ) 23 KDialog( parent, name, modal )
24{ 24{
25 init( caption, buttonMask, user1, user2 ); 25 init( caption, buttonMask, user1, user2 );
26 if (findButton( defaultButton ) ) { 26 if (findButton( defaultButton ) ) {
27 (findButton( defaultButton ) )->setFocus(); 27 (findButton( defaultButton ) )->setFocus();
28 (findButton( defaultButton ) )->setDefault( true ); 28 (findButton( defaultButton ) )->setDefault( true );
29 } 29 }
30 30
31} 31}
32 32
33KDialogBase::KDialogBase( int dialogFace, const QString &caption, 33KDialogBase::KDialogBase( int dialogFace, const QString &caption,
34 int buttonMask, ButtonCode defaultButton, 34 int buttonMask, ButtonCode defaultButton,
35 QWidget *parent, const char *name, bool modal, 35 QWidget *parent, const char *name, bool modal,
36 bool separator, 36 bool separator,
37 const QString &user1, 37 const QString &user1,
38 const QString &user2, 38 const QString &user2,
39 const QString &user3) : 39 const QString &user3) :
40 KDialog( parent, name, modal ) 40 KDialog( parent, name, modal )
41{ 41{
42 init( caption, buttonMask, user1, user2 ); 42 init( caption, buttonMask, user1, user2 );
43 if (findButton( defaultButton ) ) 43 if (findButton( defaultButton ) ) {
44 (findButton( defaultButton ) )->setFocus(); 44 (findButton( defaultButton ) )->setFocus();
45 (findButton( defaultButton ) )->setDefault( true );
46 }
45 47
46} 48}
47 49
48KDialogBase::~KDialogBase() 50KDialogBase::~KDialogBase()
49{ 51{
50} 52}
51 53
52void KDialogBase::init( const QString &caption, int buttonMask, 54void KDialogBase::init( const QString &caption, int buttonMask,
53 const QString &user1 ,const QString &user2 ) 55 const QString &user1 ,const QString &user2 )
54{ 56{
55 mMainWidget = 0; 57 mMainWidget = 0;
56 mTabWidget = 0; 58 mTabWidget = 0;
57 mPlainPage = 0; 59 mPlainPage = 0;
58 mTopLayout = 0; 60 mTopLayout = 0;
59 if ( !caption.isEmpty() ) { 61 if ( !caption.isEmpty() ) {
60 setCaption( caption ); 62 setCaption( caption );
61 } 63 }
62 64
63 if ( buttonMask & User1 ) { 65 if ( buttonMask & User1 ) {
64 mUser1Button = new QPushButton( user1, this ); 66 mUser1Button = new QPushButton( user1, this );
65 connect( mUser1Button, SIGNAL( clicked() ), SLOT( slotUser1() ) ); 67 connect( mUser1Button, SIGNAL( clicked() ), SLOT( slotUser1() ) );
66 } else { 68 } else {
67 mUser1Button = 0; 69 mUser1Button = 0;
68 } 70 }
69 if ( buttonMask & User2 ) { 71 if ( buttonMask & User2 ) {
70 mUser2Button = new QPushButton( user2, this ); 72 mUser2Button = new QPushButton( user2, this );
71 connect( mUser2Button, SIGNAL( clicked() ), SLOT( slotUser2() ) ); 73 connect( mUser2Button, SIGNAL( clicked() ), SLOT( slotUser2() ) );
72 } else { 74 } else {
73 mUser2Button = 0; 75 mUser2Button = 0;
74 } 76 }
75 77
76 if ( buttonMask & Ok ) { 78 if ( buttonMask & Ok ) {
77 mOkButton = new QPushButton( i18n("Ok"), this ); 79 mOkButton = new QPushButton( i18n("Ok"), this );
78 connect( mOkButton, SIGNAL( clicked() ), SLOT( slotOk() ) ); 80 connect( mOkButton, SIGNAL( clicked() ), SLOT( slotOk() ) );
79 mOkButton->setDefault( true ); 81 //mOkButton->setDefault( true );
80 } else { 82 } else {
81 mOkButton = 0; 83 mOkButton = 0;
82 } 84 }
83 if ( buttonMask & Default ) { 85 if ( buttonMask & Default ) {
84 mDefaultButton = new QPushButton( i18n("Default"), this ); 86 mDefaultButton = new QPushButton( i18n("Default"), this );
85 connect( mDefaultButton, SIGNAL( clicked() ), SIGNAL( defaultClicked() ) ); 87 connect( mDefaultButton, SIGNAL( clicked() ), SIGNAL( defaultClicked() ) );
86 } else { 88 } else {
87 mDefaultButton = 0; 89 mDefaultButton = 0;
88 } 90 }
89 91
90 if ( buttonMask & Apply ) { 92 if ( buttonMask & Apply ) {
91 mApplyButton = new QPushButton( i18n("Apply"), this ); 93 mApplyButton = new QPushButton( i18n("Apply"), this );
92 connect( mApplyButton, SIGNAL( clicked() ), SLOT( slotApply() ) ); 94 connect( mApplyButton, SIGNAL( clicked() ), SLOT( slotApply() ) );
93 } else { 95 } else {
94 mApplyButton = 0; 96 mApplyButton = 0;
95 } 97 }
96 98
97 if ( buttonMask & Cancel ) { 99 if ( buttonMask & Cancel ) {
98 mCancelButton = new QPushButton( i18n("Cancel"), this ); 100 mCancelButton = new QPushButton( i18n("Cancel"), this );
99 connect( mCancelButton, SIGNAL( clicked() ), SLOT( slotCancel() ) ); 101 connect( mCancelButton, SIGNAL( clicked() ), SLOT( slotCancel() ) );
100 } else { 102 } else {
101 mCancelButton = 0; 103 mCancelButton = 0;
102 } 104 }
103 105
104 if ( buttonMask & Close ) { 106 if ( buttonMask & Close ) {
105 mCloseButton = new QPushButton( i18n("Close"), this ); 107 mCloseButton = new QPushButton( i18n("Close"), this );
106 connect( mCloseButton, SIGNAL( clicked() ), SLOT( slotClose() ) ); 108 connect( mCloseButton, SIGNAL( clicked() ), SLOT( slotClose() ) );
107 } else { 109 } else {
108 mCloseButton = 0; 110 mCloseButton = 0;
109 } 111 }
110} 112}
111 113
112QTabWidget *KDialogBase::tabWidget() 114QTabWidget *KDialogBase::tabWidget()
113{ 115{
114 if ( !mTabWidget ) { 116 if ( !mTabWidget ) {
115 mTabWidget = new QTabWidget( this ); 117 mTabWidget = new QTabWidget( this );
116 setMainWidget( mTabWidget ); 118 setMainWidget( mTabWidget );
117 } 119 }
118 return mTabWidget; 120 return mTabWidget;
119} 121}
120 122
121void KDialogBase::hideButtons() 123void KDialogBase::hideButtons()
122{ 124{
123 if ( mUser1Button ) mUser1Button->hide() ; 125 if ( mUser1Button ) mUser1Button->hide() ;
124 if ( mUser2Button ) mUser2Button->hide() ; 126 if ( mUser2Button ) mUser2Button->hide() ;
125 if ( mOkButton ) mOkButton->hide() ; 127 if ( mOkButton ) mOkButton->hide() ;
126 if ( mApplyButton ) mApplyButton->hide() ; 128 if ( mApplyButton ) mApplyButton->hide() ;
127 if ( mDefaultButton ) mDefaultButton->hide(); 129 if ( mDefaultButton ) mDefaultButton->hide();
128 if ( mCancelButton ) mCancelButton->hide() ; 130 if ( mCancelButton ) mCancelButton->hide() ;
129 if ( mCloseButton ) mCloseButton->hide() ; 131 if ( mCloseButton ) mCloseButton->hide() ;
130 132
131} 133}
132void KDialogBase::initLayout() 134void KDialogBase::initLayout()
133{ 135{
134 136
135 delete mTopLayout; 137 delete mTopLayout;
136 mTopLayout = new QVBoxLayout( this ); 138 mTopLayout = new QVBoxLayout( this );
137 mTopLayout->setMargin( marginHint() ); 139 mTopLayout->setMargin( marginHint() );
138 mTopLayout->setSpacing( spacingHint() ); 140 mTopLayout->setSpacing( spacingHint() );
139 141
140 mTopLayout->addWidget( mMainWidget ); 142 mTopLayout->addWidget( mMainWidget );
141 143
142 QBoxLayout *buttonLayout = new QHBoxLayout; 144 QBoxLayout *buttonLayout = new QHBoxLayout;
143 mTopLayout->addLayout( buttonLayout ); 145 mTopLayout->addLayout( buttonLayout );
144 146
145 if ( mUser1Button ) buttonLayout->addWidget( mUser1Button ); 147 if ( mUser1Button ) buttonLayout->addWidget( mUser1Button );
146 if ( mUser2Button ) buttonLayout->addWidget( mUser2Button ); 148 if ( mUser2Button ) buttonLayout->addWidget( mUser2Button );
147 if ( mOkButton ) buttonLayout->addWidget( mOkButton ); 149 if ( mOkButton ) buttonLayout->addWidget( mOkButton );
148 if ( mApplyButton ) buttonLayout->addWidget( mApplyButton ); 150 if ( mApplyButton ) buttonLayout->addWidget( mApplyButton );
149 if ( mDefaultButton ) buttonLayout->addWidget( mDefaultButton ); 151 if ( mDefaultButton ) buttonLayout->addWidget( mDefaultButton );
150 if ( mCancelButton ) buttonLayout->addWidget( mCancelButton ); 152 if ( mCancelButton ) buttonLayout->addWidget( mCancelButton );
151 if ( mCloseButton ) buttonLayout->addWidget( mCloseButton ); 153 if ( mCloseButton ) buttonLayout->addWidget( mCloseButton );
152} 154}
153 155
154QFrame *KDialogBase::addPage( const QString &name ) 156QFrame *KDialogBase::addPage( const QString &name )
155{ 157{
156// kdDebug() << "KDialogBase::addPage(): " << name << endl; 158// kdDebug() << "KDialogBase::addPage(): " << name << endl;
157 QFrame *frame = new QFrame( tabWidget() ); 159 QFrame *frame = new QFrame( tabWidget() );
158 tabWidget()->addTab( frame, name ); 160 tabWidget()->addTab( frame, name );
159 return frame; 161 return frame;
160} 162}
161 163
162QFrame *KDialogBase::addPage( const QString &name, int, const QPixmap & ) 164QFrame *KDialogBase::addPage( const QString &name, int, const QPixmap & )
163{ 165{
164 return addPage( name ); 166 return addPage( name );
165} 167}
166 168
167 169
168void KDialogBase::setMainWidget( QWidget *widget ) 170void KDialogBase::setMainWidget( QWidget *widget )
169{ 171{
170 kdDebug() << "KDialogBase::setMainWidget()" << endl; 172 kdDebug() << "KDialogBase::setMainWidget()" << endl;
171 173
172 mMainWidget = widget; 174 mMainWidget = widget;
173 initLayout(); 175 initLayout();
174} 176}
175 177
176void KDialogBase::setButtonText( ButtonCode id, const QString &text ) 178void KDialogBase::setButtonText( ButtonCode id, const QString &text )
177{ 179{
178 QPushButton *button = findButton( id ); 180 QPushButton *button = findButton( id );
179 if ( button ) { 181 if ( button ) {
180 button->setText( text ); 182 button->setText( text );
181 } 183 }
182} 184}
183 185
184void KDialogBase::enableButton( ButtonCode id, bool state ) 186void KDialogBase::enableButton( ButtonCode id, bool state )
185{ 187{
186 QPushButton *button = findButton( id ); 188 QPushButton *button = findButton( id );
187 if ( button ) { 189 if ( button ) {
188 button->setEnabled( state ); 190 button->setEnabled( state );
189 } 191 }
190} 192}
191 193
192QPushButton *KDialogBase::findButton( ButtonCode id ) 194QPushButton *KDialogBase::findButton( ButtonCode id )
193{ 195{
194 QPushButton *button = 0; 196 QPushButton *button = 0;
195 switch ( id ) { 197 switch ( id ) {
196 case Ok: 198 case Ok:
197 button = mOkButton; 199 button = mOkButton;
198 break; 200 break;
199 case Apply: 201 case Apply:
200 button = mApplyButton; 202 button = mApplyButton;
201 break; 203 break;
202 case User1: 204 case User1:
203 button = mUser1Button; 205 button = mUser1Button;
204 break; 206 break;
205 case User2: 207 case User2:
206 button = mUser2Button; 208 button = mUser2Button;
207 break; 209 break;
208 case Cancel: 210 case Cancel:
209 button = mCancelButton; 211 button = mCancelButton;
210 break; 212 break;
211 case Default: 213 case Default:
212 button = mDefaultButton; 214 button = mDefaultButton;
213 break; 215 break;
214 case Close: 216 case Close:
215 button = mCloseButton; 217 button = mCloseButton;
216 break; 218 break;
217 default: 219 default:
218 break; 220 break;
219 } 221 }
220 return button; 222 return button;
221} 223}
222 224
223void KDialogBase::enableButtonOK( bool state ) 225void KDialogBase::enableButtonOK( bool state )
224{ 226{
225 enableButton( Ok, state ); 227 enableButton( Ok, state );
226} 228}
227 229
228void KDialogBase::enableButtonApply( bool state ) 230void KDialogBase::enableButtonApply( bool state )
229{ 231{
230 enableButton( Apply, state ); 232 enableButton( Apply, state );
231} 233}
232 234
233void KDialogBase::showButton( ButtonCode id, bool show ) 235void KDialogBase::showButton( ButtonCode id, bool show )
234{ 236{
235 QPushButton *button = findButton( id ); 237 QPushButton *button = findButton( id );
236 if ( button ) { 238 if ( button ) {
237 if ( show ) button->show(); 239 if ( show ) button->show();
238 else button->hide(); 240 else button->hide();
239 } 241 }
240} 242}
241 243
242int KDialogBase::pageIndex( QWidget *widget ) const 244int KDialogBase::pageIndex( QWidget *widget ) const
243{ 245{
244 return 0; 246 return 0;
245} 247}
246 248
247 249
248bool KDialogBase::showPage( int index ) 250bool KDialogBase::showPage( int index )
249{ 251{
250 tabWidget()->setCurrentPage( index );return false; 252 tabWidget()->setCurrentPage( index );return false;
251} 253}
252 254
253QFrame *KDialogBase::plainPage() 255QFrame *KDialogBase::plainPage()
254{ 256{
255 if ( !mPlainPage ) { 257 if ( !mPlainPage ) {
256 mPlainPage = new QFrame( this ); 258 mPlainPage = new QFrame( this );
257 setMainWidget( mPlainPage ); 259 setMainWidget( mPlainPage );
258 } 260 }
259 return mPlainPage; 261 return mPlainPage;
260} 262}
261 263
262void KDialogBase::slotOk() 264void KDialogBase::slotOk()
263{ 265{
264 emit okClicked(); 266 emit okClicked();
265 accept(); 267 accept();
266} 268}
267 269
268void KDialogBase::slotApply() 270void KDialogBase::slotApply()
269{ 271{
270 emit applyClicked(); 272 emit applyClicked();
271} 273}
272 274
273void KDialogBase::slotCancel() 275void KDialogBase::slotCancel()
274{ 276{
275 emit cancelClicked(); 277 emit cancelClicked();
276 reject(); 278 reject();
277} 279}
278 280
279void KDialogBase::slotClose() 281void KDialogBase::slotClose()
280{ 282{
281 emit closeClicked(); 283 emit closeClicked();
282 reject(); 284 reject();
283} 285}
284 286
285void KDialogBase::slotUser1() 287void KDialogBase::slotUser1()
286{ 288{
287 emit user1Clicked(); 289 emit user1Clicked();
288} 290}
289void KDialogBase::slotUser2() 291void KDialogBase::slotUser2()
290{ 292{
291 emit user2Clicked(); 293 emit user2Clicked();
292} 294}
diff --git a/version b/version
index e90e80d..0ec83d8 100644
--- a/version
+++ b/version
@@ -1 +1 @@
version = "2.0.12"; version = "2.0.13";