summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt9
-rw-r--r--libkdepim/kcmconfigs/kdepimconfigwidget.cpp38
-rw-r--r--libkdepim/kcmconfigs/kdepimconfigwidget.h5
-rw-r--r--microkde/kdecore/kstandarddirs.cpp4
-rw-r--r--microkde/kdecore/kstandarddirs.h2
5 files changed, 55 insertions, 3 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 683de7c..c0078be 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,419 +1,426 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 1.9.18 ************ 3********** VERSION 1.9.18 ************
4 4
5FYI: The VERSION 1.9.17 was a testing release only. 5FYI: The VERSION 1.9.17 was a testing release only.
6Please read the changelog of VERSION 1.9.17 as well. 6Please read the changelog of VERSION 1.9.17 as well.
7 7
8Cleaned up the syncing config dialog. 8Cleaned up the syncing config dialog.
9Added sync config options for date range for events. 9Added sync config options for date range for events.
10Added sync config options for filters on incoming data. 10Added sync config options for filters on incoming data.
11Added sync config options for filters on outgoing data. 11Added sync config options for filters on outgoing data.
12Please read the updated SyncHowTo about the new filter settings. 12Please read the updated SyncHowTo about the new filter settings.
13These filter settings make it now possible to sync with shared 13These filter settings make it now possible to sync with shared
14calendars without writing back private or confidential data 14calendars without writing back private or confidential data
15(via the outgoing filters). 15(via the outgoing filters).
16To sync only with particular parts of a shared calendar, 16To sync only with particular parts of a shared calendar,
17the incoming filter settings can be used. 17the incoming filter settings can be used.
18An example can be found in the SyncHowTo. 18An example can be found in the SyncHowTo.
19Same for shared addressbooks. 19Same for shared addressbooks.
20 20
21Added a setting for the global kdepim data storage.
22Usually the data is stored in (yourhomedir/kdepim).
23Now you can set in the Global config dialog TAB, subTAB "Data storage path"
24a directory where all the kdepim data is stored.
25That makes it easy to save all kdepim data on a SD card on the Z, for example.
26
21KO/Pi: 27KO/Pi:
22The timeedit input has a pulldown list for times. 28The timeedit input has a pulldown list for times.
23If opened, this pulldown list should now has the right time highlighted. 29If opened, this pulldown list should now has the right time highlighted.
24Added the possibility to exclude events/todos/journals in a filter. 30Added the possibility to exclude events/todos/journals in a filter.
25You should exclude journals, if you do not want them to sync with a public calendar. 31You should exclude journals, if you do not want them to sync with a public calendar.
26 32
27KA/Pi: 33KA/Pi:
28Added the possibility to in/exclude public/private/confidential contacts to a filter. 34Added the possibility to in/exclude public/private/confidential contacts to a filter.
29If 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 ... 35If 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 ...
30Added printing of card view and details view on desktop. 36Added printing of card view and details view on desktop.
31Printing of list view is not working... 37Printing of list view is not working...
32Added button for removing pictures in contact editor. 38Added button for removing pictures in contact editor.
33Parsing data fix of KA/Pi version 1.9.17. 39Parsing data fix of KA/Pi version 1.9.17.
34Fixed the "parse name automatically" problem of KA/Pi version 1.9.17. 40Fixed the "parse name automatically" problem of KA/Pi version 1.9.17.
35 41Fixed some syncing merging problems.
42
36 43
37********** VERSION 1.9.17 ************ 44********** VERSION 1.9.17 ************
38 45
39KO/Pi: 46KO/Pi:
40Fixed that tooltips were not updated after moving an item in agenda view. 47Fixed that tooltips were not updated after moving an item in agenda view.
41Fixed a bug in sorting start date for recurring events in list view. 48Fixed a bug in sorting start date for recurring events in list view.
42Changed the left button in todo viewer from "Agenda" to "Set completed". 49Changed the left button in todo viewer from "Agenda" to "Set completed".
43This 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. 50This 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.
44Added more info in the todo viewer: Startdate, parent/sub todos. 51Added more info in the todo viewer: Startdate, parent/sub todos.
45 52
46 53
47KA/Pi: 54KA/Pi:
48All fields search does now actually search all the (possible) fields, 55All fields search does now actually search all the (possible) fields,
49not only those listed in the contact list. 56not only those listed in the contact list.
50Made is possible to inline a picture in a vcard on the Z. 57Made is possible to inline a picture in a vcard on the Z.
51This was only possible on the desktop, now is it possible on the Z as well. 58This was only possible on the desktop, now is it possible on the Z as well.
52Fixed of missing save settings after filter configuration. 59Fixed of missing save settings after filter configuration.
53Made saving of addressbook much faster. 60Made saving of addressbook much faster.
54Fixed extension widget layout problem. 61Fixed extension widget layout problem.
55Fixed saving of default formatted name settings. 62Fixed saving of default formatted name settings.
56Fixed formatted name handling in edit dialog. 63Fixed formatted name handling in edit dialog.
57Added an option for changing formatted names of many contacts 64Added an option for changing formatted names of many contacts
58(menu: File - Change - Set formatted name). 65(menu: File - Change - Set formatted name).
59 66
60QWhatsThis was not working on the Z ( only black rectangle was shown). 67QWhatsThis was not working on the Z ( only black rectangle was shown).
61This is Fixed. 68This is Fixed.
62 69
63KDE-Sync: 70KDE-Sync:
64Now readonly KDE resources are synced as well. 71Now readonly KDE resources are synced as well.
65(They are not changed in KDE itself, of course). 72(They are not changed in KDE itself, of course).
66 73
67 74
68 75
69********** VERSION 1.9.16 ************ 76********** VERSION 1.9.16 ************
70 77
71KO/Pi: 78KO/Pi:
72Fixed search dialog size on Z 6000 (480x640 display). 79Fixed search dialog size on Z 6000 (480x640 display).
73Added setting to hide/show time in agenda items. 80Added setting to hide/show time in agenda items.
74Added setting to hide not running todos in todo view. 81Added setting to hide not running todos in todo view.
75Added columns for start date/time in todo view. 82Added columns for start date/time in todo view.
76Replaced the solid half-hour lines in agenda view by dot lines. 83Replaced the solid half-hour lines in agenda view by dot lines.
77Added possibility of printing the What's Next View on the desktop 84Added possibility of printing the What's Next View on the desktop
78(i.e. Windows and Linux). 85(i.e. Windows and Linux).
79Fixed a crash in KO/Pi when starting KO/Pi with What's Next view. 86Fixed a crash in KO/Pi when starting KO/Pi with What's Next view.
80Added tooltips in month view.(Tooltips only available on desktop) 87Added tooltips in month view.(Tooltips only available on desktop)
81 88
82Fixed a strange problem in KO/Pi alarm applet. 89Fixed a strange problem in KO/Pi alarm applet.
83Did not find the actual problem, 90Did not find the actual problem,
84such that now Qtopia reboots again if deinstalling the alarm applet. 91such that now Qtopia reboots again if deinstalling the alarm applet.
85But the alarm applet should work again. 92But the alarm applet should work again.
86 93
87KA/Pi: 94KA/Pi:
88Fixed the problem, that internal pictures were not saved. 95Fixed the problem, that internal pictures were not saved.
89 96
90Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes. 97Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes.
91 98
92Fixed some minor problems. (Like word wrap in help text windows). 99Fixed some minor problems. (Like word wrap in help text windows).
93 100
94Fixed a compiling problem in microkde/kresources. 101Fixed a compiling problem in microkde/kresources.
95 102
96KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM. 103KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM.
97This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9) 104This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9)
98such that now syncing KO/Pi with Sharp DTM should work on the 105such that now syncing KO/Pi with Sharp DTM should work on the
99Zaurus C 3000 model. 106Zaurus C 3000 model.
100 107
101********** VERSION 1.9.15 ************ 108********** VERSION 1.9.15 ************
102 109
103Usebilty enhancements in KO/Pi: 110Usebilty enhancements in KO/Pi:
104When clicking on the date in a month view cell, the day view is shown. 111When clicking on the date in a month view cell, the day view is shown.
105Old behaviour was, that the "new event" dialog popped up. 112Old behaviour was, that the "new event" dialog popped up.
106 113
107Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu). 114Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu).
108That means, you can restore the latest 115That means, you can restore the latest
109event/todo/journal you have deleted. 116event/todo/journal you have deleted.
110A journal is deleted, if you clear all the text of the journal. 117A journal is deleted, if you clear all the text of the journal.
111 118
112Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14. 119Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14.
113 120
114KA/Pi starting in 480x640 resolution: 121KA/Pi starting in 480x640 resolution:
115Hide the filter action in toolbar 122Hide the filter action in toolbar
116and added icons for undo/delete/redo in toolbar. 123and added icons for undo/delete/redo in toolbar.
117 124
118Change in OM/Pi ViewMail dialog: 125Change in OM/Pi ViewMail dialog:
119When clicking on the "delete" icon the mail is deleted after confirmation as usual. 126When clicking on the "delete" icon the mail is deleted after confirmation as usual.
120But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any). 127But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any).
121 128
122Fixed a crash when deleting mail-accounts in OM/Pi. 129Fixed a crash when deleting mail-accounts in OM/Pi.
123 130
124 131
125********** VERSION 1.9.14 ************ 132********** VERSION 1.9.14 ************
126 133
127Fixed some problems with the dialog sizes when switching 134Fixed some problems with the dialog sizes when switching
128portrait/landscape mode on 640x480 PDA display. 135portrait/landscape mode on 640x480 PDA display.
129 136
130Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi. 137Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi.
131 138
132Fixed an ugly bug in KOpieMail: 139Fixed an ugly bug in KOpieMail:
133KOpieMail was not able to write files (mails) to MSDOS file system, 140KOpieMail was not able to write files (mails) to MSDOS file system,
134like on an usual preformatted SD card. That should work now. 141like on an usual preformatted SD card. That should work now.
135To save your mail data on the Sd card do the following: 142To save your mail data on the Sd card do the following:
136Create a dir on the SD card: 143Create a dir on the SD card:
137mkdir /mnt/card/localmail 144mkdir /mnt/card/localmail
138Go to your home dir: 145Go to your home dir:
139cd 146cd
140Go to kopiemail data storage dir: 147Go to kopiemail data storage dir:
141cd kdepim/apps/kopiemail 148cd kdepim/apps/kopiemail
142Create a symlink to the SD card: 149Create a symlink to the SD card:
143ls -s /mnt/card/localmail 150ls -s /mnt/card/localmail
144Now KOpieMail will store all mails on the SD card. 151Now KOpieMail will store all mails on the SD card.
145 152
146KO/Pi Monthview: 153KO/Pi Monthview:
147Now "Go to Today" selects the current month from day 1-end, 154Now "Go to Today" selects the current month from day 1-end,
148not the current date + some days. 155not the current date + some days.
149I.e. "Go to Today" shows now always 156I.e. "Go to Today" shows now always
150the current month with first day of month in the first row. 157the current month with first day of month in the first row.
151 158
152Added missing German translation. 159Added missing German translation.
153 160
154Fixed icons of executeable on Wintendo. 161Fixed icons of executeable on Wintendo.
155 162
156Added a "Show next Mail" button to the OM/Pi 163Added a "Show next Mail" button to the OM/Pi
157mail viewer such that the mail below the current mail 164mail viewer such that the mail below the current mail
158in the mail list view of the current folder 165in the mail list view of the current folder
159can be read with a single click. 166can be read with a single click.
160 167
161 168
162********** VERSION 1.9.13 ************ 169********** VERSION 1.9.13 ************
163 170
164Fixed nasty PwM/Pi file reading bug, when 171Fixed nasty PwM/Pi file reading bug, when
165the used hash algo of file is different then the global 172the used hash algo of file is different then the global
166hash algo. 173hash algo.
167 174
168Added KA/Pi support for opie mailit mailapplication. 175Added KA/Pi support for opie mailit mailapplication.
169 176
170Fixed some bugs in OM/Pi. 177Fixed some bugs in OM/Pi.
171Now character conversion tables are available for the Zaurus 178Now character conversion tables are available for the Zaurus
172to make OM/Pi working properly. 179to make OM/Pi working properly.
173To get the character conversion in OM/Pi working, please download 180To get the character conversion in OM/Pi working, please download
174at the sourceforge project site the package 181at the sourceforge project site the package
175sr-character-conversion_SharpROM_arm.ipk.zip 182sr-character-conversion_SharpROM_arm.ipk.zip
176(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms) 183(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms)
177from the section "general files for KDE/Pim" 184from the section "general files for KDE/Pim"
178Instructions how to install this package are in a ReadMe in this file. 185Instructions how to install this package are in a ReadMe in this file.
179 186
180 187
181Fixed the orientation change problem in KA/Pi when switching 188Fixed the orientation change problem in KA/Pi when switching
182portrait/landscape mode. 189portrait/landscape mode.
183 190
184French translation available for KA/Pi and OM/Pi. 191French translation available for KA/Pi and OM/Pi.
185 192
186Fixed some problems with categories in KO/Pi in DTM sync. 193Fixed some problems with categories in KO/Pi in DTM sync.
187 194
188Added selection dialog for export to phone in KA/Pi. 195Added selection dialog for export to phone in KA/Pi.
189 196
190If in KO/Pi is an attendee selected to add to a meeting and this 197If in KO/Pi is an attendee selected to add to a meeting and this
191attendee is already in the list of attendees, this person is not added 198attendee is already in the list of attendees, this person is not added
192again. 199again.
193 200
194Some menu cleanup in KA/Pi. 201Some menu cleanup in KA/Pi.
195 202
196********** VERSION 1.9.12 ************ 203********** VERSION 1.9.12 ************
197 204
198Fix for the bug in KO/Pi What's Next view of version 1.9.11. 205Fix for the bug in KO/Pi What's Next view of version 1.9.11.
199 206
200Bugfix: Licence file is now shown again. 207Bugfix: Licence file is now shown again.
201 208
202OM/Pi now supports Unicode (utf8 charset). 209OM/Pi now supports Unicode (utf8 charset).
203Fixed some bugs in OM/Pi. 210Fixed some bugs in OM/Pi.
204 211
205KA/Pi has more German translation. 212KA/Pi has more German translation.
206 213
207 214
208********** VERSION 1.9.11 ************ 215********** VERSION 1.9.11 ************
209 216
210Fixed several problems in PWM/Pi, like 217Fixed several problems in PWM/Pi, like
211asking the user, if unsaved changed are pending 218asking the user, if unsaved changed are pending
212when closing the app. 219when closing the app.
213And PwM/Pi handles now different texts for the 220And PwM/Pi handles now different texts for the
214fields Description, Username, Password, configurable per category. 221fields Description, Username, Password, configurable per category.
215 222
216Fixed a crash in KO/Pi , when importing/loading vcs files 223Fixed a crash in KO/Pi , when importing/loading vcs files
217which have an entry with an attendee with state: 224which have an entry with an attendee with state:
218NEEDS ACTION 225NEEDS ACTION
219 226
220Fixed some problems in the German translation of OM/Pi, 227Fixed some problems in the German translation of OM/Pi,
221which makes some dialogs not fitting on the screen 228which makes some dialogs not fitting on the screen
222of the Z 5500. 229of the Z 5500.
223 230
224Fixed Qtopia crash, when disabling/deinstalling 231Fixed Qtopia crash, when disabling/deinstalling
225KO/Pi alarm applet. 232KO/Pi alarm applet.
226 233
227Implemented direct KDE<->KA/Pi sync for KA/Pi running 234Implemented direct KDE<->KA/Pi sync for KA/Pi running
228on Linux desktop. 235on Linux desktop.
229 236
230Added feature "remove sync info" to sync menu. 237Added feature "remove sync info" to sync menu.
231 238
232Tweaked the KO/Pi What's next view a bit, added 239Tweaked the KO/Pi What's next view a bit, added
233setting to hide events that are done. 240setting to hide events that are done.
234 241
235Disabled "beam receive enabled" on startup to 242Disabled "beam receive enabled" on startup to
236avoid problems if Fastload is enabled. 243avoid problems if Fastload is enabled.
237Please set "beam receive enabled", 244Please set "beam receive enabled",
238if you want to receive data via IR. 245if you want to receive data via IR.
239 246
240Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running 247Fixed bug in direct KDE<->KO/Pi sync for KO/Pi running
241on Linux desktop. 248on Linux desktop.
242 249
243Made in KA/Pi scrolling possible, if details view is selected. 250Made in KA/Pi scrolling possible, if details view is selected.
244(The keyboard focus is set automatically to the search line) 251(The keyboard focus is set automatically to the search line)
245 252
246Fixed a bug in DMT sync, that a new entry in DTM was added 253Fixed a bug in DMT sync, that a new entry in DTM was added
247on every sync to Kx/Pi. 254on every sync to Kx/Pi.
248 255
249Fixed missing writing of KA/Pi categories to DMT entries when syncing. 256Fixed missing writing of KA/Pi categories to DMT entries when syncing.
250 257
251Fixed a bug in DMT sync with todos created in KO/Pi containing 258Fixed a bug in DMT sync with todos created in KO/Pi containing
252non-latin1 characters. 259non-latin1 characters.
253 260
254Rearranged package contents of Sharp-ipks and made all 261Rearranged package contents of Sharp-ipks and made all
255packages installable on SD again. 262packages installable on SD again.
256 263
257Fixed the writing of addressbook data in DTM sync. 264Fixed the writing of addressbook data in DTM sync.
258Empty fields in KA/Pi were not removed. 265Empty fields in KA/Pi were not removed.
259 266
260Added better category handling in KA/Pi: 267Added better category handling in KA/Pi:
261Added item 268Added item
262Edit Categories and 269Edit Categories and
263Manage new categories 270Manage new categories
264to the settings menu. 271to the settings menu.
265Possible to configure a view to display categories. 272Possible to configure a view to display categories.
266 273
267Added detailed "KDE Sync Howto" and "Multi Sync Howto" to Help menu. 274Added detailed "KDE Sync Howto" and "Multi Sync Howto" to Help menu.
268 275
269Fixed displaying of "free" days and time in KO Monthview and Agendaview. 276Fixed displaying of "free" days and time in KO Monthview and Agendaview.
270 277
271... and many other bugfixes. 278... and many other bugfixes.
272 279
273********** VERSION 1.9.10 ************ 280********** VERSION 1.9.10 ************
274 281
275Many internal small bugfixes. 282Many internal small bugfixes.
276And fix of the "big" bug in KO/Pi, 283And fix of the "big" bug in KO/Pi,
277that after Syncing the appointments had an offset by several hours. 284that after Syncing the appointments had an offset by several hours.
278That was a problem with the internal timezone setting, 285That was a problem with the internal timezone setting,
279introduced by the changed timezone configuration settings. 286introduced by the changed timezone configuration settings.
280 287
281German translation for OM/Pi is now available. 288German translation for OM/Pi is now available.
282 289
283 290
284********** VERSION 1.9.9 ************ 291********** VERSION 1.9.9 ************
285 292
286KDE-Pim/Pi has a new Member! 293KDE-Pim/Pi has a new Member!
287It is called PWM/Pi (Passwordmanager/platform-independent) 294It is called PWM/Pi (Passwordmanager/platform-independent)
288and it is available for the Zaurus. 295and it is available for the Zaurus.
289It is planned, that it will be available later for Windows. 296It is planned, that it will be available later for Windows.
290(And for Linux, of course). 297(And for Linux, of course).
291It is a port of the Passwordmanager of KDE. 298It is a port of the Passwordmanager of KDE.
292It will need the MicroKDElibs to run. 299It will need the MicroKDElibs to run.
293 300
294Made loading of addressbooks in KA/Pi up to 7 times faster! 301Made loading of addressbooks in KA/Pi up to 7 times faster!
295The bigger your addressbook file, the more starting speed 302The bigger your addressbook file, the more starting speed
296will you gain. (relatively) 303will you gain. (relatively)
297 304
298The Qtopia addressbook connector is now platform independend 305The Qtopia addressbook connector is now platform independend
299as well and should work on any platform for importing/exporting 306as well and should work on any platform for importing/exporting
300Qtopia and Opie XML files. 307Qtopia and Opie XML files.
301 308
302Added a +30min feature to the timezone settings to make 309Added a +30min feature to the timezone settings to make
303KDE-Pim/Pi useable in Australia and other parts on the 310KDE-Pim/Pi useable in Australia and other parts on the
304world with strange timezones ;-) 311world with strange timezones ;-)
305 312
306German "Umlaute" should now be sorted correctly on the Z in KA/Pi. 313German "Umlaute" should now be sorted correctly on the Z in KA/Pi.
307 314
308It is now possible to disable the 315It is now possible to disable the
309"receive data via infrared" feature, such that syncing with 316"receive data via infrared" feature, such that syncing with
310Outlook is now possible again with Kx/Pi runing. 317Outlook is now possible again with Kx/Pi runing.
311Please disable it, before syncing Sharp DTM with Outlook. 318Please disable it, before syncing Sharp DTM with Outlook.
312For your convenience, the "receive data via infrared" feature 319For your convenience, the "receive data via infrared" feature
313is disabled automatically, if you sync Kx/Pi with DTM. 320is disabled automatically, if you sync Kx/Pi with DTM.
314You have to enable it again manually after syncing. 321You have to enable it again manually after syncing.
315Enabling this feature makes it impossible to start the 322Enabling this feature makes it impossible to start the
316Sharp DTM apps. If this feature is enabled, you will only get the 323Sharp DTM apps. If this feature is enabled, you will only get the
317alarm notification from KO/Pi and not from the Sharp calendar. 324alarm notification from KO/Pi and not from the Sharp calendar.
318This is very useful if you sync KO/Pi with Sharp DTM, 325This is very useful if you sync KO/Pi with Sharp DTM,
319because after syncing you usually would get notified about 326because after syncing you usually would get notified about
320an alarm by KO/Pi and the Sharp Calendar. 327an alarm by KO/Pi and the Sharp Calendar.
321 328
322Together with the Linux desktop version of KO/Pi 329Together with the Linux desktop version of KO/Pi
323it is now possible to sync KO/Pi on the Zaurus 330it is now possible to sync KO/Pi on the Zaurus
324with the complete KDE-desktop (3.3 or later) 331with the complete KDE-desktop (3.3 or later)
325calendar data easily. 332calendar data easily.
326That makes it possible to sync the Z with one 333That makes it possible to sync the Z with one
327click of a mouse with the KDE-Desktop. 334click of a mouse with the KDE-Desktop.
328This feature it available for all Zaurus platforms KO/Pi 335This feature it available for all Zaurus platforms KO/Pi
329is running on. 336is running on.
330The only thing needed is a running KO/Pi on Linux and 337The only thing needed is a running KO/Pi on Linux and
331a compiled version of the small 338a compiled version of the small
332KDE-Pim/Pi<->KDE-Desktop access command line program, 339KDE-Pim/Pi<->KDE-Desktop access command line program,
333which is in the KDE-Pim/Pi sources available. 340which is in the KDE-Pim/Pi sources available.
334 341
335The "KDE-desktop" syncing feature for KA/Pi will follow 342The "KDE-desktop" syncing feature for KA/Pi will follow
336in the next releases. 343in the next releases.
337 344
338Fixed the vcard export bug, which had the version 1.9.8. 345Fixed the vcard export bug, which had the version 1.9.8.
339 346
340Added missing GERMAN translation to KO/Pi. 347Added missing GERMAN translation to KO/Pi.
341Hi PsionX, could you add the missing french translation?Thx! 348Hi PsionX, could you add the missing french translation?Thx!
342 349
343Translation files for KA/Pi are available as well. 350Translation files for KA/Pi are available as well.
344GERMAN translation will be available in the next release. 351GERMAN translation will be available in the next release.
345PsionX ( yres, you again ;-) ), could you start translating 352PsionX ( yres, you again ;-) ), could you start translating
346KA/Pi? Thx! 353KA/Pi? Thx!
347 354
348You can download the version 1.9.9 at 355You can download the version 1.9.9 at
349 356
350http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604 357http://sourceforge.net/project/showfiles.php?group_id=104103&package_id=112604
351 358
352Note: 359Note:
353To run the mail program OM/Pi you need libopenssl. 360To run the mail program OM/Pi you need libopenssl.
354A link to a download loaction is available at 361A link to a download loaction is available at
355ZSI at www.killefiz.de 362ZSI at www.killefiz.de
356 363
357 364
358********** VERSION 1.9.8 ************ 365********** VERSION 1.9.8 ************
359 366
360Fixed character decoding in OM/Pi. 367Fixed character decoding in OM/Pi.
361(e.g. German "Umlaute" were not displayed properly.) 368(e.g. German "Umlaute" were not displayed properly.)
362 369
363Made is possible to reparent todos in KO/Pi. 370Made is possible to reparent todos in KO/Pi.
364Use contextmenu or keys (look at Help-Keys + Colors) for that. 371Use contextmenu or keys (look at Help-Keys + Colors) for that.
365 372
366Added the missing Sync-Howto and WhatsNew to the packages. 373Added the missing Sync-Howto and WhatsNew to the packages.
367 374
368KO/Pi on Linux desktop can now sync with KDE desktop. 375KO/Pi on Linux desktop can now sync with KDE desktop.
369That means: When using KO/Pi on Linux desktop for syncing with 376That means: When using KO/Pi on Linux desktop for syncing with
370KDE desktop and the Zaurus, the Zaurus can be synced now 377KDE desktop and the Zaurus, the Zaurus can be synced now
371with all KDE-Calendar resources, not only with one local file. 378with all KDE-Calendar resources, not only with one local file.
372(That makes it possible to sync the Zaurus with the 379(That makes it possible to sync the Zaurus with the
373calendar data on a Kolab server) 380calendar data on a Kolab server)
374 381
375KA/Pi syncing with KDE desktop will be available in the next version. 382KA/Pi syncing with KDE desktop will be available in the next version.
376 383
377 384
378********** VERSION 1.9.7 ************ 385********** VERSION 1.9.7 ************
379 386
380KO/Pi - KA/Pi on Windows: 387KO/Pi - KA/Pi on Windows:
381Now a directory can be defined by the user, where the 388Now a directory can be defined by the user, where the
382application/config data should be saved. 389application/config data should be saved.
383 Define your desired path in the evironment variable 390 Define your desired path in the evironment variable
384 MICROKDEHOME 391 MICROKDEHOME
385 before starting KO/Pi or KA/Pi. 392 before starting KO/Pi or KA/Pi.
386 393
387An easy Kx/Pi to Kx/Pi syncing is now possible 394An easy Kx/Pi to Kx/Pi syncing is now possible
388(it is called Pi-Sync) via network. 395(it is called Pi-Sync) via network.
389Please look at the Sync Howto. 396Please look at the Sync Howto.
390 397
391Exporting of calendar data and contacts to mobile phones is now possible. 398Exporting of calendar data and contacts to mobile phones is now possible.
392The SyncHowto is updated with information howto 399The SyncHowto is updated with information howto
393access/sync mobile phones. 400access/sync mobile phones.
394Please look at the Sync Howto. 401Please look at the Sync Howto.
395 402
396Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly. 403Now KO/Pi and KA/Pi on the Zaurus can receive data via infrared directly.
397Please disable Fastload for the original contact/calendar applications 404Please disable Fastload for the original contact/calendar applications
398and close them. 405and close them.
399KO/Pi and KA/Pi must be running in order to receive the data. 406KO/Pi and KA/Pi must be running in order to receive the data.
400(KO/Pi and KA/Pi are always running if Fastload for them is enabled!) 407(KO/Pi and KA/Pi are always running if Fastload for them is enabled!)
401 408
402In the KA/Pi details view are now the preferred tel. numbers displayed on top 409In the KA/Pi details view are now the preferred tel. numbers displayed on top
403of the other data ( emails/tel.numbers/addresses) 410of the other data ( emails/tel.numbers/addresses)
404 411
405Fixed some syncing problems in KA/Pi. 412Fixed some syncing problems in KA/Pi.
406 413
407Added font settings for the KA/Pi details view. 414Added font settings for the KA/Pi details view.
408Added fields "children's name" and "gender" to KA/Pi. 415Added fields "children's name" and "gender" to KA/Pi.
409 416
410Made searching in KA/Pi better: 417Made searching in KA/Pi better:
411Now the first item in a view is selected after a search automatically and 418Now the first item in a view is selected after a search automatically and
412the views can be scrolled up/down when the search input field has the keyboard focus. 419the views can be scrolled up/down when the search input field has the keyboard focus.
413 420
414And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi. 421And, of course, fixed a bunch of reported bugs in KO/Pi and KA/Pi.
415 422
416 423
417********** VERSION 1.9.6 ************ 424********** VERSION 1.9.6 ************
418 425
419Changes in the external application communication on the Zaurus 426Changes in the external application communication on the Zaurus
diff --git a/libkdepim/kcmconfigs/kdepimconfigwidget.cpp b/libkdepim/kcmconfigs/kdepimconfigwidget.cpp
index 20594c6..d097078 100644
--- a/libkdepim/kcmconfigs/kdepimconfigwidget.cpp
+++ b/libkdepim/kcmconfigs/kdepimconfigwidget.cpp
@@ -1,495 +1,533 @@
1/* 1/*
2 This file is part of KdePim/Pi. 2 This file is part of KdePim/Pi.
3 Copyright (c) 2004 Ulf Schenk 3 Copyright (c) 2004 Ulf Schenk
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/* 24/*
25Enhanced Version of the file for platform independent KDE tools. 25Enhanced Version of the file for platform independent KDE tools.
26Copyright (c) 2004 Ulf Schenk 26Copyright (c) 2004 Ulf Schenk
27 27
28$Id$ 28$Id$
29*/ 29*/
30 30
31#include <qlayout.h> 31#include <qlayout.h>
32#include <qtabwidget.h> 32#include <qtabwidget.h>
33#include <qcombobox.h> 33#include <qcombobox.h>
34#include <qgroupbox.h> 34#include <qgroupbox.h>
35#include <qlabel.h> 35#include <qlabel.h>
36#include <qlineedit.h> 36#include <qlineedit.h>
37#include <qbuttongroup.h> 37#include <qbuttongroup.h>
38#include <qfile.h> 38#include <qfile.h>
39#include <qvbox.h>
40#include <qdir.h>
39#include <qregexp.h> 41#include <qregexp.h>
40 42
41#include <kdialog.h> 43#include <kdialog.h>
42#include <klocale.h> 44#include <klocale.h>
43#include <kdateedit.h> 45#include <kdateedit.h>
44#include <kglobal.h> 46#include <kglobal.h>
45#include <stdlib.h> 47#include <stdlib.h>
46 48
47/*US 49/*US
48#include <qcheckbox.h> 50#include <qcheckbox.h>
49#include <qframe.h> 51#include <qframe.h>
50#include <qpushbutton.h> 52#include <qpushbutton.h>
51#include <qcombobox.h> 53#include <qcombobox.h>
52#include <qlineedit.h> 54#include <qlineedit.h>
53#include <qlabel.h> 55#include <qlabel.h>
54#include <qfile.h> 56#include <qfile.h>
55 57
56#include <kconfig.h> 58#include <kconfig.h>
57#include <kdebug.h> 59#include <kdebug.h>
58#include <kdialog.h> 60#include <kdialog.h>
59#include <klistview.h> 61#include <klistview.h>
60#include <klocale.h> 62#include <klocale.h>
61#include <kglobal.h> 63#include <kglobal.h>
62#include <kmessagebox.h> 64#include <kmessagebox.h>
63#include <kstandarddirs.h> 65#include <kstandarddirs.h>
64 66
65#ifndef KAB_EMBEDDED 67#ifndef KAB_EMBEDDED
66#include <ktrader.h> 68#include <ktrader.h>
67#else // KAB_EMBEDDED 69#else // KAB_EMBEDDED
68#include <mergewidget.h> 70#include <mergewidget.h>
69#include <distributionlistwidget.h> 71#include <distributionlistwidget.h>
70#endif // KAB_EMBEDDED 72#endif // KAB_EMBEDDED
71 73
72#include "addresseewidget.h" 74#include "addresseewidget.h"
73#include "extensionconfigdialog.h" 75#include "extensionconfigdialog.h"
74#include "extensionwidget.h" 76#include "extensionwidget.h"
75*/ 77*/
76 78
77#include "qapplication.h" 79#include "qapplication.h"
78 80
79#include "kpimglobalprefs.h" 81#include "kpimglobalprefs.h"
80 82
81#include "kdepimconfigwidget.h" 83#include "kdepimconfigwidget.h"
82 84
83 85
84KDEPIMConfigWidget::KDEPIMConfigWidget(KPimGlobalPrefs *prefs, QWidget *parent, const char *name ) 86KDEPIMConfigWidget::KDEPIMConfigWidget(KPimGlobalPrefs *prefs, QWidget *parent, const char *name )
85 : KPrefsWidget(prefs, parent, name ) 87 : KPrefsWidget(prefs, parent, name )
86{ 88{
87 mExternalAppsMap.insert(ExternalAppHandler::EMAIL, i18n("Email")); 89 mExternalAppsMap.insert(ExternalAppHandler::EMAIL, i18n("Email"));
88 mExternalAppsMap.insert(ExternalAppHandler::PHONE, i18n("Phone")); 90 mExternalAppsMap.insert(ExternalAppHandler::PHONE, i18n("Phone"));
89 mExternalAppsMap.insert(ExternalAppHandler::SMS, i18n("SMS")); 91 mExternalAppsMap.insert(ExternalAppHandler::SMS, i18n("SMS"));
90 mExternalAppsMap.insert(ExternalAppHandler::FAX, i18n("Fax")); 92 mExternalAppsMap.insert(ExternalAppHandler::FAX, i18n("Fax"));
91 mExternalAppsMap.insert(ExternalAppHandler::PAGER, i18n("Pager")); 93 mExternalAppsMap.insert(ExternalAppHandler::PAGER, i18n("Pager"));
92 mExternalAppsMap.insert(ExternalAppHandler::SIP, i18n("SIP")); 94 mExternalAppsMap.insert(ExternalAppHandler::SIP, i18n("SIP"));
93 95
94 96
95 QVBoxLayout *topLayout = new QVBoxLayout( this, 0, 97 QVBoxLayout *topLayout = new QVBoxLayout( this, 0,
96 KDialog::spacingHint() ); 98 KDialog::spacingHint() );
97 99
98 tabWidget = new QTabWidget( this ); 100 tabWidget = new QTabWidget( this );
99 topLayout->addWidget( tabWidget ); 101 topLayout->addWidget( tabWidget );
100 102
101 103
102 setupLocaleTab(); 104 setupLocaleTab();
103 setupLocaleDateTab(); 105 setupLocaleDateTab();
104 setupTimeZoneTab(); 106 setupTimeZoneTab();
105 setupExternalAppTab(); 107 setupExternalAppTab();
108 setupStoreTab();
106 109
107} 110}
108void KDEPIMConfigWidget::showTimeZoneTab() 111void KDEPIMConfigWidget::showTimeZoneTab()
109{ 112{
110 tabWidget->setCurrentPage ( 3 ) ; 113 tabWidget->setCurrentPage ( 3 ) ;
111} 114}
115void KDEPIMConfigWidget::setupStoreTab()
116{
117 QVBox *storePage = new QVBox( this );
118 new QLabel( i18n("Your current storage dir is:\n%1\nYour mail is stored in:\n(storagedir)/apps/kopiemail/localmail").arg(KGlobal::dirs()->localkdedir()), storePage );
119 new QLabel( i18n("<b>Set new data storage dir:</b>"), storePage );
120 mStoreUrl = new KURLRequester( storePage );
121 mStoreUrl->setURL( KGlobal::dirs()->localkdedir() );
122 new QLabel( i18n("Not existing dirs are created automatically"), storePage );
123 QHBox *bb = new QHBox( storePage );
124 QPushButton * pb = new QPushButton ( i18n("Save settings"), bb );
125 connect(pb, SIGNAL( clicked() ), this, SLOT ( saveStoreSettings() ) );
126 pb = new QPushButton ( i18n("Save standard"), bb );
127 connect(pb, SIGNAL( clicked() ), this, SLOT ( setStandardStore() ) );
128 new QLabel( i18n("<b>New settings are used\nafter a restart</b>"), storePage );
129 new QLabel( i18n("The settings of the storage\ndir is saved in the file\n%1").arg(QDir::homeDirPath() + "/.microkdehome" ), storePage );
130 tabWidget->addTab( storePage, i18n( "Data storage path" ) );
131}
132void KDEPIMConfigWidget::setStandardStore()
133{
134 mStoreUrl->setURL( QDir::homeDirPath() + "/kdepim" );
135 saveStoreSettings();
136}
137void KDEPIMConfigWidget::saveStoreSettings()
138{
139 if ( !mStoreUrl->url().isEmpty() ) {
140 KConfig cfg ( QDir::homeDirPath() + "/.microkdehome" );
141 cfg.setGroup("Global");
142 cfg.writeEntry( "MICROKDEHOME", mStoreUrl->url() );
143 qDebug("cfg.writeEntry( MICROKDEHOME, mStoreUrl->url() ); ");
144 cfg.sync();
145 } else {
146 mStoreUrl->setURL( QDir::homeDirPath() + "/kdepim" );
147 saveStoreSettings();
148 }
149}
112void KDEPIMConfigWidget::setupExternalAppTab() 150void KDEPIMConfigWidget::setupExternalAppTab()
113{ 151{
114 QWidget *externalAppsPage = new QWidget( this ); 152 QWidget *externalAppsPage = new QWidget( this );
115 QVBoxLayout* layout = new QVBoxLayout( externalAppsPage, KDialog::marginHintSmall(), 153 QVBoxLayout* layout = new QVBoxLayout( externalAppsPage, KDialog::marginHintSmall(),
116 KDialog::spacingHintSmall() ); 154 KDialog::spacingHintSmall() );
117 155
118 mExternalApps = new QComboBox( externalAppsPage ); 156 mExternalApps = new QComboBox( externalAppsPage );
119 157
120 QMap<ExternalAppHandler::Types, QString>::Iterator it; 158 QMap<ExternalAppHandler::Types, QString>::Iterator it;
121 for( it = mExternalAppsMap.begin(); it != mExternalAppsMap.end(); ++it ) 159 for( it = mExternalAppsMap.begin(); it != mExternalAppsMap.end(); ++it )
122 mExternalApps->insertItem( it.data(), it.key() ); 160 mExternalApps->insertItem( it.data(), it.key() );
123 161
124 layout->addWidget( mExternalApps ); 162 layout->addWidget( mExternalApps );
125 163
126 connect( mExternalApps, SIGNAL( activated( int ) ), 164 connect( mExternalApps, SIGNAL( activated( int ) ),
127 this, SLOT (externalapp_changed( int ) ) ); 165 this, SLOT (externalapp_changed( int ) ) );
128 166
129 167
130 mExternalAppGroupBox = new QGroupBox( 0, Qt::Vertical, i18n( "Used Mail Client" ), externalAppsPage ); 168 mExternalAppGroupBox = new QGroupBox( 0, Qt::Vertical, i18n( "Used Mail Client" ), externalAppsPage );
131 QGridLayout *boxLayout = new QGridLayout( mExternalAppGroupBox->layout(), 4, 2, -1, "gridlayout" ); 169 QGridLayout *boxLayout = new QGridLayout( mExternalAppGroupBox->layout(), 4, 2, -1, "gridlayout" );
132 mExternalAppGroupBox->layout()->setMargin(5); 170 mExternalAppGroupBox->layout()->setMargin(5);
133 171
134 mClient = new QComboBox( mExternalAppGroupBox ); 172 mClient = new QComboBox( mExternalAppGroupBox );
135 boxLayout->addMultiCellWidget( mClient, 0, 0, 0, 1 ); 173 boxLayout->addMultiCellWidget( mClient, 0, 0, 0, 1 );
136 174
137 connect( mClient, SIGNAL( activated( int ) ), 175 connect( mClient, SIGNAL( activated( int ) ),
138 this, SLOT (client_changed( int ) ) ); 176 this, SLOT (client_changed( int ) ) );
139 177
140 QLabel* lab = new QLabel( i18n("Channel:"), mExternalAppGroupBox); 178 QLabel* lab = new QLabel( i18n("Channel:"), mExternalAppGroupBox);
141 boxLayout->addWidget( lab, 1, 0 ); 179 boxLayout->addWidget( lab, 1, 0 );
142 mChannel = new QLineEdit(mExternalAppGroupBox); 180 mChannel = new QLineEdit(mExternalAppGroupBox);
143 mChannel->setReadOnly(true); 181 mChannel->setReadOnly(true);
144 boxLayout->addMultiCellWidget( mChannel, 2 , 2, 0, 1 ); 182 boxLayout->addMultiCellWidget( mChannel, 2 , 2, 0, 1 );
145 183
146 lab = new QLabel( i18n("Message:"), mExternalAppGroupBox); 184 lab = new QLabel( i18n("Message:"), mExternalAppGroupBox);
147 boxLayout->addWidget( lab, 3, 0 ); 185 boxLayout->addWidget( lab, 3, 0 );
148 mMessage = new QLineEdit(mExternalAppGroupBox); 186 mMessage = new QLineEdit(mExternalAppGroupBox);
149 mMessage->setReadOnly(true); 187 mMessage->setReadOnly(true);
150 boxLayout->addWidget( mMessage , 4, 0); 188 boxLayout->addWidget( mMessage , 4, 0);
151 189
152 lab = new QLabel( i18n("Parameters:"), mExternalAppGroupBox); 190 lab = new QLabel( i18n("Parameters:"), mExternalAppGroupBox);
153 boxLayout->addWidget( lab, 3, 1 ); 191 boxLayout->addWidget( lab, 3, 1 );
154 mParameters = new QLineEdit(mExternalAppGroupBox); 192 mParameters = new QLineEdit(mExternalAppGroupBox);
155 mParameters->setReadOnly(true); 193 mParameters->setReadOnly(true);
156 boxLayout->addWidget( mParameters, 4, 1 ); 194 boxLayout->addWidget( mParameters, 4, 1 );
157 195
158 lab = new QLabel( i18n("HINT: Delimiter=; Name=%1,Email=%2"), mExternalAppGroupBox); 196 lab = new QLabel( i18n("HINT: Delimiter=; Name=%1,Email=%2"), mExternalAppGroupBox);
159 boxLayout->addMultiCellWidget( lab, 5, 5, 0, 1 ); 197 boxLayout->addMultiCellWidget( lab, 5, 5, 0, 1 );
160 198
161 199
162 lab = new QLabel( i18n("extra Message:"), mExternalAppGroupBox); 200 lab = new QLabel( i18n("extra Message:"), mExternalAppGroupBox);
163 boxLayout->addWidget( lab, 6, 0 ); 201 boxLayout->addWidget( lab, 6, 0 );
164 mMessage2 = new QLineEdit(mExternalAppGroupBox); 202 mMessage2 = new QLineEdit(mExternalAppGroupBox);
165 mMessage2->setReadOnly(true); 203 mMessage2->setReadOnly(true);
166 boxLayout->addWidget( mMessage2 , 7, 0); 204 boxLayout->addWidget( mMessage2 , 7, 0);
167 205
168 lab = new QLabel( i18n("extra Parameters:"), mExternalAppGroupBox); 206 lab = new QLabel( i18n("extra Parameters:"), mExternalAppGroupBox);
169 boxLayout->addWidget( lab, 6, 1 ); 207 boxLayout->addWidget( lab, 6, 1 );
170 mParameters2 = new QLineEdit(mExternalAppGroupBox); 208 mParameters2 = new QLineEdit(mExternalAppGroupBox);
171 mParameters2->setReadOnly(true); 209 mParameters2->setReadOnly(true);
172 boxLayout->addWidget( mParameters2, 7, 1 ); 210 boxLayout->addWidget( mParameters2, 7, 1 );
173 211
174 lab = new QLabel( i18n("HINT: Emails=%1,Attachments=%2"), mExternalAppGroupBox); 212 lab = new QLabel( i18n("HINT: Emails=%1,Attachments=%2"), mExternalAppGroupBox);
175 boxLayout->addMultiCellWidget( lab, 8, 8, 0, 1 ); 213 boxLayout->addMultiCellWidget( lab, 8, 8, 0, 1 );
176 214
177 215
178 connect( mChannel, SIGNAL( textChanged ( const QString & )), this, SLOT( textChanged ( const QString & )) ); 216 connect( mChannel, SIGNAL( textChanged ( const QString & )), this, SLOT( textChanged ( const QString & )) );
179 connect( mMessage, SIGNAL( textChanged ( const QString & )), this, SLOT( textChanged ( const QString & )) ); 217 connect( mMessage, SIGNAL( textChanged ( const QString & )), this, SLOT( textChanged ( const QString & )) );
180 connect( mParameters, SIGNAL( textChanged ( const QString & )), this, SLOT( textChanged ( const QString & )) ); 218 connect( mParameters, SIGNAL( textChanged ( const QString & )), this, SLOT( textChanged ( const QString & )) );
181 connect( mMessage2, SIGNAL( textChanged ( const QString & )), this, SLOT( textChanged ( const QString & )) ); 219 connect( mMessage2, SIGNAL( textChanged ( const QString & )), this, SLOT( textChanged ( const QString & )) );
182 connect( mParameters2, SIGNAL( textChanged ( const QString & )), this, SLOT( textChanged ( const QString & )) ); 220 connect( mParameters2, SIGNAL( textChanged ( const QString & )), this, SLOT( textChanged ( const QString & )) );
183 221
184 222
185 layout->addWidget( mExternalAppGroupBox ); 223 layout->addWidget( mExternalAppGroupBox );
186 tabWidget->addTab( externalAppsPage, i18n( "External Apps." ) ); 224 tabWidget->addTab( externalAppsPage, i18n( "External Apps." ) );
187 225
188} 226}
189 227
190 228
191void KDEPIMConfigWidget::setupLocaleDateTab() 229void KDEPIMConfigWidget::setupLocaleDateTab()
192{ 230{
193 QWidget *topFrame = new QWidget( this ); 231 QWidget *topFrame = new QWidget( this );
194 QGridLayout *topLayout = new QGridLayout( topFrame, 3, 2); 232 QGridLayout *topLayout = new QGridLayout( topFrame, 3, 2);
195 233
196 topLayout->setSpacing(KDialog::spacingHintSmall()); 234 topLayout->setSpacing(KDialog::spacingHintSmall());
197 topLayout->setMargin(KDialog::marginHintSmall()); 235 topLayout->setMargin(KDialog::marginHintSmall());
198 int iii = 0; 236 int iii = 0;
199 237
200 238
201 KPrefsWidRadios *syncPrefsGroup = 239 KPrefsWidRadios *syncPrefsGroup =
202 addWidRadios(i18n("Date Format:"),&(KPimGlobalPrefs::instance()->mPreferredDate),topFrame); 240 addWidRadios(i18n("Date Format:"),&(KPimGlobalPrefs::instance()->mPreferredDate),topFrame);
203 QString format; 241 QString format;
204 if ( QApplication::desktop()->width() < 480 ) 242 if ( QApplication::desktop()->width() < 480 )
205 format = "(%d.%m.%Y)"; 243 format = "(%d.%m.%Y)";
206 else 244 else
207 format = "(%d.%m.%Y|%A %d %B %Y)"; 245 format = "(%d.%m.%Y|%A %d %B %Y)";
208 syncPrefsGroup->addRadio(i18n("24.03.2004 "+format)); 246 syncPrefsGroup->addRadio(i18n("24.03.2004 "+format));
209 if ( QApplication::desktop()->width() < 480 ) 247 if ( QApplication::desktop()->width() < 480 )
210 format = "(%m.%d.%Y)"; 248 format = "(%m.%d.%Y)";
211 else 249 else
212 format = "(%m.%d.%Y|%A %B %d %Y)"; 250 format = "(%m.%d.%Y|%A %B %d %Y)";
213 syncPrefsGroup->addRadio(i18n("03.24.2004 "+format)); 251 syncPrefsGroup->addRadio(i18n("03.24.2004 "+format));
214 if ( QApplication::desktop()->width() < 480 ) 252 if ( QApplication::desktop()->width() < 480 )
215 format = "(%Y-%m-%d)"; 253 format = "(%Y-%m-%d)";
216 else 254 else
217 format = "(%Y-%m-%d|%A %Y %B %d)"; 255 format = "(%Y-%m-%d|%A %Y %B %d)";
218 syncPrefsGroup->addRadio(i18n("2004-03-24 "+format)); 256 syncPrefsGroup->addRadio(i18n("2004-03-24 "+format));
219 syncPrefsGroup->addRadio(i18n("User defined")); 257 syncPrefsGroup->addRadio(i18n("User defined"));
220 if ( QApplication::desktop()->width() < 480 ) { 258 if ( QApplication::desktop()->width() < 480 ) {
221 syncPrefsGroup->groupBox()->layout()->setMargin( 5 ); 259 syncPrefsGroup->groupBox()->layout()->setMargin( 5 );
222 syncPrefsGroup->groupBox()->layout()->setSpacing( 0 ); 260 syncPrefsGroup->groupBox()->layout()->setSpacing( 0 );
223 } 261 }
224 topLayout->addMultiCellWidget( (QWidget*)syncPrefsGroup->groupBox(),iii,iii,0,1); 262 topLayout->addMultiCellWidget( (QWidget*)syncPrefsGroup->groupBox(),iii,iii,0,1);
225 ++iii; 263 ++iii;
226 ++iii; 264 ++iii;
227 QLabel * lab; 265 QLabel * lab;
228 mUserDateFormatLong = new QLineEdit(topFrame); 266 mUserDateFormatLong = new QLineEdit(topFrame);
229 lab = new QLabel(mUserDateFormatLong, i18n("User long date:"), topFrame); 267 lab = new QLabel(mUserDateFormatLong, i18n("User long date:"), topFrame);
230 topLayout->addWidget(lab ,iii,0); 268 topLayout->addWidget(lab ,iii,0);
231 topLayout->addWidget(mUserDateFormatLong,iii,1); 269 topLayout->addWidget(mUserDateFormatLong,iii,1);
232 ++iii; 270 ++iii;
233 mUserDateFormatShort = new QLineEdit(topFrame); 271 mUserDateFormatShort = new QLineEdit(topFrame);
234 lab = new QLabel(mUserDateFormatShort, i18n("User short date:"), topFrame); 272 lab = new QLabel(mUserDateFormatShort, i18n("User short date:"), topFrame);
235 topLayout->addWidget(lab ,iii,0); 273 topLayout->addWidget(lab ,iii,0);
236 topLayout->addWidget(mUserDateFormatShort,iii,1); 274 topLayout->addWidget(mUserDateFormatShort,iii,1);
237 ++iii; 275 ++iii;
238 lab = new QLabel( i18n("Monday 19 April 2004: %A %d %B %Y"), topFrame); 276 lab = new QLabel( i18n("Monday 19 April 2004: %A %d %B %Y"), topFrame);
239 topLayout->addMultiCellWidget(lab ,iii,iii,0,1); 277 topLayout->addMultiCellWidget(lab ,iii,iii,0,1);
240 ++iii; 278 ++iii;
241 lab = new QLabel( i18n("Mon 19.04.04: %a %d.%m.%y"), topFrame); 279 lab = new QLabel( i18n("Mon 19.04.04: %a %d.%m.%y"), topFrame);
242 topLayout->addMultiCellWidget(lab ,iii,iii,0,1); 280 topLayout->addMultiCellWidget(lab ,iii,iii,0,1);
243 ++iii; 281 ++iii;
244 lab = new QLabel( i18n("Mon, 19.Apr.04: %a, %d.%b.%y"), topFrame); 282 lab = new QLabel( i18n("Mon, 19.Apr.04: %a, %d.%b.%y"), topFrame);
245 topLayout->addMultiCellWidget(lab ,iii,iii,0,1); 283 topLayout->addMultiCellWidget(lab ,iii,iii,0,1);
246 ++iii; 284 ++iii;
247 285
248 connect( mUserDateFormatLong, SIGNAL( textChanged ( const QString & )), this, SLOT( textChanged ( const QString & )) ); 286 connect( mUserDateFormatLong, SIGNAL( textChanged ( const QString & )), this, SLOT( textChanged ( const QString & )) );
249 connect( mUserDateFormatShort, SIGNAL( textChanged ( const QString & )), this, SLOT( textChanged ( const QString & )) ); 287 connect( mUserDateFormatShort, SIGNAL( textChanged ( const QString & )), this, SLOT( textChanged ( const QString & )) );
250 288
251 289
252 tabWidget->addTab( topFrame, i18n( "Date Format" ) ); 290 tabWidget->addTab( topFrame, i18n( "Date Format" ) );
253} 291}
254 292
255void KDEPIMConfigWidget::setupLocaleTab() 293void KDEPIMConfigWidget::setupLocaleTab()
256{ 294{
257 295
258 QWidget *topFrame = new QWidget( this ); 296 QWidget *topFrame = new QWidget( this );
259 QGridLayout *topLayout = new QGridLayout(topFrame,4,2); 297 QGridLayout *topLayout = new QGridLayout(topFrame,4,2);
260 298
261 topLayout->setSpacing(KDialog::spacingHint()); 299 topLayout->setSpacing(KDialog::spacingHint());
262 topLayout->setMargin(KDialog::marginHint()); 300 topLayout->setMargin(KDialog::marginHint());
263 int iii = 0; 301 int iii = 0;
264 KPrefsWidRadios *syncPrefsGroup = 302 KPrefsWidRadios *syncPrefsGroup =
265 addWidRadios(i18n("Language:(needs restart)"),&(KPimGlobalPrefs::instance()->mPreferredLanguage),topFrame); 303 addWidRadios(i18n("Language:(needs restart)"),&(KPimGlobalPrefs::instance()->mPreferredLanguage),topFrame);
266 syncPrefsGroup->addRadio(i18n("English")); 304 syncPrefsGroup->addRadio(i18n("English"));
267 syncPrefsGroup->addRadio(i18n("German")); 305 syncPrefsGroup->addRadio(i18n("German"));
268 syncPrefsGroup->addRadio(i18n("French")); 306 syncPrefsGroup->addRadio(i18n("French"));
269 syncPrefsGroup->addRadio(i18n("Italian")); 307 syncPrefsGroup->addRadio(i18n("Italian"));
270 syncPrefsGroup->addRadio(i18n("User defined (usertranslation.txt)")); 308 syncPrefsGroup->addRadio(i18n("User defined (usertranslation.txt)"));
271 if ( QApplication::desktop()->width() < 300 ) { 309 if ( QApplication::desktop()->width() < 300 ) {
272 syncPrefsGroup->groupBox()->layout()->setMargin( 5 ); 310 syncPrefsGroup->groupBox()->layout()->setMargin( 5 );
273 syncPrefsGroup->groupBox()->layout()->setSpacing( 0 ); 311 syncPrefsGroup->groupBox()->layout()->setSpacing( 0 );
274 } 312 }
275 topLayout->addMultiCellWidget( (QWidget*)syncPrefsGroup->groupBox(),iii,iii,0,1); 313 topLayout->addMultiCellWidget( (QWidget*)syncPrefsGroup->groupBox(),iii,iii,0,1);
276 ++iii; 314 ++iii;
277 315
278 316
279 tabWidget->addTab( topFrame, i18n( "Language" ) ); 317 tabWidget->addTab( topFrame, i18n( "Language" ) );
280 topFrame = new QWidget( this ); 318 topFrame = new QWidget( this );
281 topLayout = new QGridLayout(topFrame,4,2); 319 topLayout = new QGridLayout(topFrame,4,2);
282 320
283 topLayout->setSpacing(KDialog::spacingHint()); 321 topLayout->setSpacing(KDialog::spacingHint());
284 topLayout->setMargin(KDialog::marginHint()); 322 topLayout->setMargin(KDialog::marginHint());
285 iii = 0; 323 iii = 0;
286 syncPrefsGroup = 324 syncPrefsGroup =
287 addWidRadios(i18n("Time Format(nr):"),&(KPimGlobalPrefs::instance()->mPreferredTime),topFrame); 325 addWidRadios(i18n("Time Format(nr):"),&(KPimGlobalPrefs::instance()->mPreferredTime),topFrame);
288 if ( QApplication::desktop()->width() > 300 ) 326 if ( QApplication::desktop()->width() > 300 )
289 syncPrefsGroup->groupBox()->setOrientation (Qt::Vertical); 327 syncPrefsGroup->groupBox()->setOrientation (Qt::Vertical);
290 syncPrefsGroup->addRadio(i18n("24:00")); 328 syncPrefsGroup->addRadio(i18n("24:00"));
291 syncPrefsGroup->addRadio(i18n("12:00am")); 329 syncPrefsGroup->addRadio(i18n("12:00am"));
292 syncPrefsGroup->groupBox()->setOrientation (Qt::Vertical); 330 syncPrefsGroup->groupBox()->setOrientation (Qt::Vertical);
293 topLayout->addMultiCellWidget( syncPrefsGroup->groupBox(),iii,iii,0,1); 331 topLayout->addMultiCellWidget( syncPrefsGroup->groupBox(),iii,iii,0,1);
294 ++iii; 332 ++iii;
295 333
296 KPrefsWidBool *sb = addWidBool(i18n("Week starts on Sunday"), 334 KPrefsWidBool *sb = addWidBool(i18n("Week starts on Sunday"),
297 &(KPimGlobalPrefs::instance()->mWeekStartsOnSunday),topFrame); 335 &(KPimGlobalPrefs::instance()->mWeekStartsOnSunday),topFrame);
298 topLayout->addMultiCellWidget((QWidget*)sb->checkBox(), iii,iii,0,1); 336 topLayout->addMultiCellWidget((QWidget*)sb->checkBox(), iii,iii,0,1);
299 ++iii; 337 ++iii;
300 338
301 339
302 tabWidget->addTab( topFrame, i18n( "Time Format" ) ); 340 tabWidget->addTab( topFrame, i18n( "Time Format" ) );
303 341
304} 342}
305 343
306 344
307void KDEPIMConfigWidget::setupTimeZoneTab() 345void KDEPIMConfigWidget::setupTimeZoneTab()
308{ 346{
309 QWidget *topFrame = new QWidget( this ); 347 QWidget *topFrame = new QWidget( this );
310 QGridLayout *topLayout = new QGridLayout( topFrame, 5, 2); 348 QGridLayout *topLayout = new QGridLayout( topFrame, 5, 2);
311 topLayout->setSpacing(KDialog::spacingHintSmall()); 349 topLayout->setSpacing(KDialog::spacingHintSmall());
312 topLayout->setMargin(KDialog::marginHintSmall()); 350 topLayout->setMargin(KDialog::marginHintSmall());
313 351
314 QHBox *timeZoneBox = new QHBox( topFrame ); 352 QHBox *timeZoneBox = new QHBox( topFrame );
315 topLayout->addMultiCellWidget( timeZoneBox, 0, 0, 0, 1 ); 353 topLayout->addMultiCellWidget( timeZoneBox, 0, 0, 0, 1 );
316 354
317 new QLabel( i18n("Timezone:"), timeZoneBox ); 355 new QLabel( i18n("Timezone:"), timeZoneBox );
318 mTimeZoneCombo = new QComboBox( timeZoneBox ); 356 mTimeZoneCombo = new QComboBox( timeZoneBox );
319 if ( QApplication::desktop()->width() < 300 ) { 357 if ( QApplication::desktop()->width() < 300 ) {
320 mTimeZoneCombo->setMaximumWidth(150); 358 mTimeZoneCombo->setMaximumWidth(150);
321 } 359 }
322 360
323 QStringList list; 361 QStringList list;
324 list = KGlobal::locale()->timeZoneList(); 362 list = KGlobal::locale()->timeZoneList();
325 mTimeZoneCombo->insertStringList(list); 363 mTimeZoneCombo->insertStringList(list);
326 364
327 // find the currently set time zone and select it 365 // find the currently set time zone and select it
328 QString sCurrentlySet = KPimGlobalPrefs::instance()->mTimeZoneId; 366 QString sCurrentlySet = KPimGlobalPrefs::instance()->mTimeZoneId;
329 int nCurrentlySet = 11; 367 int nCurrentlySet = 11;
330 for (int i = 0; i < mTimeZoneCombo->count(); i++) 368 for (int i = 0; i < mTimeZoneCombo->count(); i++)
331 { 369 {
332 if (mTimeZoneCombo->text(i) == sCurrentlySet) 370 if (mTimeZoneCombo->text(i) == sCurrentlySet)
333 { 371 {
334 nCurrentlySet = i; 372 nCurrentlySet = i;
335 break; 373 break;
336 } 374 }
337 } 375 }
338 mTimeZoneCombo->setCurrentItem(nCurrentlySet); 376 mTimeZoneCombo->setCurrentItem(nCurrentlySet);
339 int iii = 1; 377 int iii = 1;
340 KPrefsWidBool *sb = 378 KPrefsWidBool *sb =
341 addWidBool(i18n("Add 30 min to selected Timezone"), 379 addWidBool(i18n("Add 30 min to selected Timezone"),
342 &(KPimGlobalPrefs::instance()->mTimeZoneAdd30min),topFrame); 380 &(KPimGlobalPrefs::instance()->mTimeZoneAdd30min),topFrame);
343 topLayout->addMultiCellWidget((QWidget*)sb->checkBox(), iii,iii,0,1); 381 topLayout->addMultiCellWidget((QWidget*)sb->checkBox(), iii,iii,0,1);
344 ++iii; 382 ++iii;
345 sb = 383 sb =
346 addWidBool(i18n("Timezone has daylight saving"), 384 addWidBool(i18n("Timezone has daylight saving"),
347 &(KPimGlobalPrefs::instance()->mUseDaylightsaving),topFrame); 385 &(KPimGlobalPrefs::instance()->mUseDaylightsaving),topFrame);
348 topLayout->addMultiCellWidget((QWidget*)sb->checkBox(), iii,iii,0,1); 386 topLayout->addMultiCellWidget((QWidget*)sb->checkBox(), iii,iii,0,1);
349 ++iii; 387 ++iii;
350 QLabel* lab; 388 QLabel* lab;
351 389
352 lab = new QLabel( i18n("Actual start and end is the\nsunday before this date."), topFrame ); 390 lab = new QLabel( i18n("Actual start and end is the\nsunday before this date."), topFrame );
353 topLayout->addMultiCellWidget(lab, iii,iii,0,1); 391 topLayout->addMultiCellWidget(lab, iii,iii,0,1);
354 ++iii; 392 ++iii;
355 393
356 lab = new QLabel( i18n("The year in the date is ignored."), topFrame ); 394 lab = new QLabel( i18n("The year in the date is ignored."), topFrame );
357 topLayout->addMultiCellWidget(lab, iii,iii,0,1); 395 topLayout->addMultiCellWidget(lab, iii,iii,0,1);
358 ++iii; 396 ++iii;
359 lab = new QLabel( i18n("Daylight start:"), topFrame ); 397 lab = new QLabel( i18n("Daylight start:"), topFrame );
360 topLayout->addWidget(lab, iii,0); 398 topLayout->addWidget(lab, iii,0);
361 mStartDateSavingEdit = new KDateEdit(topFrame); 399 mStartDateSavingEdit = new KDateEdit(topFrame);
362 topLayout->addWidget(mStartDateSavingEdit, iii,1); 400 topLayout->addWidget(mStartDateSavingEdit, iii,1);
363 ++iii; 401 ++iii;
364 402
365 lab = new QLabel( i18n("Daylight end:"), topFrame ); 403 lab = new QLabel( i18n("Daylight end:"), topFrame );
366 topLayout->addWidget(lab, iii,0); 404 topLayout->addWidget(lab, iii,0);
367 mEndDateSavingEdit = new KDateEdit(topFrame); 405 mEndDateSavingEdit = new KDateEdit(topFrame);
368 topLayout->addWidget(mEndDateSavingEdit, iii,1); 406 topLayout->addWidget(mEndDateSavingEdit, iii,1);
369 ++iii; 407 ++iii;
370 QDate current ( 2001, 1,1); 408 QDate current ( 2001, 1,1);
371 mStartDateSavingEdit->setDate(current.addDays(KPimGlobalPrefs::instance()->mDaylightsavingStart-1)); 409 mStartDateSavingEdit->setDate(current.addDays(KPimGlobalPrefs::instance()->mDaylightsavingStart-1));
372 mEndDateSavingEdit->setDate(current.addDays(KPimGlobalPrefs::instance()->mDaylightsavingEnd-1)); 410 mEndDateSavingEdit->setDate(current.addDays(KPimGlobalPrefs::instance()->mDaylightsavingEnd-1));
373 411
374 connect( mStartDateSavingEdit, SIGNAL( dateChanged(QDate)), this, SLOT( modified()) ); 412 connect( mStartDateSavingEdit, SIGNAL( dateChanged(QDate)), this, SLOT( modified()) );
375 connect( mEndDateSavingEdit, SIGNAL( dateChanged(QDate)), this, SLOT( modified()) ); 413 connect( mEndDateSavingEdit, SIGNAL( dateChanged(QDate)), this, SLOT( modified()) );
376 connect( mTimeZoneCombo, SIGNAL( activated( int ) ), this, SLOT (modified() ) ); 414 connect( mTimeZoneCombo, SIGNAL( activated( int ) ), this, SLOT (modified() ) );
377 415
378 416
379 417
380 tabWidget->addTab( topFrame, i18n( "Time Zone" ) ); 418 tabWidget->addTab( topFrame, i18n( "Time Zone" ) );
381 419
382} 420}
383 421
384void KDEPIMConfigWidget::externalapp_changed( int newApp ) 422void KDEPIMConfigWidget::externalapp_changed( int newApp )
385{ 423{
386 // first store the current data 424 // first store the current data
387 saveEditFieldSettings(); 425 saveEditFieldSettings();
388 426
389 // set mCurrentApp 427 // set mCurrentApp
390 mCurrentApp = (ExternalAppHandler::Types)newApp; 428 mCurrentApp = (ExternalAppHandler::Types)newApp;
391 429
392 // set mCurrentClient 430 // set mCurrentClient
393 switch(mCurrentApp) 431 switch(mCurrentApp)
394 { 432 {
395 case(ExternalAppHandler::EMAIL): 433 case(ExternalAppHandler::EMAIL):
396 mCurrentClient = mEmailClient; 434 mCurrentClient = mEmailClient;
397 break; 435 break;
398 case(ExternalAppHandler::PHONE): 436 case(ExternalAppHandler::PHONE):
399 mCurrentClient = mPhoneClient; 437 mCurrentClient = mPhoneClient;
400 break; 438 break;
401 case(ExternalAppHandler::SMS): 439 case(ExternalAppHandler::SMS):
402 mCurrentClient = mSMSClient; 440 mCurrentClient = mSMSClient;
403 break; 441 break;
404 case(ExternalAppHandler::FAX): 442 case(ExternalAppHandler::FAX):
405 mCurrentClient = mFaxClient; 443 mCurrentClient = mFaxClient;
406 break; 444 break;
407 case(ExternalAppHandler::PAGER): 445 case(ExternalAppHandler::PAGER):
408 mCurrentClient = mPagerClient; 446 mCurrentClient = mPagerClient;
409 break; 447 break;
410 case(ExternalAppHandler::SIP): 448 case(ExternalAppHandler::SIP):
411 mCurrentClient = mSipClient; 449 mCurrentClient = mSipClient;
412 break; 450 break;
413 default: 451 default:
414 return; 452 return;
415 } 453 }
416 454
417 // and at last update the widgets 455 // and at last update the widgets
418 updateClientWidgets(); 456 updateClientWidgets();
419} 457}
420 458
421 459
422 460
423void KDEPIMConfigWidget::client_changed( int newClient ) 461void KDEPIMConfigWidget::client_changed( int newClient )
424{ 462{
425 if (newClient == mCurrentClient) 463 if (newClient == mCurrentClient)
426 return; 464 return;
427 465
428 // first store the current data 466 // first store the current data
429 saveEditFieldSettings(); 467 saveEditFieldSettings();
430 468
431 469
432 //then reset the clientvariable 470 //then reset the clientvariable
433 mCurrentClient = newClient; 471 mCurrentClient = newClient;
434 472
435 // and at last update the widgets 473 // and at last update the widgets
436 updateClientWidgets(); 474 updateClientWidgets();
437 475
438 KPrefsWidget::modified(); 476 KPrefsWidget::modified();
439} 477}
440 478
441void KDEPIMConfigWidget::saveEditFieldSettings() 479void KDEPIMConfigWidget::saveEditFieldSettings()
442{ 480{
443 481
444 switch(mCurrentApp) 482 switch(mCurrentApp)
445 { 483 {
446 case(ExternalAppHandler::EMAIL): 484 case(ExternalAppHandler::EMAIL):
447 mEmailClient = mClient->currentItem(); 485 mEmailClient = mClient->currentItem();
448 break; 486 break;
449 case(ExternalAppHandler::PHONE): 487 case(ExternalAppHandler::PHONE):
450 mPhoneClient= mClient->currentItem(); 488 mPhoneClient= mClient->currentItem();
451 break; 489 break;
452 case(ExternalAppHandler::SMS): 490 case(ExternalAppHandler::SMS):
453 mSMSClient = mClient->currentItem(); 491 mSMSClient = mClient->currentItem();
454 break; 492 break;
455 case(ExternalAppHandler::FAX): 493 case(ExternalAppHandler::FAX):
456 mFaxClient = mClient->currentItem(); 494 mFaxClient = mClient->currentItem();
457 break; 495 break;
458 case(ExternalAppHandler::PAGER): 496 case(ExternalAppHandler::PAGER):
459 mPagerClient = mClient->currentItem(); 497 mPagerClient = mClient->currentItem();
460 break; 498 break;
461 case(ExternalAppHandler::SIP): 499 case(ExternalAppHandler::SIP):
462 mSipClient = mClient->currentItem(); 500 mSipClient = mClient->currentItem();
463 break; 501 break;
464 default: 502 default:
465 return; 503 return;
466 } 504 }
467 505
468 //store the current data back to the apropriate membervariables if we had set it to "other" 506 //store the current data back to the apropriate membervariables if we had set it to "other"
469 if ((mCurrentApp == ExternalAppHandler::EMAIL) && (mCurrentClient == KPimGlobalPrefs::OTHER_EMC)) 507 if ((mCurrentApp == ExternalAppHandler::EMAIL) && (mCurrentClient == KPimGlobalPrefs::OTHER_EMC))
470 { 508 {
471 mEmailOtherChannel = mChannel->text(); 509 mEmailOtherChannel = mChannel->text();
472 mEmailOtherMessage = mMessage->text(); 510 mEmailOtherMessage = mMessage->text();
473 mEmailOtherMessageParameters = mParameters->text(); 511 mEmailOtherMessageParameters = mParameters->text();
474 mEmailOtherMessage2 = mMessage2->text(); 512 mEmailOtherMessage2 = mMessage2->text();
475 mEmailOtherMessageParameters2 = mParameters2->text(); 513 mEmailOtherMessageParameters2 = mParameters2->text();
476 } 514 }
477 else if ((mCurrentApp == ExternalAppHandler::PHONE) && (mCurrentClient == KPimGlobalPrefs::OTHER_PHC)) 515 else if ((mCurrentApp == ExternalAppHandler::PHONE) && (mCurrentClient == KPimGlobalPrefs::OTHER_PHC))
478 { 516 {
479 mPhoneOtherChannel = mChannel->text(); 517 mPhoneOtherChannel = mChannel->text();
480 mPhoneOtherMessage = mMessage->text(); 518 mPhoneOtherMessage = mMessage->text();
481 mPhoneOtherMessageParameters = mParameters->text(); 519 mPhoneOtherMessageParameters = mParameters->text();
482 } 520 }
483 else if ((mCurrentApp == ExternalAppHandler::SMS) && (mCurrentClient == KPimGlobalPrefs::OTHER_SMC)) 521 else if ((mCurrentApp == ExternalAppHandler::SMS) && (mCurrentClient == KPimGlobalPrefs::OTHER_SMC))
484 { 522 {
485 mSMSOtherChannel = mChannel->text(); 523 mSMSOtherChannel = mChannel->text();
486 mSMSOtherMessage = mMessage->text(); 524 mSMSOtherMessage = mMessage->text();
487 mSMSOtherMessageParameters = mParameters->text(); 525 mSMSOtherMessageParameters = mParameters->text();
488 } 526 }
489 else if ((mCurrentApp == ExternalAppHandler::FAX) && (mCurrentClient == KPimGlobalPrefs::OTHER_FAC)) 527 else if ((mCurrentApp == ExternalAppHandler::FAX) && (mCurrentClient == KPimGlobalPrefs::OTHER_FAC))
490 { 528 {
491 mFaxOtherChannel = mChannel->text(); 529 mFaxOtherChannel = mChannel->text();
492 mFaxOtherMessage = mMessage->text(); 530 mFaxOtherMessage = mMessage->text();
493 mFaxOtherMessageParameters = mParameters->text(); 531 mFaxOtherMessageParameters = mParameters->text();
494 } 532 }
495 else if ((mCurrentApp == ExternalAppHandler::PAGER) && (mCurrentClient == KPimGlobalPrefs::OTHER_PAC)) 533 else if ((mCurrentApp == ExternalAppHandler::PAGER) && (mCurrentClient == KPimGlobalPrefs::OTHER_PAC))
diff --git a/libkdepim/kcmconfigs/kdepimconfigwidget.h b/libkdepim/kcmconfigs/kdepimconfigwidget.h
index 619f3d7..c545207 100644
--- a/libkdepim/kcmconfigs/kdepimconfigwidget.h
+++ b/libkdepim/kcmconfigs/kdepimconfigwidget.h
@@ -1,155 +1,160 @@
1/* 1/*
2 This file is part of KDEPim/Pi. 2 This file is part of KDEPim/Pi.
3 Copyright (c) 2004 Ulf Schenk 3 Copyright (c) 2004 Ulf Schenk
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/* 24/*
25Enhanced Version of the file for platform independent KDE tools. 25Enhanced Version of the file for platform independent KDE tools.
26Copyright (c) 2004 Ulf Schenk 26Copyright (c) 2004 Ulf Schenk
27 27
28$Id$ 28$Id$
29*/ 29*/
30 30
31#ifndef KDEPIMCONFIGWIDGET_H 31#ifndef KDEPIMCONFIGWIDGET_H
32#define KDEPIMCONFIGWIDGET_H 32#define KDEPIMCONFIGWIDGET_H
33 33
34#include <kprefswidget.h> 34#include <kprefswidget.h>
35#include <kio/kfile/kurlrequester.h>
35#include <qmap.h> 36#include <qmap.h>
36 37
37#include "externalapphandler.h" 38#include "externalapphandler.h"
38 39
39 40
40class QComboBox; 41class QComboBox;
41class QLineEdit; 42class QLineEdit;
42class KPimGlobalPrefs; 43class KPimGlobalPrefs;
43class QGroupBox; 44class QGroupBox;
44class QTabWidget; 45class QTabWidget;
45class KDateEdit; 46class KDateEdit;
46 47
47class KDEPIMConfigWidget : public KPrefsWidget 48class KDEPIMConfigWidget : public KPrefsWidget
48{ 49{
49 Q_OBJECT 50 Q_OBJECT
50 51
51 public: 52 public:
52 KDEPIMConfigWidget(KPimGlobalPrefs *prefs, QWidget *parent, const char *name = 0 ); 53 KDEPIMConfigWidget(KPimGlobalPrefs *prefs, QWidget *parent, const char *name = 0 );
53 54
54 public slots: 55 public slots:
55 void textChanged( const QString& text ); 56 void textChanged( const QString& text );
56 void showTimeZoneTab(); 57 void showTimeZoneTab();
57 58
58 protected: 59 protected:
59 /** Implement this to read custom configuration widgets. */ 60 /** Implement this to read custom configuration widgets. */
60 virtual void usrReadConfig(); 61 virtual void usrReadConfig();
61 /** Implement this to write custom configuration widgets. */ 62 /** Implement this to write custom configuration widgets. */
62 virtual void usrWriteConfig(); 63 virtual void usrWriteConfig();
63 64
64 65
65 private slots: 66 private slots:
66// void configureExtension(); 67// void configureExtension();
67// void selectionChanged( QListViewItem* ); 68// void selectionChanged( QListViewItem* );
68// void itemClicked( QListViewItem* ); 69// void itemClicked( QListViewItem* );
69 void client_changed( int newClient ); 70 void client_changed( int newClient );
70 void externalapp_changed( int newApp ); 71 void externalapp_changed( int newApp );
72 void saveStoreSettings();
73 void setStandardStore();
71 74
72 private: 75 private:
73 void setupExternalAppTab(); 76 void setupExternalAppTab();
74 void setupLocaleDateTab(); 77 void setupLocaleDateTab();
75 void setupLocaleTab(); 78 void setupLocaleTab();
76 void setupTimeZoneTab(); 79 void setupTimeZoneTab();
80 void setupStoreTab();
81 KURLRequester* mStoreUrl;
77 82
78 void setCombo(QComboBox *combo,const QString & text, const QStringList *tags = 0); 83 void setCombo(QComboBox *combo,const QString & text, const QStringList *tags = 0);
79 84
80 85
81 void saveEditFieldSettings(); 86 void saveEditFieldSettings();
82 void updateClientWidgets(); 87 void updateClientWidgets();
83 88
84 QTabWidget *tabWidget; 89 QTabWidget *tabWidget;
85 90
86 91
87 QLineEdit* mUserDateFormatShort; 92 QLineEdit* mUserDateFormatShort;
88 QLineEdit* mUserDateFormatLong; 93 QLineEdit* mUserDateFormatLong;
89 QComboBox* mTimeZoneCombo; 94 QComboBox* mTimeZoneCombo;
90 KDateEdit* mStartDateSavingEdit; 95 KDateEdit* mStartDateSavingEdit;
91 KDateEdit* mEndDateSavingEdit; 96 KDateEdit* mEndDateSavingEdit;
92 97
93// void restoreExtensionSettings(); 98// void restoreExtensionSettings();
94// void saveExtensionSettings(); 99// void saveExtensionSettings();
95 100
96// KListView *mExtensionView; 101// KListView *mExtensionView;
97 102
98// QCheckBox *mNameParsing; 103// QCheckBox *mNameParsing;
99// QCheckBox *mViewsSingleClickBox; 104// QCheckBox *mViewsSingleClickBox;
100// QPushButton *mConfigureButton; 105// QPushButton *mConfigureButton;
101 QComboBox* mExternalApps; 106 QComboBox* mExternalApps;
102 QGroupBox* mExternalAppGroupBox; 107 QGroupBox* mExternalAppGroupBox;
103 108
104 109
105 QComboBox* mClient; 110 QComboBox* mClient;
106 QLineEdit* mChannel; 111 QLineEdit* mChannel;
107 QLineEdit* mMessage; 112 QLineEdit* mMessage;
108 QLineEdit* mParameters; 113 QLineEdit* mParameters;
109 QLineEdit* mMessage2; 114 QLineEdit* mMessage2;
110 QLineEdit* mParameters2; 115 QLineEdit* mParameters2;
111 116
112 ExternalAppHandler::Types mCurrentApp; 117 ExternalAppHandler::Types mCurrentApp;
113 int mCurrentClient; 118 int mCurrentClient;
114 119
115 120
116 int mEmailClient; 121 int mEmailClient;
117 QString mEmailOtherChannel; 122 QString mEmailOtherChannel;
118 QString mEmailOtherMessage; 123 QString mEmailOtherMessage;
119 QString mEmailOtherMessageParameters; 124 QString mEmailOtherMessageParameters;
120 QString mEmailOtherMessage2; 125 QString mEmailOtherMessage2;
121 QString mEmailOtherMessageParameters2; 126 QString mEmailOtherMessageParameters2;
122 127
123 int mPhoneClient; 128 int mPhoneClient;
124 QString mPhoneOtherChannel; 129 QString mPhoneOtherChannel;
125 QString mPhoneOtherMessage; 130 QString mPhoneOtherMessage;
126 QString mPhoneOtherMessageParameters; 131 QString mPhoneOtherMessageParameters;
127 132
128 int mFaxClient; 133 int mFaxClient;
129 QString mFaxOtherChannel; 134 QString mFaxOtherChannel;
130 QString mFaxOtherMessage; 135 QString mFaxOtherMessage;
131 QString mFaxOtherMessageParameters; 136 QString mFaxOtherMessageParameters;
132 137
133 int mSMSClient; 138 int mSMSClient;
134 QString mSMSOtherChannel; 139 QString mSMSOtherChannel;
135 QString mSMSOtherMessage; 140 QString mSMSOtherMessage;
136 QString mSMSOtherMessageParameters; 141 QString mSMSOtherMessageParameters;
137 142
138 int mPagerClient; 143 int mPagerClient;
139 QString mPagerOtherChannel; 144 QString mPagerOtherChannel;
140 QString mPagerOtherMessage; 145 QString mPagerOtherMessage;
141 QString mPagerOtherMessageParameters; 146 QString mPagerOtherMessageParameters;
142 147
143 int mSipClient; 148 int mSipClient;
144 QString mSipOtherChannel; 149 QString mSipOtherChannel;
145 QString mSipOtherMessage; 150 QString mSipOtherMessage;
146 QString mSipOtherMessageParameters; 151 QString mSipOtherMessageParameters;
147 152
148 153
149 154
150 QMap<ExternalAppHandler::Types, QString> mExternalAppsMap; 155 QMap<ExternalAppHandler::Types, QString> mExternalAppsMap;
151 156
152// AddresseeWidget *mAddresseeWidget; 157// AddresseeWidget *mAddresseeWidget;
153}; 158};
154 159
155#endif 160#endif
diff --git a/microkde/kdecore/kstandarddirs.cpp b/microkde/kdecore/kstandarddirs.cpp
index 4c03c15..f3584d7 100644
--- a/microkde/kdecore/kstandarddirs.cpp
+++ b/microkde/kdecore/kstandarddirs.cpp
@@ -902,761 +902,763 @@ int KStandardDirs::findAllExe( QStringList& list, const QString& appname,
902 } 902 }
903 903
904 list.clear(); 904 list.clear();
905 tokenize( tokens, p, ":\b" ); 905 tokenize( tokens, p, ":\b" );
906 906
907 for ( unsigned i = 0; i < tokens.count(); i++ ) { 907 for ( unsigned i = 0; i < tokens.count(); i++ ) {
908 p = tokens[ i ]; 908 p = tokens[ i ];
909 p += "/"; 909 p += "/";
910 p += appname; 910 p += appname;
911 911
912 info.setFile( p ); 912 info.setFile( p );
913 913
914 if( info.exists() && (ignore || info.isExecutable()) 914 if( info.exists() && (ignore || info.isExecutable())
915 && info.isFile() ) { 915 && info.isFile() ) {
916 list.append( p ); 916 list.append( p );
917 } 917 }
918 918
919 } 919 }
920 920
921 return list.count(); 921 return list.count();
922} 922}
923*/ 923*/
924 924
925static int tokenize( QStringList& tokens, const QString& str, 925static int tokenize( QStringList& tokens, const QString& str,
926 const QString& delim ) 926 const QString& delim )
927{ 927{
928 int len = str.length(); 928 int len = str.length();
929 QString token = ""; 929 QString token = "";
930 930
931 for( int index = 0; index < len; index++) 931 for( int index = 0; index < len; index++)
932 { 932 {
933 if ( delim.find( str[ index ] ) >= 0 ) 933 if ( delim.find( str[ index ] ) >= 0 )
934 { 934 {
935 tokens.append( token ); 935 tokens.append( token );
936 token = ""; 936 token = "";
937 } 937 }
938 else 938 else
939 { 939 {
940 token += str[ index ]; 940 token += str[ index ];
941 } 941 }
942 } 942 }
943 if ( token.length() > 0 ) 943 if ( token.length() > 0 )
944 { 944 {
945 tokens.append( token ); 945 tokens.append( token );
946 } 946 }
947 947
948 return tokens.count(); 948 return tokens.count();
949} 949}
950 950
951QString KStandardDirs::kde_default(const char *type) { 951QString KStandardDirs::kde_default(const char *type) {
952 if (!strcmp(type, "data")) 952 if (!strcmp(type, "data"))
953 return "apps/"; 953 return "apps/";
954 if (!strcmp(type, "html")) 954 if (!strcmp(type, "html"))
955 return "share/doc/HTML/"; 955 return "share/doc/HTML/";
956 if (!strcmp(type, "icon")) 956 if (!strcmp(type, "icon"))
957 return "share/icons/"; 957 return "share/icons/";
958 if (!strcmp(type, "config")) 958 if (!strcmp(type, "config"))
959 return "config/"; 959 return "config/";
960 if (!strcmp(type, "pixmap")) 960 if (!strcmp(type, "pixmap"))
961 return "share/pixmaps/"; 961 return "share/pixmaps/";
962 if (!strcmp(type, "apps")) 962 if (!strcmp(type, "apps"))
963 return "share/applnk/"; 963 return "share/applnk/";
964 if (!strcmp(type, "sound")) 964 if (!strcmp(type, "sound"))
965 return "share/sounds/"; 965 return "share/sounds/";
966 if (!strcmp(type, "locale")) 966 if (!strcmp(type, "locale"))
967 return "share/locale/"; 967 return "share/locale/";
968 if (!strcmp(type, "services")) 968 if (!strcmp(type, "services"))
969 return "share/services/"; 969 return "share/services/";
970 if (!strcmp(type, "servicetypes")) 970 if (!strcmp(type, "servicetypes"))
971 return "share/servicetypes/"; 971 return "share/servicetypes/";
972 if (!strcmp(type, "mime")) 972 if (!strcmp(type, "mime"))
973 return "share/mimelnk/"; 973 return "share/mimelnk/";
974 if (!strcmp(type, "cgi")) 974 if (!strcmp(type, "cgi"))
975 return "cgi-bin/"; 975 return "cgi-bin/";
976 if (!strcmp(type, "wallpaper")) 976 if (!strcmp(type, "wallpaper"))
977 return "share/wallpapers/"; 977 return "share/wallpapers/";
978 if (!strcmp(type, "templates")) 978 if (!strcmp(type, "templates"))
979 return "share/templates/"; 979 return "share/templates/";
980 if (!strcmp(type, "exe")) 980 if (!strcmp(type, "exe"))
981 return "bin/"; 981 return "bin/";
982 if (!strcmp(type, "lib")) 982 if (!strcmp(type, "lib"))
983 return "lib/"; 983 return "lib/";
984 if (!strcmp(type, "module")) 984 if (!strcmp(type, "module"))
985 return "lib/kde3/"; 985 return "lib/kde3/";
986 if (!strcmp(type, "qtplugins")) 986 if (!strcmp(type, "qtplugins"))
987 return "lib/kde3/plugins"; 987 return "lib/kde3/plugins";
988 if (!strcmp(type, "xdgdata-apps")) 988 if (!strcmp(type, "xdgdata-apps"))
989 return "applications/"; 989 return "applications/";
990 if (!strcmp(type, "xdgdata-dirs")) 990 if (!strcmp(type, "xdgdata-dirs"))
991 return "desktop-directories/"; 991 return "desktop-directories/";
992 if (!strcmp(type, "xdgconf-menu")) 992 if (!strcmp(type, "xdgconf-menu"))
993 return "menus/"; 993 return "menus/";
994 if (!strcmp(type, "tmp")) 994 if (!strcmp(type, "tmp"))
995 return "tmp/"; 995 return "tmp/";
996 996
997 qFatal("unknown resource type %s", type); 997 qFatal("unknown resource type %s", type);
998 return QString::null; 998 return QString::null;
999} 999}
1000 1000
1001QString KStandardDirs::saveLocation(const char *type, 1001QString KStandardDirs::saveLocation(const char *type,
1002 const QString& suffix, 1002 const QString& suffix,
1003 bool create) const 1003 bool create) const
1004{ 1004{
1005 //qDebug("KStandardDirs::saveLocation called %s %s", type,suffix.latin1() ); 1005 //qDebug("KStandardDirs::saveLocation called %s %s", type,suffix.latin1() );
1006 //return ""; 1006 //return "";
1007 checkConfig(); 1007 checkConfig();
1008 1008
1009 QString *pPath = savelocations.find(type); 1009 QString *pPath = savelocations.find(type);
1010 if (!pPath) 1010 if (!pPath)
1011 { 1011 {
1012 QStringList *dirs = relatives.find(type); 1012 QStringList *dirs = relatives.find(type);
1013 if (!dirs && ( 1013 if (!dirs && (
1014 (strcmp(type, "socket") == 0) || 1014 (strcmp(type, "socket") == 0) ||
1015 (strcmp(type, "tmp") == 0) || 1015 (strcmp(type, "tmp") == 0) ||
1016 (strcmp(type, "cache") == 0) )) 1016 (strcmp(type, "cache") == 0) ))
1017 { 1017 {
1018 (void) resourceDirs(type); // Generate socket|tmp|cache resource. 1018 (void) resourceDirs(type); // Generate socket|tmp|cache resource.
1019 dirs = relatives.find(type); // Search again. 1019 dirs = relatives.find(type); // Search again.
1020 } 1020 }
1021 if (dirs) 1021 if (dirs)
1022 { 1022 {
1023 // Check for existance of typed directory + suffix 1023 // Check for existance of typed directory + suffix
1024 if (strncmp(type, "xdgdata-", 8) == 0) 1024 if (strncmp(type, "xdgdata-", 8) == 0)
1025 pPath = new QString(realPath(localxdgdatadir() + dirs->last())); 1025 pPath = new QString(realPath(localxdgdatadir() + dirs->last()));
1026 else if (strncmp(type, "xdgconf-", 8) == 0) 1026 else if (strncmp(type, "xdgconf-", 8) == 0)
1027 pPath = new QString(realPath(localxdgconfdir() + dirs->last())); 1027 pPath = new QString(realPath(localxdgconfdir() + dirs->last()));
1028 else 1028 else
1029 pPath = new QString(realPath(localkdedir() + dirs->last())); 1029 pPath = new QString(realPath(localkdedir() + dirs->last()));
1030 } 1030 }
1031 else { 1031 else {
1032 dirs = absolutes.find(type); 1032 dirs = absolutes.find(type);
1033 if (!dirs) 1033 if (!dirs)
1034 qFatal("KStandardDirs: The resource type %s is not registered", type); 1034 qFatal("KStandardDirs: The resource type %s is not registered", type);
1035 pPath = new QString(realPath(dirs->last())); 1035 pPath = new QString(realPath(dirs->last()));
1036 } 1036 }
1037 1037
1038 savelocations.insert(type, pPath); 1038 savelocations.insert(type, pPath);
1039 } 1039 }
1040 1040
1041 QString fullPath = *pPath + suffix; 1041 QString fullPath = *pPath + suffix;
1042//US struct stat st; 1042//US struct stat st;
1043//US if (stat(QFile::encodeName(fullPath), &st) != 0 || !(S_ISDIR(st.st_mode))) 1043//US if (stat(QFile::encodeName(fullPath), &st) != 0 || !(S_ISDIR(st.st_mode)))
1044 QFileInfo fullPathInfo(QFile::encodeName(fullPath)); 1044 QFileInfo fullPathInfo(QFile::encodeName(fullPath));
1045 if (fullPathInfo.isReadable() || !fullPathInfo.isDir()) 1045 if (fullPathInfo.isReadable() || !fullPathInfo.isDir())
1046 1046
1047 1047
1048 { 1048 {
1049 if(!create) { 1049 if(!create) {
1050#ifndef NDEBUG 1050#ifndef NDEBUG
1051 qDebug("save location %s doesn't exist", fullPath.latin1()); 1051 qDebug("save location %s doesn't exist", fullPath.latin1());
1052#endif 1052#endif
1053 return fullPath; 1053 return fullPath;
1054 } 1054 }
1055 if(!makeDir(fullPath, 0700)) { 1055 if(!makeDir(fullPath, 0700)) {
1056 qWarning("failed to create %s", fullPath.latin1()); 1056 qWarning("failed to create %s", fullPath.latin1());
1057 return fullPath; 1057 return fullPath;
1058 } 1058 }
1059 dircache.remove(type); 1059 dircache.remove(type);
1060 } 1060 }
1061 return fullPath; 1061 return fullPath;
1062} 1062}
1063 1063
1064QString KStandardDirs::relativeLocation(const char *type, const QString &absPath) 1064QString KStandardDirs::relativeLocation(const char *type, const QString &absPath)
1065{ 1065{
1066 QString fullPath = absPath; 1066 QString fullPath = absPath;
1067 int i = absPath.findRev('/'); 1067 int i = absPath.findRev('/');
1068 if (i != -1) 1068 if (i != -1)
1069 { 1069 {
1070 fullPath = realPath(absPath.left(i+1))+absPath.mid(i+1); // Normalize 1070 fullPath = realPath(absPath.left(i+1))+absPath.mid(i+1); // Normalize
1071 } 1071 }
1072 1072
1073 QStringList candidates = resourceDirs(type); 1073 QStringList candidates = resourceDirs(type);
1074 1074
1075 for (QStringList::ConstIterator it = candidates.begin(); 1075 for (QStringList::ConstIterator it = candidates.begin();
1076 it != candidates.end(); it++) 1076 it != candidates.end(); it++)
1077 if (fullPath.startsWith(*it)) 1077 if (fullPath.startsWith(*it))
1078 { 1078 {
1079 return fullPath.mid((*it).length()); 1079 return fullPath.mid((*it).length());
1080 } 1080 }
1081 1081
1082 return absPath; 1082 return absPath;
1083} 1083}
1084 1084
1085 1085
1086bool KStandardDirs::makeDir(const QString& dir2, int mode) 1086bool KStandardDirs::makeDir(const QString& dir2, int mode)
1087{ 1087{
1088 QString dir = QDir::convertSeparators( dir2 ); 1088 QString dir = QDir::convertSeparators( dir2 );
1089#if 0 1089#if 0
1090 //LR 1090 //LR
1091 1091
1092 // we want an absolute path 1092 // we want an absolute path
1093 if (dir.at(0) != '/') 1093 if (dir.at(0) != '/')
1094 return false; 1094 return false;
1095 1095
1096 QString target = dir; 1096 QString target = dir;
1097 uint len = target.length(); 1097 uint len = target.length();
1098 1098
1099 // append trailing slash if missing 1099 // append trailing slash if missing
1100 if (dir.at(len - 1) != '/') 1100 if (dir.at(len - 1) != '/')
1101 target += '/'; 1101 target += '/';
1102 1102
1103 QString base(""); 1103 QString base("");
1104 uint i = 1; 1104 uint i = 1;
1105 1105
1106 while( i < len ) 1106 while( i < len )
1107 { 1107 {
1108//US struct stat st; 1108//US struct stat st;
1109 int pos = target.find('/', i); 1109 int pos = target.find('/', i);
1110 base += target.mid(i - 1, pos - i + 1); 1110 base += target.mid(i - 1, pos - i + 1);
1111 QCString baseEncoded = QFile::encodeName(base); 1111 QCString baseEncoded = QFile::encodeName(base);
1112 // bail out if we encountered a problem 1112 // bail out if we encountered a problem
1113//US if (stat(baseEncoded, &st) != 0) 1113//US if (stat(baseEncoded, &st) != 0)
1114 QFileInfo baseEncodedInfo(baseEncoded); 1114 QFileInfo baseEncodedInfo(baseEncoded);
1115 if (!baseEncodedInfo.exists()) 1115 if (!baseEncodedInfo.exists())
1116 { 1116 {
1117 // Directory does not exist.... 1117 // Directory does not exist....
1118 // Or maybe a dangling symlink ? 1118 // Or maybe a dangling symlink ?
1119//US if (lstat(baseEncoded, &st) == 0) 1119//US if (lstat(baseEncoded, &st) == 0)
1120 if (baseEncodedInfo.isSymLink()) { 1120 if (baseEncodedInfo.isSymLink()) {
1121//US (void)unlink(baseEncoded); // try removing 1121//US (void)unlink(baseEncoded); // try removing
1122 QFile(baseEncoded).remove(); 1122 QFile(baseEncoded).remove();
1123 } 1123 }
1124 1124
1125 //US if ( mkdir(baseEncoded, (mode_t) mode) != 0) 1125 //US if ( mkdir(baseEncoded, (mode_t) mode) != 0)
1126 QDir dirObj; 1126 QDir dirObj;
1127 if ( dirObj.mkdir(baseEncoded) != true ) 1127 if ( dirObj.mkdir(baseEncoded) != true )
1128 { 1128 {
1129 //US perror("trying to create local folder"); 1129 //US perror("trying to create local folder");
1130 return false; // Couldn't create it :-( 1130 return false; // Couldn't create it :-(
1131 } 1131 }
1132 } 1132 }
1133 i = pos + 1; 1133 i = pos + 1;
1134 } 1134 }
1135 return true; 1135 return true;
1136#endif 1136#endif
1137 1137
1138 // ******************************************** 1138 // ********************************************
1139 // new code for WIN32 1139 // new code for WIN32
1140 QDir dirObj; 1140 QDir dirObj;
1141 1141
1142 1142
1143 // we want an absolute path 1143 // we want an absolute path
1144#ifndef _WIN32_ 1144#ifndef _WIN32_
1145 if (dir.at(0) != '/') 1145 if (dir.at(0) != '/')
1146 return false; 1146 return false;
1147#endif 1147#endif
1148 1148
1149 QString target = dir; 1149 QString target = dir;
1150 uint len = target.length(); 1150 uint len = target.length();
1151#ifndef _WIN32_ 1151#ifndef _WIN32_
1152 // append trailing slash if missing 1152 // append trailing slash if missing
1153 if (dir.at(len - 1) != '/') 1153 if (dir.at(len - 1) != '/')
1154 target += '/'; 1154 target += '/';
1155#endif 1155#endif
1156 1156
1157 QString base(""); 1157 QString base("");
1158 uint i = 1; 1158 uint i = 1;
1159 1159
1160 while( i < len ) 1160 while( i < len )
1161 { 1161 {
1162//US struct stat st; 1162//US struct stat st;
1163#ifndef _WIN32_ 1163#ifndef _WIN32_
1164 int pos = target.find('/', i); 1164 int pos = target.find('/', i);
1165#else 1165#else
1166 int pos = target.find('\\', i); 1166 int pos = target.find('\\', i);
1167#endif 1167#endif
1168 if ( pos < 0 ) 1168 if ( pos < 0 )
1169 return true; 1169 return true;
1170 base += target.mid(i - 1, pos - i + 1); 1170 base += target.mid(i - 1, pos - i + 1);
1171 //QMessageBox::information( 0,"cap111", base, 1 ); 1171 //QMessageBox::information( 0,"cap111", base, 1 );
1172/*US 1172/*US
1173 QCString baseEncoded = QFile::encodeName(base); 1173 QCString baseEncoded = QFile::encodeName(base);
1174 // bail out if we encountered a problem 1174 // bail out if we encountered a problem
1175 if (stat(baseEncoded, &st) != 0) 1175 if (stat(baseEncoded, &st) != 0)
1176 { 1176 {
1177 // Directory does not exist.... 1177 // Directory does not exist....
1178 // Or maybe a dangling symlink ? 1178 // Or maybe a dangling symlink ?
1179 if (lstat(baseEncoded, &st) == 0) 1179 if (lstat(baseEncoded, &st) == 0)
1180 (void)unlink(baseEncoded); // try removing 1180 (void)unlink(baseEncoded); // try removing
1181 1181
1182 1182
1183 if ( mkdir(baseEncoded, (mode_t) mode) != 0) { 1183 if ( mkdir(baseEncoded, (mode_t) mode) != 0) {
1184 perror("trying to create local folder"); 1184 perror("trying to create local folder");
1185 return false; // Couldn't create it :-( 1185 return false; // Couldn't create it :-(
1186 } 1186 }
1187 } 1187 }
1188*/ 1188*/
1189 1189
1190 if (dirObj.exists(base) == false) 1190 if (dirObj.exists(base) == false)
1191 { 1191 {
1192 //qDebug("KStandardDirs::makeDir try to create : %s" , base.latin1()); 1192 //qDebug("KStandardDirs::makeDir try to create : %s" , base.latin1());
1193 if (dirObj.mkdir(base) != true) 1193 if (dirObj.mkdir(base) != true)
1194 { 1194 {
1195 qDebug("KStandardDirs::makeDir could not create: %s" , base.latin1()); 1195 qDebug("KStandardDirs::makeDir could not create: %s" , base.latin1());
1196 return false; 1196 return false;
1197 } 1197 }
1198 } 1198 }
1199 1199
1200 i = pos + 1; 1200 i = pos + 1;
1201 } 1201 }
1202 return true; 1202 return true;
1203 1203
1204} 1204}
1205 1205
1206static QString readEnvPath(const char *env) 1206static QString readEnvPath(const char *env)
1207{ 1207{
1208 //#ifdef _WIN32_ 1208 //#ifdef _WIN32_
1209 // return ""; 1209 // return "";
1210 //#else 1210 //#else
1211 QCString c_path; 1211 QCString c_path;
1212 if ( getenv(env) != NULL ) 1212 if ( getenv(env) != NULL )
1213 c_path = QString ( getenv(env) ); 1213 c_path = QString ( getenv(env) );
1214 if (c_path.isEmpty()) 1214 if (c_path.isEmpty())
1215 return QString::null; 1215 return QString::null;
1216 return QFile::decodeName(c_path); 1216 return QFile::decodeName(c_path);
1217 //#endif 1217 //#endif
1218 1218
1219} 1219}
1220 1220
1221void KStandardDirs::addKDEDefaults() 1221void KStandardDirs::addKDEDefaults()
1222{ 1222{
1223 1223
1224 //qDebug("ERROR: KStandardDirs::addKDEDefaults() called "); 1224 //qDebug("ERROR: KStandardDirs::addKDEDefaults() called ");
1225 //return; 1225 //return;
1226 QStringList kdedirList; 1226 QStringList kdedirList;
1227 1227
1228 // begin KDEDIRS 1228 // begin KDEDIRS
1229 QString kdedirs = readEnvPath("MICROKDEDIRS"); 1229 QString kdedirs = readEnvPath("MICROKDEDIRS");
1230 if (!kdedirs.isEmpty()) 1230 if (!kdedirs.isEmpty())
1231 { 1231 {
1232 tokenize(kdedirList, kdedirs, ":"); 1232 tokenize(kdedirList, kdedirs, ":");
1233 } 1233 }
1234 else 1234 else
1235 { 1235 {
1236 QString kdedir = readEnvPath("MICROKDEDIR"); 1236 QString kdedir = readEnvPath("MICROKDEDIR");
1237 if (!kdedir.isEmpty()) 1237 if (!kdedir.isEmpty())
1238 { 1238 {
1239 kdedir = KShell::tildeExpand(kdedir); 1239 kdedir = KShell::tildeExpand(kdedir);
1240 kdedirList.append(kdedir); 1240 kdedirList.append(kdedir);
1241 } 1241 }
1242 } 1242 }
1243//US kdedirList.append(KDEDIR); 1243//US kdedirList.append(KDEDIR);
1244//US for embedded, add qtopia dir as kdedir 1244//US for embedded, add qtopia dir as kdedir
1245 1245
1246#ifndef DESKTOP_VERSION 1246#ifndef DESKTOP_VERSION
1247 QString tmp = readEnvPath("QPEDIR"); 1247 QString tmp = readEnvPath("QPEDIR");
1248 if (!tmp.isEmpty()) 1248 if (!tmp.isEmpty())
1249 kdedirList.append(tmp); 1249 kdedirList.append(tmp);
1250 1250
1251 tmp = readEnvPath("QTDIR"); 1251 tmp = readEnvPath("QTDIR");
1252 if (!tmp.isEmpty()) 1252 if (!tmp.isEmpty())
1253 kdedirList.append(tmp); 1253 kdedirList.append(tmp);
1254 1254
1255 tmp = readEnvPath("OPIEDIR"); 1255 tmp = readEnvPath("OPIEDIR");
1256 if (!tmp.isEmpty()) 1256 if (!tmp.isEmpty())
1257 kdedirList.append(tmp); 1257 kdedirList.append(tmp);
1258 1258
1259#endif 1259#endif
1260 1260
1261#ifdef __KDE_EXECPREFIX 1261#ifdef __KDE_EXECPREFIX
1262 QString execPrefix(__KDE_EXECPREFIX); 1262 QString execPrefix(__KDE_EXECPREFIX);
1263 if (execPrefix!="NONE") 1263 if (execPrefix!="NONE")
1264 kdedirList.append(execPrefix); 1264 kdedirList.append(execPrefix);
1265#endif 1265#endif
1266 1266
1267 QString localKdeDir; 1267 QString localKdeDir;
1268 1268
1269//US if (getuid()) 1269//US if (getuid())
1270 if (true) 1270 if (true)
1271 { 1271 {
1272 localKdeDir = readEnvPath("MICROKDEHOME"); 1272 localKdeDir = readEnvPath("MICROKDEHOME");
1273 if (!localKdeDir.isEmpty()) 1273 if (!localKdeDir.isEmpty())
1274 { 1274 {
1275#ifdef _WIN32_ 1275#ifdef _WIN32_
1276 if (localKdeDir.at(localKdeDir.length()-1) != '\\') 1276 if (localKdeDir.at(localKdeDir.length()-1) != '\\')
1277 localKdeDir += '\\'; 1277 localKdeDir += '\\';
1278#else 1278#else
1279 if (localKdeDir.at(localKdeDir.length()-1) != '/') 1279 if (localKdeDir.at(localKdeDir.length()-1) != '/')
1280 localKdeDir += '/'; 1280 localKdeDir += '/';
1281#endif 1281#endif
1282 //QMessageBox::information( 0,"localKdeDir",localKdeDir, 1 ); 1282 //QMessageBox::information( 0,"localKdeDir",localKdeDir, 1 );
1283 } 1283 }
1284 else 1284 else
1285 { 1285 {
1286 localKdeDir = QDir::homeDirPath() + "/kdepim/"; 1286 KConfig cfg ( QDir::homeDirPath() + "/.microkdehome" );
1287 cfg.setGroup("Global");
1288 localKdeDir = cfg.readEntry( "MICROKDEHOME", QDir::homeDirPath() + "/kdepim/" );
1287 } 1289 }
1288 } 1290 }
1289 else 1291 else
1290 { 1292 {
1291 // We treat root different to prevent root messing up the 1293 // We treat root different to prevent root messing up the
1292 // file permissions in the users home directory. 1294 // file permissions in the users home directory.
1293 localKdeDir = readEnvPath("MICROKDEROOTHOME"); 1295 localKdeDir = readEnvPath("MICROKDEROOTHOME");
1294 if (!localKdeDir.isEmpty()) 1296 if (!localKdeDir.isEmpty())
1295 { 1297 {
1296 if (localKdeDir.at(localKdeDir.length()-1) != '/') 1298 if (localKdeDir.at(localKdeDir.length()-1) != '/')
1297 localKdeDir += '/'; 1299 localKdeDir += '/';
1298 } 1300 }
1299 else 1301 else
1300 { 1302 {
1301//US struct passwd *pw = getpwuid(0); 1303//US struct passwd *pw = getpwuid(0);
1302//US localKdeDir = QFile::decodeName((pw && pw->pw_dir) ? pw->pw_dir : "/root") + "/.microkde/"; 1304//US localKdeDir = QFile::decodeName((pw && pw->pw_dir) ? pw->pw_dir : "/root") + "/.microkde/";
1303 qDebug("KStandardDirs::addKDEDefaults: 1 has to be fixed"); 1305 qDebug("KStandardDirs::addKDEDefaults: 1 has to be fixed");
1304 } 1306 }
1305 1307
1306 } 1308 }
1307 1309
1308//US localKdeDir = appDir(); 1310//US localKdeDir = appDir();
1309 1311
1310//US 1312//US
1311// qDebug("KStandardDirs::addKDEDefaults: localKdeDir=%s", localKdeDir.latin1()); 1313// qDebug("KStandardDirs::addKDEDefaults: localKdeDir=%s", localKdeDir.latin1());
1312 if (localKdeDir != "-/") 1314 if (localKdeDir != "-/")
1313 { 1315 {
1314 localKdeDir = KShell::tildeExpand(localKdeDir); 1316 localKdeDir = KShell::tildeExpand(localKdeDir);
1315 addPrefix(localKdeDir); 1317 addPrefix(localKdeDir);
1316 } 1318 }
1317 1319
1318 for (QStringList::ConstIterator it = kdedirList.begin(); 1320 for (QStringList::ConstIterator it = kdedirList.begin();
1319 it != kdedirList.end(); it++) 1321 it != kdedirList.end(); it++)
1320 { 1322 {
1321 QString dir = KShell::tildeExpand(*it); 1323 QString dir = KShell::tildeExpand(*it);
1322 addPrefix(dir); 1324 addPrefix(dir);
1323 } 1325 }
1324 // end KDEDIRS 1326 // end KDEDIRS
1325 1327
1326 // begin XDG_CONFIG_XXX 1328 // begin XDG_CONFIG_XXX
1327 QStringList xdgdirList; 1329 QStringList xdgdirList;
1328 QString xdgdirs = readEnvPath("XDG_CONFIG_DIRS"); 1330 QString xdgdirs = readEnvPath("XDG_CONFIG_DIRS");
1329 if (!xdgdirs.isEmpty()) 1331 if (!xdgdirs.isEmpty())
1330 { 1332 {
1331 tokenize(xdgdirList, xdgdirs, ":"); 1333 tokenize(xdgdirList, xdgdirs, ":");
1332 } 1334 }
1333 else 1335 else
1334 { 1336 {
1335 xdgdirList.clear(); 1337 xdgdirList.clear();
1336 xdgdirList.append("/etc/xdg"); 1338 xdgdirList.append("/etc/xdg");
1337 } 1339 }
1338 1340
1339 QString localXdgDir = readEnvPath("XDG_CONFIG_HOME"); 1341 QString localXdgDir = readEnvPath("XDG_CONFIG_HOME");
1340 if (!localXdgDir.isEmpty()) 1342 if (!localXdgDir.isEmpty())
1341 { 1343 {
1342 if (localXdgDir.at(localXdgDir.length()-1) != '/') 1344 if (localXdgDir.at(localXdgDir.length()-1) != '/')
1343 localXdgDir += '/'; 1345 localXdgDir += '/';
1344 } 1346 }
1345 else 1347 else
1346 { 1348 {
1347//US if (getuid()) 1349//US if (getuid())
1348 if (true) 1350 if (true)
1349 { 1351 {
1350 localXdgDir = QDir::homeDirPath() + "/.config/"; 1352 localXdgDir = QDir::homeDirPath() + "/.config/";
1351 } 1353 }
1352 else 1354 else
1353 { 1355 {
1354//US struct passwd *pw = getpwuid(0); 1356//US struct passwd *pw = getpwuid(0);
1355//US localXdgDir = QFile::decodeName((pw && pw->pw_dir) ? pw->pw_dir : "/root") + "/.config/"; 1357//US localXdgDir = QFile::decodeName((pw && pw->pw_dir) ? pw->pw_dir : "/root") + "/.config/";
1356 qDebug("KStandardDirs::addKDEDefaults: 2 has to be fixed"); 1358 qDebug("KStandardDirs::addKDEDefaults: 2 has to be fixed");
1357 } 1359 }
1358 } 1360 }
1359 1361
1360 localXdgDir = KShell::tildeExpand(localXdgDir); 1362 localXdgDir = KShell::tildeExpand(localXdgDir);
1361 addXdgConfigPrefix(localXdgDir); 1363 addXdgConfigPrefix(localXdgDir);
1362 1364
1363 for (QStringList::ConstIterator it = xdgdirList.begin(); 1365 for (QStringList::ConstIterator it = xdgdirList.begin();
1364 it != xdgdirList.end(); it++) 1366 it != xdgdirList.end(); it++)
1365 { 1367 {
1366 QString dir = KShell::tildeExpand(*it); 1368 QString dir = KShell::tildeExpand(*it);
1367 addXdgConfigPrefix(dir); 1369 addXdgConfigPrefix(dir);
1368 } 1370 }
1369 // end XDG_CONFIG_XXX 1371 // end XDG_CONFIG_XXX
1370 1372
1371 // begin XDG_DATA_XXX 1373 // begin XDG_DATA_XXX
1372 xdgdirs = readEnvPath("XDG_DATA_DIRS"); 1374 xdgdirs = readEnvPath("XDG_DATA_DIRS");
1373 if (!xdgdirs.isEmpty()) 1375 if (!xdgdirs.isEmpty())
1374 { 1376 {
1375 tokenize(xdgdirList, xdgdirs, ":"); 1377 tokenize(xdgdirList, xdgdirs, ":");
1376 } 1378 }
1377 else 1379 else
1378 { 1380 {
1379 xdgdirList.clear(); 1381 xdgdirList.clear();
1380 for (QStringList::ConstIterator it = kdedirList.begin(); 1382 for (QStringList::ConstIterator it = kdedirList.begin();
1381 it != kdedirList.end(); it++) 1383 it != kdedirList.end(); it++)
1382 { 1384 {
1383 QString dir = *it; 1385 QString dir = *it;
1384 if (dir.at(dir.length()-1) != '/') 1386 if (dir.at(dir.length()-1) != '/')
1385 dir += '/'; 1387 dir += '/';
1386 xdgdirList.append(dir+"share/"); 1388 xdgdirList.append(dir+"share/");
1387 } 1389 }
1388 1390
1389 xdgdirList.append("/usr/local/share/"); 1391 xdgdirList.append("/usr/local/share/");
1390 xdgdirList.append("/usr/share/"); 1392 xdgdirList.append("/usr/share/");
1391 } 1393 }
1392 1394
1393 localXdgDir = readEnvPath("XDG_DATA_HOME"); 1395 localXdgDir = readEnvPath("XDG_DATA_HOME");
1394 if (!localXdgDir.isEmpty()) 1396 if (!localXdgDir.isEmpty())
1395 { 1397 {
1396 if (localXdgDir.at(localXdgDir.length()-1) != '/') 1398 if (localXdgDir.at(localXdgDir.length()-1) != '/')
1397 localXdgDir += '/'; 1399 localXdgDir += '/';
1398 } 1400 }
1399 else 1401 else
1400 { 1402 {
1401//US if (getuid()) 1403//US if (getuid())
1402 if (true) 1404 if (true)
1403 { 1405 {
1404 localXdgDir = QDir::homeDirPath() + "/.local/share/"; 1406 localXdgDir = QDir::homeDirPath() + "/.local/share/";
1405 } 1407 }
1406 else 1408 else
1407 { 1409 {
1408//US struct passwd *pw = getpwuid(0); 1410//US struct passwd *pw = getpwuid(0);
1409//US localXdgDir = QFile::decodeName((pw && pw->pw_dir) ? pw->pw_dir : "/root") + "/.local/share/"; 1411//US localXdgDir = QFile::decodeName((pw && pw->pw_dir) ? pw->pw_dir : "/root") + "/.local/share/";
1410 qDebug("KStandardDirs::addKDEDefaults: 3 has to be fixed"); 1412 qDebug("KStandardDirs::addKDEDefaults: 3 has to be fixed");
1411 } 1413 }
1412 } 1414 }
1413 1415
1414 localXdgDir = KShell::tildeExpand(localXdgDir); 1416 localXdgDir = KShell::tildeExpand(localXdgDir);
1415 addXdgDataPrefix(localXdgDir); 1417 addXdgDataPrefix(localXdgDir);
1416 1418
1417 for (QStringList::ConstIterator it = xdgdirList.begin(); 1419 for (QStringList::ConstIterator it = xdgdirList.begin();
1418 it != xdgdirList.end(); it++) 1420 it != xdgdirList.end(); it++)
1419 { 1421 {
1420 QString dir = KShell::tildeExpand(*it); 1422 QString dir = KShell::tildeExpand(*it);
1421 1423
1422 addXdgDataPrefix(dir); 1424 addXdgDataPrefix(dir);
1423 } 1425 }
1424 // end XDG_DATA_XXX 1426 // end XDG_DATA_XXX
1425 1427
1426 1428
1427 uint index = 0; 1429 uint index = 0;
1428 while (types[index] != 0) { 1430 while (types[index] != 0) {
1429 addResourceType(types[index], kde_default(types[index])); 1431 addResourceType(types[index], kde_default(types[index]));
1430 index++; 1432 index++;
1431 } 1433 }
1432 1434
1433 addResourceDir("home", QDir::homeDirPath()); 1435 addResourceDir("home", QDir::homeDirPath());
1434} 1436}
1435 1437
1436void KStandardDirs::checkConfig() const 1438void KStandardDirs::checkConfig() const
1437{ 1439{
1438/*US 1440/*US
1439 if (!addedCustoms && KGlobal::_instance && KGlobal::_instance->_config) 1441 if (!addedCustoms && KGlobal::_instance && KGlobal::_instance->_config)
1440 const_cast<KStandardDirs*>(this)->addCustomized(KGlobal::_instance->_config); 1442 const_cast<KStandardDirs*>(this)->addCustomized(KGlobal::_instance->_config);
1441*/ 1443*/
1442 if (!addedCustoms && KGlobal::config()) 1444 if (!addedCustoms && KGlobal::config())
1443 const_cast<KStandardDirs*>(this)->addCustomized(KGlobal::config()); 1445 const_cast<KStandardDirs*>(this)->addCustomized(KGlobal::config());
1444} 1446}
1445 1447
1446bool KStandardDirs::addCustomized(KConfig *config) 1448bool KStandardDirs::addCustomized(KConfig *config)
1447{ 1449{
1448 if (addedCustoms) // there are already customized entries 1450 if (addedCustoms) // there are already customized entries
1449 return false; // we just quite and hope they are the right ones 1451 return false; // we just quite and hope they are the right ones
1450 1452
1451 // save the numbers of config directories. If this changes, 1453 // save the numbers of config directories. If this changes,
1452 // we will return true to give KConfig a chance to reparse 1454 // we will return true to give KConfig a chance to reparse
1453 uint configdirs = resourceDirs("config").count(); 1455 uint configdirs = resourceDirs("config").count();
1454 1456
1455 // reading the prefixes in 1457 // reading the prefixes in
1456 QString oldGroup = config->group(); 1458 QString oldGroup = config->group();
1457 config->setGroup("Directories"); 1459 config->setGroup("Directories");
1458 1460
1459 QStringList list; 1461 QStringList list;
1460 QStringList::ConstIterator it; 1462 QStringList::ConstIterator it;
1461 list = config->readListEntry("prefixes"); 1463 list = config->readListEntry("prefixes");
1462 for (it = list.begin(); it != list.end(); it++) 1464 for (it = list.begin(); it != list.end(); it++)
1463 addPrefix(*it); 1465 addPrefix(*it);
1464 1466
1465 // iterating over all entries in the group Directories 1467 // iterating over all entries in the group Directories
1466 // to find entries that start with dir_$type 1468 // to find entries that start with dir_$type
1467/*US 1469/*US
1468 QMap<QString, QString> entries = config->entryMap("Directories"); 1470 QMap<QString, QString> entries = config->entryMap("Directories");
1469 1471
1470 QMap<QString, QString>::ConstIterator it2; 1472 QMap<QString, QString>::ConstIterator it2;
1471 for (it2 = entries.begin(); it2 != entries.end(); it2++) 1473 for (it2 = entries.begin(); it2 != entries.end(); it2++)
1472 { 1474 {
1473 QString key = it2.key(); 1475 QString key = it2.key();
1474 if (key.left(4) == "dir_") { 1476 if (key.left(4) == "dir_") {
1475 // generate directory list, there may be more than 1. 1477 // generate directory list, there may be more than 1.
1476 QStringList dirs = QStringList::split(',', *it2); 1478 QStringList dirs = QStringList::split(',', *it2);
1477 QStringList::Iterator sIt(dirs.begin()); 1479 QStringList::Iterator sIt(dirs.begin());
1478 QString resType = key.mid(4, key.length()); 1480 QString resType = key.mid(4, key.length());
1479 for (; sIt != dirs.end(); ++sIt) { 1481 for (; sIt != dirs.end(); ++sIt) {
1480 addResourceDir(resType.latin1(), *sIt); 1482 addResourceDir(resType.latin1(), *sIt);
1481 } 1483 }
1482 } 1484 }
1483 } 1485 }
1484 1486
1485 // Process KIOSK restrictions. 1487 // Process KIOSK restrictions.
1486 config->setGroup("KDE Resource Restrictions"); 1488 config->setGroup("KDE Resource Restrictions");
1487 entries = config->entryMap("KDE Resource Restrictions"); 1489 entries = config->entryMap("KDE Resource Restrictions");
1488 for (it2 = entries.begin(); it2 != entries.end(); it2++) 1490 for (it2 = entries.begin(); it2 != entries.end(); it2++)
1489 { 1491 {
1490 QString key = it2.key(); 1492 QString key = it2.key();
1491 if (!config->readBoolEntry(key, true)) 1493 if (!config->readBoolEntry(key, true))
1492 { 1494 {
1493 d->restrictionsActive = true; 1495 d->restrictionsActive = true;
1494 d->restrictions.insert(key.latin1(), &d->restrictionsActive); // Anything will do 1496 d->restrictions.insert(key.latin1(), &d->restrictionsActive); // Anything will do
1495 dircache.remove(key.latin1()); 1497 dircache.remove(key.latin1());
1496 } 1498 }
1497 } 1499 }
1498*/ 1500*/
1499 // save it for future calls - that will return 1501 // save it for future calls - that will return
1500 addedCustoms = true; 1502 addedCustoms = true;
1501 config->setGroup(oldGroup); 1503 config->setGroup(oldGroup);
1502 1504
1503 // return true if the number of config dirs changed 1505 // return true if the number of config dirs changed
1504 return (resourceDirs("config").count() != configdirs); 1506 return (resourceDirs("config").count() != configdirs);
1505} 1507}
1506 1508
1507QString KStandardDirs::localkdedir() const 1509QString KStandardDirs::localkdedir() const
1508{ 1510{
1509 // Return the prefix to use for saving 1511 // Return the prefix to use for saving
1510 return prefixes.first(); 1512 return prefixes.first();
1511} 1513}
1512 1514
1513QString KStandardDirs::localxdgdatadir() const 1515QString KStandardDirs::localxdgdatadir() const
1514{ 1516{
1515 // Return the prefix to use for saving 1517 // Return the prefix to use for saving
1516 return d->xdgdata_prefixes.first(); 1518 return d->xdgdata_prefixes.first();
1517} 1519}
1518 1520
1519QString KStandardDirs::localxdgconfdir() const 1521QString KStandardDirs::localxdgconfdir() const
1520{ 1522{
1521 // Return the prefix to use for saving 1523 // Return the prefix to use for saving
1522 return d->xdgconf_prefixes.first(); 1524 return d->xdgconf_prefixes.first();
1523} 1525}
1524 1526
1525void KStandardDirs::setAppDir( const QString &appDir ) 1527void KStandardDirs::setAppDir( const QString &appDir )
1526{ 1528{
1527 mAppDir = appDir; 1529 mAppDir = appDir;
1528 1530
1529 if ( mAppDir.right( 1 ) != "/" ) 1531 if ( mAppDir.right( 1 ) != "/" )
1530 mAppDir += "/"; 1532 mAppDir += "/";
1531} 1533}
1532 1534
1533QString KStandardDirs::appDir() 1535QString KStandardDirs::appDir()
1534{ 1536{
1535 return mAppDir; 1537 return mAppDir;
1536} 1538}
1537 1539
1538// just to make code more readable without macros 1540// just to make code more readable without macros
1539QString locate( const char *type, 1541QString locate( const char *type,
1540 const QString& filename/*US , const KInstance* inst*/ ) 1542 const QString& filename/*US , const KInstance* inst*/ )
1541{ 1543{
1542//US return inst->dirs()->findResource(type, filename); 1544//US return inst->dirs()->findResource(type, filename);
1543 return KGlobal::dirs()->findResource(type, filename); 1545 return KGlobal::dirs()->findResource(type, filename);
1544} 1546}
1545 1547
1546QString locateLocal( const char *type, 1548QString locateLocal( const char *type,
1547 const QString& filename/*US , const KInstance* inst*/ ) 1549 const QString& filename/*US , const KInstance* inst*/ )
1548{ 1550{
1549 1551
1550 QString path = locateLocal(type, filename, true /*US, inst*/); 1552 QString path = locateLocal(type, filename, true /*US, inst*/);
1551 1553
1552 1554
1553/* 1555/*
1554 static int ccc = 0; 1556 static int ccc = 0;
1555 ++ccc; 1557 ++ccc;
1556 if ( ccc > 13 ) 1558 if ( ccc > 13 )
1557 abort(); 1559 abort();
1558*/ 1560*/
1559 //qDebug("locatelocal: %s" , path.latin1()); 1561 //qDebug("locatelocal: %s" , path.latin1());
1560 return path; 1562 return path;
1561 1563
1562/*US why do we put all files into one directory. It is quit complicated. 1564/*US why do we put all files into one directory. It is quit complicated.
1563why not staying with the original directorystructure ? 1565why not staying with the original directorystructure ?
1564 1566
1565 1567
1566 QString escapedFilename = filename; 1568 QString escapedFilename = filename;
1567 escapedFilename.replace( QRegExp( "/" ), "_" ); 1569 escapedFilename.replace( QRegExp( "/" ), "_" );
1568 1570
1569 QString path = KStandardDirs::appDir() + type + "_" + escapedFilename; 1571 QString path = KStandardDirs::appDir() + type + "_" + escapedFilename;
1570 1572
1571 kdDebug() << "locate: '" << path << "'" << endl; 1573 kdDebug() << "locate: '" << path << "'" << endl;
1572 qDebug("locate: %s" , path.latin1()); 1574 qDebug("locate: %s" , path.latin1());
1573 return path; 1575 return path;
1574*/ 1576*/
1575//US so my proposal is this: 1577//US so my proposal is this:
1576 1578
1577// QString escapedFilename = filename; 1579// QString escapedFilename = filename;
1578// escapedFilename.replace( QRegExp( "/" ), "_" ); 1580// escapedFilename.replace( QRegExp( "/" ), "_" );
1579 1581
1580#if 0 1582#if 0
1581#ifdef _WIN32_ 1583#ifdef _WIN32_
1582 QString path = QDir::convertSeparators(KStandardDirs::appDir() + type + "/" + filename); 1584 QString path = QDir::convertSeparators(KStandardDirs::appDir() + type + "/" + filename);
1583#else 1585#else
1584 QString path = KStandardDirs::appDir() + type + "/" + filename; 1586 QString path = KStandardDirs::appDir() + type + "/" + filename;
1585#endif 1587#endif
1586 1588
1587 //US Create the containing dir if needed 1589 //US Create the containing dir if needed
1588 QFileInfo fi ( path ); 1590 QFileInfo fi ( path );
1589 1591
1590 // QString dir=pathurl.directory(); 1592 // QString dir=pathurl.directory();
1591 //QMessageBox::information( 0,"path", path, 1 ); 1593 //QMessageBox::information( 0,"path", path, 1 );
1592 1594
1593#ifdef _WIN32_ 1595#ifdef _WIN32_
1594 KStandardDirs::makeDir(path); 1596 KStandardDirs::makeDir(path);
1595#else 1597#else
1596 KStandardDirs::makeDir(fi.dirPath( true )); 1598 KStandardDirs::makeDir(fi.dirPath( true ));
1597#endif 1599#endif
1598 1600
1599 qDebug("locate22: %s" , path.latin1()); 1601 qDebug("locate22: %s" , path.latin1());
1600 return path; 1602 return path;
1601 1603
1602#endif 1604#endif
1603 1605
1604} 1606}
1605 1607
1606QString locateLocal( const char *type, 1608QString locateLocal( const char *type,
1607 const QString& filename, bool createDir/*US , const KInstance* inst*/ ) 1609 const QString& filename, bool createDir/*US , const KInstance* inst*/ )
1608{ 1610{
1609 // try to find slashes. If there are some, we have to 1611 // try to find slashes. If there are some, we have to
1610 // create the subdir first 1612 // create the subdir first
1611 int slash = filename.findRev('/')+1; 1613 int slash = filename.findRev('/')+1;
1612 if (!slash) // only one filename 1614 if (!slash) // only one filename
1613 //USreturn inst->dirs()->saveLocation(type, QString::null, createDir) + filename; 1615 //USreturn inst->dirs()->saveLocation(type, QString::null, createDir) + filename;
1614 return KGlobal::dirs()->saveLocation(type, QString::null, createDir) + filename; 1616 return KGlobal::dirs()->saveLocation(type, QString::null, createDir) + filename;
1615 1617
1616 // split path from filename 1618 // split path from filename
1617 QString dir = filename.left(slash); 1619 QString dir = filename.left(slash);
1618 QString file = filename.mid(slash); 1620 QString file = filename.mid(slash);
1619//US return inst->dirs()->saveLocation(type, dir, createDir) + file; 1621//US return inst->dirs()->saveLocation(type, dir, createDir) + file;
1620 return KGlobal::dirs()->saveLocation(type, dir, createDir) + file; 1622 return KGlobal::dirs()->saveLocation(type, dir, createDir) + file;
1621 1623
1622 // *************************************************************** 1624 // ***************************************************************
1623#if 0 1625#if 0
1624 1626
1625/*US why do we put all files into one directory. It is quit complicated. 1627/*US why do we put all files into one directory. It is quit complicated.
1626why not staying with the original directorystructure ? 1628why not staying with the original directorystructure ?
1627 1629
1628 1630
1629 QString escapedFilename = filename; 1631 QString escapedFilename = filename;
1630 escapedFilename.replace( QRegExp( "/" ), "_" ); 1632 escapedFilename.replace( QRegExp( "/" ), "_" );
1631 1633
1632 QString path = KStandardDirs::appDir() + type + "_" + escapedFilename; 1634 QString path = KStandardDirs::appDir() + type + "_" + escapedFilename;
1633 1635
1634 kdDebug() << "locate: '" << path << "'" << endl; 1636 kdDebug() << "locate: '" << path << "'" << endl;
1635 qDebug("locate: %s" , path.latin1()); 1637 qDebug("locate: %s" , path.latin1());
1636 return path; 1638 return path;
1637*/ 1639*/
1638//US so my proposal is this: 1640//US so my proposal is this:
1639 1641
1640// QString escapedFilename = filename; 1642// QString escapedFilename = filename;
1641// escapedFilename.replace( QRegExp( "/" ), "_" ); 1643// escapedFilename.replace( QRegExp( "/" ), "_" );
1642 1644
1643#ifdef _WIN32_ 1645#ifdef _WIN32_
1644 QString path = QDir::convertSeparators(KStandardDirs::appDir() + type + "/" + filename); 1646 QString path = QDir::convertSeparators(KStandardDirs::appDir() + type + "/" + filename);
1645#else 1647#else
1646 QString path = KStandardDirs::appDir() + type + "/" + filename; 1648 QString path = KStandardDirs::appDir() + type + "/" + filename;
1647#endif 1649#endif
1648 1650
1649 //US Create the containing dir if needed 1651 //US Create the containing dir if needed
1650 KURL pathurl; 1652 KURL pathurl;
1651 pathurl.setPath(path); 1653 pathurl.setPath(path);
1652 QString dir=pathurl.directory(); 1654 QString dir=pathurl.directory();
1653 //QMessageBox::information( 0,"path", path, 1 ); 1655 //QMessageBox::information( 0,"path", path, 1 );
1654#ifdef _WIN32_ 1656#ifdef _WIN32_
1655 KStandardDirs::makeDir(path); 1657 KStandardDirs::makeDir(path);
1656#else 1658#else
1657 KStandardDirs::makeDir(dir); 1659 KStandardDirs::makeDir(dir);
1658#endif 1660#endif
1659 1661
1660 return path; 1662 return path;
1661#endif 1663#endif
1662} 1664}
diff --git a/microkde/kdecore/kstandarddirs.h b/microkde/kdecore/kstandarddirs.h
index c4e1108..bee864e 100644
--- a/microkde/kdecore/kstandarddirs.h
+++ b/microkde/kdecore/kstandarddirs.h
@@ -187,495 +187,495 @@ public:
187 bool addResourceType( const char *type, 187 bool addResourceType( const char *type,
188 const QString& relativename ); 188 const QString& relativename );
189 189
190 /** 190 /**
191 * Adds absolute path at the end of the search path for 191 * Adds absolute path at the end of the search path for
192 * particular types (for example in case of icons where 192 * particular types (for example in case of icons where
193 * the user specifies extra paths). 193 * the user specifies extra paths).
194 * 194 *
195 * You shouldn't need this 195 * You shouldn't need this
196 * function in 99% of all cases besides adding user-given 196 * function in 99% of all cases besides adding user-given
197 * paths. 197 * paths.
198 * 198 *
199 * @param type Specifies a short descriptive string to access files 199 * @param type Specifies a short descriptive string to access files
200 * of this type. 200 * of this type.
201 * @param absdir Points to directory where to look for this specific 201 * @param absdir Points to directory where to look for this specific
202 * type. Non-existant directories may be saved but pruned. 202 * type. Non-existant directories may be saved but pruned.
203 * @return true if successful, false otherwise. 203 * @return true if successful, false otherwise.
204 */ 204 */
205 bool addResourceDir( const char *type, 205 bool addResourceDir( const char *type,
206 const QString& absdir); 206 const QString& absdir);
207 207
208 /** 208 /**
209 * Tries to find a resource in the following order: 209 * Tries to find a resource in the following order:
210 * @li All PREFIX/\<relativename> paths (most recent first). 210 * @li All PREFIX/\<relativename> paths (most recent first).
211 * @li All absolute paths (most recent first). 211 * @li All absolute paths (most recent first).
212 * 212 *
213 * The filename should be a filename relative to the base dir 213 * The filename should be a filename relative to the base dir
214 * for resources. So is a way to get the path to libkdecore.la 214 * for resources. So is a way to get the path to libkdecore.la
215 * to findResource("lib", "libkdecore.la"). KStandardDirs will 215 * to findResource("lib", "libkdecore.la"). KStandardDirs will
216 * then look into the subdir lib of all elements of all prefixes 216 * then look into the subdir lib of all elements of all prefixes
217 * ($KDEDIRS) for a file libkdecore.la and return the path to 217 * ($KDEDIRS) for a file libkdecore.la and return the path to
218 * the first one it finds (e.g. /opt/kde/lib/libkdecore.la) 218 * the first one it finds (e.g. /opt/kde/lib/libkdecore.la)
219 * 219 *
220 * @param type The type of the wanted resource 220 * @param type The type of the wanted resource
221 * @param filename A relative filename of the resource. 221 * @param filename A relative filename of the resource.
222 * 222 *
223 * @return A full path to the filename specified in the second 223 * @return A full path to the filename specified in the second
224 * argument, or QString::null if not found. 224 * argument, or QString::null if not found.
225 */ 225 */
226 QString findResource( const char *type, 226 QString findResource( const char *type,
227 const QString& filename ) const; 227 const QString& filename ) const;
228 228
229 /** 229 /**
230 * Checks whether a resource is restricted as part of the KIOSK 230 * Checks whether a resource is restricted as part of the KIOSK
231 * framework. When a resource is restricted it means that user- 231 * framework. When a resource is restricted it means that user-
232 * specific files in the resource are ignored. 232 * specific files in the resource are ignored.
233 * 233 *
234 * E.g. by restricting the "wallpaper" resource, only system-wide 234 * E.g. by restricting the "wallpaper" resource, only system-wide
235 * installed wallpapers will be found by this class. Wallpapers 235 * installed wallpapers will be found by this class. Wallpapers
236 * installed under the $KDEHOME directory will be ignored. 236 * installed under the $KDEHOME directory will be ignored.
237 * 237 *
238 * @param type The type of the resource to check 238 * @param type The type of the resource to check
239 * @param relPath A relative path in the resource. 239 * @param relPath A relative path in the resource.
240 * 240 *
241 * @return True if the resource is restricted. 241 * @return True if the resource is restricted.
242 * @since 3.1 242 * @since 3.1
243 */ 243 */
244 bool isRestrictedResource( const char *type, 244 bool isRestrictedResource( const char *type,
245 const QString& relPath=QString::null ) const; 245 const QString& relPath=QString::null ) const;
246 246
247 /** 247 /**
248 * Returns a number that identifies this version of the resource. 248 * Returns a number that identifies this version of the resource.
249 * When a change is made to the resource this number will change. 249 * When a change is made to the resource this number will change.
250 * 250 *
251 * @param type The type of the wanted resource 251 * @param type The type of the wanted resource
252 * @param filename A relative filename of the resource. 252 * @param filename A relative filename of the resource.
253 * @param deep If true, all resources are taken into account 253 * @param deep If true, all resources are taken into account
254 * otherwise only the one returned by findResource(). 254 * otherwise only the one returned by findResource().
255 * 255 *
256 * @return A number identifying the current version of the 256 * @return A number identifying the current version of the
257 * resource. 257 * resource.
258 */ 258 */
259/*US 259/*US
260 Q_UINT32 calcResourceHash( const char *type, 260 Q_UINT32 calcResourceHash( const char *type,
261 const QString& filename, bool deep) const; 261 const QString& filename, bool deep) const;
262*/ 262*/
263 /** 263 /**
264 * Tries to find all directories whose names consist of the 264 * Tries to find all directories whose names consist of the
265 * specified type and a relative path. So would 265 * specified type and a relative path. So would
266 * findDirs("apps", "Settings") return 266 * findDirs("apps", "Settings") return
267 * @li /opt/kde/share/applnk/Settings/ 267 * @li /opt/kde/share/applnk/Settings/
268 * @li /home/joe/.kde/share/applnk/Settings/ 268 * @li /home/joe/.kde/share/applnk/Settings/
269 * 269 *
270 * Note that it appends / to the end of the directories, 270 * Note that it appends / to the end of the directories,
271 * so you can use this right away as directory names. 271 * so you can use this right away as directory names.
272 * 272 *
273 * @param type The type of the base directory. 273 * @param type The type of the base directory.
274 * @param reldir Relative directory. 274 * @param reldir Relative directory.
275 * 275 *
276 * @return A list of matching directories, or an empty 276 * @return A list of matching directories, or an empty
277 * list if the resource specified is not found. 277 * list if the resource specified is not found.
278 */ 278 */
279 QStringList findDirs( const char *type, 279 QStringList findDirs( const char *type,
280 const QString& reldir ) const; 280 const QString& reldir ) const;
281 281
282 /** 282 /**
283 * Tries to find the directory the file is in. 283 * Tries to find the directory the file is in.
284 * It works the same as @ref findResource(), but it doesn't 284 * It works the same as @ref findResource(), but it doesn't
285 * return the filename but the name of the directory. 285 * return the filename but the name of the directory.
286 * 286 *
287 * This way the application can access a couple of files 287 * This way the application can access a couple of files
288 * that have been installed into the same directory without 288 * that have been installed into the same directory without
289 * having to look for each file. 289 * having to look for each file.
290 * 290 *
291 * findResourceDir("lib", "libkdecore.la") would return the 291 * findResourceDir("lib", "libkdecore.la") would return the
292 * path of the subdir libkdecore.la is found first in 292 * path of the subdir libkdecore.la is found first in
293 * (e.g. /opt/kde/lib/) 293 * (e.g. /opt/kde/lib/)
294 * 294 *
295 * @param type The type of the wanted resource 295 * @param type The type of the wanted resource
296 * @param filename A relative filename of the resource. 296 * @param filename A relative filename of the resource.
297 * @return The directory where the file specified in the second 297 * @return The directory where the file specified in the second
298 * argument is located, or QString::null if the type 298 * argument is located, or QString::null if the type
299 * of resource specified is unknown or the resource 299 * of resource specified is unknown or the resource
300 * cannot be found. 300 * cannot be found.
301 */ 301 */
302 QString findResourceDir( const char *type, 302 QString findResourceDir( const char *type,
303 const QString& filename) const; 303 const QString& filename) const;
304 304
305 305
306 /** 306 /**
307 * Tries to find all resources with the specified type. 307 * Tries to find all resources with the specified type.
308 * 308 *
309 * The function will look into all specified directories 309 * The function will look into all specified directories
310 * and return all filenames in these directories. 310 * and return all filenames in these directories.
311 * 311 *
312 * @param type The type of resource to locate directories for. 312 * @param type The type of resource to locate directories for.
313 * @param filter Only accept filenames that fit to filter. The filter 313 * @param filter Only accept filenames that fit to filter. The filter
314 * may consist of an optional directory and a @ref QRegExp 314 * may consist of an optional directory and a @ref QRegExp
315 * wildcard expression. E.g. "images\*.jpg". Use QString::null 315 * wildcard expression. E.g. "images\*.jpg". Use QString::null
316 * if you do not want a filter. 316 * if you do not want a filter.
317 * @param recursive Specifies if the function should decend 317 * @param recursive Specifies if the function should decend
318 * into subdirectories. 318 * into subdirectories.
319 * @param uniq If specified, only return items which have 319 * @param uniq If specified, only return items which have
320 * unique suffixes - suppressing duplicated filenames. 320 * unique suffixes - suppressing duplicated filenames.
321 * 321 *
322 * @return A list of directories matching the resource specified, 322 * @return A list of directories matching the resource specified,
323 * or an empty list if the resource type is unknown. 323 * or an empty list if the resource type is unknown.
324 */ 324 */
325 QStringList findAllResources( const char *type, 325 QStringList findAllResources( const char *type,
326 const QString& filter = QString::null, 326 const QString& filter = QString::null,
327 bool recursive = false, 327 bool recursive = false,
328 bool uniq = false) const; 328 bool uniq = false) const;
329 329
330 /** 330 /**
331 * Tries to find all resources with the specified type. 331 * Tries to find all resources with the specified type.
332 * 332 *
333 * The function will look into all specified directories 333 * The function will look into all specified directories
334 * and return all filenames (full and relative paths) in 334 * and return all filenames (full and relative paths) in
335 * these directories. 335 * these directories.
336 * 336 *
337 * @param type The type of resource to locate directories for. 337 * @param type The type of resource to locate directories for.
338 * @param filter Only accept filenames that fit to filter. The filter 338 * @param filter Only accept filenames that fit to filter. The filter
339 * may consist of an optional directory and a @ref QRegExp 339 * may consist of an optional directory and a @ref QRegExp
340 * wildcard expression. E.g. "images\*.jpg". Use QString::null 340 * wildcard expression. E.g. "images\*.jpg". Use QString::null
341 * if you do not want a filter. 341 * if you do not want a filter.
342 * @param recursive Specifies if the function should decend 342 * @param recursive Specifies if the function should decend
343 * into subdirectories. 343 * into subdirectories.
344 * @param uniq If specified, only return items which have 344 * @param uniq If specified, only return items which have
345 * unique suffixes. 345 * unique suffixes.
346 * @param list Of relative paths for the given type. 346 * @param list Of relative paths for the given type.
347 * @param relPaths The list to store the relative paths into 347 * @param relPaths The list to store the relative paths into
348 * These can be used later to ::locate() the file 348 * These can be used later to ::locate() the file
349 * 349 *
350 * @return A list of directories matching the resource specified, 350 * @return A list of directories matching the resource specified,
351 * or an empty list if the resource type is unknown. 351 * or an empty list if the resource type is unknown.
352 */ 352 */
353 QStringList findAllResources( const char *type, 353 QStringList findAllResources( const char *type,
354 const QString& filter, 354 const QString& filter,
355 bool recursive, 355 bool recursive,
356 bool uniq, 356 bool uniq,
357 QStringList &relPaths) const; 357 QStringList &relPaths) const;
358 358
359 /** 359 /**
360 * Finds the executable in the system path. 360 * Finds the executable in the system path.
361 * 361 *
362 * A valid executable must 362 * A valid executable must
363 * be a file and have its executable bit set. 363 * be a file and have its executable bit set.
364 * 364 *
365 * @param appname The name of the executable file for which to search. 365 * @param appname The name of the executable file for which to search.
366 * @param pathstr The path which will be searched. If this is 366 * @param pathstr The path which will be searched. If this is
367 * null (default), the $PATH environment variable will 367 * null (default), the $PATH environment variable will
368 * be searched. 368 * be searched.
369 * @param ignoreExecBitIf true, an existing file will be returned 369 * @param ignoreExecBitIf true, an existing file will be returned
370 * even if its executable bit is not set. 370 * even if its executable bit is not set.
371 * 371 *
372 * @return The path of the executable. If it was not found, 372 * @return The path of the executable. If it was not found,
373 * it will return QString::null. 373 * it will return QString::null.
374 * @see findAllExe() 374 * @see findAllExe()
375 */ 375 */
376/*US 376/*US
377 static QString findExe( const QString& appname, 377 static QString findExe( const QString& appname,
378 const QString& pathstr=QString::null, 378 const QString& pathstr=QString::null,
379 bool ignoreExecBit=false ); 379 bool ignoreExecBit=false );
380*/ 380*/
381 381
382 /** 382 /**
383 * Finds all occurences of an executable in the system path. 383 * Finds all occurences of an executable in the system path.
384 * 384 *
385 * @param listWill be filled with the pathnames of all the 385 * @param listWill be filled with the pathnames of all the
386 * executables found. Will be empty if the executable 386 * executables found. Will be empty if the executable
387 * was not found. 387 * was not found.
388 * @param appnameThe name of the executable for which to 388 * @param appnameThe name of the executable for which to
389 * search. 389 * search.
390 * @param pathstrThe path list which will be searched. If this 390 * @param pathstrThe path list which will be searched. If this
391 * is 0 (default), the $PATH environment variable will 391 * is 0 (default), the $PATH environment variable will
392 * be searched. 392 * be searched.
393 * @param ignoreExecBit If true, an existing file will be returned 393 * @param ignoreExecBit If true, an existing file will be returned
394 * even if its executable bit is not set. 394 * even if its executable bit is not set.
395 * 395 *
396 * @return The number of executables found, 0 if none were found. 396 * @return The number of executables found, 0 if none were found.
397 * 397 *
398 * @seefindExe() 398 * @seefindExe()
399 */ 399 */
400 static int findAllExe( QStringList& list, const QString& appname, 400 static int findAllExe( QStringList& list, const QString& appname,
401 const QString& pathstr=QString::null, 401 const QString& pathstr=QString::null,
402 bool ignoreExecBit=false ); 402 bool ignoreExecBit=false );
403 403
404 /** 404 /**
405 * This function adds the defaults that are used by the current 405 * This function adds the defaults that are used by the current
406 * KDE version. 406 * KDE version.
407 * 407 *
408 * It's a series of @ref addResourceTypes() 408 * It's a series of @ref addResourceTypes()
409 * and @ref addPrefix() calls. 409 * and @ref addPrefix() calls.
410 * You normally wouldn't call this function because it's called 410 * You normally wouldn't call this function because it's called
411 * for you from @ref KGlobal. 411 * for you from @ref KGlobal.
412 */ 412 */
413 void addKDEDefaults(); 413 void addKDEDefaults();
414 414
415 /** 415 /**
416 * Reads customized entries out of the given config object and add 416 * Reads customized entries out of the given config object and add
417 * them via @ref addResourceDirs(). 417 * them via @ref addResourceDirs().
418 * 418 *
419 * @param config The object the entries are read from. This should 419 * @param config The object the entries are read from. This should
420 * contain global config files 420 * contain global config files
421 * @return true if new config paths have been added 421 * @return true if new config paths have been added
422 * from @p config. 422 * from @p config.
423 **/ 423 **/
424 bool addCustomized(KConfig *config); 424 bool addCustomized(KConfig *config);
425 425
426 /** 426 /**
427 * This function is used internally by almost all other function as 427 * This function is used internally by almost all other function as
428 * it serves and fills the directories cache. 428 * it serves and fills the directories cache.
429 * 429 *
430 * @param type The type of resource 430 * @param type The type of resource
431 * @return The list of possible directories for the specified @p type. 431 * @return The list of possible directories for the specified @p type.
432 * The function updates the cache if possible. If the resource 432 * The function updates the cache if possible. If the resource
433 * type specified is unknown, it will return an empty list. 433 * type specified is unknown, it will return an empty list.
434 * Note, that the directories are assured to exist beside the save 434 * Note, that the directories are assured to exist beside the save
435 * location, which may not exist, but is returned anyway. 435 * location, which may not exist, but is returned anyway.
436 */ 436 */
437 QStringList resourceDirs(const char *type) const; 437 QStringList resourceDirs(const char *type) const;
438 438
439 /** 439 /**
440 * This function will return a list of all the types that KStandardDirs 440 * This function will return a list of all the types that KStandardDirs
441 * supports. 441 * supports.
442 * 442 *
443 * @return All types that KDE supports 443 * @return All types that KDE supports
444 */ 444 */
445 QStringList allTypes() const; 445 QStringList allTypes() const;
446 446
447 /** 447 /**
448 * Finds a location to save files into for the given type 448 * Finds a location to save files into for the given type
449 * in the user's home directory. 449 * in the user's home directory.
450 * 450 *
451 * @param type The type of location to return. 451 * @param type The type of location to return.
452 * @param suffix A subdirectory name. 452 * @param suffix A subdirectory name.
453 * Makes it easier for you to create subdirectories. 453 * Makes it easier for you to create subdirectories.
454 * You can't pass filenames here, you _have_ to pass 454 * You can't pass filenames here, you _have_ to pass
455 * directory names only and add possible filename in 455 * directory names only and add possible filename in
456 * that directory yourself. A directory name always has a 456 * that directory yourself. A directory name always has a
457 * trailing slash ('/'). 457 * trailing slash ('/').
458 * @param create If set, saveLocation() will create the directories 458 * @param create If set, saveLocation() will create the directories
459 * needed (including those given by @p suffix). 459 * needed (including those given by @p suffix).
460 * 460 *
461 * @return A path where resources of the specified type should be 461 * @return A path where resources of the specified type should be
462 * saved, or QString::null if the resource type is unknown. 462 * saved, or QString::null if the resource type is unknown.
463 */ 463 */
464 QString saveLocation(const char *type, 464 QString saveLocation(const char *type,
465 const QString& suffix = QString::null, 465 const QString& suffix = QString::null,
466 bool create = true) const; 466 bool create = true) const;
467 467
468 /** 468 /**
469 * Converts an absolute path to a path relative to a certain 469 * Converts an absolute path to a path relative to a certain
470 * resource. 470 * resource.
471 * 471 *
472 * If "abs = ::locate(resource, rel)" 472 * If "abs = ::locate(resource, rel)"
473 * then "rel = relativeLocation(resource, abs)" and vice versa. 473 * then "rel = relativeLocation(resource, abs)" and vice versa.
474 * 474 *
475 * @param type The type of resource. 475 * @param type The type of resource.
476 * 476 *
477 * @param absPath An absolute path to make relative. 477 * @param absPath An absolute path to make relative.
478 * 478 *
479 * @return A relative path relative to resource @p type that 479 * @return A relative path relative to resource @p type that
480 * will find @p absPath. If no such relative path exists, absPath 480 * will find @p absPath. If no such relative path exists, absPath
481 * will be returned unchanged. 481 * will be returned unchanged.
482 */ 482 */
483 QString relativeLocation(const char *type, const QString &absPath); 483 QString relativeLocation(const char *type, const QString &absPath);
484 484
485 /** 485 /**
486 * Recursively creates still-missing directories in the given path. 486 * Recursively creates still-missing directories in the given path.
487 * 487 *
488 * The resulting permissions will depend on the current umask setting. 488 * The resulting permissions will depend on the current umask setting.
489 * permission = mode & ~umask. 489 * permission = mode & ~umask.
490 * 490 *
491 * @param dir Absolute path of the directory to be made. 491 * @param dir Absolute path of the directory to be made.
492 * @param mode Directory permissions. 492 * @param mode Directory permissions.
493 * @return true if successful, false otherwise 493 * @return true if successful, false otherwise
494 */ 494 */
495 static bool makeDir(const QString& dir, int mode = 0755); 495 static bool makeDir(const QString& dir, int mode = 0755);
496 496
497 /** 497 /**
498 * This returns a default relative path for the standard KDE 498 * This returns a default relative path for the standard KDE
499 * resource types. Below is a list of them so you get an idea 499 * resource types. Below is a list of them so you get an idea
500 * of what this is all about. 500 * of what this is all about.
501 * 501 *
502 * @li data - share/apps 502 * @li data - share/apps
503 * @li html - share/doc/HTML 503 * @li html - share/doc/HTML
504 * @li icon - share/icon 504 * @li icon - share/icon
505 * @li config - share/config 505 * @li config - share/config
506 * @li pixmap - share/pixmaps 506 * @li pixmap - share/pixmaps
507 * @li apps - share/applnk 507 * @li apps - share/applnk
508 * @li sound - share/sounds 508 * @li sound - share/sounds
509 * @li locale - share/locale 509 * @li locale - share/locale
510 * @li services - share/services 510 * @li services - share/services
511 * @li servicetypes - share/servicetypes 511 * @li servicetypes - share/servicetypes
512 * @li mime - share/mimelnk 512 * @li mime - share/mimelnk
513 * @li wallpaper - share/wallpapers 513 * @li wallpaper - share/wallpapers
514 * @li templates - share/templates 514 * @li templates - share/templates
515 * @li exe - bin 515 * @li exe - bin
516 * @li lib - lib 516 * @li lib - lib
517 * 517 *
518 * @returns Static default for the specified resource. You 518 * @returns Static default for the specified resource. You
519 * should probably be using locate() or locateLocal() 519 * should probably be using locate() or locateLocal()
520 * instead. 520 * instead.
521 * @see locate() 521 * @see locate()
522 * @see locateLocal() 522 * @see locateLocal()
523 */ 523 */
524 static QString kde_default(const char *type); 524 static QString kde_default(const char *type);
525 525
526 /** 526 /**
527 * @internal (for use by sycoca only) 527 * @internal (for use by sycoca only)
528 */ 528 */
529 QString kfsstnd_prefixes(); 529 QString kfsstnd_prefixes();
530 530
531 /** 531 /**
532 * Returns the toplevel directory in which KStandardDirs 532 * Returns the toplevel directory in which KStandardDirs
533 * will store things. Most likely $HOME/.kde 533 * will store things. Most likely $HOME/.kde
534 * Don't use this function if you can use locateLocal 534 * Don't use this function if you can use locateLocal
535 * @return the toplevel directory 535 * @return the toplevel directory
536 */ 536 */
537 QString localkdedir() const; 537 QString localkdedir() const;
538 538
539 /** 539 /**
540 * @return $XDG_DATA_HOME 540 * @return $XDG_DATA_HOME
541 * See also http://www.freedesktop.org/standards/basedir/draft/basedir-spec/basedir-spec.html 541 * See also http://www.freedesktop.org/standards/basedir/draft/basedir-spec/basedir-spec.html
542 */ 542 */
543 QString localxdgdatadir() const; 543 QString localxdgdatadir() const;
544 544
545 /** 545 /**
546 * @return $XDG_CONFIG_HOME 546 * @return $XDG_CONFIG_HOME
547 * See also http://www.freedesktop.org/standards/basedir/draft/basedir-spec/basedir-spec.html 547 * See also http://www.freedesktop.org/standards/basedir/draft/basedir-spec/basedir-spec.html
548 */ 548 */
549 QString localxdgconfdir() const; 549 QString localxdgconfdir() const;
550 550
551 /** 551 /**
552 * Checks for existence and accessability. 552 * Checks for existence and accessability.
553 * Faster than creating a QFileInfo first. 553 * Faster than creating a QFileInfo first.
554 * @param fullPath the path to check 554 * @param fullPath the path to check
555 * @return true if the directory exists 555 * @return true if the directory exists
556 */ 556 */
557 static bool exists(const QString &fullPath); 557 static bool exists(const QString &fullPath);
558 558
559 /** 559 /**
560 * Expands all symbolic links and resolves references to 560 * Expands all symbolic links and resolves references to
561 * '/./', '/../' and extra '/' characters in @p dirname 561 * '/./', '/../' and extra '/' characters in @p dirname
562 * and returns the canonicalized absolute pathname. 562 * and returns the canonicalized absolute pathname.
563 * The resulting path will have no symbolic link, '/./' 563 * The resulting path will have no symbolic link, '/./'
564 * or '/../' components. 564 * or '/../' components.
565 * @since 3.1 565 * @since 3.1
566 */ 566 */
567 static QString realPath(const QString &dirname); 567 static QString realPath(const QString &dirname);
568 568
569 static void setAppDir( const QString & ); 569 static void setAppDir( const QString & );
570 static QString appDir(); 570 static QString appDir();
571 571
572 private: 572 private:
573 573
574 QStringList prefixes; 574 QStringList prefixes;
575 575
576 // Directory dictionaries 576 // Directory dictionaries
577 QDict<QStringList> absolutes; 577 QDict<QStringList> absolutes;
578 QDict<QStringList> relatives; 578 QDict<QStringList> relatives;
579 579
580 mutable QDict<QStringList> dircache; 580 mutable QDict<QStringList> dircache;
581 mutable QDict<QString> savelocations; 581 mutable QDict<QString> savelocations;
582 582
583 // Disallow assignment and copy-construction 583 // Disallow assignment and copy-construction
584 KStandardDirs( const KStandardDirs& ); 584 KStandardDirs( const KStandardDirs& );
585 KStandardDirs& operator= ( const KStandardDirs& ); 585 KStandardDirs& operator= ( const KStandardDirs& );
586 586
587 bool addedCustoms; 587 bool addedCustoms;
588 588
589 class KStandardDirsPrivate; 589 class KStandardDirsPrivate;
590 KStandardDirsPrivate *d; 590 KStandardDirsPrivate *d;
591//US 591//US
592 static QString mAppDir; 592 static QString mAppDir;
593 593
594 void checkConfig() const; 594 void checkConfig() const;
595 void applyDataRestrictions(const QString &) const; 595 void applyDataRestrictions(const QString &) const;
596 //US void createSpecialResource(const char*); 596 //US void createSpecialResource(const char*);
597}; 597};
598 598
599/** 599/**
600 * \addtogroup locates Locate Functions 600 * \addtogroup locates Locate Functions
601 * @{ 601 * @{
602 * On The Usage Of 'locate' and 'locateLocal' 602 * On The Usage Of 'locate' and 'locateLocal'
603 * 603 *
604 * Typical KDE applications use resource files in one out of 604 * Typical KDE applications use resource files in one out of
605 * three ways: 605 * three ways:
606 * 606 *
607 * 1) A resource file is read but is never written. A system 607 * 1) A resource file is read but is never written. A system
608 * default is supplied but the user can override this 608 * default is supplied but the user can override this
609 * default in his local .kde directory: 609 * default in his local .kde directory:
610 * 610 *
611 * \code 611 * \code
612 * // Code example 612 * // Code example
613 * myFile = locate("appdata", "groups.lst"); 613 * myFile = locate("appdata", "groups.lst");
614 * myData = myReadGroups(myFile); // myFile may be null 614 * myData = myReadGroups(myFile); // myFile may be null
615 * \endcode 615 * \endcode
616 * 616 *
617 * 2) A resource file is read and written. If the user has no 617 * 2) A resource file is read and written. If the user has no
618 * local version of the file the system default is used. 618 * local version of the file the system default is used.
619 * The resource file is always written to the users local 619 * The resource file is always written to the users local
620 * .kde directory. 620 * .kde directory.
621 * 621 *
622 * \code 622 * \code
623 * // Code example 623 * // Code example
624 * myFile = locate("appdata", "groups.lst") 624 * myFile = locate("appdata", "groups.lst")
625 * myData = myReadGroups(myFile); 625 * myData = myReadGroups(myFile);
626 * ... 626 * ...
627 * doSomething(myData); 627 * doSomething(myData);
628 * ... 628 * ...
629 * myFile = locateLocal("appdata", "groups.lst"); 629 * myFile = locateLocal("appdata", "groups.lst");
630 * myWriteGroups(myFile, myData); 630 * myWriteGroups(myFile, myData);
631 * \endcode 631 * \endcode
632 * 632 *
633 * 3) A resource file is read and written. No system default 633 * 3) A resource file is read and written. No system default
634 * is used if the user has no local version of the file. 634 * is used if the user has no local version of the file.
635 * The resource file is always written to the users local 635 * The resource file is always written to the users local
636 * .kde directory. 636 * .kde directory.
637 * 637 *
638 * \code 638 * \code
639 * // Code example 639 * // Code example
640 * myFile = locateLocal("appdata", "groups.lst"); 640 * myFile = locateLocal("appdata", "groups.lst");
641 * myData = myReadGroups(myFile); 641 * myData = myReadGroups(myFile);
642 * ... 642 * ...
643 * doSomething(myData); 643 * doSomething(myData);
644 * ... 644 * ...
645 * myFile = locateLocal("appdata", "groups.lst"); 645 * myFile = locateLocal("appdata", "groups.lst");
646 * myWriteGroups(myFile, myData); 646 * myWriteGroups(myFile, myData);
647 * \endcode 647 * \endcode
648 **/ 648 **/
649 649
650/*! 650/*!
651 * \relates KStandardDirs 651 * \relates KStandardDirs
652 * This function is just for convenience. It simply calls 652 * This function is just for convenience. It simply calls
653 *instance->dirs()->\link KStandardDirs::findResource() findResource\endlink(type, filename). 653 *instance->dirs()->\link KStandardDirs::findResource() findResource\endlink(type, filename).
654 **/ 654 **/
655QString locate( const char *type, const QString& filename /*US , const KInstance* instance = KGlobal::instance()*/ ); 655QString locate( const char *type, const QString& filename /*US , const KInstance* instance = KGlobal::instance()*/ );
656 656
657/*! 657/*!
658 * \relates KStandardDirs 658 * \relates KStandardDirs
659 * This function is much like locate. However it returns a 659 * This function is much like locate. However it returns a
660 * filename suitable for writing to. No check is made if the 660 * filename suitable for writing to. No check is made if the
661 * specified filename actually exists. Missing directories 661 * specified filename actually exists. Missing directories
662 * are created. If filename is only a directory, without a 662 * are created. If filename is only a directory, without a
663 * specific file, filename must have a trailing slash. 663 * specific file, filename must have a trailing slash.
664 * 664 *
665 **/ 665 **/
666QString locateLocal( const char *type, const QString& filename /*US , const KInstance* instance = KGlobal::instance() */ ); 666QString locateLocal( const char *type, const QString& filename /*US , const KInstance* instance = KGlobal::instance() */ );
667 667
668/*! 668/*!
669 * \relates KStandardDirs 669 * \relates KStandardDirs
670 * This function is much like locate. No check is made if the 670 * This function is much like locate. No check is made if the
671 * specified filename actually exists. Missing directories 671 * specified filename actually exists. Missing directories
672 * are created if @p createDir is true. If filename is only 672 * are created if @p createDir is true. If filename is only
673 * a directory, without a specific file, 673 * a directory, without a specific file,
674 * filename must have a trailing slash. 674 * filename must have a trailing slash.
675 * 675 *
676 **/ 676 **/
677QString locateLocal( const char *type, const QString& filename, bool createDir /*US , const KInstance* instance = KGlobal::instance() */); 677QString locateLocal( const char *type, const QString& filename, bool createDir /*US , const KInstance* instance = KGlobal::instance() */);
678 678
679/*! @} */ 679/*! @} */
680 680
681#endif // SSK_KSTDDIRS_H 681#endif // SSK_KSTDDIRS_H