summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt8
-rw-r--r--korganizer/kotodoview.cpp6
2 files changed, 14 insertions, 0 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 7e5240c..6c9daad 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,829 +1,837 @@
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 3
4********** VERSION 2.0.1 ************ 4********** VERSION 2.0.1 ************
5 5
6Oooops ... I forgot to test on the Zaurus 5500 ... 6Oooops ... I forgot to test on the Zaurus 5500 ...
7 7
8Fixed many problems of new (english) strings (and german translations) 8Fixed many problems of new (english) strings (and german translations)
9introduced in the latest versions, where the text was not fitting on the 9introduced in the latest versions, where the text was not fitting on the
10240x320 display of the Zaurus 5500. 10240x320 display of the Zaurus 5500.
11 11
12Added a popup menu ( press pen and hold to get popup ) to the agenda view
13with may useful items.
14
15Added items to the todolist popup menu for:
16Display all opened, all closed or all todos flat.
17The "flat" view makes is possible to sort all todos after ,e.g., prio or date.
18
19
12********** VERSION 2.0.0 ************ 20********** VERSION 2.0.0 ************
13 21
14Stable release 2.0.0! 22Stable release 2.0.0!
15 23
16KO/Pi: 24KO/Pi:
17Fixed problem in edit dialog recreation at startup. 25Fixed problem in edit dialog recreation at startup.
18Made "toggle view*" menu items enabled context sensitive. 26Made "toggle view*" menu items enabled context sensitive.
19Changed agenda size menu to items 1-10. 27Changed agenda size menu to items 1-10.
20Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down. 28Made it possible to change agenda size quickly by pressing mouse on timelabels in agenda view and move mouse up/down.
21Usebility enhancements in the KO/Pi menus. 29Usebility enhancements in the KO/Pi menus.
22Birthday import now adds year to summary. 30Birthday import now adds year to summary.
23What's Next view shows age in years for birthday. 31What's Next view shows age in years for birthday.
24 32
25OM/Pi: 33OM/Pi:
26Added three info lines to display subject, from and to of selected mails. 34Added three info lines to display subject, from and to of selected mails.
27 35
28KA/Pi: 36KA/Pi:
29Fixed jump bar behaviour on Zaurus. 37Fixed jump bar behaviour on Zaurus.
30Now KA/Pi search field supports searching for a range of starting characters. 38Now KA/Pi search field supports searching for a range of starting characters.
31E.g. to search for all contact beginning with b to n, type 39E.g. to search for all contact beginning with b to n, type
32b-n 40b-n
33in the search field. 41in the search field.
34 42
35********** VERSION 1.9.20 ************ 43********** VERSION 1.9.20 ************
36 44
37KO/Pi: 45KO/Pi:
38Added for the "dislplay one day" agenda mode 46Added for the "dislplay one day" agenda mode
39info in the caption and in the day lables: 47info in the caption and in the day lables:
40Now it is displayed, if the selected day is from "day before yesterday" 48Now it is displayed, if the selected day is from "day before yesterday"
41to "day after tomorrow". 49to "day after tomorrow".
42Made it possible to delete a Todo, which has sub-todos. 50Made it possible to delete a Todo, which has sub-todos.
43Fixed two small problems in the todo view. 51Fixed two small problems in the todo view.
44Added missing German translation for filter edit and print dialog. 52Added missing German translation for filter edit and print dialog.
45Made search dialog closeable by cancel key. 53Made search dialog closeable by cancel key.
46 54
47Made it possible to select in the date picker the (ligt grey ) 55Made it possible to select in the date picker the (ligt grey )
48dates of the prev./next month with the mouse. 56dates of the prev./next month with the mouse.
49 57
50OM/Pi: 58OM/Pi:
51"Delete mail" icon in main window now deletes all selected mails. 59"Delete mail" icon in main window now deletes all selected mails.
52Fixed the problem, that the state flag of imap mails was ignored. 60Fixed the problem, that the state flag of imap mails was ignored.
53Now mails with "FLAG_SEEN" on the imap server get no icon in the list view 61Now mails with "FLAG_SEEN" on the imap server get no icon in the list view
54to indecate that they are already seen. 62to indecate that they are already seen.
55Fixed the problem that the body of some mails was not displayed in the 63Fixed the problem that the body of some mails was not displayed in the
56mail viewer when fetching them from the imap server directly to read them. 64mail viewer when fetching them from the imap server directly to read them.
57Made it (configurable) possible to show the "To:" field in the list view. 65Made it (configurable) possible to show the "To:" field in the list view.
58Added to the mail viewer the option "View Source" to make it possible to see the raw mail data. 66Added to the mail viewer the option "View Source" to make it possible to see the raw mail data.
59Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the 67Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the
60local storage folder (specified in account settings) of the account of the mail. 68local storage folder (specified in account settings) of the account of the mail.
61Removed some memory leaks in OM/Pi. 69Removed some memory leaks in OM/Pi.
62 70
63 71
64********** VERSION 1.9.19 ************ 72********** VERSION 1.9.19 ************
65 73
66Added a lot of missing translations to KA/Pi, 74Added a lot of missing translations to KA/Pi,
67Added some missing translations to KO/Pi and OM/Pi. 75Added some missing translations to KO/Pi and OM/Pi.
68 76
69Fixed some minor problems in KA/Pi + KO/Pi. 77Fixed some minor problems in KA/Pi + KO/Pi.
70 78
71Fixed a crash when closing PwM/Pi. 79Fixed a crash when closing PwM/Pi.
72Added German translation for PwM/Pi. 80Added German translation for PwM/Pi.
73 81
74Made view change and Month View update faster in KO/Pi. 82Made view change and Month View update faster in KO/Pi.
75 83
76 84
77********** VERSION 1.9.18 ************ 85********** VERSION 1.9.18 ************
78 86
79FYI: The VERSION 1.9.17 was a testing release only. 87FYI: The VERSION 1.9.17 was a testing release only.
80Please read the changelog of VERSION 1.9.17 as well. 88Please read the changelog of VERSION 1.9.17 as well.
81 89
82Cleaned up the syncing config dialog. 90Cleaned up the syncing config dialog.
83Added sync config options for date range for events. 91Added sync config options for date range for events.
84Added sync config options for filters on incoming data. 92Added sync config options for filters on incoming data.
85Added sync config options for filters on outgoing data. 93Added sync config options for filters on outgoing data.
86Please read the updated SyncHowTo about the new filter settings. 94Please read the updated SyncHowTo about the new filter settings.
87These filter settings make it now possible to sync with shared 95These filter settings make it now possible to sync with shared
88calendars without writing back private or confidential data 96calendars without writing back private or confidential data
89(via the outgoing filters). 97(via the outgoing filters).
90To sync only with particular parts of a shared calendar, 98To sync only with particular parts of a shared calendar,
91the incoming filter settings can be used. 99the incoming filter settings can be used.
92An example can be found in the SyncHowTo. 100An example can be found in the SyncHowTo.
93Same for shared addressbooks. 101Same for shared addressbooks.
94 102
95Added a setting for the global kdepim data storage. 103Added a setting for the global kdepim data storage.
96Usually the data is stored in (yourhomedir/kdepim). 104Usually the data is stored in (yourhomedir/kdepim).
97Now you can set in the Global config dialog TAB, subTAB "Data storage path" 105Now you can set in the Global config dialog TAB, subTAB "Data storage path"
98a directory where all the kdepim data is stored. 106a directory where all the kdepim data is stored.
99That makes it easy to save all kdepim data on a SD card on the Z, for example. 107That makes it easy to save all kdepim data on a SD card on the Z, for example.
100 108
101KO/Pi: 109KO/Pi:
102The timeedit input has a pulldown list for times. 110The timeedit input has a pulldown list for times.
103If opened, this pulldown list should now has the right time highlighted. 111If opened, this pulldown list should now has the right time highlighted.
104Added the possibility to exclude events/todos/journals in a filter. 112Added the possibility to exclude events/todos/journals in a filter.
105You should exclude journals, if you do not want them to sync with a public calendar. 113You should exclude journals, if you do not want them to sync with a public calendar.
106 114
107KA/Pi: 115KA/Pi:
108Added the possibility to in/exclude public/private/confidential contacts to a filter. 116Added the possibility to in/exclude public/private/confidential contacts to a filter.
109If 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 ... 117If 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 ...
110Added printing of card view and details view on desktop. 118Added printing of card view and details view on desktop.
111Printing of list view is not working... 119Printing of list view is not working...
112Added button for removing pictures in contact editor. 120Added button for removing pictures in contact editor.
113Parsing data fix of KA/Pi version 1.9.17. 121Parsing data fix of KA/Pi version 1.9.17.
114Fixed the "parse name automatically" problem of KA/Pi version 1.9.17. 122Fixed the "parse name automatically" problem of KA/Pi version 1.9.17.
115Fixed some syncing merging problems. 123Fixed some syncing merging problems.
116 124
117 125
118********** VERSION 1.9.17 ************ 126********** VERSION 1.9.17 ************
119 127
120KO/Pi: 128KO/Pi:
121Fixed that tooltips were not updated after moving an item in agenda view. 129Fixed that tooltips were not updated after moving an item in agenda view.
122Fixed a bug in sorting start date for recurring events in list view. 130Fixed a bug in sorting start date for recurring events in list view.
123Changed the left button in todo viewer from "Agenda" to "Set completed". 131Changed the left button in todo viewer from "Agenda" to "Set completed".
124This 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. 132This 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.
125Added more info in the todo viewer: Startdate, parent/sub todos. 133Added more info in the todo viewer: Startdate, parent/sub todos.
126 134
127 135
128KA/Pi: 136KA/Pi:
129All fields search does now actually search all the (possible) fields, 137All fields search does now actually search all the (possible) fields,
130not only those listed in the contact list. 138not only those listed in the contact list.
131Made is possible to inline a picture in a vcard on the Z. 139Made is possible to inline a picture in a vcard on the Z.
132This was only possible on the desktop, now is it possible on the Z as well. 140This was only possible on the desktop, now is it possible on the Z as well.
133Fixed of missing save settings after filter configuration. 141Fixed of missing save settings after filter configuration.
134Made saving of addressbook much faster. 142Made saving of addressbook much faster.
135Fixed extension widget layout problem. 143Fixed extension widget layout problem.
136Fixed saving of default formatted name settings. 144Fixed saving of default formatted name settings.
137Fixed formatted name handling in edit dialog. 145Fixed formatted name handling in edit dialog.
138Added an option for changing formatted names of many contacts 146Added an option for changing formatted names of many contacts
139(menu: File - Change - Set formatted name). 147(menu: File - Change - Set formatted name).
140 148
141QWhatsThis was not working on the Z ( only black rectangle was shown). 149QWhatsThis was not working on the Z ( only black rectangle was shown).
142This is Fixed. 150This is Fixed.
143 151
144KDE-Sync: 152KDE-Sync:
145Now readonly KDE resources are synced as well. 153Now readonly KDE resources are synced as well.
146(They are not changed in KDE itself, of course). 154(They are not changed in KDE itself, of course).
147 155
148 156
149 157
150********** VERSION 1.9.16 ************ 158********** VERSION 1.9.16 ************
151 159
152KO/Pi: 160KO/Pi:
153Fixed search dialog size on Z 6000 (480x640 display). 161Fixed search dialog size on Z 6000 (480x640 display).
154Added setting to hide/show time in agenda items. 162Added setting to hide/show time in agenda items.
155Added setting to hide not running todos in todo view. 163Added setting to hide not running todos in todo view.
156Added columns for start date/time in todo view. 164Added columns for start date/time in todo view.
157Replaced the solid half-hour lines in agenda view by dot lines. 165Replaced the solid half-hour lines in agenda view by dot lines.
158Added possibility of printing the What's Next View on the desktop 166Added possibility of printing the What's Next View on the desktop
159(i.e. Windows and Linux). 167(i.e. Windows and Linux).
160Fixed a crash in KO/Pi when starting KO/Pi with What's Next view. 168Fixed a crash in KO/Pi when starting KO/Pi with What's Next view.
161Added tooltips in month view.(Tooltips only available on desktop) 169Added tooltips in month view.(Tooltips only available on desktop)
162 170
163Fixed a strange problem in KO/Pi alarm applet. 171Fixed a strange problem in KO/Pi alarm applet.
164Did not find the actual problem, 172Did not find the actual problem,
165such that now Qtopia reboots again if deinstalling the alarm applet. 173such that now Qtopia reboots again if deinstalling the alarm applet.
166But the alarm applet should work again. 174But the alarm applet should work again.
167 175
168KA/Pi: 176KA/Pi:
169Fixed the problem, that internal pictures were not saved. 177Fixed the problem, that internal pictures were not saved.
170 178
171Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes. 179Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes.
172 180
173Fixed some minor problems. (Like word wrap in help text windows). 181Fixed some minor problems. (Like word wrap in help text windows).
174 182
175Fixed a compiling problem in microkde/kresources. 183Fixed a compiling problem in microkde/kresources.
176 184
177KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM. 185KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM.
178This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9) 186This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9)
179such that now syncing KO/Pi with Sharp DTM should work on the 187such that now syncing KO/Pi with Sharp DTM should work on the
180Zaurus C 3000 model. 188Zaurus C 3000 model.
181 189
182********** VERSION 1.9.15 ************ 190********** VERSION 1.9.15 ************
183 191
184Usebilty enhancements in KO/Pi: 192Usebilty enhancements in KO/Pi:
185When clicking on the date in a month view cell, the day view is shown. 193When clicking on the date in a month view cell, the day view is shown.
186Old behaviour was, that the "new event" dialog popped up. 194Old behaviour was, that the "new event" dialog popped up.
187 195
188Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu). 196Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu).
189That means, you can restore the latest 197That means, you can restore the latest
190event/todo/journal you have deleted. 198event/todo/journal you have deleted.
191A journal is deleted, if you clear all the text of the journal. 199A journal is deleted, if you clear all the text of the journal.
192 200
193Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14. 201Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14.
194 202
195KA/Pi starting in 480x640 resolution: 203KA/Pi starting in 480x640 resolution:
196Hide the filter action in toolbar 204Hide the filter action in toolbar
197and added icons for undo/delete/redo in toolbar. 205and added icons for undo/delete/redo in toolbar.
198 206
199Change in OM/Pi ViewMail dialog: 207Change in OM/Pi ViewMail dialog:
200When clicking on the "delete" icon the mail is deleted after confirmation as usual. 208When clicking on the "delete" icon the mail is deleted after confirmation as usual.
201But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any). 209But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any).
202 210
203Fixed a crash when deleting mail-accounts in OM/Pi. 211Fixed a crash when deleting mail-accounts in OM/Pi.
204 212
205 213
206********** VERSION 1.9.14 ************ 214********** VERSION 1.9.14 ************
207 215
208Fixed some problems with the dialog sizes when switching 216Fixed some problems with the dialog sizes when switching
209portrait/landscape mode on 640x480 PDA display. 217portrait/landscape mode on 640x480 PDA display.
210 218
211Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi. 219Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi.
212 220
213Fixed an ugly bug in KOpieMail: 221Fixed an ugly bug in KOpieMail:
214KOpieMail was not able to write files (mails) to MSDOS file system, 222KOpieMail was not able to write files (mails) to MSDOS file system,
215like on an usual preformatted SD card. That should work now. 223like on an usual preformatted SD card. That should work now.
216To save your mail data on the Sd card do the following: 224To save your mail data on the Sd card do the following:
217Create a dir on the SD card: 225Create a dir on the SD card:
218mkdir /mnt/card/localmail 226mkdir /mnt/card/localmail
219Go to your home dir: 227Go to your home dir:
220cd 228cd
221Go to kopiemail data storage dir: 229Go to kopiemail data storage dir:
222cd kdepim/apps/kopiemail 230cd kdepim/apps/kopiemail
223Create a symlink to the SD card: 231Create a symlink to the SD card:
224ls -s /mnt/card/localmail 232ls -s /mnt/card/localmail
225Now KOpieMail will store all mails on the SD card. 233Now KOpieMail will store all mails on the SD card.
226 234
227KO/Pi Monthview: 235KO/Pi Monthview:
228Now "Go to Today" selects the current month from day 1-end, 236Now "Go to Today" selects the current month from day 1-end,
229not the current date + some days. 237not the current date + some days.
230I.e. "Go to Today" shows now always 238I.e. "Go to Today" shows now always
231the current month with first day of month in the first row. 239the current month with first day of month in the first row.
232 240
233Added missing German translation. 241Added missing German translation.
234 242
235Fixed icons of executeable on Wintendo. 243Fixed icons of executeable on Wintendo.
236 244
237Added a "Show next Mail" button to the OM/Pi 245Added a "Show next Mail" button to the OM/Pi
238mail viewer such that the mail below the current mail 246mail viewer such that the mail below the current mail
239in the mail list view of the current folder 247in the mail list view of the current folder
240can be read with a single click. 248can be read with a single click.
241 249
242 250
243********** VERSION 1.9.13 ************ 251********** VERSION 1.9.13 ************
244 252
245Fixed nasty PwM/Pi file reading bug, when 253Fixed nasty PwM/Pi file reading bug, when
246the used hash algo of file is different then the global 254the used hash algo of file is different then the global
247hash algo. 255hash algo.
248 256
249Added KA/Pi support for opie mailit mailapplication. 257Added KA/Pi support for opie mailit mailapplication.
250 258
251Fixed some bugs in OM/Pi. 259Fixed some bugs in OM/Pi.
252Now character conversion tables are available for the Zaurus 260Now character conversion tables are available for the Zaurus
253to make OM/Pi working properly. 261to make OM/Pi working properly.
254To get the character conversion in OM/Pi working, please download 262To get the character conversion in OM/Pi working, please download
255at the sourceforge project site the package 263at the sourceforge project site the package
256sr-character-conversion_SharpROM_arm.ipk.zip 264sr-character-conversion_SharpROM_arm.ipk.zip
257(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms) 265(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms)
258from the section "general files for KDE/Pim" 266from the section "general files for KDE/Pim"
259Instructions how to install this package are in a ReadMe in this file. 267Instructions how to install this package are in a ReadMe in this file.
260 268
261 269
262Fixed the orientation change problem in KA/Pi when switching 270Fixed the orientation change problem in KA/Pi when switching
263portrait/landscape mode. 271portrait/landscape mode.
264 272
265French translation available for KA/Pi and OM/Pi. 273French translation available for KA/Pi and OM/Pi.
266 274
267Fixed some problems with categories in KO/Pi in DTM sync. 275Fixed some problems with categories in KO/Pi in DTM sync.
268 276
269Added selection dialog for export to phone in KA/Pi. 277Added selection dialog for export to phone in KA/Pi.
270 278
271If in KO/Pi is an attendee selected to add to a meeting and this 279If in KO/Pi is an attendee selected to add to a meeting and this
272attendee is already in the list of attendees, this person is not added 280attendee is already in the list of attendees, this person is not added
273again. 281again.
274 282
275Some menu cleanup in KA/Pi. 283Some menu cleanup in KA/Pi.
276 284
277********** VERSION 1.9.12 ************ 285********** VERSION 1.9.12 ************
278 286
279Fix for the bug in KO/Pi What's Next view of version 1.9.11. 287Fix for the bug in KO/Pi What's Next view of version 1.9.11.
280 288
281Bugfix: Licence file is now shown again. 289Bugfix: Licence file is now shown again.
282 290
283OM/Pi now supports Unicode (utf8 charset). 291OM/Pi now supports Unicode (utf8 charset).
284Fixed some bugs in OM/Pi. 292Fixed some bugs in OM/Pi.
285 293
286KA/Pi has more German translation. 294KA/Pi has more German translation.
287 295
288 296
289********** VERSION 1.9.11 ************ 297********** VERSION 1.9.11 ************
290 298
291Fixed several problems in PWM/Pi, like 299Fixed several problems in PWM/Pi, like
292asking the user, if unsaved changed are pending 300asking the user, if unsaved changed are pending
293when closing the app. 301when closing the app.
294And PwM/Pi handles now different texts for the 302And PwM/Pi handles now different texts for the
295fields Description, Username, Password, configurable per category. 303fields Description, Username, Password, configurable per category.
296 304
297Fixed a crash in KO/Pi , when importing/loading vcs files 305Fixed a crash in KO/Pi , when importing/loading vcs files
298which have an entry with an attendee with state: 306which have an entry with an attendee with state:
299NEEDS ACTION 307NEEDS ACTION
300 308
301Fixed some problems in the German translation of OM/Pi, 309Fixed some problems in the German translation of OM/Pi,
302which makes some dialogs not fitting on the screen 310which makes some dialogs not fitting on the screen
303of the Z 5500. 311of the Z 5500.
304 312
305Fixed Qtopia crash, when disabling/deinstalling 313Fixed Qtopia crash, when disabling/deinstalling
306KO/Pi alarm applet. 314KO/Pi alarm applet.
307 315
308Implemented direct KDE<->KA/Pi sync for KA/Pi running 316Implemented direct KDE<->KA/Pi sync for KA/Pi running
309on Linux desktop. 317on Linux desktop.
310 318
311Added feature "remove sync info" to sync menu. 319Added feature "remove sync info" to sync menu.
312 320
313Tweaked the KO/Pi What's next view a bit, added 321Tweaked the KO/Pi What's next view a bit, added
314setting to hide events that are done. 322setting to hide events that are done.
315 323
316Disabled "beam receive enabled" on startup to 324Disabled "beam receive enabled" on startup to
317avoid problems if Fastload is enabled. 325avoid problems if Fastload is enabled.
318Please set "beam receive enabled", 326Please set "beam receive enabled",
319if you want to receive data via IR. 327if you want to receive data via IR.
320 328
321Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running 329Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running
322on Linux desktop. 330on Linux desktop.
323 331
324Made in KA/Pi scrolling possible, if details view is selected. 332Made in KA/Pi scrolling possible, if details view is selected.
325(The keyboard focus is set automatically to the search line) 333(The keyboard focus is set automatically to the search line)
326 334
327Fixed a bug in DMT sync, that a new entry in DTM was added 335Fixed a bug in DMT sync, that a new entry in DTM was added
328on every sync to Kx/Pi. 336on every sync to Kx/Pi.
329 337
330Fixed missing writing of KA/Pi categories to DMT entries when syncing. 338Fixed missing writing of KA/Pi categories to DMT entries when syncing.
331 339
332Fixed a bug in DMT sync with todos created in KO/Pi containing 340Fixed a bug in DMT sync with todos created in KO/Pi containing
333non-latin1 characters. 341non-latin1 characters.
334 342
335Rearranged package contents of Sharp-ipks and made all 343Rearranged package contents of Sharp-ipks and made all
336packages installable on SD again. 344packages installable on SD again.
337 345
338Fixed the writing of addressbook data in DTM sync. 346Fixed the writing of addressbook data in DTM sync.
339Empty fields in KA/Pi were not removed. 347Empty fields in KA/Pi were not removed.
340 348
341Added better category handling in KA/Pi: 349Added better category handling in KA/Pi:
342Added item 350Added item
343Edit Categories and 351Edit Categories and
344Manage new categories 352Manage new categories
345to the settings menu. 353to the settings menu.
346Possible to configure a view to display categories. 354Possible to configure a view to display categories.
347 355
348Added detailed "KDE Sync Howto" and "Multi Sync Howto" to Help menu. 356Added detailed "KDE Sync Howto" and "Multi Sync Howto" to Help menu.
349 357
350Fixed displaying of "free" days and time in KO Monthview and Agendaview. 358Fixed displaying of "free" days and time in KO Monthview and Agendaview.
351 359
352... and many other bugfixes. 360... and many other bugfixes.
353 361
354********** VERSION 1.9.10 ************ 362********** VERSION 1.9.10 ************
355 363
356Many internal small bugfixes. 364Many internal small bugfixes.
357And fix of the "big" bug in KO/Pi, 365And fix of the "big" bug in KO/Pi,
358that after Syncing the appointments had an offset by several hours. 366that after Syncing the appointments had an offset by several hours.
359That was a problem with the internal timezone setting, 367That was a problem with the internal timezone setting,
360introduced by the changed timezone configuration settings. 368introduced by the changed timezone configuration settings.
361 369
362German translation for OM/Pi is now available. 370German translation for OM/Pi is now available.
363 371
364 372
365********** VERSION 1.9.9 ************ 373********** VERSION 1.9.9 ************
366 374
367KDE-Pim/Pi has a new Member! 375KDE-Pim/Pi has a new Member!
368It is called PWM/Pi (Passwordmanager/platform-independent) 376It is called PWM/Pi (Passwordmanager/platform-independent)
369and it is available for the Zaurus. 377and it is available for the Zaurus.
370It is planned, that it will be available later for Windows. 378It is planned, that it will be available later for Windows.
371(And for Linux, of course). 379(And for Linux, of course).
372It is a port of the Passwordmanager of KDE. 380It is a port of the Passwordmanager of KDE.
373It will need the MicroKDElibs to run. 381It will need the MicroKDElibs to run.
374 382
375Made loading of addressbooks in KA/Pi up to 7 times faster! 383Made loading of addressbooks in KA/Pi up to 7 times faster!
376The bigger your addressbook file, the more starting speed 384The bigger your addressbook file, the more starting speed
377will you gain. (relatively) 385will you gain. (relatively)
378 386
379The Qtopia addressbook connector is now platform independend 387The Qtopia addressbook connector is now platform independend
380as well and should work on any platform for importing/exporting 388as well and should work on any platform for importing/exporting
381Qtopia and Opie XML files. 389Qtopia and Opie XML files.
382 390
383Added a +30min feature to the timezone settings to make 391Added a +30min feature to the timezone settings to make
384KDE-Pim/Pi useable in Australia and other parts on the 392KDE-Pim/Pi useable in Australia and other parts on the
385world with strange timezones ;-) 393world with strange timezones ;-)
386 394
387German "Umlaute" should now be sorted correctly on the Z in KA/Pi. 395German "Umlaute" should now be sorted correctly on the Z in KA/Pi.
388 396
389It is now possible to disable the 397It is now possible to disable the
390"receive data via infrared" feature, such that syncing with 398"receive data via infrared" feature, such that syncing with
391Outlook is now possible again with Kx/Pi runing. 399Outlook is now possible again with Kx/Pi runing.
392Please disable it, before syncing Sharp DTM with Outlook. 400Please disable it, before syncing Sharp DTM with Outlook.
393For your convenience, the "receive data via infrared" feature 401For your convenience, the "receive data via infrared" feature
394is disabled automatically, if you sync Kx/Pi with DTM. 402is disabled automatically, if you sync Kx/Pi with DTM.
395You have to enable it again manually after syncing. 403You have to enable it again manually after syncing.
396Enabling this feature makes it impossible to start the 404Enabling this feature makes it impossible to start the
397Sharp DTM apps. If this feature is enabled, you will only get the 405Sharp DTM apps. If this feature is enabled, you will only get the
398alarm notification from KO/Pi and not from the Sharp calendar. 406alarm notification from KO/Pi and not from the Sharp calendar.
399This is very useful if you sync KO/Pi with Sharp DTM, 407This is very useful if you sync KO/Pi with Sharp DTM,
400because after syncing you usually would get notified about 408because after syncing you usually would get notified about
401an alarm by KO/Pi and the Sharp Calendar. 409an alarm by KO/Pi and the Sharp Calendar.
402 410
403Together with the Linux desktop version of KO/Pi 411Together with the Linux desktop version of KO/Pi
404it is now possible to sync KO/Pi on the Zaurus 412it is now possible to sync KO/Pi on the Zaurus
405with the complete KDE-desktop (3.3 or later) 413with the complete KDE-desktop (3.3 or later)
406calendar data easily. 414calendar data easily.
407That makes it possible to sync the Z with one 415That makes it possible to sync the Z with one
408click of a mouse with the KDE-Desktop. 416click of a mouse with the KDE-Desktop.
409This feature it available for all Zaurus platforms KO/Pi 417This feature it available for all Zaurus platforms KO/Pi
410is running on. 418is running on.
411The only thing needed is a running KO/Pi on Linux and 419The only thing needed is a running KO/Pi on Linux and
412a compiled version of the small 420a compiled version of the small
413KDE-Pim/Pi<->KDE-Desktop access command line program, 421KDE-Pim/Pi<->KDE-Desktop access command line program,
414which is in the KDE-Pim/Pi sources available. 422which is in the KDE-Pim/Pi sources available.
415 423
416The "KDE-desktop" syncing feature for KA/Pi will follow 424The "KDE-desktop" syncing feature for KA/Pi will follow
417in the next releases. 425in the next releases.
418 426
419Fixed the vcard export bug, which had the version 1.9.8. 427Fixed the vcard export bug, which had the version 1.9.8.
420 428
421Added missing GERMAN translation to KO/Pi. 429Added missing GERMAN translation to KO/Pi.
422Hi PsionX, could you add the missing french translation?Thx! 430Hi PsionX, could you add the missing french translation?Thx!
423 431
424Translation files for KA/Pi are available as well. 432Translation files for KA/Pi are available as well.
425GERMAN translation will be available in the next release. 433GERMAN translation will be available in the next release.
426PsionX ( yres, you again ;-) ), could you start translating 434PsionX ( yres, you again ;-) ), could you start translating
427KA/Pi? Thx! 435KA/Pi? Thx!
428 436
429You can download the version 1.9.9 at 437You can download the version 1.9.9 at
430 438
431http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604 439http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604
432 440
433Note: 441Note:
434To run the mail program OM/Pi you need libopenssl. 442To run the mail program OM/Pi you need libopenssl.
435A link to a download loaction is available at 443A link to a download loaction is available at
436ZSI at www.killefiz.de 444ZSI at www.killefiz.de
437 445
438 446
439********** VERSION 1.9.8 ************ 447********** VERSION 1.9.8 ************
440 448
441Fixed character decoding in OM/Pi. 449Fixed character decoding in OM/Pi.
442(e.g. German "Umlaute" were not displayed properly.) 450(e.g. German "Umlaute" were not displayed properly.)
443 451
444Made is possible to reparent todos in KO/Pi. 452Made is possible to reparent todos in KO/Pi.
445Use contextmenu or keys (look at Help-Keys + Colors) for that. 453Use contextmenu or keys (look at Help-Keys + Colors) for that.
446 454
447Added the missing Sync-Howto and WhatsNew to the packages. 455Added the missing Sync-Howto and WhatsNew to the packages.
448 456
449KO/Pi on Linux desktop can now sync with KDE desktop. 457KO/Pi on Linux desktop can now sync with KDE desktop.
450That means: When using KO/Pi on Linux desktop for syncing with 458That means: When using KO/Pi on Linux desktop for syncing with
451KDE desktop and the Zaurus, the Zaurus can be synced now 459KDE desktop and the Zaurus, the Zaurus can be synced now
452with all KDE-Calendar resources, not only with one local file. 460with all KDE-Calendar resources, not only with one local file.
453(That makes it possible to sync the Zaurus with the 461(That makes it possible to sync the Zaurus with the
454calendar data on a Kolab server) 462calendar data on a Kolab server)
455 463
456KA/Pi syncing with KDE desktop will be available in the next version. 464KA/Pi syncing with KDE desktop will be available in the next version.
457 465
458 466
459********** VERSION 1.9.7 ************ 467********** VERSION 1.9.7 ************
460 468
461KO/Pi - KA/Pi on Windows: 469KO/Pi - KA/Pi on Windows:
462Now a directory can be defined by the user, where the 470Now a directory can be defined by the user, where the
463application/config data should be saved. 471application/config data should be saved.
464 Define your desired path in the evironment variable 472 Define your desired path in the evironment variable
465 MICROKDEHOME 473 MICROKDEHOME
466 before starting KO/Pi or KA/Pi. 474 before starting KO/Pi or KA/Pi.
467 475
468An easy Kx/Pi to Kx/Pi syncing is now possible 476An easy Kx/Pi to Kx/Pi syncing is now possible
469(it is called Pi-Sync) via network. 477(it is called Pi-Sync) via network.
470Please look at the Sync Howto. 478Please look at the Sync Howto.
471 479
472Exporting of calendar data and contacts to mobile phones is now possible. 480Exporting of calendar data and contacts to mobile phones is now possible.
473The SyncHowto is updated with information howto 481The SyncHowto is updated with information howto
474access/sync mobile phones. 482access/sync mobile phones.
475Please look at the Sync Howto. 483Please look at the Sync Howto.
476 484
477Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly. 485Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly.
478Please disable Fastload for the original contact/calendar applications 486Please disable Fastload for the original contact/calendar applications
479and close them. 487and close them.
480KO/Pi and KA/Pi must be running in order to receive the data. 488KO/Pi and KA/Pi must be running in order to receive the data.
481(KO/Pi and KA/Pi are always running if Fastload for them is enabled!) 489(KO/Pi and KA/Pi are always running if Fastload for them is enabled!)
482 490
483In the KA/Pi details view are now the preferred tel. numbers displayed on top 491In the KA/Pi details view are now the preferred tel. numbers displayed on top
484of the other data ( emails/tel.numbers/addresses) 492of the other data ( emails/tel.numbers/addresses)
485 493
486Fixed some syncing problems in KA/Pi. 494Fixed some syncing problems in KA/Pi.
487 495
488Added font settings for the KA/Pi details view. 496Added font settings for the KA/Pi details view.
489Added fields "children's name" and "gender" to KA/Pi. 497Added fields "children's name" and "gender" to KA/Pi.
490 498
491Made searching in KA/Pi better: 499Made searching in KA/Pi better:
492Now the first item in a view is selected after a search automatically and 500Now the first item in a view is selected after a search automatically and
493the views can be scrolled up/down when the search input field has the keyboard focus. 501the views can be scrolled up/down when the search input field has the keyboard focus.
494 502
495And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi. 503And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi.
496 504
497 505
498********** VERSION 1.9.6 ************ 506********** VERSION 1.9.6 ************
499 507
500Changes in the external application communication on the Zaurus 508Changes in the external application communication on the Zaurus
501in order to use less RAM when the apps are running. 509in order to use less RAM when the apps are running.
502First syncing of addressbooks (KA/Pi) is possible. 510First syncing of addressbooks (KA/Pi) is possible.
503 511
504 512
505********** VERSION 1.9.5a ************ 513********** VERSION 1.9.5a ************
506 514
507Fixed a bug in KO/Pi in the SharpDTM sync of version 1.9.5. 515Fixed a bug in KO/Pi in the SharpDTM sync of version 1.9.5.
508Fixed some small bugs. 516Fixed some small bugs.
509KA/Pi shows now the birthday in summary view. 517KA/Pi shows now the birthday in summary view.
510Now OM/Pi and KA/Pi are using the date format defined in KO/Pi 518Now OM/Pi and KA/Pi are using the date format defined in KO/Pi
511for displaying dates. 519for displaying dates.
512 520
513 521
514********** VERSION 1.9.5 ************ 522********** VERSION 1.9.5 ************
515 523
516There is still no Addressbook syncing! 524There is still no Addressbook syncing!
517 525
518New in 1.9.5: 526New in 1.9.5:
519 527
520Many bugfixes. 528Many bugfixes.
521Better searching in KA/Pi. 529Better searching in KA/Pi.
522You can configure in KA/Pi if you want to search only after 530You can configure in KA/Pi if you want to search only after
523<return> key pressed. 531<return> key pressed.
524 532
525Better mail downloading in OM/Pi. 533Better mail downloading in OM/Pi.
526 534
527First experimental alpha version of sync of KO/Pi with mobile phones. 535First experimental alpha version of sync of KO/Pi with mobile phones.
528See gammu documentation for supported phones. 536See gammu documentation for supported phones.
529You 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. 537You 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.
530Quick hint how to use: 538Quick hint how to use:
531NOTE: MOBILE PHONE SYNC IS EXPERIMENTAL! 539NOTE: MOBILE PHONE SYNC IS EXPERIMENTAL!
532Install kammu_1.9.5_arm.ipk , libbluetooth and libsdp. 540Install kammu_1.9.5_arm.ipk , libbluetooth and libsdp.
533Create syncprofile - mobile device 541Create syncprofile - mobile device
534Remove entry for model. (Leave empty ). 542Remove entry for model. (Leave empty ).
535Enable infrared on Zaurus and your Phone. 543Enable infrared on Zaurus and your Phone.
536Sync. 544Sync.
537To get a more detailed log, start kopi from konsole. 545To get a more detailed log, start kopi from konsole.
538 546
539********** VERSION 1.9.4 ************ 547********** VERSION 1.9.4 ************
540 548
541This is the version 1.9.4 of KDE-Pim/Pi for the Zaurus. 549This is the version 1.9.4 of KDE-Pim/Pi for the Zaurus.
542 550
543WARNING: 551WARNING:
544PLEASE BACKUP ALL YOUR DATA! 552PLEASE BACKUP ALL YOUR DATA!
545We have changed a lot and maybe there are some unknown problems. 553We have changed a lot and maybe there are some unknown problems.
546 554
547SYNC HANDLING HAS CHANGED! 555SYNC HANDLING HAS CHANGED!
548Such that, if you sync now with an already synded device, you will duplicated entries after the first sync. 556Such that, if you sync now with an already synded device, you will duplicated entries after the first sync.
549(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks). 557(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks).
550 558
551You need the kmicrokdelibs_1.9.4_arm.ipk as a base for the other programs. 559You need the kmicrokdelibs_1.9.4_arm.ipk as a base for the other programs.
552If 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. 560If 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.
553 561
554As programs are available: 562As programs are available:
555KO/Pi (korganizer ipk) - a calendar program. 563KO/Pi (korganizer ipk) - a calendar program.
556KA/Pi (kaddressbook ipk ) - an addressbook 564KA/Pi (kaddressbook ipk ) - an addressbook
557OM/Pi (kopiemail ipk ) an email program with pop/smtp and IMAP support. 565OM/Pi (kopiemail ipk ) an email program with pop/smtp and IMAP support.
558 566
559An alarm notification program ( korganizer-alarm ipk ) for KO/Pi that notifies you about alarms, even if the Zaurus is in suspend mode. 567An alarm notification program ( korganizer-alarm ipk ) for KO/Pi that notifies you about alarms, even if the Zaurus is in suspend mode.
560(If you do not see an icon in the taskbar after installing korganizer-alarm, please restart Qtopia) 568(If you do not see an icon in the taskbar after installing korganizer-alarm, please restart Qtopia)
561 569
562All the applications are installed in a "Pim" TAB. 570All the applications are installed in a "Pim" TAB.
563If 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 571If 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
564 572
565All the application are integrated. 573All the application are integrated.
566Such 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. 574Such 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.
567 575
568HINT: 576HINT:
569If you install KPhone/Pi 0.9.7, it will be called, if you click in KA/Pi on a phone number. 577If you install KPhone/Pi 0.9.7, it will be called, if you click in KA/Pi on a phone number.
570 578
571What's new? 579What's new?
572 580
573SYNC HANDLING HAS CHANGED! 581SYNC HANDLING HAS CHANGED!
574Such that, if you sync now with an already synded device, you will duplicated entries after the first sync. 582Such that, if you sync now with an already synded device, you will duplicated entries after the first sync.
575(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks). 583(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks).
576 584
577New in OM/Pi: 585New in OM/Pi:
578When 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. 586When 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.
579 587
580New in KO/Pi: 588New in KO/Pi:
581French is now available for KO/Pi. 589French is now available for KO/Pi.
582Choose menu:Actions - Configure:TAB locale 590Choose menu:Actions - Configure:TAB locale
583Syncing has changed. 591Syncing has changed.
584Phone sync available soon. 592Phone sync available soon.
585Not much changes, I cannot remember them ... 593Not much changes, I cannot remember them ...
586 594
587New in KA/Pi: 595New in KA/Pi:
588Beaming possible. 596Beaming possible.
589Sharp DTM readonly access possible( create a new DTM resource ); 597Sharp DTM readonly access possible( create a new DTM resource );
590Better searching possible. 598Better searching possible.
591Search is performed only after pressing the return key. 599Search is performed only after pressing the return key.
592Use wildcard * to specify parts of a name. 600Use wildcard * to specify parts of a name.
593 601
594Better 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 * . 602Better 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 * .
595 603
596A big improvement is the new management of the contact access. 604A big improvement is the new management of the contact access.
597In version 1.9.3, every application was using their own addressbook access data. 605In version 1.9.3, every application was using their own addressbook access data.
598That means, the addressbook was loaded up to three times in the memory, when accessed by KA/Pi, KO/Pi and OM/Pi. 606That means, the addressbook was loaded up to three times in the memory, when accessed by KA/Pi, KO/Pi and OM/Pi.
599That was wasting of memory, if you had several hundreds of contacts. 607That was wasting of memory, if you had several hundreds of contacts.
600 608
601Now only KA/Pi accesses the addressbook. 609Now only KA/Pi accesses the addressbook.
602If 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. 610If 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.
603If you click on an attendee in a meeting, its contact data is displayed in KA/Pi directly. 611If you click on an attendee in a meeting, its contact data is displayed in KA/Pi directly.
604That means, if KO/Pi or OM/Pi want to access contact data, KA/Pi is started first. 612That means, if KO/Pi or OM/Pi want to access contact data, KA/Pi is started first.
605 613
606New in the KO/Pi alarm applet: 614New in the KO/Pi alarm applet:
607Configure your own timer popup menu! 615Configure your own timer popup menu!
608(Text and minutes for timer countdown) 616(Text and minutes for timer countdown)
609Just edit the file 617Just edit the file
610(yourhomedir)/.kopialarmtimerrc 618(yourhomedir)/.kopialarmtimerrc
611and start/stop a timer to get a new menu with the data of this file. 619and start/stop a timer to get a new menu with the data of this file.
612 620
613********** VERSION 1.9.3 ************ 621********** VERSION 1.9.3 ************
6141) 6221)
615Now KO/Pi on Windows imports directly the calendar data of 623Now KO/Pi on Windows imports directly the calendar data of
616an installed Outlook. Should work with OL version >= 2000. 624an installed Outlook. Should work with OL version >= 2000.
617 625
618********** VERSION 1.9.2 ************ 626********** VERSION 1.9.2 ************
6191) 6271)
620KDE-Pim/Pi has got a new member: 628KDE-Pim/Pi has got a new member:
621KmicroMail (KM/Pi) is a mail program, 629KmicroMail (KM/Pi) is a mail program,
622which can handle IMAP and POP mail access. 630which can handle IMAP and POP mail access.
623It is based on Opie-Mail v3. 631It is based on Opie-Mail v3.
624All dependencies to the Opie libraries ar removed, 632All dependencies to the Opie libraries ar removed,
625such that no additional Opie lib is needed. 633such that no additional Opie lib is needed.
626It is already integrated in KO/Pi and KA/Pi. 634It is already integrated in KO/Pi and KA/Pi.
627It it now available for the Zaurus,probably it 635It it now available for the Zaurus,probably it
628will be available for other platforms later. 636will be available for other platforms later.
629Hint: 637Hint:
630Create your own contact (name + email) 638Create your own contact (name + email)
631in KA/Pi, select this contact and choose menu: 639in KA/Pi, select this contact and choose menu:
632Settings - Set Who Am I. 640Settings - Set Who Am I.
633Now the settings of this contact are used as 641Now the settings of this contact are used as
634the sender data in KM/Pi. 642the sender data in KM/Pi.
6352) 6432)
636KDE-Pim/Pi is split up in five different 644KDE-Pim/Pi is split up in five different
637packages now precompiled for Sharp Zaurus: 645packages now precompiled for Sharp Zaurus:
638--kmicrokdelibs_1.9.2_arm.ipk 646--kmicrokdelibs_1.9.2_arm.ipk
639The libs are needed for any 647The libs are needed for any
640of the following programs: 648of the following programs:
641--kaddressbook_1.9.2_arm.ipk 649--kaddressbook_1.9.2_arm.ipk
642--kmicromail_1.9.2_arm.ipk 650--kmicromail_1.9.2_arm.ipk
643--korganizer_1.9.2_arm.ipk 651--korganizer_1.9.2_arm.ipk
644Independ from that, there is the alarm applet 652Independ from that, there is the alarm applet
645available for KO/Pi, which also offers 653available for KO/Pi, which also offers
646quick access for a new mail or 654quick access for a new mail or
647showing the addressbook.: 655showing the addressbook.:
648--korganizer-alarm_1.9.2_arm.ipk 656--korganizer-alarm_1.9.2_arm.ipk
649Independend means, that the alarm applet 657Independend means, that the alarm applet
650does not need any of the libs or programs above to run. 658does not need any of the libs or programs above to run.
651But it would be quite useless without these programs. 659But it would be quite useless without these programs.
652NOTE: 660NOTE:
653If you get a 661If you get a
654"This application depends on other programs" 662"This application depends on other programs"
655during installation of 663during installation of
656--kmicrokdelibs_1.9.2_arm.ipk 664--kmicrokdelibs_1.9.2_arm.ipk
657you probably do not have to care about that. 665you probably do not have to care about that.
658kmicrokdelibs_1.9.2 will come with some 666kmicrokdelibs_1.9.2 will come with some
659resource plugins, which needs additional libraries. 667resource plugins, which needs additional libraries.
660(E.g. libopie1, if you want to use the 668(E.g. libopie1, if you want to use the
661opie resource connector in KA/Pi). 669opie resource connector in KA/Pi).
662If you do not have this libraries installed, 670If you do not have this libraries installed,
663you simply cannot use the resource. 671you simply cannot use the resource.
664To make it clear: 672To make it clear:
665If the libraries are missing, the applications 673If the libraries are missing, the applications
666using kmicrokdelibs will start, 674using kmicrokdelibs will start,
667because the resources are plugins. 675because the resources are plugins.
6683) 6763)
669KO/Pi and friends are now installable on SD-Card! 677KO/Pi and friends are now installable on SD-Card!
670It is recommended to install all libs and apps 678It is recommended to install all libs and apps
671on the SD card or all in the internal storage. 679on the SD card or all in the internal storage.
672There may be problems, if this is mixed. 680There may be problems, if this is mixed.
6734) 6814)
674Fixed two bugs in the alarm notification on Windows. 682Fixed two bugs in the alarm notification on Windows.
6755) 6835)
676Great improvement! 684Great improvement!
677KO/Pi uses now the latest version of libical. 685KO/Pi uses now the latest version of libical.
678Libical is the library which actually reads 686Libical is the library which actually reads
679the calendar files and extract the data from it. 687the calendar files and extract the data from it.
680With the old version, there were problems 688With the old version, there were problems
681(crashes or program hangs) when licical did read 689(crashes or program hangs) when licical did read
682files, which were not stored from KO/Pi. 690files, which were not stored from KO/Pi.
683I do not know, if the new libical works perfect, 691I do not know, if the new libical works perfect,
684but actually it works much better than 692but actually it works much better than
685the old version. 693the old version.
686There are no problems with compatibility with 694There are no problems with compatibility with
687old calendar files of KO/Pi, of course! 695old calendar files of KO/Pi, of course!
6886) 6966)
689New in KA/Pi: 697New in KA/Pi:
690Opie addressbook resource connector available! 698Opie addressbook resource connector available!
691You will need libopie1 and the opie addressbook, 699You will need libopie1 and the opie addressbook,
692of course. 700of course.
693With the Opie addressbook resource connector, 701With the Opie addressbook resource connector,
694you can access the Opie addressbook readonly in KA/Pi. 702you can access the Opie addressbook readonly in KA/Pi.
695If you want to edit or import the data into KA/Pi, 703If you want to edit or import the data into KA/Pi,
696do this: 704do this:
697a) Create an Opie resource. 705a) Create an Opie resource.
698 (Menu: Settings-Configure Resources). 706 (Menu: Settings-Configure Resources).
699After configuration and restarting KA/Pi you should see 707After configuration and restarting KA/Pi you should see
700the Opie contacts in KA/Pi. 708the Opie contacts in KA/Pi.
701b) Select some or all Opie contacts. 709b) Select some or all Opie contacts.
702(NOTE: +++++ 710(NOTE: +++++
703To know exactly, what contacts are Opie contacts, 711To know exactly, what contacts are Opie contacts,
704do this: Choose menu: 712do this: Choose menu:
705View-Modify View - TAB Fields. 713View-Modify View - TAB Fields.
706Select in the above list "Resource" and click 714Select in the above list "Resource" and click
707down arrow to add it to the "Selected fields". 715down arrow to add it to the "Selected fields".
708Click OK. 716Click OK.
709Now you have a new column "Resource" in your list, 717Now you have a new column "Resource" in your list,
710where you can see, what an Opie resource is. 718where you can see, what an Opie resource is.
711++++ NOTE end.) 719++++ NOTE end.)
712Ok, we do have now some Opie contacts seleted. 720Ok, we do have now some Opie contacts seleted.
713(Use SHIFT or CTRL key in order to multiple select). 721(Use SHIFT or CTRL key in order to multiple select).
714c) Choose menu: Edit-Copy. 722c) Choose menu: Edit-Copy.
715d) Choose menu: Edit-Paste. 723d) Choose menu: Edit-Paste.
716e) Select the resource, you want to add the contacts to. 724e) Select the resource, you want to add the contacts to.
717Congrats! Now you have read/write access to the copied 725Congrats! Now you have read/write access to the copied
718opie contacts as "real" KA/Pi contacts. 726opie contacts as "real" KA/Pi contacts.
719 727
720 728
721********** VERSION 1.9.1 ************ 729********** VERSION 1.9.1 ************
7221) 7301)
723 +++ IMPORTANT 1 +++ 731 +++ IMPORTANT 1 +++
724 732
725The storing place of the default calendar 733The storing place of the default calendar
726file has changed! 734file has changed!
727The default calendar file was 735The default calendar file was
728Applications/korganizer/mycalendar.ics 736Applications/korganizer/mycalendar.ics
729on Zaurus and 737on Zaurus and
730(yourHomeDir)/korganizer/mycalendar.ics 738(yourHomeDir)/korganizer/mycalendar.ics
731on Windows/Linux desktop. Now it is 739on Windows/Linux desktop. Now it is
732(yourHomeDir)/kdepim/korganizer/mycalendar.ics 740(yourHomeDir)/kdepim/korganizer/mycalendar.ics
733on Zaurus, Windows and Linux. 741on Zaurus, Windows and Linux.
734To load the old file, choose menu 742To load the old file, choose menu
735File-Load calendar backup. 743File-Load calendar backup.
736(It should be loaded automatically 744(It should be loaded automatically
737at startup with a warning message displayed). 745at startup with a warning message displayed).
738The place of the configuration file has changed too. 746The place of the configuration file has changed too.
739If you want to use your old KO/Pi config, 747If you want to use your old KO/Pi config,
740copy it to 748copy it to
741(yourHomeDir)/kdepim/config/korganizerrc 749(yourHomeDir)/kdepim/config/korganizerrc
742Please read VERSION 1.9.0 - topic 3) as well! 750Please read VERSION 1.9.0 - topic 3) as well!
743 751
744 +++ IMPORTANT 2 +++ 752 +++ IMPORTANT 2 +++
745 753
746Because of the new paths, you will need 754Because of the new paths, you will need
747a new version of the KO/Pi alarm applet 755a new version of the KO/Pi alarm applet
748for Zaurus. 756for Zaurus.
749Use version >= 1.9.1 757Use version >= 1.9.1
750 758
7512) 7592)
752Now the QWhat'sThis Icon works for items 760Now the QWhat'sThis Icon works for items
753in the month view as well. 761in the month view as well.
754(See VERSION 1.7.8 Topic 1) ). 762(See VERSION 1.7.8 Topic 1) ).
7553) 7633)
756You can import birtsdays/anniversaries 764You can import birtsdays/anniversaries
757from KA/Pi into KO/Pi. 765from KA/Pi into KO/Pi.
758Choose menu File-Import birthdays. 766Choose menu File-Import birthdays.
759If you import twice, already imported items 767If you import twice, already imported items
760will not be imported again, if they 768will not be imported again, if they
761have not been changed in KO/Pi. 769have not been changed in KO/Pi.
7624) 7704)
763When syncing with sharp DTM, now a progress 771When syncing with sharp DTM, now a progress
764is shown, when the data is written back. 772is shown, when the data is written back.
765If there is much data in KO/Pi and no data 773If there is much data in KO/Pi and no data
766in DTM, that can take a long time. 774in DTM, that can take a long time.
767(But only for the first time ). 775(But only for the first time ).
7685) 7765)
769In the search dialog, you can search 777In the search dialog, you can search
770now for the name/email of an attendee 778now for the name/email of an attendee
771of an event/todo. 779of an event/todo.
772To get more space for displaying 780To get more space for displaying
773search results, the buttons 781search results, the buttons
774for "search" and "close" on the 782for "search" and "close" on the
775bottom are removed in the PDA version. 783bottom are removed in the PDA version.
776You have to click OK in the top right 784You have to click OK in the top right
777corner to do a search. 785corner to do a search.
7786) 7866)
779Now it is possible to disable the displaying 787Now it is possible to disable the displaying
780of todo items in the Allday part of the Agenda. 788of todo items in the Allday part of the Agenda.
781Choose Menu Action-Configure, 789Choose Menu Action-Configure,
782TAB Todo View, checkbox 790TAB Todo View, checkbox
783"Allday Agenda view shows todos" 791"Allday Agenda view shows todos"
7847) 7927)
785If FastLoad is enabled, now the settings and the 793If FastLoad is enabled, now the settings and the
786calendar data are saved, when KO/Pi is closed. 794calendar data are saved, when KO/Pi is closed.
787(If no Fastload is enabled, KO/Pi saves 795(If no Fastload is enabled, KO/Pi saves
788the data as well, of course) 796the data as well, of course)
7898) 7978)
790The Agenda View has a minimize-splitter now, 798The Agenda View has a minimize-splitter now,
791such that the height of the allday part can be 799such that the height of the allday part can be
792changed quickly. 800changed quickly.
793 801
794********** VERSION 1.9.0 ************ 802********** VERSION 1.9.0 ************
7951) 8031)
796KO/Pi is now merged with the new microKDE from KA/Pi. 804KO/Pi is now merged with the new microKDE from KA/Pi.
797KO/Pi accesses now KA/Pi as the addressbook. 805KO/Pi accesses now KA/Pi as the addressbook.
798The other ddressbook-plugins are not working any longer. 806The other ddressbook-plugins are not working any longer.
799(It is planned, that later KA/Pi itself uses these plugins) 807(It is planned, that later KA/Pi itself uses these plugins)
800New versions of KO/Pi are only available 808New versions of KO/Pi are only available
801together with KA/Pi as the KDE-Pim/Pi package. 809together with KA/Pi as the KDE-Pim/Pi package.
8022) 8102)
803If you click on an attendee of a meeting in the 811If you click on an attendee of a meeting in the
804event viewer, a detailed summary of the 812event viewer, a detailed summary of the
805attendee is shown. 813attendee is shown.
8063) 8143)
807The place of the configuration file has changed. 815The place of the configuration file has changed.
808If you want to use your old KO/Pi config, copy 816If you want to use your old KO/Pi config, copy
809Applications/korganizer/config_korganizerrc 817Applications/korganizer/config_korganizerrc
810to 818to
811Applications/korganizer/config/korganizerrc 819Applications/korganizer/config/korganizerrc
812 820
813********** VERSION 1.7.8 ************ 821********** VERSION 1.7.8 ************
8141) 8221)
815Now the QWhat'sThis ist working. 823Now the QWhat'sThis ist working.
816Enable the QWhat'sThis icon in the toolbar. 824Enable the QWhat'sThis icon in the toolbar.
817(You have to restart to reload the changed toolbar config). 825(You have to restart to reload the changed toolbar config).
818Now click on the QWhat'sThis Icon 826Now click on the QWhat'sThis Icon
819in the top right corner of KO/Pi. 827in the top right corner of KO/Pi.
820Then click on an item in the Agenda View: 828Then click on an item in the Agenda View:
821You will get a detailed display of the items content. 829You will get a detailed display of the items content.
8222) 8302)
823Some other very minor changes. 831Some other very minor changes.
824But I have forgotten the details ... 832But I have forgotten the details ...
825For that reason I start this log here: 833For that reason I start this log here:
826To document my changes, when I am doing it. 834To document my changes, when I am doing it.
827 835
828********** VERSION 1.7.7 ************ 836********** VERSION 1.7.7 ************
829Stable Version of KO/Pi 837Stable Version of KO/Pi
diff --git a/korganizer/kotodoview.cpp b/korganizer/kotodoview.cpp
index 22486ba..1fb480d 100644
--- a/korganizer/kotodoview.cpp
+++ b/korganizer/kotodoview.cpp
@@ -1,1212 +1,1218 @@
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 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#include <qlayout.h> 24#include <qlayout.h>
25#include <qheader.h> 25#include <qheader.h>
26#include <qcursor.h> 26#include <qcursor.h>
27 27
28#include <qvbox.h> 28#include <qvbox.h>
29#include <kdebug.h> 29#include <kdebug.h>
30#include "koprefs.h" 30#include "koprefs.h"
31#include <klocale.h> 31#include <klocale.h>
32#include <kglobal.h> 32#include <kglobal.h>
33#include <kiconloader.h> 33#include <kiconloader.h>
34#include <kmessagebox.h> 34#include <kmessagebox.h>
35 35
36#include <libkcal/icaldrag.h> 36#include <libkcal/icaldrag.h>
37#include <libkcal/vcaldrag.h> 37#include <libkcal/vcaldrag.h>
38#include <libkcal/calfilter.h> 38#include <libkcal/calfilter.h>
39#include <libkcal/dndfactory.h> 39#include <libkcal/dndfactory.h>
40#include <libkcal/calendarresources.h> 40#include <libkcal/calendarresources.h>
41#include <libkcal/resourcecalendar.h> 41#include <libkcal/resourcecalendar.h>
42#include <kresources/resourceselectdialog.h> 42#include <kresources/resourceselectdialog.h>
43#ifndef DESKTOP_VERSION 43#ifndef DESKTOP_VERSION
44#include <qpe/qpeapplication.h> 44#include <qpe/qpeapplication.h>
45#else 45#else
46#include <qapplication.h> 46#include <qapplication.h>
47#endif 47#endif
48#ifndef KORG_NOPRINTER 48#ifndef KORG_NOPRINTER
49#include "calprinter.h" 49#include "calprinter.h"
50#endif 50#endif
51#include "docprefs.h" 51#include "docprefs.h"
52 52
53#include "kotodoview.h" 53#include "kotodoview.h"
54using namespace KOrg; 54using namespace KOrg;
55 55
56KOTodoListView::KOTodoListView(Calendar *calendar,QWidget *parent, 56KOTodoListView::KOTodoListView(Calendar *calendar,QWidget *parent,
57 const char *name) : 57 const char *name) :
58 KListView(parent,name) 58 KListView(parent,name)
59{ 59{
60 mName = QString ( name ); 60 mName = QString ( name );
61 mCalendar = calendar; 61 mCalendar = calendar;
62#ifndef DESKTOP_VERSION 62#ifndef DESKTOP_VERSION
63 QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold ); 63 QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold );
64#endif 64#endif
65 mOldCurrent = 0; 65 mOldCurrent = 0;
66 mMousePressed = false; 66 mMousePressed = false;
67 67
68 setAcceptDrops(true); 68 setAcceptDrops(true);
69 viewport()->setAcceptDrops(true); 69 viewport()->setAcceptDrops(true);
70 int size = 16; 70 int size = 16;
71 if (qApp->desktop()->width() < 300 ) 71 if (qApp->desktop()->width() < 300 )
72 size = 12; 72 size = 12;
73 setTreeStepSize( size + 6 ); 73 setTreeStepSize( size + 6 );
74 74
75} 75}
76 76
77void KOTodoListView::contentsDragEnterEvent(QDragEnterEvent *e) 77void KOTodoListView::contentsDragEnterEvent(QDragEnterEvent *e)
78{ 78{
79#ifndef KORG_NODND 79#ifndef KORG_NODND
80// kdDebug() << "KOTodoListView::contentsDragEnterEvent" << endl; 80// kdDebug() << "KOTodoListView::contentsDragEnterEvent" << endl;
81 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 81 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
82 !QTextDrag::canDecode( e ) ) { 82 !QTextDrag::canDecode( e ) ) {
83 e->ignore(); 83 e->ignore();
84 return; 84 return;
85 } 85 }
86 86
87 mOldCurrent = currentItem(); 87 mOldCurrent = currentItem();
88#endif 88#endif
89} 89}
90 90
91 91
92void KOTodoListView::contentsDragMoveEvent(QDragMoveEvent *e) 92void KOTodoListView::contentsDragMoveEvent(QDragMoveEvent *e)
93{ 93{
94#ifndef KORG_NODND 94#ifndef KORG_NODND
95// kdDebug() << "KOTodoListView::contentsDragMoveEvent" << endl; 95// kdDebug() << "KOTodoListView::contentsDragMoveEvent" << endl;
96 96
97 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 97 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
98 !QTextDrag::canDecode( e ) ) { 98 !QTextDrag::canDecode( e ) ) {
99 e->ignore(); 99 e->ignore();
100 return; 100 return;
101 } 101 }
102 102
103 e->accept(); 103 e->accept();
104#endif 104#endif
105} 105}
106 106
107void KOTodoListView::contentsDragLeaveEvent(QDragLeaveEvent *) 107void KOTodoListView::contentsDragLeaveEvent(QDragLeaveEvent *)
108{ 108{
109#ifndef KORG_NODND 109#ifndef KORG_NODND
110// kdDebug() << "KOTodoListView::contentsDragLeaveEvent" << endl; 110// kdDebug() << "KOTodoListView::contentsDragLeaveEvent" << endl;
111 111
112 setCurrentItem(mOldCurrent); 112 setCurrentItem(mOldCurrent);
113 setSelected(mOldCurrent,true); 113 setSelected(mOldCurrent,true);
114#endif 114#endif
115} 115}
116 116
117void KOTodoListView::contentsDropEvent(QDropEvent *e) 117void KOTodoListView::contentsDropEvent(QDropEvent *e)
118{ 118{
119#ifndef KORG_NODND 119#ifndef KORG_NODND
120// kdDebug() << "KOTodoListView::contentsDropEvent" << endl; 120// kdDebug() << "KOTodoListView::contentsDropEvent" << endl;
121 121
122 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) && 122 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) &&
123 !QTextDrag::canDecode( e ) ) { 123 !QTextDrag::canDecode( e ) ) {
124 e->ignore(); 124 e->ignore();
125 return; 125 return;
126 } 126 }
127 127
128 DndFactory factory( mCalendar ); 128 DndFactory factory( mCalendar );
129 Todo *todo = factory.createDropTodo(e); 129 Todo *todo = factory.createDropTodo(e);
130 130
131 if (todo) { 131 if (todo) {
132 e->acceptAction(); 132 e->acceptAction();
133 133
134 KOTodoViewItem *destination = 134 KOTodoViewItem *destination =
135 (KOTodoViewItem *)itemAt(contentsToViewport(e->pos())); 135 (KOTodoViewItem *)itemAt(contentsToViewport(e->pos()));
136 Todo *destinationEvent = 0; 136 Todo *destinationEvent = 0;
137 if (destination) destinationEvent = destination->todo(); 137 if (destination) destinationEvent = destination->todo();
138 138
139 Todo *existingTodo = mCalendar->todo(todo->uid()); 139 Todo *existingTodo = mCalendar->todo(todo->uid());
140 140
141 if(existingTodo) { 141 if(existingTodo) {
142// kdDebug() << "Drop existing Todo" << endl; 142// kdDebug() << "Drop existing Todo" << endl;
143 Incidence *to = destinationEvent; 143 Incidence *to = destinationEvent;
144 while(to) { 144 while(to) {
145 if (to->uid() == todo->uid()) { 145 if (to->uid() == todo->uid()) {
146 KMessageBox::sorry(this, 146 KMessageBox::sorry(this,
147 i18n("Cannot move To-Do to itself or a child of itself"), 147 i18n("Cannot move To-Do to itself or a child of itself"),
148 i18n("Drop To-Do")); 148 i18n("Drop To-Do"));
149 delete todo; 149 delete todo;
150 return; 150 return;
151 } 151 }
152 to = to->relatedTo(); 152 to = to->relatedTo();
153 } 153 }
154 existingTodo->setRelatedTo(destinationEvent); 154 existingTodo->setRelatedTo(destinationEvent);
155 emit todoDropped(todo); 155 emit todoDropped(todo);
156 delete todo; 156 delete todo;
157 } else { 157 } else {
158// kdDebug() << "Drop new Todo" << endl; 158// kdDebug() << "Drop new Todo" << endl;
159 todo->setRelatedTo(destinationEvent); 159 todo->setRelatedTo(destinationEvent);
160 mCalendar->addTodo(todo); 160 mCalendar->addTodo(todo);
161 161
162 emit todoDropped(todo); 162 emit todoDropped(todo);
163 } 163 }
164 } 164 }
165 else { 165 else {
166 QString text; 166 QString text;
167 if (QTextDrag::decode(e,text)) { 167 if (QTextDrag::decode(e,text)) {
168 //QListViewItem *qlvi = itemAt( contentsToViewport(e->pos()) ); 168 //QListViewItem *qlvi = itemAt( contentsToViewport(e->pos()) );
169 KOTodoViewItem *todoi = static_cast<KOTodoViewItem *>(itemAt( contentsToViewport(e->pos()) )); 169 KOTodoViewItem *todoi = static_cast<KOTodoViewItem *>(itemAt( contentsToViewport(e->pos()) ));
170 kdDebug() << "Dropped : " << text << endl; 170 kdDebug() << "Dropped : " << text << endl;
171 QStringList emails = QStringList::split(",",text); 171 QStringList emails = QStringList::split(",",text);
172 for(QStringList::ConstIterator it = emails.begin();it!=emails.end();++it) { 172 for(QStringList::ConstIterator it = emails.begin();it!=emails.end();++it) {
173 kdDebug() << " Email: " << (*it) << endl; 173 kdDebug() << " Email: " << (*it) << endl;
174 int pos = (*it).find("<"); 174 int pos = (*it).find("<");
175 QString name = (*it).left(pos); 175 QString name = (*it).left(pos);
176 QString email = (*it).mid(pos); 176 QString email = (*it).mid(pos);
177 if (!email.isEmpty() && todoi) { 177 if (!email.isEmpty() && todoi) {
178 todoi->todo()->addAttendee(new Attendee(name,email)); 178 todoi->todo()->addAttendee(new Attendee(name,email));
179 } 179 }
180 } 180 }
181 } 181 }
182 else { 182 else {
183 kdDebug() << "KOTodoListView::contentsDropEvent(): Todo from drop not decodable" << endl; 183 kdDebug() << "KOTodoListView::contentsDropEvent(): Todo from drop not decodable" << endl;
184 e->ignore(); 184 e->ignore();
185 } 185 }
186 } 186 }
187#endif 187#endif
188} 188}
189 189
190void KOTodoListView::contentsMousePressEvent(QMouseEvent* e) 190void KOTodoListView::contentsMousePressEvent(QMouseEvent* e)
191{ 191{
192 QListView::contentsMousePressEvent(e); 192 QListView::contentsMousePressEvent(e);
193#ifndef KORG_NODND 193#ifndef KORG_NODND
194 QPoint p(contentsToViewport(e->pos())); 194 QPoint p(contentsToViewport(e->pos()));
195 QListViewItem *i = itemAt(p); 195 QListViewItem *i = itemAt(p);
196 if (i) { 196 if (i) {
197 // if the user clicked into the root decoration of the item, don't 197 // if the user clicked into the root decoration of the item, don't
198 // try to start a drag! 198 // try to start a drag!
199 if (p.x() > header()->sectionPos(header()->mapToIndex(0)) + 199 if (p.x() > header()->sectionPos(header()->mapToIndex(0)) +
200 treeStepSize() * (i->depth() + (rootIsDecorated() ? 1 : 0)) + 200 treeStepSize() * (i->depth() + (rootIsDecorated() ? 1 : 0)) +
201 itemMargin() || 201 itemMargin() ||
202 p.x() < header()->sectionPos(header()->mapToIndex(0))) { 202 p.x() < header()->sectionPos(header()->mapToIndex(0))) {
203 if (e->button()==Qt::LeftButton) { 203 if (e->button()==Qt::LeftButton) {
204 mPressPos = e->pos(); 204 mPressPos = e->pos();
205 mMousePressed = true; 205 mMousePressed = true;
206 } 206 }
207 } 207 }
208 } 208 }
209#endif 209#endif
210} 210}
211 211
212void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e) 212void KOTodoListView::contentsMouseMoveEvent(QMouseEvent* e)
213{ 213{
214 214
215#ifndef KORG_NODND 215#ifndef KORG_NODND
216// kdDebug() << "KOTodoListView::contentsMouseMoveEvent()" << endl; 216// kdDebug() << "KOTodoListView::contentsMouseMoveEvent()" << endl;
217 QListView::contentsMouseMoveEvent(e); 217 QListView::contentsMouseMoveEvent(e);
218 if (mMousePressed && (mPressPos - e->pos()).manhattanLength() > 218 if (mMousePressed && (mPressPos - e->pos()).manhattanLength() >
219 QApplication::startDragDistance()) { 219 QApplication::startDragDistance()) {
220 mMousePressed = false; 220 mMousePressed = false;
221 QListViewItem *item = itemAt(contentsToViewport(mPressPos)); 221 QListViewItem *item = itemAt(contentsToViewport(mPressPos));
222 if (item) { 222 if (item) {
223// kdDebug() << "Start Drag for item " << item->text(0) << endl; 223// kdDebug() << "Start Drag for item " << item->text(0) << endl;
224 DndFactory factory( mCalendar ); 224 DndFactory factory( mCalendar );
225 ICalDrag *vd = factory.createDragTodo( 225 ICalDrag *vd = factory.createDragTodo(
226 ((KOTodoViewItem *)item)->todo(),viewport()); 226 ((KOTodoViewItem *)item)->todo(),viewport());
227 if (vd->drag()) { 227 if (vd->drag()) {
228 kdDebug() << "KOTodoListView::contentsMouseMoveEvent(): Delete drag source" << endl; 228 kdDebug() << "KOTodoListView::contentsMouseMoveEvent(): Delete drag source" << endl;
229 } 229 }
230/* 230/*
231 QString source = fullPath(item); 231 QString source = fullPath(item);
232 if ( QFile::exists(source) ) { 232 if ( QFile::exists(source) ) {
233 QUriDrag* ud = new QUriDrag(viewport()); 233 QUriDrag* ud = new QUriDrag(viewport());
234 ud->setFilenames( source ); 234 ud->setFilenames( source );
235 if ( ud->drag() ) 235 if ( ud->drag() )
236 QMessageBox::information( this, "Drag source", 236 QMessageBox::information( this, "Drag source",
237 QString("Delete ")+source, "Not implemented" ); 237 QString("Delete ")+source, "Not implemented" );
238*/ 238*/
239 } 239 }
240 } 240 }
241#endif 241#endif
242} 242}
243void KOTodoListView::keyPressEvent ( QKeyEvent * e ) 243void KOTodoListView::keyPressEvent ( QKeyEvent * e )
244{ 244{
245 245
246 QListViewItem* cn; 246 QListViewItem* cn;
247 if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) { 247 if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) {
248 cn = currentItem(); 248 cn = currentItem();
249 if ( cn ) { 249 if ( cn ) {
250 KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); 250 KOTodoViewItem* ci = (KOTodoViewItem*)( cn );
251 if ( ci ){ 251 if ( ci ){
252 if ( e->state() == ShiftButton ) 252 if ( e->state() == ShiftButton )
253 ci->setOn( false ); 253 ci->setOn( false );
254 else 254 else
255 ci->setOn( true ); 255 ci->setOn( true );
256 cn = cn->nextSibling(); 256 cn = cn->nextSibling();
257 if ( cn ) { 257 if ( cn ) {
258 setCurrentItem ( cn ); 258 setCurrentItem ( cn );
259 ensureItemVisible ( cn ); 259 ensureItemVisible ( cn );
260 } 260 }
261 261
262 } 262 }
263 } 263 }
264 264
265 return; 265 return;
266 } 266 }
267 267
268 // qDebug("KOTodoListView::keyPressEvent "); 268 // qDebug("KOTodoListView::keyPressEvent ");
269 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) { 269 if ( e->state() == Qt::ControlButton || e->state() == Qt::ShiftButton || mName != "todolistsmall" ) {
270 switch ( e->key() ) { 270 switch ( e->key() ) {
271 case Qt::Key_Down: 271 case Qt::Key_Down:
272 case Qt::Key_Up: 272 case Qt::Key_Up:
273 QListView::keyPressEvent ( e ); 273 QListView::keyPressEvent ( e );
274 break; 274 break;
275 case Qt::Key_Left: 275 case Qt::Key_Left:
276 case Qt::Key_Right: 276 case Qt::Key_Right:
277 QListView::keyPressEvent ( e ); 277 QListView::keyPressEvent ( e );
278 e->accept(); 278 e->accept();
279 return; 279 return;
280 break; 280 break;
281 default: 281 default:
282 e->ignore(); 282 e->ignore();
283 break; 283 break;
284 } 284 }
285 return; 285 return;
286 } 286 }
287 e->ignore(); 287 e->ignore();
288} 288}
289void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e) 289void KOTodoListView::contentsMouseReleaseEvent(QMouseEvent *e)
290{ 290{
291 QListView::contentsMouseReleaseEvent(e); 291 QListView::contentsMouseReleaseEvent(e);
292 mMousePressed = false; 292 mMousePressed = false;
293} 293}
294 294
295void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e) 295void KOTodoListView::contentsMouseDoubleClickEvent(QMouseEvent *e)
296{ 296{
297 if (!e) return; 297 if (!e) return;
298 298
299 QPoint vp = contentsToViewport(e->pos()); 299 QPoint vp = contentsToViewport(e->pos());
300 300
301 QListViewItem *item = itemAt(vp); 301 QListViewItem *item = itemAt(vp);
302 302
303 emit double_Clicked(item); 303 emit double_Clicked(item);
304 if (!item) return; 304 if (!item) return;
305 305
306 emit doubleClicked(item,vp,0); 306 emit doubleClicked(item,vp,0);
307} 307}
308 308
309///////////////////////////////////////////////////////////////////////////// 309/////////////////////////////////////////////////////////////////////////////
310 310
311KOQuickTodo::KOQuickTodo(QWidget *parent) : 311KOQuickTodo::KOQuickTodo(QWidget *parent) :
312 QLineEdit(parent) 312 QLineEdit(parent)
313{ 313{
314 setText(i18n("Click to add a new Todo")); 314 setText(i18n("Click to add a new Todo"));
315} 315}
316 316
317void KOQuickTodo::focusInEvent(QFocusEvent *ev) 317void KOQuickTodo::focusInEvent(QFocusEvent *ev)
318{ 318{
319 if ( text()==i18n("Click to add a new Todo") ) 319 if ( text()==i18n("Click to add a new Todo") )
320 setText(""); 320 setText("");
321 QLineEdit::focusInEvent(ev); 321 QLineEdit::focusInEvent(ev);
322} 322}
323 323
324void KOQuickTodo::focusOutEvent(QFocusEvent *ev) 324void KOQuickTodo::focusOutEvent(QFocusEvent *ev)
325{ 325{
326 setText(i18n("Click to add a new Todo")); 326 setText(i18n("Click to add a new Todo"));
327 QLineEdit::focusOutEvent(ev); 327 QLineEdit::focusOutEvent(ev);
328} 328}
329 329
330///////////////////////////////////////////////////////////////////////////// 330/////////////////////////////////////////////////////////////////////////////
331 331
332KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) : 332KOTodoView::KOTodoView(Calendar *calendar,QWidget* parent,const char* name) :
333 KOrg::BaseView(calendar,parent,name) 333 KOrg::BaseView(calendar,parent,name)
334{ 334{
335 mNavigator = 0; 335 mNavigator = 0;
336 QBoxLayout *topLayout = new QVBoxLayout(this); 336 QBoxLayout *topLayout = new QVBoxLayout(this);
337 mName = QString ( name ); 337 mName = QString ( name );
338 mBlockUpdate = false; 338 mBlockUpdate = false;
339 mQuickAdd = new KOQuickTodo(this); 339 mQuickAdd = new KOQuickTodo(this);
340 topLayout->addWidget(mQuickAdd); 340 topLayout->addWidget(mQuickAdd);
341 341
342 if ( !KOPrefs::instance()->mEnableQuickTodo ) mQuickAdd->hide(); 342 if ( !KOPrefs::instance()->mEnableQuickTodo ) mQuickAdd->hide();
343 343
344 mTodoListView = new KOTodoListView(calendar,this, name ); 344 mTodoListView = new KOTodoListView(calendar,this, name );
345 topLayout->addWidget(mTodoListView); 345 topLayout->addWidget(mTodoListView);
346 //mTodoListView->header()->setMaximumHeight(30); 346 //mTodoListView->header()->setMaximumHeight(30);
347 mTodoListView->setRootIsDecorated(true); 347 mTodoListView->setRootIsDecorated(true);
348 mTodoListView->setAllColumnsShowFocus(true); 348 mTodoListView->setAllColumnsShowFocus(true);
349 349
350 mTodoListView->setShowSortIndicator(true); 350 mTodoListView->setShowSortIndicator(true);
351 351
352 mTodoListView->addColumn(i18n("Todo")); 352 mTodoListView->addColumn(i18n("Todo"));
353 mTodoListView->addColumn(i18n("Prio")); 353 mTodoListView->addColumn(i18n("Prio"));
354 mTodoListView->setColumnAlignment(1,AlignHCenter); 354 mTodoListView->setColumnAlignment(1,AlignHCenter);
355 mTodoListView->addColumn(i18n("Complete")); 355 mTodoListView->addColumn(i18n("Complete"));
356 mTodoListView->setColumnAlignment(2,AlignCenter); 356 mTodoListView->setColumnAlignment(2,AlignCenter);
357 357
358 mTodoListView->addColumn(i18n("Due Date")); 358 mTodoListView->addColumn(i18n("Due Date"));
359 mTodoListView->setColumnAlignment(3,AlignLeft); 359 mTodoListView->setColumnAlignment(3,AlignLeft);
360 mTodoListView->addColumn(i18n("Due Time")); 360 mTodoListView->addColumn(i18n("Due Time"));
361 mTodoListView->setColumnAlignment(4,AlignHCenter); 361 mTodoListView->setColumnAlignment(4,AlignHCenter);
362 362
363 mTodoListView->addColumn(i18n("Start Date")); 363 mTodoListView->addColumn(i18n("Start Date"));
364 mTodoListView->setColumnAlignment(5,AlignLeft); 364 mTodoListView->setColumnAlignment(5,AlignLeft);
365 mTodoListView->addColumn(i18n("Start Time")); 365 mTodoListView->addColumn(i18n("Start Time"));
366 mTodoListView->setColumnAlignment(6,AlignHCenter); 366 mTodoListView->setColumnAlignment(6,AlignHCenter);
367 367
368 mTodoListView->addColumn(i18n("Cancelled")); 368 mTodoListView->addColumn(i18n("Cancelled"));
369 mTodoListView->addColumn(i18n("Categories")); 369 mTodoListView->addColumn(i18n("Categories"));
370#if 0 370#if 0
371 mTodoListView->addColumn(i18n("Sort Id")); 371 mTodoListView->addColumn(i18n("Sort Id"));
372 mTodoListView->setColumnAlignment(4,AlignHCenter); 372 mTodoListView->setColumnAlignment(4,AlignHCenter);
373#endif 373#endif
374 374
375 mTodoListView->setMinimumHeight( 60 ); 375 mTodoListView->setMinimumHeight( 60 );
376 mTodoListView->setItemsRenameable( true ); 376 mTodoListView->setItemsRenameable( true );
377 mTodoListView->setRenameable( 0 ); 377 mTodoListView->setRenameable( 0 );
378 mTodoListView->setColumnWidth( 0, 120 ); 378 mTodoListView->setColumnWidth( 0, 120 );
379 mTodoListView->setColumnWidthMode(0, QListView::Manual); 379 mTodoListView->setColumnWidthMode(0, QListView::Manual);
380 mTodoListView->setColumnWidthMode(1, QListView::Manual); 380 mTodoListView->setColumnWidthMode(1, QListView::Manual);
381 mTodoListView->setColumnWidthMode(2, QListView::Manual); 381 mTodoListView->setColumnWidthMode(2, QListView::Manual);
382 mTodoListView->setColumnWidthMode(3, QListView::Manual); 382 mTodoListView->setColumnWidthMode(3, QListView::Manual);
383 mTodoListView->setColumnWidthMode(4, QListView::Manual); 383 mTodoListView->setColumnWidthMode(4, QListView::Manual);
384 mTodoListView->setColumnWidthMode(5, QListView::Manual); 384 mTodoListView->setColumnWidthMode(5, QListView::Manual);
385 mTodoListView->setColumnWidthMode(6, QListView::Manual); 385 mTodoListView->setColumnWidthMode(6, QListView::Manual);
386 mTodoListView->setColumnWidthMode(7, QListView::Manual); 386 mTodoListView->setColumnWidthMode(7, QListView::Manual);
387 mTodoListView->setColumnWidthMode(8, QListView::Manual); 387 mTodoListView->setColumnWidthMode(8, QListView::Manual);
388 388
389 389
390 mPriorityPopupMenu = new QPopupMenu(this); 390 mPriorityPopupMenu = new QPopupMenu(this);
391 for (int i = 1; i <= 5; i++) { 391 for (int i = 1; i <= 5; i++) {
392 QString label = QString ("%1").arg (i); 392 QString label = QString ("%1").arg (i);
393 mPriority[mPriorityPopupMenu->insertItem (label)] = i; 393 mPriority[mPriorityPopupMenu->insertItem (label)] = i;
394 } 394 }
395 connect (mPriorityPopupMenu, SIGNAL(activated (int)), SLOT (setNewPriority(int))); 395 connect (mPriorityPopupMenu, SIGNAL(activated (int)), SLOT (setNewPriority(int)));
396 396
397 mPercentageCompletedPopupMenu = new QPopupMenu(this); 397 mPercentageCompletedPopupMenu = new QPopupMenu(this);
398 for (int i = 0; i <= 100; i+=20) { 398 for (int i = 0; i <= 100; i+=20) {
399 QString label = QString ("%1 %").arg (i); 399 QString label = QString ("%1 %").arg (i);
400 mPercentage[mPercentageCompletedPopupMenu->insertItem (label)] = i; 400 mPercentage[mPercentageCompletedPopupMenu->insertItem (label)] = i;
401 } 401 }
402 connect (mPercentageCompletedPopupMenu, SIGNAL (activated (int)), SLOT (setNewPercentage (int))); 402 connect (mPercentageCompletedPopupMenu, SIGNAL (activated (int)), SLOT (setNewPercentage (int)));
403 403
404 404
405 405
406 mItemPopupMenu = new QPopupMenu(this); 406 mItemPopupMenu = new QPopupMenu(this);
407 mItemPopupMenu->insertItem(i18n("Show..."), this, 407 mItemPopupMenu->insertItem(i18n("Show..."), this,
408 SLOT (showTodo())); 408 SLOT (showTodo()));
409 mItemPopupMenu->insertItem(i18n("Edit..."), this, 409 mItemPopupMenu->insertItem(i18n("Edit..."), this,
410 SLOT (editTodo())); 410 SLOT (editTodo()));
411 mItemPopupMenu->insertItem( i18n("Delete"), this, 411 mItemPopupMenu->insertItem( i18n("Delete"), this,
412 SLOT (deleteTodo())); 412 SLOT (deleteTodo()));
413 mItemPopupMenu->insertItem( i18n("Clone..."), this, 413 mItemPopupMenu->insertItem( i18n("Clone..."), this,
414 SLOT (cloneTodo())); 414 SLOT (cloneTodo()));
415 mItemPopupMenu->insertItem( i18n("Move..."), this, 415 mItemPopupMenu->insertItem( i18n("Move..."), this,
416 SLOT (moveTodo())); 416 SLOT (moveTodo()));
417 mItemPopupMenu->insertItem( i18n("Beam..."), this, 417 mItemPopupMenu->insertItem( i18n("Beam..."), this,
418 SLOT (beamTodo())); 418 SLOT (beamTodo()));
419 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this, 419 mItemPopupMenu->insertItem( i18n("Toggle Cancel"), this,
420 SLOT (cancelTodo())); 420 SLOT (cancelTodo()));
421 mItemPopupMenu->insertSeparator(); 421 mItemPopupMenu->insertSeparator();
422 422
423 mItemPopupMenu->insertItem( i18n("New Todo..."), this, 423 mItemPopupMenu->insertItem( i18n("New Todo..."), this,
424 SLOT (newTodo())); 424 SLOT (newTodo()));
425 mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this, 425 mItemPopupMenu->insertItem(i18n("New Sub-Todo..."), this,
426 SLOT (newSubTodo())); 426 SLOT (newSubTodo()));
427 mItemPopupMenu->insertItem(i18n("Unparent Todo"), this, 427 mItemPopupMenu->insertItem(i18n("Unparent Todo"), this,
428 SLOT (unparentTodo()),0,21); 428 SLOT (unparentTodo()),0,21);
429 mItemPopupMenu->insertItem(i18n("Reparent Todo"), this, 429 mItemPopupMenu->insertItem(i18n("Reparent Todo"), this,
430 SLOT (reparentTodo()),0,22); 430 SLOT (reparentTodo()),0,22);
431 mItemPopupMenu->insertSeparator(); 431 mItemPopupMenu->insertSeparator();
432#if 0 432#if 0
433 mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed"), 433 mItemPopupMenu->insertItem(i18n("Delete completed To-Dos","Purge Completed"),
434 this, SLOT( purgeCompleted() ) ); 434 this, SLOT( purgeCompleted() ) );
435 mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"), 435 mItemPopupMenu->insertItem(i18n("toggle completed To-Dos","Show Completed"),
436 this, SLOT( toggleCompleted() ),0, 33 ); 436 this, SLOT( toggleCompleted() ),0, 33 );
437 mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), 437 mItemPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"),
438 this, SLOT( toggleQuickTodo() ),0, 34 ); 438 this, SLOT( toggleQuickTodo() ),0, 34 );
439 mItemPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"), 439 mItemPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"),
440 this, SLOT( toggleRunning() ),0, 35 ); 440 this, SLOT( toggleRunning() ),0, 35 );
441 441
442#endif 442#endif
443 mPopupMenu = new QPopupMenu(this); 443 mPopupMenu = new QPopupMenu(this);
444 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this, 444 mPopupMenu->insertItem(SmallIconSet("todo"), i18n("New Todo..."), this,
445 SLOT (newTodo()),0,1); 445 SLOT (newTodo()),0,1);
446 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed"), 446 mPopupMenu->insertItem(i18n("delete completed To-Dos","Purge Completed"),
447 this, SLOT(purgeCompleted()),0,2); 447 this, SLOT(purgeCompleted()),0,2);
448 mPopupMenu->insertItem(i18n("Show Completed"), 448 mPopupMenu->insertItem(i18n("Show Completed"),
449 this, SLOT( toggleCompleted() ),0,3 ); 449 this, SLOT( toggleCompleted() ),0,3 );
450 mPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"), 450 mPopupMenu->insertItem(i18n("toggle quick todo","Show Quick Todo"),
451 this, SLOT( toggleQuickTodo() ),0,4 ); 451 this, SLOT( toggleQuickTodo() ),0,4 );
452 mPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"), 452 mPopupMenu->insertItem(i18n("toggle running todo","Hide not Running"),
453 this, SLOT( toggleRunning() ),0,5 ); 453 this, SLOT( toggleRunning() ),0,5 );
454 mPopupMenu->insertItem(i18n(" set all open","Display all opened"), 454 mPopupMenu->insertItem(i18n(" set all open","Display all opened"),
455 this, SLOT( setAllOpen() ),0,6 ); 455 this, SLOT( setAllOpen() ),0,6 );
456 mPopupMenu->insertItem(i18n(" set all close","Display all closed"), 456 mPopupMenu->insertItem(i18n(" set all close","Display all closed"),
457 this, SLOT( setAllClose() ),0,7 ); 457 this, SLOT( setAllClose() ),0,7 );
458 mPopupMenu->insertItem(i18n(" set all flat","Display all flat"), 458 mPopupMenu->insertItem(i18n(" set all flat","Display all flat"),
459 this, SLOT( setAllFlat() ),0,8 ); 459 this, SLOT( setAllFlat() ),0,8 );
460 mDocPrefs = new DocPrefs( name ); 460 mDocPrefs = new DocPrefs( name );
461 461
462 mItemPopupMenu->insertItem(i18n("Todo View"),mPopupMenu ); 462 mItemPopupMenu->insertItem(i18n("Todo View"),mPopupMenu );
463 mPopupMenu->setCheckable( true ); 463 mPopupMenu->setCheckable( true );
464 mItemPopupMenu->setCheckable( true ); 464 mItemPopupMenu->setCheckable( true );
465 465
466 466
467 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo ); 467 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo );
468 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo ); 468 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo );
469 469
470 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo); 470 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo);
471 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo ); 471 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo );
472 472
473 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos); 473 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos);
474 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos ); 474 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos );
475 475
476 476
477 // Double clicking conflicts with opening/closing the subtree 477 // Double clicking conflicts with opening/closing the subtree
478 connect( mTodoListView, SIGNAL( doubleClicked( QListViewItem *) ), 478 connect( mTodoListView, SIGNAL( doubleClicked( QListViewItem *) ),
479 SLOT( editItem( QListViewItem *) ) ); 479 SLOT( editItem( QListViewItem *) ) );
480 /* 480 /*
481 connect( mTodoListView, SIGNAL( rightButtonClicked ( QListViewItem *, 481 connect( mTodoListView, SIGNAL( rightButtonClicked ( QListViewItem *,
482 const QPoint &,int ) ), 482 const QPoint &,int ) ),
483 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) ); 483 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) );
484 */ 484 */
485 connect( mTodoListView, SIGNAL( contextRequest ( QListViewItem *, 485 connect( mTodoListView, SIGNAL( contextRequest ( QListViewItem *,
486 const QPoint &,int ) ), 486 const QPoint &,int ) ),
487 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) ); 487 SLOT( popupMenu( QListViewItem *, const QPoint & ,int) ) );
488 connect( mTodoListView, SIGNAL( clicked( QListViewItem * ) ), 488 connect( mTodoListView, SIGNAL( clicked( QListViewItem * ) ),
489 SLOT( itemClicked( QListViewItem * ) ) ); 489 SLOT( itemClicked( QListViewItem * ) ) );
490 connect( mTodoListView, SIGNAL( double_Clicked( QListViewItem * ) ), 490 connect( mTodoListView, SIGNAL( double_Clicked( QListViewItem * ) ),
491 SLOT( itemDoubleClicked( QListViewItem * ) ) ); 491 SLOT( itemDoubleClicked( QListViewItem * ) ) );
492 connect( mTodoListView, SIGNAL( todoDropped( Todo * ) ), 492 connect( mTodoListView, SIGNAL( todoDropped( Todo * ) ),
493 SLOT( updateView() ) ); 493 SLOT( updateView() ) );
494 connect( mTodoListView, SIGNAL( expanded( QListViewItem * ) ), 494 connect( mTodoListView, SIGNAL( expanded( QListViewItem * ) ),
495 SLOT( itemStateChanged( QListViewItem * ) ) ); 495 SLOT( itemStateChanged( QListViewItem * ) ) );
496 connect( mTodoListView, SIGNAL( collapsed( QListViewItem * ) ), 496 connect( mTodoListView, SIGNAL( collapsed( QListViewItem * ) ),
497 SLOT( itemStateChanged( QListViewItem * ) ) ); 497 SLOT( itemStateChanged( QListViewItem * ) ) );
498 498
499#if 0 499#if 0
500 connect(mTodoListView,SIGNAL(selectionChanged(QListViewItem *)), 500 connect(mTodoListView,SIGNAL(selectionChanged(QListViewItem *)),
501 SLOT(selectionChanged(QListViewItem *))); 501 SLOT(selectionChanged(QListViewItem *)));
502 connect(mTodoListView,SIGNAL(clicked(QListViewItem *)), 502 connect(mTodoListView,SIGNAL(clicked(QListViewItem *)),
503 SLOT(selectionChanged(QListViewItem *))); 503 SLOT(selectionChanged(QListViewItem *)));
504 connect(mTodoListView,SIGNAL(pressed(QListViewItem *)), 504 connect(mTodoListView,SIGNAL(pressed(QListViewItem *)),
505 SLOT(selectionChanged(QListViewItem *))); 505 SLOT(selectionChanged(QListViewItem *)));
506#endif 506#endif
507 connect( mTodoListView, SIGNAL(selectionChanged() ), 507 connect( mTodoListView, SIGNAL(selectionChanged() ),
508 SLOT( processSelectionChange() ) ); 508 SLOT( processSelectionChange() ) );
509 connect( mQuickAdd, SIGNAL( returnPressed () ), 509 connect( mQuickAdd, SIGNAL( returnPressed () ),
510 SLOT( addQuickTodo() ) ); 510 SLOT( addQuickTodo() ) );
511 511
512} 512}
513 513
514KOTodoView::~KOTodoView() 514KOTodoView::~KOTodoView()
515{ 515{
516 delete mDocPrefs; 516 delete mDocPrefs;
517} 517}
518 518
519void KOTodoView::jumpToDate () 519void KOTodoView::jumpToDate ()
520{ 520{
521 // if (mActiveItem) { 521 // if (mActiveItem) {
522// mActiveItem->todo()); 522// mActiveItem->todo());
523// if ( mActiveItem->todo()->hasDueDate() ) 523// if ( mActiveItem->todo()->hasDueDate() )
524// emit mActiveItem->todo()jumpToTime( mTodo->dtDue().date() ); 524// emit mActiveItem->todo()jumpToTime( mTodo->dtDue().date() );
525} 525}
526 526
527void KOTodoView::updateView() 527void KOTodoView::updateView()
528{ 528{
529 pendingSubtodo = 0; 529 pendingSubtodo = 0;
530 if ( mBlockUpdate ) { 530 if ( mBlockUpdate ) {
531 //qDebug("blocked "); 531 //qDebug("blocked ");
532 return; 532 return;
533 } 533 }
534 if ( isFlatDisplay ) { 534 if ( isFlatDisplay ) {
535 setAllFlat(); 535 setAllFlat();
536 return; 536 return;
537 } 537 }
538 //qDebug("update "); 538 //qDebug("update ");
539// kdDebug() << "KOTodoView::updateView()" << endl; 539// kdDebug() << "KOTodoView::updateView()" << endl;
540 QFont fo = KOPrefs::instance()->mTodoViewFont; 540 QFont fo = KOPrefs::instance()->mTodoViewFont;
541 mTodoListView->clear(); 541 mTodoListView->clear();
542 if ( mName == "todolistsmall" ) { 542 if ( mName == "todolistsmall" ) {
543 if ( KOPrefs::instance()->mTodoViewUsesSmallFont ) { 543 if ( KOPrefs::instance()->mTodoViewUsesSmallFont ) {
544 int ps = fo.pointSize() -2; 544 int ps = fo.pointSize() -2;
545 if ( ps > 12 ) 545 if ( ps > 12 )
546 ps -= 2; 546 ps -= 2;
547 fo.setPointSize( ps ); 547 fo.setPointSize( ps );
548 } 548 }
549 } 549 }
550 550
551 mTodoListView->setFont( fo ); 551 mTodoListView->setFont( fo );
552 // QFontMetrics fm ( KOPrefs::instance()->mTodoViewFont ); 552 // QFontMetrics fm ( KOPrefs::instance()->mTodoViewFont );
553 //mTodoListView->header()->setMaximumHeight(fm.height()); 553 //mTodoListView->header()->setMaximumHeight(fm.height());
554 QPtrList<Todo> todoList = calendar()->todos(); 554 QPtrList<Todo> todoList = calendar()->todos();
555 555
556/* 556/*
557 kdDebug() << "KOTodoView::updateView(): Todo List:" << endl; 557 kdDebug() << "KOTodoView::updateView(): Todo List:" << endl;
558 Event *t; 558 Event *t;
559 for(t = todoList.first(); t; t = todoList.next()) { 559 for(t = todoList.first(); t; t = todoList.next()) {
560 kdDebug() << " " << t->getSummary() << endl; 560 kdDebug() << " " << t->getSummary() << endl;
561 561
562 if (t->getRelatedTo()) { 562 if (t->getRelatedTo()) {
563 kdDebug() << " (related to " << t->getRelatedTo()->getSummary() << ")" << endl; 563 kdDebug() << " (related to " << t->getRelatedTo()->getSummary() << ")" << endl;
564 } 564 }
565 565
566 QPtrList<Event> l = t->getRelations(); 566 QPtrList<Event> l = t->getRelations();
567 Event *c; 567 Event *c;
568 for(c=l.first();c;c=l.next()) { 568 for(c=l.first();c;c=l.next()) {
569 kdDebug() << " - relation: " << c->getSummary() << endl; 569 kdDebug() << " - relation: " << c->getSummary() << endl;
570 } 570 }
571 } 571 }
572*/ 572*/
573 573
574 // Put for each Event a KOTodoViewItem in the list view. Don't rely on a 574 // Put for each Event a KOTodoViewItem in the list view. Don't rely on a
575 // specific order of events. That means that we have to generate parent items 575 // specific order of events. That means that we have to generate parent items
576 // recursively for proper hierarchical display of Todos. 576 // recursively for proper hierarchical display of Todos.
577 mTodoMap.clear(); 577 mTodoMap.clear();
578 Todo *todo; 578 Todo *todo;
579 todo = todoList.first();// todo; todo = todoList.next()) { 579 todo = todoList.first();// todo; todo = todoList.next()) {
580 while ( todo ) { 580 while ( todo ) {
581 bool next = true; 581 bool next = true;
582 // qDebug("todo %s ", todo->summary().latin1()); 582 // qDebug("todo %s ", todo->summary().latin1());
583 Incidence *incidence = todo->relatedTo(); 583 Incidence *incidence = todo->relatedTo();
584 while ( incidence ) { 584 while ( incidence ) {
585 if ( incidence->type() == "Todo") { 585 if ( incidence->type() == "Todo") {
586 //qDebug("related %s ",incidence->summary().latin1() ); 586 //qDebug("related %s ",incidence->summary().latin1() );
587 if ( !(todoList.contains ( ((Todo* )incidence ) ) )) { 587 if ( !(todoList.contains ( ((Todo* )incidence ) ) )) {
588 //qDebug("related not found "); 588 //qDebug("related not found ");
589 todoList.remove( ); 589 todoList.remove( );
590 todo = todoList.current(); 590 todo = todoList.current();
591 next = false; 591 next = false;
592 incidence = 0; 592 incidence = 0;
593 593
594 } else { 594 } else {
595 //qDebug("related found "); 595 //qDebug("related found ");
596 incidence = incidence->relatedTo(); 596 incidence = incidence->relatedTo();
597 } 597 }
598 } else 598 } else
599 incidence = 0; 599 incidence = 0;
600 } 600 }
601 if ( next ) 601 if ( next )
602 todo = todoList.next(); 602 todo = todoList.next();
603 } 603 }
604// qDebug("again .... "); 604// qDebug("again .... ");
605// for(todo = todoList.first(); todo; todo = todoList.next()) { 605// for(todo = todoList.first(); todo; todo = todoList.next()) {
606 606
607// qDebug("yytodo %s ", todo->summary().latin1()); 607// qDebug("yytodo %s ", todo->summary().latin1());
608// } 608// }
609 //qDebug("for "); 609 //qDebug("for ");
610 for(todo = todoList.first(); todo; todo = todoList.next()) { 610 for(todo = todoList.first(); todo; todo = todoList.next()) {
611 if (!mTodoMap.contains(todo) && checkTodo( todo ) ) 611 if (!mTodoMap.contains(todo) && checkTodo( todo ) )
612 { 612 {
613 insertTodoItem(todo); 613 insertTodoItem(todo);
614 } 614 }
615 } 615 }
616 //qDebug("for end "); 616 //qDebug("for end ");
617 // Restore opened/closed state 617 // Restore opened/closed state
618 mTodoListView->blockSignals( true ); 618 mTodoListView->blockSignals( true );
619 if( mDocPrefs ) restoreItemState( mTodoListView->firstChild() ); 619 if( mDocPrefs ) restoreItemState( mTodoListView->firstChild() );
620 mTodoListView->blockSignals( false ); 620 mTodoListView->blockSignals( false );
621 mTodoListView->setFocus(); 621 mTodoListView->setFocus();
622 processSelectionChange(); 622 processSelectionChange();
623} 623}
624 624
625bool KOTodoView::checkTodo( Todo * todo ) 625bool KOTodoView::checkTodo( Todo * todo )
626{ 626{
627 627
628 if ( !KOPrefs::instance()->mShowCompletedTodo && todo->isCompleted() ) 628 if ( !KOPrefs::instance()->mShowCompletedTodo && todo->isCompleted() )
629 return false; 629 return false;
630 if ( KOPrefs::instance()->mHideNonStartedTodos && mNavigator ) { 630 if ( KOPrefs::instance()->mHideNonStartedTodos && mNavigator ) {
631 if ( todo->hasStartDate() ) 631 if ( todo->hasStartDate() )
632 if ( mNavigator->selectedDates().last() < todo->dtStart().date() ) 632 if ( mNavigator->selectedDates().last() < todo->dtStart().date() )
633 return false; 633 return false;
634 if ( todo->hasDueDate() ) 634 if ( todo->hasDueDate() )
635 if ( mNavigator->selectedDates().first() > todo->dtDue().date() ) 635 if ( mNavigator->selectedDates().first() > todo->dtDue().date() )
636 return false; 636 return false;
637 } 637 }
638 return true; 638 return true;
639} 639}
640 640
641void KOTodoView::restoreItemState( QListViewItem *item ) 641void KOTodoView::restoreItemState( QListViewItem *item )
642{ 642{
643 pendingSubtodo = 0; 643 pendingSubtodo = 0;
644 while( item ) { 644 while( item ) {
645 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 645 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
646 todoItem->setOpen( mDocPrefs->readBoolEntry( todoItem->todo()->uid() ) ); 646 todoItem->setOpen( mDocPrefs->readBoolEntry( todoItem->todo()->uid() ) );
647 if( item->childCount() > 0 ) restoreItemState( item->firstChild() ); 647 if( item->childCount() > 0 ) restoreItemState( item->firstChild() );
648 item = item->nextSibling(); 648 item = item->nextSibling();
649 } 649 }
650} 650}
651 651
652 652
653QMap<Todo *,KOTodoViewItem *>::ConstIterator 653QMap<Todo *,KOTodoViewItem *>::ConstIterator
654 KOTodoView::insertTodoItem(Todo *todo) 654 KOTodoView::insertTodoItem(Todo *todo)
655{ 655{
656 656
657// kdDebug() << "KOTodoView::insertTodoItem(): " << todo->getSummary() << endl; 657// kdDebug() << "KOTodoView::insertTodoItem(): " << todo->getSummary() << endl;
658 // TODO: Check, if dynmaic cast is necessary 658 // TODO: Check, if dynmaic cast is necessary
659 659
660 pendingSubtodo = 0; 660 pendingSubtodo = 0;
661 Incidence *incidence = todo->relatedTo(); 661 Incidence *incidence = todo->relatedTo();
662 if (incidence && incidence->type() == "Todo") { 662 if (incidence && incidence->type() == "Todo") {
663 Todo *relatedTodo = static_cast<Todo *>(incidence); 663 Todo *relatedTodo = static_cast<Todo *>(incidence);
664 664
665// kdDebug() << " has Related" << endl; 665// kdDebug() << " has Related" << endl;
666 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator; 666 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator;
667 itemIterator = mTodoMap.find(relatedTodo); 667 itemIterator = mTodoMap.find(relatedTodo);
668 if (itemIterator == mTodoMap.end()) { 668 if (itemIterator == mTodoMap.end()) {
669// kdDebug() << " related not yet in list" << endl; 669// kdDebug() << " related not yet in list" << endl;
670 itemIterator = insertTodoItem (relatedTodo); 670 itemIterator = insertTodoItem (relatedTodo);
671 } 671 }
672 // isn't this pretty stupid? We give one Todo to the KOTodoViewItem 672 // isn't this pretty stupid? We give one Todo to the KOTodoViewItem
673 // and one into the map. Sure finding is more easy but why? -zecke 673 // and one into the map. Sure finding is more easy but why? -zecke
674 KOTodoViewItem *todoItem = new KOTodoViewItem(*itemIterator,todo,this); 674 KOTodoViewItem *todoItem = new KOTodoViewItem(*itemIterator,todo,this);
675 return mTodoMap.insert(todo,todoItem); 675 return mTodoMap.insert(todo,todoItem);
676 } else { 676 } else {
677// kdDebug() << " no Related" << endl; 677// kdDebug() << " no Related" << endl;
678 // see above -zecke 678 // see above -zecke
679 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this); 679 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this);
680 return mTodoMap.insert(todo,todoItem); 680 return mTodoMap.insert(todo,todoItem);
681 } 681 }
682} 682}
683 683
684 684
685void KOTodoView::updateConfig() 685void KOTodoView::updateConfig()
686{ 686{
687 updateView(); 687 updateView();
688 mTodoListView->repaintContents(); 688 mTodoListView->repaintContents();
689} 689}
690 690
691QPtrList<Incidence> KOTodoView::selectedIncidences() 691QPtrList<Incidence> KOTodoView::selectedIncidences()
692{ 692{
693 QPtrList<Incidence> selected; 693 QPtrList<Incidence> selected;
694 694
695 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem()); 695 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem());
696// if (!item) item = mActiveItem; 696// if (!item) item = mActiveItem;
697 if (item) selected.append(item->todo()); 697 if (item) selected.append(item->todo());
698 698
699 return selected; 699 return selected;
700} 700}
701 701
702QPtrList<Todo> KOTodoView::selectedTodos() 702QPtrList<Todo> KOTodoView::selectedTodos()
703{ 703{
704 QPtrList<Todo> selected; 704 QPtrList<Todo> selected;
705 705
706 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem()); 706 KOTodoViewItem *item = (KOTodoViewItem *)(mTodoListView->selectedItem());
707// if (!item) item = mActiveItem; 707// if (!item) item = mActiveItem;
708 if (item) selected.append(item->todo()); 708 if (item) selected.append(item->todo());
709 709
710 return selected; 710 return selected;
711} 711}
712 712
713void KOTodoView::changeEventDisplay(Event *, int) 713void KOTodoView::changeEventDisplay(Event *, int)
714{ 714{
715 updateView(); 715 updateView();
716} 716}
717 717
718void KOTodoView::showDates(const QDate &, const QDate &) 718void KOTodoView::showDates(const QDate &, const QDate &)
719{ 719{
720} 720}
721 721
722void KOTodoView::showEvents(QPtrList<Event>) 722void KOTodoView::showEvents(QPtrList<Event>)
723{ 723{
724 kdDebug() << "KOTodoView::selectEvents(): not yet implemented" << endl; 724 kdDebug() << "KOTodoView::selectEvents(): not yet implemented" << endl;
725} 725}
726 726
727void KOTodoView::printPreview(CalPrinter *calPrinter, const QDate &fd, 727void KOTodoView::printPreview(CalPrinter *calPrinter, const QDate &fd,
728 const QDate &td) 728 const QDate &td)
729{ 729{
730#ifndef KORG_NOPRINTER 730#ifndef KORG_NOPRINTER
731 calPrinter->preview(CalPrinter::Todolist, fd, td); 731 calPrinter->preview(CalPrinter::Todolist, fd, td);
732#endif 732#endif
733} 733}
734 734
735void KOTodoView::editItem(QListViewItem *item ) 735void KOTodoView::editItem(QListViewItem *item )
736{ 736{
737 // qDebug("editItem(QListViewItem *item ) "); 737 // qDebug("editItem(QListViewItem *item ) ");
738 emit editTodoSignal(((KOTodoViewItem *)item)->todo()); 738 emit editTodoSignal(((KOTodoViewItem *)item)->todo());
739} 739}
740 740
741void KOTodoView::showItem(QListViewItem *item,const QPoint &,int) 741void KOTodoView::showItem(QListViewItem *item,const QPoint &,int)
742{ 742{
743 emit showTodoSignal(((KOTodoViewItem *)item)->todo()); 743 emit showTodoSignal(((KOTodoViewItem *)item)->todo());
744} 744}
745 745
746void KOTodoView::popupMenu(QListViewItem *item,const QPoint &,int column) 746void KOTodoView::popupMenu(QListViewItem *item,const QPoint &,int column)
747{ 747{
748 pendingSubtodo = 0; 748 pendingSubtodo = 0;
749 mActiveItem = (KOTodoViewItem *)item; 749 mActiveItem = (KOTodoViewItem *)item;
750 if (item) { 750 if (item) {
751 switch (column){ 751 switch (column){
752 case 1: 752 case 1:
753 mPriorityPopupMenu->popup(QCursor::pos ()); break; 753 mPriorityPopupMenu->popup(QCursor::pos ()); break;
754 case 2: 754 case 2:
755 mPercentageCompletedPopupMenu->popup(QCursor::pos ()); break; 755 mPercentageCompletedPopupMenu->popup(QCursor::pos ()); break;
756 case 3: 756 case 3:
757 moveTodo(); 757 moveTodo();
758 break; 758 break;
759 case 8: 759 case 8:
760 getCategoryPopupMenu((KOTodoViewItem *)item)->popup(QCursor::pos ()); break; 760 getCategoryPopupMenu((KOTodoViewItem *)item)->popup(QCursor::pos ()); break;
761 default: 761 default:
762 mItemPopupMenu->popup(QCursor::pos()); 762 mItemPopupMenu->popup(QCursor::pos());
763 } 763 }
764 } else mPopupMenu->popup(QCursor::pos()); 764 } else mPopupMenu->popup(QCursor::pos());
765} 765}
766void KOTodoView::newTodo() 766void KOTodoView::newTodo()
767{ 767{
768 emit newTodoSignal(); 768 emit newTodoSignal();
769} 769}
770 770
771void KOTodoView::newSubTodo() 771void KOTodoView::newSubTodo()
772{ 772{
773 if (mActiveItem) { 773 if (mActiveItem) {
774 emit newSubTodoSignal(mActiveItem->todo()); 774 emit newSubTodoSignal(mActiveItem->todo());
775 } 775 }
776} 776}
777void KOTodoView::unparentTodo() 777void KOTodoView::unparentTodo()
778{ 778{
779 if (mActiveItem) { 779 if (mActiveItem) {
780 emit unparentTodoSignal(mActiveItem->todo()); 780 emit unparentTodoSignal(mActiveItem->todo());
781 } 781 }
782} 782}
783 783
784void KOTodoView::reparentTodo() 784void KOTodoView::reparentTodo()
785{ 785{
786 if (mActiveItem) { 786 if (mActiveItem) {
787 qDebug("KOTodoView::reparentTodo() "); 787 qDebug("KOTodoView::reparentTodo() ");
788 topLevelWidget()->setCaption(i18n("Click on new parent item")); 788 topLevelWidget()->setCaption(i18n("Click on new parent item"));
789 pendingSubtodo = mActiveItem; 789 pendingSubtodo = mActiveItem;
790 } 790 }
791} 791}
792void KOTodoView::editTodo() 792void KOTodoView::editTodo()
793{ 793{
794 if (mActiveItem) { 794 if (mActiveItem) {
795 emit editTodoSignal(mActiveItem->todo()); 795 emit editTodoSignal(mActiveItem->todo());
796 } 796 }
797} 797}
798void KOTodoView::cloneTodo() 798void KOTodoView::cloneTodo()
799{ 799{
800 if (mActiveItem) { 800 if (mActiveItem) {
801 emit cloneTodoSignal((Incidence*)mActiveItem->todo()); 801 emit cloneTodoSignal((Incidence*)mActiveItem->todo());
802 } 802 }
803} 803}
804void KOTodoView::cancelTodo() 804void KOTodoView::cancelTodo()
805{ 805{
806 if (mActiveItem) { 806 if (mActiveItem) {
807 emit cancelTodoSignal((Incidence*)mActiveItem->todo()); 807 emit cancelTodoSignal((Incidence*)mActiveItem->todo());
808 } 808 }
809} 809}
810void KOTodoView::moveTodo() 810void KOTodoView::moveTodo()
811{ 811{
812 if (mActiveItem) { 812 if (mActiveItem) {
813 emit moveTodoSignal((Incidence*)mActiveItem->todo()); 813 emit moveTodoSignal((Incidence*)mActiveItem->todo());
814 } 814 }
815} 815}
816void KOTodoView::beamTodo() 816void KOTodoView::beamTodo()
817{ 817{
818 if (mActiveItem) { 818 if (mActiveItem) {
819 emit beamTodoSignal((Incidence*)mActiveItem->todo()); 819 emit beamTodoSignal((Incidence*)mActiveItem->todo());
820 } 820 }
821} 821}
822 822
823 823
824void KOTodoView::showTodo() 824void KOTodoView::showTodo()
825{ 825{
826 if (mActiveItem) { 826 if (mActiveItem) {
827 emit showTodoSignal(mActiveItem->todo()); 827 emit showTodoSignal(mActiveItem->todo());
828 } 828 }
829} 829}
830 830
831void KOTodoView::deleteTodo() 831void KOTodoView::deleteTodo()
832{ 832{
833 if (mActiveItem) { 833 if (mActiveItem) {
834 emit deleteTodoSignal(mActiveItem->todo()); 834 emit deleteTodoSignal(mActiveItem->todo());
835 } 835 }
836} 836}
837 837
838void KOTodoView::setNewPriority(int index) 838void KOTodoView::setNewPriority(int index)
839{ 839{
840 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 840 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
841 mActiveItem->todo()->setPriority(mPriority[index]); 841 mActiveItem->todo()->setPriority(mPriority[index]);
842 mActiveItem->construct(); 842 mActiveItem->construct();
843 todoModified (mActiveItem->todo(), KOGlobals::PRIORITY_MODIFIED); 843 todoModified (mActiveItem->todo(), KOGlobals::PRIORITY_MODIFIED);
844 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 844 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
845 } 845 }
846} 846}
847 847
848void KOTodoView::setNewPercentage(int index) 848void KOTodoView::setNewPercentage(int index)
849{ 849{
850 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 850 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
851 if (mPercentage[index] == 100) { 851 if (mPercentage[index] == 100) {
852 mActiveItem->todo()->setCompleted(QDateTime::currentDateTime()); 852 mActiveItem->todo()->setCompleted(QDateTime::currentDateTime());
853 } else { 853 } else {
854 mActiveItem->todo()->setCompleted(false); 854 mActiveItem->todo()->setCompleted(false);
855 } 855 }
856 mActiveItem->todo()->setPercentComplete(mPercentage[index]); 856 mActiveItem->todo()->setPercentComplete(mPercentage[index]);
857 mActiveItem->construct(); 857 mActiveItem->construct();
858 todoModified (mActiveItem->todo (), KOGlobals::COMPLETION_MODIFIED); 858 todoModified (mActiveItem->todo (), KOGlobals::COMPLETION_MODIFIED);
859 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 859 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
860 } 860 }
861} 861}
862 862
863 863
864QPopupMenu * KOTodoView::getCategoryPopupMenu (KOTodoViewItem *todoItem) 864QPopupMenu * KOTodoView::getCategoryPopupMenu (KOTodoViewItem *todoItem)
865{ 865{
866 QPopupMenu* tempMenu = new QPopupMenu (this); 866 QPopupMenu* tempMenu = new QPopupMenu (this);
867 QStringList checkedCategories = todoItem->todo()->categories (); 867 QStringList checkedCategories = todoItem->todo()->categories ();
868 868
869 tempMenu->setCheckable (true); 869 tempMenu->setCheckable (true);
870 for (QStringList::Iterator it = KOPrefs::instance()->mCustomCategories.begin (); 870 for (QStringList::Iterator it = KOPrefs::instance()->mCustomCategories.begin ();
871 it != KOPrefs::instance()->mCustomCategories.end (); 871 it != KOPrefs::instance()->mCustomCategories.end ();
872 ++it) { 872 ++it) {
873 int index = tempMenu->insertItem (*it); 873 int index = tempMenu->insertItem (*it);
874 mCategory[index] = *it; 874 mCategory[index] = *it;
875 if (checkedCategories.find (*it) != checkedCategories.end ()) tempMenu->setItemChecked (index, true); 875 if (checkedCategories.find (*it) != checkedCategories.end ()) tempMenu->setItemChecked (index, true);
876 } 876 }
877 877
878 connect (tempMenu, SIGNAL (activated (int)), SLOT (changedCategories (int))); 878 connect (tempMenu, SIGNAL (activated (int)), SLOT (changedCategories (int)));
879 return tempMenu; 879 return tempMenu;
880 880
881 881
882} 882}
883void KOTodoView::changedCategories(int index) 883void KOTodoView::changedCategories(int index)
884{ 884{
885 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) { 885 if (mActiveItem && !mActiveItem->todo()->isReadOnly ()) {
886 QStringList categories = mActiveItem->todo()->categories (); 886 QStringList categories = mActiveItem->todo()->categories ();
887 if (categories.find (mCategory[index]) != categories.end ()) 887 if (categories.find (mCategory[index]) != categories.end ())
888 categories.remove (mCategory[index]); 888 categories.remove (mCategory[index]);
889 else 889 else
890 categories.insert (categories.end(), mCategory[index]); 890 categories.insert (categories.end(), mCategory[index]);
891 categories.sort (); 891 categories.sort ();
892 mActiveItem->todo()->setCategories (categories); 892 mActiveItem->todo()->setCategories (categories);
893 mActiveItem->construct(); 893 mActiveItem->construct();
894 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 ); 894 mActiveItem->todo()->setRevision( mActiveItem->todo()->revision()+1 );
895 todoModified (mActiveItem->todo (), KOGlobals::CATEGORY_MODIFIED); 895 todoModified (mActiveItem->todo (), KOGlobals::CATEGORY_MODIFIED);
896 } 896 }
897} 897}
898void KOTodoView::itemDoubleClicked(QListViewItem *item) 898void KOTodoView::itemDoubleClicked(QListViewItem *item)
899{ 899{
900 if ( pendingSubtodo != 0 ) { 900 if ( pendingSubtodo != 0 ) {
901 topLevelWidget()->setCaption(i18n("Reparenting aborted!")); 901 topLevelWidget()->setCaption(i18n("Reparenting aborted!"));
902 } 902 }
903 pendingSubtodo = 0; 903 pendingSubtodo = 0;
904 if (!item) { 904 if (!item) {
905 newTodo(); 905 newTodo();
906 return; 906 return;
907 } 907 }
908 if ( KOPrefs::instance()->mEditOnDoubleClick ) 908 if ( KOPrefs::instance()->mEditOnDoubleClick )
909 editItem( item ); 909 editItem( item );
910 else 910 else
911 showItem( item , QPoint(), 0 ); 911 showItem( item , QPoint(), 0 );
912} 912}
913void KOTodoView::itemClicked(QListViewItem *item) 913void KOTodoView::itemClicked(QListViewItem *item)
914{ 914{
915 915
916 if (!item) { 916 if (!item) {
917 if ( pendingSubtodo != 0 ) { 917 if ( pendingSubtodo != 0 ) {
918 topLevelWidget()->setCaption(i18n("Reparenting aborted!")); 918 topLevelWidget()->setCaption(i18n("Reparenting aborted!"));
919 } 919 }
920 pendingSubtodo = 0; 920 pendingSubtodo = 0;
921 return; 921 return;
922 } 922 }
923 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 923 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
924 if ( pendingSubtodo != 0 ) { 924 if ( pendingSubtodo != 0 ) {
925 bool allowReparent = true; 925 bool allowReparent = true;
926 QListViewItem *par = item; 926 QListViewItem *par = item;
927 while ( par ) { 927 while ( par ) {
928 if ( par == pendingSubtodo ) { 928 if ( par == pendingSubtodo ) {
929 allowReparent = false; 929 allowReparent = false;
930 break; 930 break;
931 } 931 }
932 par = par->parent(); 932 par = par->parent();
933 } 933 }
934 if ( !allowReparent ) { 934 if ( !allowReparent ) {
935 topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!")); 935 topLevelWidget()->setCaption(i18n("Recursive reparenting not possible!"));
936 qDebug("Recursive reparenting not possible "); 936 qDebug("Recursive reparenting not possible ");
937 pendingSubtodo = 0; 937 pendingSubtodo = 0;
938 } else { 938 } else {
939 Todo* newParent = todoItem->todo(); 939 Todo* newParent = todoItem->todo();
940 Todo* newSub = pendingSubtodo->todo(); 940 Todo* newSub = pendingSubtodo->todo();
941 pendingSubtodo = 0; 941 pendingSubtodo = 0;
942 emit reparentTodoSignal( newParent,newSub ); 942 emit reparentTodoSignal( newParent,newSub );
943 return; 943 return;
944 } 944 }
945 } 945 }
946 int completed = todoItem->todo()->isCompleted(); // Completed or not? 946 int completed = todoItem->todo()->isCompleted(); // Completed or not?
947 947
948 if (todoItem->isOn()) { 948 if (todoItem->isOn()) {
949 if (!completed) { 949 if (!completed) {
950 todoItem->todo()->setCompleted(QDateTime::currentDateTime()); 950 todoItem->todo()->setCompleted(QDateTime::currentDateTime());
951 } 951 }
952 } else { 952 } else {
953 if (completed) { 953 if (completed) {
954 todoItem->todo()->setCompleted(false); 954 todoItem->todo()->setCompleted(false);
955 } 955 }
956 } 956 }
957} 957}
958 958
959void KOTodoView::setDocumentId( const QString &id ) 959void KOTodoView::setDocumentId( const QString &id )
960{ 960{
961 kdDebug() << "KOTodoView::setDocumentId()" << endl; 961 kdDebug() << "KOTodoView::setDocumentId()" << endl;
962 962
963 mDocPrefs->setDoc( id ); 963 mDocPrefs->setDoc( id );
964} 964}
965 965
966void KOTodoView::itemStateChanged( QListViewItem *item ) 966void KOTodoView::itemStateChanged( QListViewItem *item )
967{ 967{
968 if (!item) return; 968 if (!item) return;
969 969
970 KOTodoViewItem *todoItem = (KOTodoViewItem *)item; 970 KOTodoViewItem *todoItem = (KOTodoViewItem *)item;
971 971
972// kdDebug() << "KOTodoView::itemStateChanged(): " << todoItem->todo()->summary() << endl; 972// kdDebug() << "KOTodoView::itemStateChanged(): " << todoItem->todo()->summary() << endl;
973 973
974 if( mDocPrefs ) mDocPrefs->writeEntry( todoItem->todo()->uid(), todoItem->isOpen() ); 974 if( mDocPrefs ) mDocPrefs->writeEntry( todoItem->todo()->uid(), todoItem->isOpen() );
975} 975}
976 976
977void KOTodoView::saveLayout(KConfig *config, const QString &group) const 977void KOTodoView::saveLayout(KConfig *config, const QString &group) const
978{ 978{
979 mTodoListView->saveLayout(config,group); 979 mTodoListView->saveLayout(config,group);
980} 980}
981 981
982void KOTodoView::restoreLayout(KConfig *config, const QString &group) 982void KOTodoView::restoreLayout(KConfig *config, const QString &group)
983{ 983{
984 mTodoListView->restoreLayout(config,group); 984 mTodoListView->restoreLayout(config,group);
985} 985}
986 986
987void KOTodoView::processSelectionChange() 987void KOTodoView::processSelectionChange()
988{ 988{
989// kdDebug() << "KOTodoView::processSelectionChange()" << endl; 989// kdDebug() << "KOTodoView::processSelectionChange()" << endl;
990 990
991 KOTodoViewItem *item = 991 KOTodoViewItem *item =
992 static_cast<KOTodoViewItem *>( mTodoListView->selectedItem() ); 992 static_cast<KOTodoViewItem *>( mTodoListView->selectedItem() );
993 993
994 if ( !item ) { 994 if ( !item ) {
995 emit incidenceSelected( 0 ); 995 emit incidenceSelected( 0 );
996 } else { 996 } else {
997 emit incidenceSelected( item->todo() ); 997 emit incidenceSelected( item->todo() );
998 } 998 }
999} 999}
1000 1000
1001void KOTodoView::modified(bool b) 1001void KOTodoView::modified(bool b)
1002{ 1002{
1003 emit isModified(b); 1003 emit isModified(b);
1004} 1004}
1005void KOTodoView::setTodoModified( Todo* todo ) 1005void KOTodoView::setTodoModified( Todo* todo )
1006{ 1006{
1007 todoModified( todo, KOGlobals::UNKNOWN_MODIFIED ); 1007 todoModified( todo, KOGlobals::UNKNOWN_MODIFIED );
1008} 1008}
1009void KOTodoView::clearSelection() 1009void KOTodoView::clearSelection()
1010{ 1010{
1011 mTodoListView->selectAll( false ); 1011 mTodoListView->selectAll( false );
1012} 1012}
1013void KOTodoView::setAllOpen() 1013void KOTodoView::setAllOpen()
1014{ 1014{
1015 if ( isFlatDisplay ) { 1015 if ( isFlatDisplay ) {
1016 isFlatDisplay = false; 1016 isFlatDisplay = false;
1017 mPopupMenu->setItemChecked( 8,false ); 1017 mPopupMenu->setItemChecked( 8,false );
1018 updateView(); 1018 updateView();
1019 } 1019 }
1020 setOpen(mTodoListView->firstChild(), true); 1020 setOpen(mTodoListView->firstChild(), true);
1021} 1021}
1022void KOTodoView::setAllClose() 1022void KOTodoView::setAllClose()
1023{ 1023{
1024 if ( isFlatDisplay ) { 1024 if ( isFlatDisplay ) {
1025 isFlatDisplay = false; 1025 isFlatDisplay = false;
1026 mPopupMenu->setItemChecked( 8,false ); 1026 mPopupMenu->setItemChecked( 8,false );
1027 updateView(); 1027 updateView();
1028 } 1028 }
1029 setOpen(mTodoListView->firstChild(), false); 1029 setOpen(mTodoListView->firstChild(), false);
1030} 1030}
1031void KOTodoView::setOpen( QListViewItem* item, bool setOpenI) 1031void KOTodoView::setOpen( QListViewItem* item, bool setOpenI)
1032{ 1032{
1033 1033
1034 while ( item ) { 1034 while ( item ) {
1035 setOpen( item->firstChild(), setOpenI ); 1035 setOpen( item->firstChild(), setOpenI );
1036 item->setOpen( setOpenI ); 1036 item->setOpen( setOpenI );
1037 item = item->nextSibling(); 1037 item = item->nextSibling();
1038 } 1038 }
1039} 1039}
1040 1040
1041void KOTodoView::setAllFlat() 1041void KOTodoView::setAllFlat()
1042{ 1042{
1043 if ( isFlatDisplay ) {
1044 isFlatDisplay = false;
1045 mPopupMenu->setItemChecked( 8,false );
1046 updateView();
1047 return;
1048 }
1043 pendingSubtodo = 0; 1049 pendingSubtodo = 0;
1044 if ( mBlockUpdate ) { 1050 if ( mBlockUpdate ) {
1045 return; 1051 return;
1046 } 1052 }
1047 mPopupMenu->setItemChecked( 8,true ); 1053 mPopupMenu->setItemChecked( 8,true );
1048 isFlatDisplay = true; 1054 isFlatDisplay = true;
1049 QPtrList<Todo> todoList = calendar()->todos(); 1055 QPtrList<Todo> todoList = calendar()->todos();
1050 mTodoMap.clear(); 1056 mTodoMap.clear();
1051 mTodoListView->clear(); 1057 mTodoListView->clear();
1052 Todo *todo; 1058 Todo *todo;
1053 for(todo = todoList.first(); todo; todo = todoList.next()) { 1059 for(todo = todoList.first(); todo; todo = todoList.next()) {
1054 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this); 1060 KOTodoViewItem *todoItem = new KOTodoViewItem(mTodoListView,todo,this);
1055 mTodoMap.insert(todo,todoItem); 1061 mTodoMap.insert(todo,todoItem);
1056 } 1062 }
1057 mTodoListView->setFocus(); 1063 mTodoListView->setFocus();
1058 processSelectionChange(); 1064 processSelectionChange();
1059} 1065}
1060 1066
1061void KOTodoView::purgeCompleted() 1067void KOTodoView::purgeCompleted()
1062{ 1068{
1063 emit purgeCompletedSignal(); 1069 emit purgeCompletedSignal();
1064} 1070}
1065void KOTodoView::toggleQuickTodo() 1071void KOTodoView::toggleQuickTodo()
1066{ 1072{
1067 if ( mQuickAdd->isVisible() ) { 1073 if ( mQuickAdd->isVisible() ) {
1068 mQuickAdd->hide(); 1074 mQuickAdd->hide();
1069 KOPrefs::instance()->mEnableQuickTodo = false; 1075 KOPrefs::instance()->mEnableQuickTodo = false;
1070 } 1076 }
1071 else { 1077 else {
1072 mQuickAdd->show(); 1078 mQuickAdd->show();
1073 KOPrefs::instance()->mEnableQuickTodo = true; 1079 KOPrefs::instance()->mEnableQuickTodo = true;
1074 } 1080 }
1075 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo); 1081 mPopupMenu->setItemChecked(4,KOPrefs::instance()->mEnableQuickTodo);
1076 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo ); 1082 mItemPopupMenu->setItemChecked( 34 , KOPrefs::instance()->mEnableQuickTodo );
1077} 1083}
1078 1084
1079void KOTodoView::toggleRunning() 1085void KOTodoView::toggleRunning()
1080{ 1086{
1081 KOPrefs::instance()->mHideNonStartedTodos = !KOPrefs::instance()->mHideNonStartedTodos; 1087 KOPrefs::instance()->mHideNonStartedTodos = !KOPrefs::instance()->mHideNonStartedTodos;
1082 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos); 1088 mPopupMenu->setItemChecked(5,KOPrefs::instance()->mHideNonStartedTodos);
1083 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos ); 1089 mItemPopupMenu->setItemChecked( 35 , KOPrefs::instance()->mHideNonStartedTodos );
1084 updateView(); 1090 updateView();
1085} 1091}
1086 1092
1087void KOTodoView::toggleCompleted() 1093void KOTodoView::toggleCompleted()
1088{ 1094{
1089 KOPrefs::instance()->mShowCompletedTodo = !KOPrefs::instance()->mShowCompletedTodo; 1095 KOPrefs::instance()->mShowCompletedTodo = !KOPrefs::instance()->mShowCompletedTodo;
1090 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo ); 1096 mPopupMenu->setItemChecked( 3,KOPrefs::instance()->mShowCompletedTodo );
1091 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo ); 1097 mItemPopupMenu->setItemChecked( 33 , KOPrefs::instance()->mShowCompletedTodo );
1092 updateView(); 1098 updateView();
1093} 1099}
1094 1100
1095void KOTodoView::addQuickTodo() 1101void KOTodoView::addQuickTodo()
1096{ 1102{
1097 Todo *todo = new Todo(); 1103 Todo *todo = new Todo();
1098 todo->setSummary(mQuickAdd->text()); 1104 todo->setSummary(mQuickAdd->text());
1099 todo->setOrganizer(KOPrefs::instance()->email()); 1105 todo->setOrganizer(KOPrefs::instance()->email());
1100 CalFilter * cf = mCalendar->filter(); 1106 CalFilter * cf = mCalendar->filter();
1101 if ( cf ) { 1107 if ( cf ) {
1102 if ( cf->isEnabled()&& cf->showCategories()) { 1108 if ( cf->isEnabled()&& cf->showCategories()) {
1103 todo->setCategories(cf->categoryList()); 1109 todo->setCategories(cf->categoryList());
1104 } 1110 }
1105 if ( cf->isEnabled() ) 1111 if ( cf->isEnabled() )
1106 todo->setSecrecy( cf->getSecrecy()); 1112 todo->setSecrecy( cf->getSecrecy());
1107 } 1113 }
1108 mCalendar->addTodo(todo); 1114 mCalendar->addTodo(todo);
1109 mQuickAdd->setText(""); 1115 mQuickAdd->setText("");
1110 todoModified (todo, KOGlobals::EVENTADDED ); 1116 todoModified (todo, KOGlobals::EVENTADDED );
1111 updateView(); 1117 updateView();
1112} 1118}
1113void KOTodoView::keyPressEvent ( QKeyEvent * e ) 1119void KOTodoView::keyPressEvent ( QKeyEvent * e )
1114{ 1120{
1115 // e->ignore(); 1121 // e->ignore();
1116 //return; 1122 //return;
1117 //qDebug("KOTodoView::keyPressEvent "); 1123 //qDebug("KOTodoView::keyPressEvent ");
1118 switch ( e->key() ) { 1124 switch ( e->key() ) {
1119 case Qt::Key_Down: 1125 case Qt::Key_Down:
1120 case Qt::Key_Up: 1126 case Qt::Key_Up:
1121 QWidget::keyPressEvent ( e ); 1127 QWidget::keyPressEvent ( e );
1122 break; 1128 break;
1123 1129
1124 case Qt::Key_Q: 1130 case Qt::Key_Q:
1125 toggleQuickTodo(); 1131 toggleQuickTodo();
1126 break; 1132 break;
1127 case Qt::Key_U: 1133 case Qt::Key_U:
1128 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { 1134 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) {
1129 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 1135 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1130 unparentTodo(); 1136 unparentTodo();
1131 e->accept(); 1137 e->accept();
1132 } else 1138 } else
1133 e->ignore(); 1139 e->ignore();
1134 break; 1140 break;
1135 case Qt::Key_S: 1141 case Qt::Key_S:
1136 if ( e->state() == Qt::ControlButton ) { 1142 if ( e->state() == Qt::ControlButton ) {
1137 e->ignore(); 1143 e->ignore();
1138 break; 1144 break;
1139 } 1145 }
1140 if ( e->state() == Qt::ShiftButton ) { 1146 if ( e->state() == Qt::ShiftButton ) {
1141 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 1147 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1142 reparentTodo(); 1148 reparentTodo();
1143 e->accept(); 1149 e->accept();
1144 } else 1150 } else
1145 e->ignore(); 1151 e->ignore();
1146 break; 1152 break;
1147 case Qt::Key_P: 1153 case Qt::Key_P:
1148 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) { 1154 if ( e->state() == Qt::ControlButton|| e->state() == Qt::ShiftButton ) {
1149 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem(); 1155 mActiveItem = (KOTodoViewItem*)mTodoListView->currentItem();
1150 if ( pendingSubtodo ) 1156 if ( pendingSubtodo )
1151 itemClicked(mActiveItem); 1157 itemClicked(mActiveItem);
1152 e->accept(); 1158 e->accept();
1153 } else 1159 } else
1154 e->ignore(); 1160 e->ignore();
1155 break; 1161 break;
1156 case Qt::Key_Escape: 1162 case Qt::Key_Escape:
1157 if ( pendingSubtodo ) { 1163 if ( pendingSubtodo ) {
1158 itemClicked(0); 1164 itemClicked(0);
1159 e->accept(); 1165 e->accept();
1160 } else 1166 } else
1161 e->ignore(); 1167 e->ignore();
1162 break; 1168 break;
1163 default: 1169 default:
1164 e->ignore(); 1170 e->ignore();
1165 } 1171 }
1166 1172
1167 if ( true ) { 1173 if ( true ) {
1168 if ( e->key() == Qt::Key_I ) { 1174 if ( e->key() == Qt::Key_I ) {
1169 KOTodoViewItem*cn = (KOTodoViewItem*)mTodoListView->currentItem(); 1175 KOTodoViewItem*cn = (KOTodoViewItem*)mTodoListView->currentItem();
1170 if ( cn ) { 1176 if ( cn ) {
1171 mActiveItem = cn; 1177 mActiveItem = cn;
1172 KOTodoViewItem* ci = (KOTodoViewItem*)( cn ); 1178 KOTodoViewItem* ci = (KOTodoViewItem*)( cn );
1173 if ( ci ){ 1179 if ( ci ){
1174 showTodo(); 1180 showTodo();
1175 cn = (KOTodoViewItem*)cn->itemBelow(); 1181 cn = (KOTodoViewItem*)cn->itemBelow();
1176 if ( cn ) { 1182 if ( cn ) {
1177 mTodoListView->setCurrentItem ( cn ); 1183 mTodoListView->setCurrentItem ( cn );
1178 mTodoListView->ensureItemVisible ( cn ); 1184 mTodoListView->ensureItemVisible ( cn );
1179 } 1185 }
1180 1186
1181 } 1187 }
1182 } 1188 }
1183 e->accept(); 1189 e->accept();
1184 1190
1185 } 1191 }
1186 1192
1187 } 1193 }
1188 1194
1189} 1195}
1190void KOTodoView::updateTodo( Todo * t, int type ) 1196void KOTodoView::updateTodo( Todo * t, int type )
1191{ 1197{
1192 if ( mBlockUpdate) 1198 if ( mBlockUpdate)
1193 return; 1199 return;
1194 1200
1195 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator; 1201 QMap<Todo *,KOTodoViewItem *>::ConstIterator itemIterator;
1196 itemIterator = mTodoMap.find(t); 1202 itemIterator = mTodoMap.find(t);
1197 if (itemIterator != mTodoMap.end()) { 1203 if (itemIterator != mTodoMap.end()) {
1198 (*itemIterator)->construct(); 1204 (*itemIterator)->construct();
1199 } else { 1205 } else {
1200 if ( type == KOGlobals::EVENTADDED ) { 1206 if ( type == KOGlobals::EVENTADDED ) {
1201 insertTodoItem( t ); 1207 insertTodoItem( t );
1202 } 1208 }
1203 } 1209 }
1204 1210
1205} 1211}
1206 1212
1207void KOTodoView::todoModified(Todo * t , int p ) 1213void KOTodoView::todoModified(Todo * t , int p )
1208{ 1214{
1209 mBlockUpdate = true; 1215 mBlockUpdate = true;
1210 emit todoModifiedSignal ( t, p ); 1216 emit todoModifiedSignal ( t, p );
1211 mBlockUpdate = false; 1217 mBlockUpdate = false;
1212} 1218}