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,227 +1,234 @@
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
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,303 +1,341 @@
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
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
@@ -1094,385 +1094,387 @@ bool KStandardDirs::makeDir(const QString& dir2, int mode)
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());
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
@@ -379,303 +379,303 @@ public:
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