summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-03-30 11:55:53 (UTC)
committer zautrix <zautrix>2005-03-30 11:55:53 (UTC)
commitb5222dd7a607f78235b1ea39fea0f95a9c08ccd3 (patch) (unidiff)
tree4e4d334ae9d8805b7718c1610bd84af128fd8151
parent597cad3a63e6c22855704bf8435db70e3c2b184f (diff)
downloadkdepimpi-b5222dd7a607f78235b1ea39fea0f95a9c08ccd3.zip
kdepimpi-b5222dd7a607f78235b1ea39fea0f95a9c08ccd3.tar.gz
kdepimpi-b5222dd7a607f78235b1ea39fea0f95a9c08ccd3.tar.bz2
fixes
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--kabc/addresseeview.cpp2
-rw-r--r--kabc/plugins/file/resourcefile.cpp41
-rw-r--r--kabc/plugins/file/resourcefile.h2
-rw-r--r--microkde/kdatetbl.cpp2
-rw-r--r--microkde/kdecore/kstandarddirs.cpp4
-rw-r--r--microkde/kdecore/kstandarddirs.h4
6 files changed, 39 insertions, 16 deletions
diff --git a/kabc/addresseeview.cpp b/kabc/addresseeview.cpp
index aa96210..9118c3d 100644
--- a/kabc/addresseeview.cpp
+++ b/kabc/addresseeview.cpp
@@ -170,257 +170,257 @@ void AddresseeView::setAddressee( const KABC::Addressee& mAddressee )
170 "<td align=\"left\"><a href=\"mailto:%2 <%3> \">%4</a></td></tr>" ) 170 "<td align=\"left\"><a href=\"mailto:%2 <%3> \">%4</a></td></tr>" )
171 .arg( type ) 171 .arg( type )
172 .arg( name ) 172 .arg( name )
173 .arg( *emailIt ) 173 .arg( *emailIt )
174 .arg( *emailIt ); 174 .arg( *emailIt );
175 } else { 175 } else {
176 dynamicPart += QString( 176 dynamicPart += QString(
177 "<tr><td align=\"right\"><b>%1</b></td>" 177 "<tr><td align=\"right\"><b>%1</b></td>"
178 "<td align=\"left\">%2</td></tr>" ) 178 "<td align=\"left\">%2</td></tr>" )
179 .arg( type ) 179 .arg( type )
180 .arg( *emailIt ); 180 .arg( *emailIt );
181 } 181 }
182 } 182 }
183 183
184 if ( !mAddressee.url().url().isEmpty() ) { 184 if ( !mAddressee.url().url().isEmpty() ) {
185 dynamicPart += QString( 185 dynamicPart += QString(
186 "<tr><td align=\"right\"><b>%1</b></td>" 186 "<tr><td align=\"right\"><b>%1</b></td>"
187 "<td align=\"left\">%2</td></tr>" ) 187 "<td align=\"left\">%2</td></tr>" )
188 .arg( i18n( "Homepage" ) ) 188 .arg( i18n( "Homepage" ) )
189//US .arg( KStringHandler::tagURLs( mAddressee.url().url() ) ); 189//US .arg( KStringHandler::tagURLs( mAddressee.url().url() ) );
190 .arg( mAddressee.url().url() ); 190 .arg( mAddressee.url().url() );
191 //qDebug("AddresseeView::setAddressee has to be verified."); 191 //qDebug("AddresseeView::setAddressee has to be verified.");
192 } 192 }
193 193
194 KABC::Address::List addresses = mAddressee.addresses(); 194 KABC::Address::List addresses = mAddressee.addresses();
195 KABC::Address::List::ConstIterator addrIt; 195 KABC::Address::List::ConstIterator addrIt;
196 for ( addrIt = addresses.begin(); addrIt != addresses.end(); ++addrIt ) { 196 for ( addrIt = addresses.begin(); addrIt != addresses.end(); ++addrIt ) {
197 if ( true /*(*addrIt).label().isEmpty()*/ ) { 197 if ( true /*(*addrIt).label().isEmpty()*/ ) {
198 QString formattedAddress = (*addrIt).formattedAddress().stripWhiteSpace(); 198 QString formattedAddress = (*addrIt).formattedAddress().stripWhiteSpace();
199//US formattedAddress = formattedAddress.replace( '\n', "<br>" ); 199//US formattedAddress = formattedAddress.replace( '\n', "<br>" );
200 //qDebug("adresss %s ",formattedAddress.latin1() ); 200 //qDebug("adresss %s ",formattedAddress.latin1() );
201 formattedAddress = formattedAddress.replace( QRegExp("\n"), "<br>" ); 201 formattedAddress = formattedAddress.replace( QRegExp("\n"), "<br>" );
202 //qDebug("AddresseeView::setAddressee has to be verified."); 202 //qDebug("AddresseeView::setAddressee has to be verified.");
203 203
204 dynamicPart += QString( 204 dynamicPart += QString(
205 "<tr><td align=\"right\"><b>%1</b></td>" 205 "<tr><td align=\"right\"><b>%1</b></td>"
206 "<td align=\"left\">%2</td></tr>" ) 206 "<td align=\"left\">%2</td></tr>" )
207 .arg( KABC::Address::typeLabel( (*addrIt).type() ) ) 207 .arg( KABC::Address::typeLabel( (*addrIt).type() ) )
208 .arg( formattedAddress ); 208 .arg( formattedAddress );
209 } else { 209 } else {
210 210
211 dynamicPart += QString( 211 dynamicPart += QString(
212 "<tr><td align=\"right\"><b>%1</b></td>" 212 "<tr><td align=\"right\"><b>%1</b></td>"
213 "<td align=\"left\">%2</td></tr>" ) 213 "<td align=\"left\">%2</td></tr>" )
214 .arg( KABC::Address::typeLabel( (*addrIt).type() ) ) 214 .arg( KABC::Address::typeLabel( (*addrIt).type() ) )
215//US .arg( (*addrIt).label().replace( '\n', "<br>" ) ); 215//US .arg( (*addrIt).label().replace( '\n', "<br>" ) );
216 .arg( (*addrIt).label() /*replace( QRegExp("\n"), "<br>" )*/ ); 216 .arg( (*addrIt).label() /*replace( QRegExp("\n"), "<br>" )*/ );
217 217
218 } 218 }
219 } 219 }
220 220
221 QString notes; 221 QString notes;
222 if ( !mAddressee.note().isEmpty() ) { 222 if ( !mAddressee.note().isEmpty() ) {
223 notes = QString( 223 notes = QString(
224 "<tr>" 224 "<tr>"
225 "<td align=\"right\" valign=\"top\"><b>%1</b></td>" // note label 225 "<td align=\"right\" valign=\"top\"><b>%1</b></td>" // note label
226 "<td align=\"left\">%2</td>" // note 226 "<td align=\"left\">%2</td>" // note
227 "</tr>" ).arg( i18n( "Notes" ) ) 227 "</tr>" ).arg( i18n( "Notes" ) )
228//US .arg( mAddressee.note().replace( '\n', "<br>" ) ); 228//US .arg( mAddressee.note().replace( '\n', "<br>" ) );
229 .arg( mAddressee.note().replace( QRegExp("\n"), "<br>" ) ); 229 .arg( mAddressee.note().replace( QRegExp("\n"), "<br>" ) );
230 //qDebug("AddresseeView::setAddressee has to be verified."); 230 //qDebug("AddresseeView::setAddressee has to be verified.");
231 } 231 }
232 232
233 QString aRole = ""; 233 QString aRole = "";
234 QString aOrga = ""; 234 QString aOrga = "";
235 if ( true /*!mAddressee.role().isEmpty()*/ ) { 235 if ( true /*!mAddressee.role().isEmpty()*/ ) {
236 aRole = "<tr>" 236 aRole = "<tr>"
237 "<td align=\"left\">" + mAddressee.role() + "</td>" 237 "<td align=\"left\">" + mAddressee.role() + "</td>"
238 "</tr>"; 238 "</tr>";
239 } 239 }
240 if ( true /*!mAddressee.organization().isEmpty()*/ ) { 240 if ( true /*!mAddressee.organization().isEmpty()*/ ) {
241 aOrga = "<tr>" 241 aOrga = "<tr>"
242 "<td align=\"left\">" + mAddressee.organization() + "</td>" 242 "<td align=\"left\">" + mAddressee.organization() + "</td>"
243 "</tr>"; 243 "</tr>";
244 } 244 }
245 mText = ""; 245 mText = "";
246 QString picString = ""; 246 QString picString = "";
247 KABC::Picture picture = mAddressee.photo(); 247 KABC::Picture picture = mAddressee.photo();
248 bool picAvailintern = false; 248 bool picAvailintern = false;
249 bool picAvailUrl = false; 249 bool picAvailUrl = false;
250 if (! picture.undefined() ) { 250 if (! picture.undefined() ) {
251 picAvailintern = (picture.isIntern() && !picture.data().isNull()); 251 picAvailintern = (picture.isIntern() && !picture.data().isNull());
252 picAvailUrl = !picture.isIntern() && QFile::exists(picture.url() ); 252 picAvailUrl = !picture.isIntern() && QFile::exists(picture.url() );
253 } 253 }
254 if ( picAvailUrl || picAvailintern || QApplication::desktop()->width() > 320 ) { 254 if ( picAvailUrl || picAvailintern || QApplication::desktop()->width() > 320 ) {
255 picString = "<img src=\"myimage\" width=\"50\" height=\"70\">"; 255 picString = "<img src=\"myimage\" width=\"50\" height=\"70\">";
256 if ( picAvailintern ) { 256 if ( picAvailintern ) {
257 QMimeSourceFactory::defaultFactory()->setImage( "myimage", picture.data() ); 257 QMimeSourceFactory::defaultFactory()->setImage( "myimage", picture.data() );
258 } else { 258 } else {
259 if ( picAvailUrl ) { 259 if ( picAvailUrl ) {
260 QMimeSourceFactory::defaultFactory()->setPixmap( "myimage", QPixmap( picture.url() )); 260 QMimeSourceFactory::defaultFactory()->setPixmap( "myimage", QPixmap( picture.url() ));
261 } else { 261 } else {
262 if ( !mAddressee.custom( "KADDRESSBOOK", "X-Children" ).isEmpty() ) { 262 if ( !mAddressee.custom( "KADDRESSBOOK", "X-Children" ).isEmpty() ) {
263 static bool setDefaultImageChildren = false; 263 static bool setDefaultImageChildren = false;
264 if ( !setDefaultImageChildren ) { 264 if ( !setDefaultImageChildren ) {
265 QMimeSourceFactory::defaultFactory()->setPixmap( "familyIcon", KGlobal::iconLoader()->loadIcon( "ic_kids", KIcon::Desktop, 128 ) ); 265 QMimeSourceFactory::defaultFactory()->setPixmap( "familyIcon", KGlobal::iconLoader()->loadIcon( "ic_kids", KIcon::Desktop, 128 ) );
266 setDefaultImageChildren = true; 266 setDefaultImageChildren = true;
267 } 267 }
268 picString = "<img src=\"familyIcon\" width=\"64\" height=\"64\">"; 268 picString = "<img src=\"familyIcon\" width=\"64\" height=\"64\">";
269 269
270 } else if ( !mAddressee.custom( "KADDRESSBOOK", "X-SpousesName" ).isEmpty() ) { 270 } else if ( !mAddressee.custom( "KADDRESSBOOK", "X-SpousesName" ).isEmpty() ) {
271 static bool setDefaultImagepouses = false; 271 static bool setDefaultImagepouses = false;
272 if ( !setDefaultImagepouses ) { 272 if ( !setDefaultImagepouses ) {
273 QMimeSourceFactory::defaultFactory()->setPixmap( "SpousesIcon", KGlobal::iconLoader()->loadIcon( "ic_family", KIcon::Desktop, 128 ) ); 273 QMimeSourceFactory::defaultFactory()->setPixmap( "SpousesIcon", KGlobal::iconLoader()->loadIcon( "ic_family", KIcon::Desktop, 128 ) );
274 setDefaultImagepouses = true; 274 setDefaultImagepouses = true;
275 } 275 }
276 picString = "<img src=\"SpousesIcon\" width=\"64\" height=\"64\">"; 276 picString = "<img src=\"SpousesIcon\" width=\"64\" height=\"64\">";
277 } else { 277 } else {
278 QString gen = mAddressee.custom( "KADDRESSBOOK", "X-Gender" ); 278 QString gen = mAddressee.custom( "KADDRESSBOOK", "X-Gender" );
279 if ( gen == "male" ) { 279 if ( gen == "male" ) {
280 static bool setDefaultImageMale = false; 280 static bool setDefaultImageMale = false;
281 if ( !setDefaultImageMale ) { 281 if ( !setDefaultImageMale ) {
282 QMimeSourceFactory::defaultFactory()->setPixmap( "MaleIcon", KGlobal::iconLoader()->loadIcon( "ic_male", KIcon::Desktop, 128 ) ); 282 QMimeSourceFactory::defaultFactory()->setPixmap( "MaleIcon", KGlobal::iconLoader()->loadIcon( "ic_male", KIcon::Desktop, 128 ) );
283 setDefaultImageMale = true; 283 setDefaultImageMale = true;
284 } 284 }
285 picString = "<img src=\"MaleIcon\" width=\"64\" height=\"64\">"; 285 picString = "<img src=\"MaleIcon\" width=\"64\" height=\"64\">";
286 286
287 } else if ( gen == "female" ) { 287 } else if ( gen == "female" ) {
288 static bool setDefaultImageFemale = false; 288 static bool setDefaultImageFemale = false;
289 if ( !setDefaultImageFemale ) { 289 if ( !setDefaultImageFemale ) {
290 QMimeSourceFactory::defaultFactory()->setPixmap( "FemaleIcon", KGlobal::iconLoader()->loadIcon( "ic_female", KIcon::Desktop, 128 ) ); 290 QMimeSourceFactory::defaultFactory()->setPixmap( "FemaleIcon", KGlobal::iconLoader()->loadIcon( "ic_female", KIcon::Desktop, 128 ) );
291 setDefaultImageFemale = true; 291 setDefaultImageFemale = true;
292 } 292 }
293 picString = "<img src=\"FemaleIcon\" width=\"64\" height=\"64\">"; 293 picString = "<img src=\"FemaleIcon\" width=\"64\" height=\"64\">";
294 294
295 } else { 295 } else {
296 static bool setDefaultImage = false; 296 static bool setDefaultImage = false;
297 if ( !setDefaultImage ) { 297 if ( !setDefaultImage ) {
298 qDebug("Setting default pixmap "); 298 //qDebug("Setting default pixmap ");
299 QMimeSourceFactory::defaultFactory()->setPixmap( "defaultIcon", KGlobal::iconLoader()->loadIcon( "ic_penguin", KIcon::Desktop, 128 ) ); 299 QMimeSourceFactory::defaultFactory()->setPixmap( "defaultIcon", KGlobal::iconLoader()->loadIcon( "ic_penguin", KIcon::Desktop, 128 ) );
300 setDefaultImage = true; 300 setDefaultImage = true;
301 } 301 }
302 picString = "<img src=\"defaultIcon\" width=\"64\" height=\"64\">"; 302 picString = "<img src=\"defaultIcon\" width=\"64\" height=\"64\">";
303 } 303 }
304 } 304 }
305 } 305 }
306 } 306 }
307 mText = QString::fromLatin1( 307 mText = QString::fromLatin1(
308 "<html>" 308 "<html>"
309 "<body text=\"%1\" bgcolor=\"%2\">" // text and background color 309 "<body text=\"%1\" bgcolor=\"%2\">" // text and background color
310 "<table>" 310 "<table>"
311 "<tr>" 311 "<tr>"
312 "<td rowspan=\"3\" align=\"right\" valign=\"top\">" 312 "<td rowspan=\"3\" align=\"right\" valign=\"top\">"
313 "%3" 313 "%3"
314 "</td>" 314 "</td>"
315 "<td align=\"left\"><font size=\"+2\"><b>%4</b></font></td>" // name 315 "<td align=\"left\"><font size=\"+2\"><b>%4</b></font></td>" // name
316 "</tr>" 316 "</tr>"
317 "%5" // role 317 "%5" // role
318 "%6" // organization 318 "%6" // organization
319 "<td colspan=\"2\">&nbsp;</td>" 319 "<td colspan=\"2\">&nbsp;</td>"
320 "%7" // dynamic part 320 "%7" // dynamic part
321 "%8" // notes 321 "%8" // notes
322 "</table>" 322 "</table>"
323 "</body>" 323 "</body>"
324 "</html>") 324 "</html>")
325//US 325//US
326 .arg( /*KGlobalSettings::textColor().name()*/ "black" ) 326 .arg( /*KGlobalSettings::textColor().name()*/ "black" )
327//US 327//US
328 .arg( /*KGlobalSettings::baseColor().name()*/ "white" ) 328 .arg( /*KGlobalSettings::baseColor().name()*/ "white" )
329 .arg( picString ) 329 .arg( picString )
330 .arg( name ) 330 .arg( name )
331 .arg( aRole ) 331 .arg( aRole )
332 .arg( aOrga ) 332 .arg( aOrga )
333 .arg( dynamicPart ) 333 .arg( dynamicPart )
334 .arg( notes ); 334 .arg( notes );
335 335
336 } else { // no picture! 336 } else { // no picture!
337 337
338mText = "<table width=\"100%\">\n"; 338mText = "<table width=\"100%\">\n";
339 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>"; 339 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>";
340#ifdef DESKTOP_VERSION 340#ifdef DESKTOP_VERSION
341 mText += "<tr bgcolor=\"#5699CD\"><td align=\"left\"><h1>"; 341 mText += "<tr bgcolor=\"#5699CD\"><td align=\"left\"><h1>";
342 mText += "<font color=\"#FFFFFF\">" + name +"</font></h1>"; 342 mText += "<font color=\"#FFFFFF\">" + name +"</font></h1>";
343#else 343#else
344 mText += "<tr bgcolor=\"#5699CD\"><td align=\"left\"><h3>"; 344 mText += "<tr bgcolor=\"#5699CD\"><td align=\"left\"><h3>";
345 mText += "<font color=\"#FFFFFF\"> " + name +"</font></h3>"; 345 mText += "<font color=\"#FFFFFF\"> " + name +"</font></h3>";
346#endif 346#endif
347 347
348 mText += "</td></tr>\n<tr bgcolor=\"#EAF8FA\"><td>"; 348 mText += "</td></tr>\n<tr bgcolor=\"#EAF8FA\"><td>";
349 349
350 mText += "<table><td colspan=\"2\">&nbsp;</td>"; 350 mText += "<table><td colspan=\"2\">&nbsp;</td>";
351 /* 351 /*
352 mText += QString("<tr><td align=\"right\"><b2>%1</b2></td>" 352 mText += QString("<tr><td align=\"right\"><b2>%1</b2></td>"
353 "<td align=\"left\"><b>%2</b></td></tr>" ) 353 "<td align=\"left\"><b>%2</b></td></tr>" )
354 .arg( i18n(" ") ) 354 .arg( i18n(" ") )
355 .arg( name ); 355 .arg( name );
356 */ 356 */
357 if ( ! mAddressee.role().isEmpty() ) 357 if ( ! mAddressee.role().isEmpty() )
358 mText += QString("<tr><td align=\"right\"><b>%1</b></td>" 358 mText += QString("<tr><td align=\"right\"><b>%1</b></td>"
359 "<td align=\"left\">%2</td></tr>" ) 359 "<td align=\"left\">%2</td></tr>" )
360 .arg( i18n(" ") ) 360 .arg( i18n(" ") )
361 .arg( mAddressee.role()); 361 .arg( mAddressee.role());
362 if ( ! mAddressee.organization().isEmpty() ) 362 if ( ! mAddressee.organization().isEmpty() )
363 mText += QString("<tr><td align=\"right\"><b>%1</b></td>" 363 mText += QString("<tr><td align=\"right\"><b>%1</b></td>"
364 "<td align=\"left\">%2</td></tr>" ) 364 "<td align=\"left\">%2</td></tr>" )
365 .arg( i18n(" ") ) 365 .arg( i18n(" ") )
366 .arg( mAddressee.organization()); 366 .arg( mAddressee.organization());
367 mText += dynamicPart; 367 mText += dynamicPart;
368 mText += notes; 368 mText += notes;
369 mText += "</table>"; 369 mText += "</table>";
370 370
371 } 371 }
372 372
373 // at last display it... 373 // at last display it...
374 setText( mText ); 374 setText( mText );
375 375
376} 376}
377 377
378QString AddresseeView::getPhoneNumbers( KABC::PhoneNumber::List phones ,bool preferred ) 378QString AddresseeView::getPhoneNumbers( KABC::PhoneNumber::List phones ,bool preferred )
379{ 379{
380 ExternalAppHandler* eah = ExternalAppHandler::instance(); 380 ExternalAppHandler* eah = ExternalAppHandler::instance();
381 bool kphoneAvail = eah->isPhoneAppAvailable(); 381 bool kphoneAvail = eah->isPhoneAppAvailable();
382 bool kfaxAvail = eah->isFaxAppAvailable(); 382 bool kfaxAvail = eah->isFaxAppAvailable();
383 bool ksmsAvail = eah->isSMSAppAvailable(); 383 bool ksmsAvail = eah->isSMSAppAvailable();
384 bool kpagerAvail = eah->isPagerAppAvailable(); 384 bool kpagerAvail = eah->isPagerAppAvailable();
385 bool ksipAvail = eah->isSIPAppAvailable(); 385 bool ksipAvail = eah->isSIPAppAvailable();
386 QString dynamicPart; 386 QString dynamicPart;
387 KABC::PhoneNumber::List::ConstIterator phoneIt; 387 KABC::PhoneNumber::List::ConstIterator phoneIt;
388 QString extension; 388 QString extension;
389 int phonetype; 389 int phonetype;
390 QString sms; 390 QString sms;
391 for ( phoneIt = phones.begin(); phoneIt != phones.end(); ++phoneIt ) { 391 for ( phoneIt = phones.begin(); phoneIt != phones.end(); ++phoneIt ) {
392 phonetype = (*phoneIt).type(); 392 phonetype = (*phoneIt).type();
393 if ( ((phonetype & KABC::PhoneNumber::Pref) == 0 ) == preferred ) 393 if ( ((phonetype & KABC::PhoneNumber::Pref) == 0 ) == preferred )
394 continue; 394 continue;
395 if (ksmsAvail && 395 if (ksmsAvail &&
396 ( 396 (
397 ((phonetype & KABC::PhoneNumber::Car) == KABC::PhoneNumber::Car) || 397 ((phonetype & KABC::PhoneNumber::Car) == KABC::PhoneNumber::Car) ||
398 ((phonetype & KABC::PhoneNumber::Cell) == KABC::PhoneNumber::Cell) 398 ((phonetype & KABC::PhoneNumber::Cell) == KABC::PhoneNumber::Cell)
399 ) 399 )
400 ) 400 )
401 { 401 {
402 sms = QString("<a href=\"smsto:%1 \">(sms)</a>" ) 402 sms = QString("<a href=\"smsto:%1 \">(sms)</a>" )
403 .arg( (*phoneIt).number() ); 403 .arg( (*phoneIt).number() );
404 404
405 } 405 }
406 else 406 else
407 sms = ""; 407 sms = "";
408 408
409 extension = QString::null; 409 extension = QString::null;
410 if ((phonetype & KABC::PhoneNumber::Fax) == KABC::PhoneNumber::Fax) { 410 if ((phonetype & KABC::PhoneNumber::Fax) == KABC::PhoneNumber::Fax) {
411 if (kfaxAvail) extension = "faxto:"; 411 if (kfaxAvail) extension = "faxto:";
412 } 412 }
413 else if ((phonetype & KABC::PhoneNumber::Pager) == KABC::PhoneNumber::Pager) { 413 else if ((phonetype & KABC::PhoneNumber::Pager) == KABC::PhoneNumber::Pager) {
414 if (kpagerAvail) extension = "pagerto:"; 414 if (kpagerAvail) extension = "pagerto:";
415 } 415 }
416 else if ((phonetype & KABC::PhoneNumber::Sip) == KABC::PhoneNumber::Sip) { 416 else if ((phonetype & KABC::PhoneNumber::Sip) == KABC::PhoneNumber::Sip) {
417 if (ksipAvail) extension = "sipto:"; 417 if (ksipAvail) extension = "sipto:";
418 } 418 }
419 else if (kphoneAvail) { 419 else if (kphoneAvail) {
420 extension = "phoneto:"; 420 extension = "phoneto:";
421 } 421 }
422 else 422 else
423 extension = QString::null; 423 extension = QString::null;
424 424
425 if ( !extension.isEmpty() ) { 425 if ( !extension.isEmpty() ) {
426 dynamicPart += QString( 426 dynamicPart += QString(
diff --git a/kabc/plugins/file/resourcefile.cpp b/kabc/plugins/file/resourcefile.cpp
index dc5932f..4ab7f02 100644
--- a/kabc/plugins/file/resourcefile.cpp
+++ b/kabc/plugins/file/resourcefile.cpp
@@ -1,404 +1,421 @@
1/* 1/*
2 This file is part of libkabc. 2 This file is part of libkabc.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21/* 21/*
22Enhanced Version of the file for platform independent KDE tools. 22Enhanced Version of the file for platform independent KDE tools.
23Copyright (c) 2004 Ulf Schenk 23Copyright (c) 2004 Ulf Schenk
24 24
25$Id$ 25$Id$
26*/ 26*/
27 27
28#include <sys/types.h> 28#include <sys/types.h>
29#include <sys/stat.h> 29#include <sys/stat.h>
30#ifndef _WIN32_ 30#ifndef _WIN32_
31#include <unistd.h> 31#include <unistd.h>
32#endif 32#endif
33 33
34#include <qfile.h> 34#include <qfile.h>
35#include <qfileinfo.h> 35#include <qfileinfo.h>
36#include <qregexp.h> 36#include <qregexp.h>
37#include <qtimer.h> 37#include <qtimer.h>
38 38
39#include <kapplication.h> 39#include <kapplication.h>
40#include <kconfig.h> 40#include <kconfig.h>
41#include <kdebug.h> 41#include <kdebug.h>
42#include <klocale.h> 42#include <klocale.h>
43//US #include <ksavefile.h> 43//US #include <ksavefile.h>
44#include <kstandarddirs.h> 44#include <kstandarddirs.h>
45#include <kmessagebox.h> 45#include <kmessagebox.h>
46 46
47#include "formatfactory.h" 47#include "formatfactory.h"
48 48
49#include "resource.h" 49#include "resource.h"
50#include "resourcefileconfig.h" 50#include "resourcefileconfig.h"
51#include "stdaddressbook.h" 51#include "stdaddressbook.h"
52#define NO_DIRWATCH 52#define NO_DIRWATCH
53#include "resourcefile.h" 53#include "resourcefile.h"
54 54
55//#define ALLOW_LOCKING 55//#define ALLOW_LOCKING
56 56
57 57
58
59using namespace KABC; 58using namespace KABC;
60 59
61extern "C" 60extern "C"
62#ifdef _WIN32_ 61#ifdef _WIN32_
63__declspec(dllexport) 62__declspec(dllexport)
64#else 63#else
65{ 64{
66#endif 65#endif
67 66
68//US void *init_kabc_file() 67//US void *init_kabc_file()
69 void *init_microkabc_file() 68 void *init_microkabc_file()
70 { 69 {
71 return new KRES::PluginFactory<ResourceFile,ResourceFileConfig>(); 70 return new KRES::PluginFactory<ResourceFile,ResourceFileConfig>();
72 } 71 }
73#ifndef _WIN32_ 72#ifndef _WIN32_
74} 73}
75#endif 74#endif
76 75
77ResourceFile::ResourceFile( const KConfig *config ) 76ResourceFile::ResourceFile( const KConfig *config )
78 : Resource( config ) , mFormat( 0 ) 77 : Resource( config ) , mFormat( 0 )
79{ 78{
80 QString fileName, formatName, default_fileName; 79 QString fileName, formatName, default_fileName;
81 80
82 default_fileName = StdAddressBook::fileName(); 81 default_fileName = StdAddressBook::fileName();
83 82
84 KConfig *cfg = (KConfig *)config; 83 KConfig *cfg = (KConfig *)config;
85 if ( cfg ) { 84 if ( cfg ) {
86 fileName = cfg->readEntry( "FileName", default_fileName ); 85 fileName = cfg->readEntry( "FileName", default_fileName );
87 formatName = cfg->readEntry( "FileFormat", "vcard" ); 86 formatName = cfg->readEntry( "FileFormat", "vcard" );
88 } else { 87 } else {
89 fileName = default_fileName; 88 fileName = default_fileName;
90 formatName = "vcard"; 89 formatName = "vcard";
91 } 90 }
92 91
93 init( fileName, formatName ); 92 init( fileName, formatName );
94} 93}
95 94
96ResourceFile::ResourceFile( const QString &fileName , 95ResourceFile::ResourceFile( const QString &fileName ,
97 const QString &formatName ) 96 const QString &formatName )
98 : Resource( 0 ) 97 : Resource( 0 )
99{ 98{
100// qDebug("ResourceFile::ResourceFile : 3 %s, %s", fileName.latin1(), formatName.latin1()); 99// qDebug("ResourceFile::ResourceFile : 3 %s, %s", fileName.latin1(), formatName.latin1());
100
101
102
101 init( fileName, formatName ); 103 init( fileName, formatName );
102} 104}
103 105
104void ResourceFile::init( const QString &fileName, const QString &formatName ) 106void ResourceFile::init( const QString &fileName, const QString &formatName )
105{ 107{
106 mFormatName = formatName; 108 mFormatName = formatName;
107 109
108 FormatFactory *factory = FormatFactory::self(); 110 FormatFactory *factory = FormatFactory::self();
109 mFormat = factory->format( mFormatName ); 111 mFormat = factory->format( mFormatName );
110 112
111 if ( !mFormat ) { 113 if ( !mFormat ) {
112 mFormatName = "vcard"; 114 mFormatName = "vcard";
113 mFormat = factory->format( mFormatName ); 115 mFormat = factory->format( mFormatName );
114 } 116 }
115 117
116#ifndef NO_DIRWATCH 118#ifndef NO_DIRWATCH
117 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) ); 119 connect( &mDirWatch, SIGNAL( dirty(const QString&) ), SLOT( fileChanged() ) );
118 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) ); 120 connect( &mDirWatch, SIGNAL( created(const QString&) ), SLOT( fileChanged() ) );
119 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) ); 121 connect( &mDirWatch, SIGNAL( deleted(const QString&) ), SLOT( fileChanged() ) );
120#endif 122#endif
123
124
125 QString localKdeDir;
126 localKdeDir = readEnvPath("LOCALMICROKDEHOME");
127 if ( ! localKdeDir.isEmpty() ) {
128 qDebug("LOCALMICROKDEHOME is set to: %s",localKdeDir.latin1() );
129
130
131
132
133 }
134 qDebug("RESOURCE: %s ", fileName.latin1());
135
136
137
121 setFileName( fileName ); 138 setFileName( fileName );
122} 139}
123 140
124ResourceFile::~ResourceFile() 141ResourceFile::~ResourceFile()
125{ 142{
126 delete mFormat; 143 delete mFormat;
127 mFormat = 0; 144 mFormat = 0;
128} 145}
129 146
130void ResourceFile::writeConfig( KConfig *config ) 147void ResourceFile::writeConfig( KConfig *config )
131{ 148{
132 149
133 config->setGroup( "Resource_" + identifier() ); 150 config->setGroup( "Resource_" + identifier() );
134 Resource::writeConfig( config ); 151 Resource::writeConfig( config );
135 152
136 config->writeEntry( "FileName", mFileName ); 153 config->writeEntry( "FileName", fileName() );
137 config->writeEntry( "FileFormat", mFormatName ); 154 config->writeEntry( "FileFormat", mFormatName );
138 155
139// qDebug("ResourceFile::writeConfig format %s, %s", mFileName.latin1(), mFormatName.latin1()); 156// qDebug("ResourceFile::writeConfig format %s, %s", mFileName.latin1(), mFormatName.latin1());
140 157
141} 158}
142 159
143Ticket *ResourceFile::requestSaveTicket() 160Ticket *ResourceFile::requestSaveTicket()
144{ 161{
145 kdDebug(5700) << "ResourceFile::requestSaveTicket()" << endl; 162 kdDebug(5700) << "ResourceFile::requestSaveTicket()" << endl;
146 163
147 if ( !addressBook() ) return 0; 164 if ( !addressBook() ) return 0;
148 165
149#ifdef ALLOW_LOCKING 166#ifdef ALLOW_LOCKING
150 if ( !lock( mFileName ) ) { 167 if ( !lock( mFileName ) ) {
151 qDebug("unablt to lock file "); 168 qDebug("unablt to lock file ");
152 return 0; 169 return 0;
153 } 170 }
154#endif 171#endif
155 return createTicket( this ); 172 return createTicket( this );
156} 173}
157 174
158 175
159bool ResourceFile::doOpen() 176bool ResourceFile::doOpen()
160{ 177{
161 QFile file( mFileName ); 178 QFile file( fileName() );
162 qDebug("ResourceFile::openfile %s ", mFileName.latin1()); 179 qDebug("ResourceFile::openfile %s ", fileName().latin1());
163 180
164 if ( !file.exists() ) { 181 if ( !file.exists() ) {
165 // try to create the file 182 // try to create the file
166 bool ok = file.open( IO_WriteOnly ); 183 bool ok = file.open( IO_WriteOnly );
167 if ( ok ) 184 if ( ok )
168 file.close(); 185 file.close();
169 186
170 return ok; 187 return ok;
171 } else { 188 } else {
172 if ( !file.open( IO_ReadWrite ) ) 189 if ( !file.open( IO_ReadWrite ) )
173 return false; 190 return false;
174 191
175 if ( file.size() == 0 ) { 192 if ( file.size() == 0 ) {
176 file.close(); 193 file.close();
177 return true; 194 return true;
178 } 195 }
179 196
180 bool ok = mFormat->checkFormat( &file ); 197 bool ok = mFormat->checkFormat( &file );
181 file.close(); 198 file.close();
182 199
183 return ok; 200 return ok;
184 } 201 }
185} 202}
186 203
187void ResourceFile::doClose() 204void ResourceFile::doClose()
188{ 205{
189} 206}
190 207
191bool ResourceFile::load() 208bool ResourceFile::load()
192{ 209{
193 210
194 QFile file( mFileName ); 211 QFile file( fileName() );
195 if ( !file.open( IO_ReadOnly ) ) { 212 if ( !file.open( IO_ReadOnly ) ) {
196 addressBook()->error( i18n( "Unable to open file '%1'." ).arg( mFileName ) ); 213 addressBook()->error( i18n( "Unable to open file '%1'." ).arg( fileName() ) );
197 return false; 214 return false;
198 } 215 }
199 216
200// qDebug("ResourceFile::load format %s, %s", mFileName.latin1(), mFormatName.latin1()); 217// qDebug("ResourceFile::load format %s, %s", mFileName.latin1(), mFormatName.latin1());
201 218
202 return mFormat->loadAll( addressBook(), this, &file ); 219 return mFormat->loadAll( addressBook(), this, &file );
203} 220}
204 221
205bool ResourceFile::save( Ticket *ticket ) 222bool ResourceFile::save( Ticket *ticket )
206{ 223{
207// qDebug("ResourceFile::save format %s, %s", mFileName.latin1(), mFormatName.latin1()); 224// qDebug("ResourceFile::save format %s, %s", mFileName.latin1(), mFormatName.latin1());
208 225
209 226
210 // create backup file 227 // create backup file
211 QString extension = "_" + QString::number( QDate::currentDate().dayOfWeek() ); 228 QString extension = "_" + QString::number( QDate::currentDate().dayOfWeek() );
212 229
213/*US we use a simpler method to create a backupfile 230/*US we use a simpler method to create a backupfile
214 231
215 (void) KSaveFile::backupFile( mFileName, QString::null 232 (void) KSaveFile::backupFile( mFileName, QString::null
216 ,extension ); 233 ,extension );
217 234
218 KSaveFile saveFile( mFileName ); 235 KSaveFile saveFile( mFileName );
219 bool ok = false; 236 bool ok = false;
220 if ( saveFile.status() == 0 && saveFile.file() ) 237 if ( saveFile.status() == 0 && saveFile.file() )
221 { 238 {
222 mFormat->saveAll( addressBook(), this, saveFile.file() ); 239 mFormat->saveAll( addressBook(), this, saveFile.file() );
223 ok = saveFile.close(); 240 ok = saveFile.close();
224 } 241 }
225*/ 242*/
226 243
227//US ToDo: write backupfile 244//US ToDo: write backupfile
228#ifndef NO_DIRWATCH 245#ifndef NO_DIRWATCH
229 mDirWatch.stopScan(); 246 mDirWatch.stopScan();
230#endif 247#endif
231 QFile info; 248 QFile info;
232 info.setName( mFileName ); 249 info.setName( fileName() );
233 bool ok = info.open( IO_WriteOnly ); 250 bool ok = info.open( IO_WriteOnly );
234 if ( ok ) { 251 if ( ok ) {
235 mFormat->saveAll( addressBook(), this, &info ); 252 mFormat->saveAll( addressBook(), this, &info );
236 253
237 info.close(); 254 info.close();
238 ok = true; 255 ok = true;
239 } 256 }
240 else { 257 else {
241 258
242 } 259 }
243 260
244 if ( !ok ) 261 if ( !ok )
245 addressBook()->error( i18n( "Unable to save file '%1'." ).arg( mFileName ) ); 262 addressBook()->error( i18n( "Unable to save file '%1'." ).arg( fileName() ) );
246#ifndef NO_DIRWATCH 263#ifndef NO_DIRWATCH
247 mDirWatch.startScan(); 264 mDirWatch.startScan();
248#endif 265#endif
249 delete ticket; 266 delete ticket;
250#ifdef ALLOW_LOCKING 267#ifdef ALLOW_LOCKING
251 unlock( mFileName ); 268 unlock( mFileName );
252#endif 269#endif
253 270
254 return ok; 271 return ok;
255} 272}
256 273
257bool ResourceFile::lock( const QString &fileName ) 274bool ResourceFile::lock( const QString &fileName )
258{ 275{
259#ifdef ALLOW_LOCKING 276#ifdef ALLOW_LOCKING
260 277
261 278
262 QString fn = fileName; 279 QString fn = fileName;
263 280
264//US change the implementation how the lockfilename is getting created 281//US change the implementation how the lockfilename is getting created
265//US fn.replace( QRegExp("/"), "_" ); 282//US fn.replace( QRegExp("/"), "_" );
266//US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" ); 283//US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" );
267 284
268 KURL url(fn); 285 KURL url(fn);
269 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" ); 286 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
270 287
271 288
272 289
273 if (QFile::exists( lockName )) return false; 290 if (QFile::exists( lockName )) return false;
274 291
275 QString lockUniqueName; 292 QString lockUniqueName;
276 lockUniqueName = fn + KApplication::randomString( 8 ); 293 lockUniqueName = fn + KApplication::randomString( 8 );
277 294
278 url = lockUniqueName; 295 url = lockUniqueName;
279//US mLockUniqueName = locateLocal( "data", "kabc/lock/" + lockUniqueName ); 296//US mLockUniqueName = locateLocal( "data", "kabc/lock/" + lockUniqueName );
280 mLockUniqueName = locateLocal( "data", "kabc/lock/" + url.fileName() ); 297 mLockUniqueName = locateLocal( "data", "kabc/lock/" + url.fileName() );
281 kdDebug(5700) << "-- lock unique name: " << mLockUniqueName << endl; 298 kdDebug(5700) << "-- lock unique name: " << mLockUniqueName << endl;
282 299
283 // Create unique file 300 // Create unique file
284 QFile file( mLockUniqueName ); 301 QFile file( mLockUniqueName );
285 file.open( IO_WriteOnly ); 302 file.open( IO_WriteOnly );
286 file.close(); 303 file.close();
287 304
288 // Create lock file 305 // Create lock file
289 int result = 0; 306 int result = 0;
290#ifndef _WIN32_ 307#ifndef _WIN32_
291 result = ::link( QFile::encodeName( mLockUniqueName ), 308 result = ::link( QFile::encodeName( mLockUniqueName ),
292 QFile::encodeName( lockName ) ); 309 QFile::encodeName( lockName ) );
293#endif 310#endif
294 if ( result == 0 ) { 311 if ( result == 0 ) {
295 addressBook()->emitAddressBookLocked(); 312 addressBook()->emitAddressBookLocked();
296 return true; 313 return true;
297 } 314 }
298 315
299 // TODO: check stat 316 // TODO: check stat
300 317
301 return false; 318 return false;
302#else 319#else
303 return true; 320 return true;
304#endif 321#endif
305} 322}
306 323
307void ResourceFile::unlock( const QString &fileName ) 324void ResourceFile::unlock( const QString &fileName )
308{ 325{
309#ifdef ALLOW_LOCKING 326#ifdef ALLOW_LOCKING
310 QString fn = fileName; 327 QString fn = fileName;
311//US change the implementation how the lockfilename is getting created 328//US change the implementation how the lockfilename is getting created
312//US fn.replace( QRegExp( "/" ), "_" ); 329//US fn.replace( QRegExp( "/" ), "_" );
313//US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" ); 330//US QString lockName = locateLocal( "data", "kabc/lock/" + fn + ".lock" );
314//US QString lockName = fn + ".lock"; 331//US QString lockName = fn + ".lock";
315 KURL url(fn); 332 KURL url(fn);
316 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" ); 333 QString lockName = locateLocal( "data", "kabc/lock/" + url.fileName() + ".lock" );
317 334
318 QFile::remove( lockName ); 335 QFile::remove( lockName );
319 QFile::remove( mLockUniqueName ); 336 QFile::remove( mLockUniqueName );
320 addressBook()->emitAddressBookUnlocked(); 337 addressBook()->emitAddressBookUnlocked();
321#else 338#else
322 return; 339 return;
323#endif 340#endif
324} 341}
325 342
326void ResourceFile::setFileName( const QString &fileName ) 343void ResourceFile::setFileName( const QString &fileName )
327{ 344{
328#ifndef NO_DIRWATCH 345#ifndef NO_DIRWATCH
329 mDirWatch.stopScan(); 346 mDirWatch.stopScan();
330 mDirWatch.removeFile( mFileName ); 347 mDirWatch.removeFile( mFileName );
331 mFileName = fileName; 348 mFileName = fileName;
332 349
333 350
334 mDirWatch.addFile( mFileName ); 351 mDirWatch.addFile( mFileName );
335 mDirWatch.startScan(); 352 mDirWatch.startScan();
336#else 353#else
337 mFileName = fileName; 354 mFileName2 = fileName;
338#endif 355#endif
339 356
340//US simulate KDirWatch event 357//US simulate KDirWatch event
341//US fileChanged(); 358//US fileChanged();
342} 359}
343 360
344QString ResourceFile::fileName() const 361QString ResourceFile::fileName() const
345{ 362{
346 return mFileName; 363 return mFileName2;
347} 364}
348 365
349void ResourceFile::setFormat( const QString &format ) 366void ResourceFile::setFormat( const QString &format )
350{ 367{
351 mFormatName = format; 368 mFormatName = format;
352 delete mFormat; 369 delete mFormat;
353 370
354 FormatFactory *factory = FormatFactory::self(); 371 FormatFactory *factory = FormatFactory::self();
355 mFormat = factory->format( mFormatName ); 372 mFormat = factory->format( mFormatName );
356/*US 373/*US
357//qDebug("ResourceFile::setFormat initialized with format %s ", format.latin1()); 374//qDebug("ResourceFile::setFormat initialized with format %s ", format.latin1());
358 if (mFormatName == "vcard") { 375 if (mFormatName == "vcard") {
359 mFormat = new VCardFormatPlugin2(); 376 mFormat = new VCardFormatPlugin2();
360// qDebug("ResourceFile::setFormat format %s", mFormatName.latin1()); 377// qDebug("ResourceFile::setFormat format %s", mFormatName.latin1());
361 } 378 }
362 else if (mFormatName == "binary") { 379 else if (mFormatName == "binary") {
363 mFormat = new BinaryFormat(); 380 mFormat = new BinaryFormat();
364// qDebug("ResourceFile::setFormat format %s", mFormatName.latin1()); 381// qDebug("ResourceFile::setFormat format %s", mFormatName.latin1());
365 } 382 }
366 else 383 else
367 qDebug("ResourceFile::setFormat format unknown !!! %s ", format.latin1()); 384 qDebug("ResourceFile::setFormat format unknown !!! %s ", format.latin1());
368*/ 385*/
369 386
370} 387}
371 388
372QString ResourceFile::format() const 389QString ResourceFile::format() const
373{ 390{
374 return mFormatName; 391 return mFormatName;
375} 392}
376 393
377void ResourceFile::fileChanged() 394void ResourceFile::fileChanged()
378{ 395{
379 // There is a small theoretical chance that KDirWatch calls us before 396 // There is a small theoretical chance that KDirWatch calls us before
380 // we are fully constructed 397 // we are fully constructed
381 if (!addressBook()) 398 if (!addressBook())
382 return; 399 return;
383 400
384 401
385 QString text( i18n( "File resource '%1'<br> has been changed by third party.<br>Do you want to reload?").arg( mFileName ) ); 402 QString text( i18n( "File resource '%1'<br> has been changed by third party.<br>Do you want to reload?").arg( fileName() ) );
386 if ( readOnly() || KMessageBox::questionYesNo( 0, text ) == KMessageBox::Yes ) { 403 if ( readOnly() || KMessageBox::questionYesNo( 0, text ) == KMessageBox::Yes ) {
387 load(); 404 load();
388 addressBook()->emitAddressBookChanged(); 405 addressBook()->emitAddressBookChanged();
389 } 406 }
390} 407}
391 408
392void ResourceFile::removeAddressee( const Addressee &addr ) 409void ResourceFile::removeAddressee( const Addressee &addr )
393{ 410{
394 QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/photos/" ) + addr.uid() ) ); 411 QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/photos/" ) + addr.uid() ) );
395 QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/logos/" ) + addr.uid() ) ); 412 QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/logos/" ) + addr.uid() ) );
396 QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/sounds/" ) + addr.uid() ) ); 413 QFile::remove( QFile::encodeName( locateLocal( "data", "kabc/sounds/" ) + addr.uid() ) );
397} 414}
398 415
399void ResourceFile::cleanUp() 416void ResourceFile::cleanUp()
400{ 417{
401 unlock( mFileName ); 418 unlock( fileName() );
402} 419}
403 420
404//US #include "resourcefile.moc" 421//US #include "resourcefile.moc"
diff --git a/kabc/plugins/file/resourcefile.h b/kabc/plugins/file/resourcefile.h
index b4421b2..dd38a9d 100644
--- a/kabc/plugins/file/resourcefile.h
+++ b/kabc/plugins/file/resourcefile.h
@@ -22,142 +22,142 @@
22Enhanced Version of the file for platform independent KDE tools. 22Enhanced Version of the file for platform independent KDE tools.
23Copyright (c) 2004 Ulf Schenk 23Copyright (c) 2004 Ulf Schenk
24 24
25$Id$ 25$Id$
26*/ 26*/
27 27
28 28
29#ifndef KABC_RESOURCEFILE_H 29#ifndef KABC_RESOURCEFILE_H
30#define KABC_RESOURCEFILE_H 30#define KABC_RESOURCEFILE_H
31 31
32#include <kconfig.h> 32#include <kconfig.h>
33#include <kdirwatch.h> 33#include <kdirwatch.h>
34 34
35#include <sys/types.h> 35#include <sys/types.h>
36 36
37#include <resource.h> 37#include <resource.h>
38 38
39class QTimer; 39class QTimer;
40class FormatPlugin; 40class FormatPlugin;
41 41
42namespace KABC { 42namespace KABC {
43 43
44//US class FormatPlugin; 44//US class FormatPlugin;
45class ResourceConfigWidget; 45class ResourceConfigWidget;
46 46
47/** 47/**
48 @internal 48 @internal
49*/ 49*/
50class ResourceFile : public Resource 50class ResourceFile : public Resource
51{ 51{
52 Q_OBJECT 52 Q_OBJECT
53 53
54public: 54public:
55 55
56 /** 56 /**
57 Constructor. 57 Constructor.
58 58
59 @param cfg The config object where custom resource settings are stored. 59 @param cfg The config object where custom resource settings are stored.
60 */ 60 */
61 ResourceFile( const KConfig *cfg ); 61 ResourceFile( const KConfig *cfg );
62 62
63 /** 63 /**
64 Construct file resource on file @arg fileName using format @arg formatName. 64 Construct file resource on file @arg fileName using format @arg formatName.
65 */ 65 */
66 ResourceFile( const QString &fileName , const QString &formatName = "vcard" ); 66 ResourceFile( const QString &fileName , const QString &formatName = "vcard" );
67 67
68 /** 68 /**
69 * Destructor. 69 * Destructor.
70 */ 70 */
71 ~ResourceFile(); 71 ~ResourceFile();
72 72
73 /** 73 /**
74 Writes the config back. 74 Writes the config back.
75 */ 75 */
76 virtual void writeConfig( KConfig *cfg ); 76 virtual void writeConfig( KConfig *cfg );
77 77
78 /** 78 /**
79 * Tries to open the file and checks for the proper format. 79 * Tries to open the file and checks for the proper format.
80 * This method should be called before @ref load(). 80 * This method should be called before @ref load().
81 */ 81 */
82 virtual bool doOpen(); 82 virtual bool doOpen();
83 83
84 /** 84 /**
85 * Closes the file again. 85 * Closes the file again.
86 */ 86 */
87 virtual void doClose(); 87 virtual void doClose();
88 88
89 /** 89 /**
90 * Requests a save ticket, that is used by @ref save() 90 * Requests a save ticket, that is used by @ref save()
91 */ 91 */
92 virtual Ticket *requestSaveTicket(); 92 virtual Ticket *requestSaveTicket();
93 93
94 /** 94 /**
95 * Loads all addressees from file to the address book. 95 * Loads all addressees from file to the address book.
96 * Returns true if all addressees could be loaded otherwise false. 96 * Returns true if all addressees could be loaded otherwise false.
97 */ 97 */
98 virtual bool load(); 98 virtual bool load();
99 99
100 /** 100 /**
101 * Saves all addresses from address book to file. 101 * Saves all addresses from address book to file.
102 * Returns true if all addressees could be saved otherwise false. 102 * Returns true if all addressees could be saved otherwise false.
103 * 103 *
104 * @param ticket The ticket returned by @ref requestSaveTicket() 104 * @param ticket The ticket returned by @ref requestSaveTicket()
105 */ 105 */
106 virtual bool save( Ticket *ticket ); 106 virtual bool save( Ticket *ticket );
107 107
108 /** 108 /**
109 * Set name of file to be used for saving. 109 * Set name of file to be used for saving.
110 */ 110 */
111 void setFileName( const QString & ); 111 void setFileName( const QString & );
112 112
113 /** 113 /**
114 * Return name of file used for loading and saving the address book. 114 * Return name of file used for loading and saving the address book.
115 */ 115 */
116 QString fileName() const; 116 QString fileName() const;
117 117
118 /** 118 /**
119 Sets a new format by name. 119 Sets a new format by name.
120 */ 120 */
121 void setFormat( const QString &name ); 121 void setFormat( const QString &name );
122 122
123 /** 123 /**
124 Returns the format name. 124 Returns the format name.
125 */ 125 */
126 QString format() const; 126 QString format() const;
127 127
128 /** 128 /**
129 * Remove a addressee from its source. 129 * Remove a addressee from its source.
130 * This method is mainly called by KABC::AddressBook. 130 * This method is mainly called by KABC::AddressBook.
131 */ 131 */
132 virtual void removeAddressee( const Addressee& addr ); 132 virtual void removeAddressee( const Addressee& addr );
133 133
134 /** 134 /**
135 * This method is called by an error handler if the application 135 * This method is called by an error handler if the application
136 * crashed 136 * crashed
137 */ 137 */
138 virtual void cleanUp(); 138 virtual void cleanUp();
139 139
140protected slots: 140protected slots:
141 void fileChanged(); 141 void fileChanged();
142 142
143protected: 143protected:
144 void init( const QString &fileName, const QString &format ); 144 void init( const QString &fileName, const QString &format );
145 145
146 bool lock( const QString &fileName ); 146 bool lock( const QString &fileName );
147 void unlock( const QString &fileName ); 147 void unlock( const QString &fileName );
148 148
149private: 149private:
150 QString mFileName; 150 QString mFileName2;
151 QString mFormatName; 151 QString mFormatName;
152 152
153 FormatPlugin *mFormat; 153 FormatPlugin *mFormat;
154 154
155 QString mLockUniqueName; 155 QString mLockUniqueName;
156#ifndef NO_DIRWATCH 156#ifndef NO_DIRWATCH
157 KDirWatch mDirWatch; 157 KDirWatch mDirWatch;
158#endif 158#endif
159}; 159};
160 160
161} 161}
162 162
163#endif 163#endif
diff --git a/microkde/kdatetbl.cpp b/microkde/kdatetbl.cpp
index d182279..2d97c8c 100644
--- a/microkde/kdatetbl.cpp
+++ b/microkde/kdatetbl.cpp
@@ -199,257 +199,257 @@ KDateTable::paintCell(QPainter *painter, int row, int col)
199 } 199 }
200 /* 200 /*
201 if(rect.width()>maxCell.width()) maxCell.setWidth(rect.width()); 201 if(rect.width()>maxCell.width()) maxCell.setWidth(rect.width());
202 if(rect.height()>maxCell.height()) { 202 if(rect.height()>maxCell.height()) {
203 maxCell.setHeight(rect.height()); 203 maxCell.setHeight(rect.height());
204 } 204 }
205 */ 205 */
206} 206}
207 207
208void 208void
209KDateTable::keyPressEvent( QKeyEvent *e ) 209KDateTable::keyPressEvent( QKeyEvent *e )
210{ 210{
211 /* 211 /*
212 // not working properly 212 // not working properly
213 if ( e->key() == Qt::Key_Prior ) { 213 if ( e->key() == Qt::Key_Prior ) {
214 if ( date.month() == 1 ) { 214 if ( date.month() == 1 ) {
215 KNotifyClient::beep(); 215 KNotifyClient::beep();
216 return; 216 return;
217 } 217 }
218 int day = date.day(); 218 int day = date.day();
219 if ( day > 27 ) 219 if ( day > 27 )
220 while ( !QDate::isValid( date.year(), date.month()-1, day ) ) 220 while ( !QDate::isValid( date.year(), date.month()-1, day ) )
221 day--; 221 day--;
222 setDate(QDate(date.year(), date.month()-1, day)); 222 setDate(QDate(date.year(), date.month()-1, day));
223 return; 223 return;
224 } 224 }
225 if ( e->key() == Qt::Key_Next ) { 225 if ( e->key() == Qt::Key_Next ) {
226 if ( date.month() == 12 ) { 226 if ( date.month() == 12 ) {
227 KNotifyClient::beep(); 227 KNotifyClient::beep();
228 return; 228 return;
229 } 229 }
230 int day = date.day(); 230 int day = date.day();
231 if ( day > 27 ) 231 if ( day > 27 )
232 while ( !QDate::isValid( date.year(), date.month()+1, day ) ) 232 while ( !QDate::isValid( date.year(), date.month()+1, day ) )
233 day--; 233 day--;
234 setDate(QDate(date.year(), date.month()+1, day)); 234 setDate(QDate(date.year(), date.month()+1, day));
235 return; 235 return;
236 } 236 }
237 */ 237 */
238 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0; 238 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0;
239 239
240 int temp=firstday+date.day()-dayoff; 240 int temp=firstday+date.day()-dayoff;
241 int pos = temp; 241 int pos = temp;
242 bool irgnore = true; 242 bool irgnore = true;
243 if ( e->state() != Qt::ControlButton ) { 243 if ( e->state() != Qt::ControlButton ) {
244 if ( e->key() == Qt::Key_Up ) { 244 if ( e->key() == Qt::Key_Up ) {
245 pos -= 7; 245 pos -= 7;
246 irgnore = false; 246 irgnore = false;
247 } 247 }
248 if ( e->key() == Qt::Key_Down ) { 248 if ( e->key() == Qt::Key_Down ) {
249 pos += 7; 249 pos += 7;
250 irgnore = false; 250 irgnore = false;
251 } 251 }
252 if ( e->key() == Qt::Key_Left ) { 252 if ( e->key() == Qt::Key_Left ) {
253 pos--; 253 pos--;
254 irgnore = false; 254 irgnore = false;
255 } 255 }
256 if ( e->key() == Qt::Key_Right ) { 256 if ( e->key() == Qt::Key_Right ) {
257 pos++; 257 pos++;
258 irgnore = false; 258 irgnore = false;
259 } 259 }
260 } 260 }
261 if ( irgnore ) 261 if ( irgnore )
262 e->ignore(); 262 e->ignore();
263 263
264 if(pos+dayoff<=firstday) 264 if(pos+dayoff<=firstday)
265 { // this day is in the previous month 265 { // this day is in the previous month
266 KNotifyClient::beep(); 266 KNotifyClient::beep();
267 return; 267 return;
268 } 268 }
269 if(firstday+numdays<pos+dayoff) 269 if(firstday+numdays<pos+dayoff)
270 { // this date is in the next month 270 { // this date is in the next month
271 KNotifyClient::beep(i18n( "Month not long enough" )); 271 KNotifyClient::beep(i18n( "Month not long enough" ));
272 return; 272 return;
273 } 273 }
274 274
275 if ( pos == temp ) 275 if ( pos == temp )
276 return; 276 return;
277 277
278 setDate(QDate(date.year(), date.month(), pos-firstday+dayoff)); 278 setDate(QDate(date.year(), date.month(), pos-firstday+dayoff));
279 updateCell(temp/7+1, temp%7); // Update the previously selected cell 279 updateCell(temp/7+1, temp%7); // Update the previously selected cell
280 updateCell(pos/7+1, pos%7); // Update the selected cell 280 updateCell(pos/7+1, pos%7); // Update the selected cell
281 assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid()); 281 assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid());
282 282
283 283
284} 284}
285 285
286void 286void
287KDateTable::viewportResizeEvent(QResizeEvent * e) 287KDateTable::viewportResizeEvent(QResizeEvent * e)
288{ 288{
289 QGridView::viewportResizeEvent(e); 289 QGridView::viewportResizeEvent(e);
290 290
291 setCellWidth(viewport()->width()/7); 291 setCellWidth(viewport()->width()/7);
292 setCellHeight(viewport()->height()/7); 292 setCellHeight(viewport()->height()/7);
293} 293}
294 294
295void 295void
296KDateTable::setFontSize(int size) 296KDateTable::setFontSize(int size)
297{ 297{
298 int count; 298 int count;
299 QRect rect; 299 QRect rect;
300 // ----- store rectangles: 300 // ----- store rectangles:
301 fontsize=size; 301 fontsize=size;
302 QFont _font = font(); 302 QFont _font = font();
303 _font.setPointSize(fontsize); 303 _font.setPointSize(fontsize);
304 setFont( _font ); 304 setFont( _font );
305 _font.setBold( true ); 305 _font.setBold( true );
306 QFontMetrics metrics(_font); 306 QFontMetrics metrics(_font);
307 307
308 // ----- find largest day name: 308 // ----- find largest day name:
309 maxCell.setWidth(0); 309 maxCell.setWidth(0);
310 maxCell.setHeight(0); 310 maxCell.setHeight(0);
311 for(count=0; count<7; ++count) 311 for(count=0; count<7; ++count)
312 { 312 {
313 rect=metrics.boundingRect(KGlobal::locale()->weekDayName(count+1, true)); 313 rect=metrics.boundingRect(KGlobal::locale()->weekDayName(count+1, true));
314 maxCell.setWidth(QMAX(maxCell.width(), rect.width())); 314 maxCell.setWidth(QMAX(maxCell.width(), rect.width()));
315 maxCell.setHeight(QMAX(maxCell.height(), rect.height())); 315 maxCell.setHeight(QMAX(maxCell.height(), rect.height()));
316 } 316 }
317 // ----- compare with a real wide number and add some space: 317 // ----- compare with a real wide number and add some space:
318 rect=metrics.boundingRect(QString::fromLatin1("88")); 318 rect=metrics.boundingRect(QString::fromLatin1("88"));
319 maxCell.setWidth(QMAX(maxCell.width()+2, rect.width())); 319 maxCell.setWidth(QMAX(maxCell.width()+2, rect.width()));
320#ifdef DESKTOP_VERSION 320#ifdef DESKTOP_VERSION
321 maxCell.setHeight(QMAX(maxCell.height()+8, rect.height())); 321 maxCell.setHeight(QMAX(maxCell.height()+8, rect.height()));
322#else 322#else
323 maxCell.setHeight(QMAX(maxCell.height()+4, rect.height())); 323 maxCell.setHeight(QMAX(maxCell.height()+4, rect.height()));
324#endif 324#endif
325 if ( maxCell.width() * 1000 / maxCell.height() > 1900 ) { 325 if ( maxCell.width() * 1000 / maxCell.height() > 1900 ) {
326 maxCell.setHeight(maxCell.width() * 1000 / 1900 ); 326 maxCell.setHeight(maxCell.width() * 1000 / 1900 );
327 qDebug("setmax "); 327 //qDebug("setmax ");
328 } 328 }
329} 329}
330 330
331void 331void
332KDateTable::contentsMousePressEvent(QMouseEvent *e) 332KDateTable::contentsMousePressEvent(QMouseEvent *e)
333{ 333{
334 if(e->type()!=QEvent::MouseButtonPress) 334 if(e->type()!=QEvent::MouseButtonPress)
335 { // the KDatePicker only reacts on mouse press events: 335 { // the KDatePicker only reacts on mouse press events:
336 return; 336 return;
337 } 337 }
338 if(!isEnabled()) 338 if(!isEnabled())
339 { 339 {
340 KNotifyClient::beep(); 340 KNotifyClient::beep();
341 return; 341 return;
342 } 342 }
343 343
344 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0; 344 int dayoff = KGlobal::locale()->weekStartsMonday() ? 1 : 0;
345 // ----- 345 // -----
346 int row, col, pos, temp; 346 int row, col, pos, temp;
347 QPoint mouseCoord; 347 QPoint mouseCoord;
348 // ----- 348 // -----
349 mouseCoord = e->pos(); 349 mouseCoord = e->pos();
350 row=rowAt(mouseCoord.y()); 350 row=rowAt(mouseCoord.y());
351 col=columnAt(mouseCoord.x()); 351 col=columnAt(mouseCoord.x());
352 if(row<0 || col<0) 352 if(row<0 || col<0)
353 { // the user clicked on the frame of the table 353 { // the user clicked on the frame of the table
354 return; 354 return;
355 } 355 }
356 pos=7*(row-1)+col+1; 356 pos=7*(row-1)+col+1;
357#if 0 357#if 0
358 if(pos+dayoff<=firstday) 358 if(pos+dayoff<=firstday)
359 { // this day is in the previous month 359 { // this day is in the previous month
360 KNotifyClient::beep(); 360 KNotifyClient::beep();
361 return; 361 return;
362 } 362 }
363 if(firstday+numdays<pos+dayoff) 363 if(firstday+numdays<pos+dayoff)
364 { // this date is in the next month 364 { // this date is in the next month
365 KNotifyClient::beep(); 365 KNotifyClient::beep();
366 return; 366 return;
367 } 367 }
368#endif 368#endif
369 temp=firstday+date.day()-dayoff-1; 369 temp=firstday+date.day()-dayoff-1;
370 QDate da = QDate(date.year(), date.month(),1); 370 QDate da = QDate(date.year(), date.month(),1);
371 setDate(da.addDays( pos-firstday+dayoff-1)); 371 setDate(da.addDays( pos-firstday+dayoff-1));
372 updateCell(temp/7+1, temp%7); // Update the previously selected cell 372 updateCell(temp/7+1, temp%7); // Update the previously selected cell
373 updateCell(row, col); // Update the selected cell 373 updateCell(row, col); // Update the selected cell
374 // assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid()); 374 // assert(QDate(date.year(), date.month(), pos-firstday+dayoff).isValid());
375 emit(tableClicked()); 375 emit(tableClicked());
376} 376}
377 377
378bool 378bool
379KDateTable::setDate(const QDate& date_) 379KDateTable::setDate(const QDate& date_)
380{ 380{
381 bool changed=false; 381 bool changed=false;
382 QDate temp; 382 QDate temp;
383 mMarkCurrent = false; 383 mMarkCurrent = false;
384 // ----- 384 // -----
385 if(!date_.isValid()) 385 if(!date_.isValid())
386 { 386 {
387 kdDebug() << "KDateTable::setDate: refusing to set invalid date." << endl; 387 kdDebug() << "KDateTable::setDate: refusing to set invalid date." << endl;
388 return false; 388 return false;
389 } 389 }
390 if(date!=date_) 390 if(date!=date_)
391 { 391 {
392 date=date_; 392 date=date_;
393 changed=true; 393 changed=true;
394 } 394 }
395 mMarkCurrent = ( date.month() == QDate::currentDate().month() && date.year() == QDate::currentDate().year() ); 395 mMarkCurrent = ( date.month() == QDate::currentDate().month() && date.year() == QDate::currentDate().year() );
396 temp.setYMD(date.year(), date.month(), 1); 396 temp.setYMD(date.year(), date.month(), 1);
397 firstday=temp.dayOfWeek(); 397 firstday=temp.dayOfWeek();
398 if(firstday==1) firstday=8; 398 if(firstday==1) firstday=8;
399 numdays=date.daysInMonth(); 399 numdays=date.daysInMonth();
400 if(date.month()==1) 400 if(date.month()==1)
401 { // set to december of previous year 401 { // set to december of previous year
402 temp.setYMD(date.year()-1, 12, 1); 402 temp.setYMD(date.year()-1, 12, 1);
403 } else { // set to previous month 403 } else { // set to previous month
404 temp.setYMD(date.year(), date.month()-1, 1); 404 temp.setYMD(date.year(), date.month()-1, 1);
405 } 405 }
406 numDaysPrevMonth=temp.daysInMonth(); 406 numDaysPrevMonth=temp.daysInMonth();
407 if(changed) 407 if(changed)
408 { 408 {
409 repaintContents(false); 409 repaintContents(false);
410 } 410 }
411 emit(dateChanged(date)); 411 emit(dateChanged(date));
412 return true; 412 return true;
413} 413}
414 414
415const QDate& 415const QDate&
416KDateTable::getDate() const 416KDateTable::getDate() const
417{ 417{
418 return date; 418 return date;
419} 419}
420 420
421void KDateTable::focusInEvent( QFocusEvent *e ) 421void KDateTable::focusInEvent( QFocusEvent *e )
422{ 422{
423 repaintContents(false); 423 repaintContents(false);
424 QGridView::focusInEvent( e ); 424 QGridView::focusInEvent( e );
425} 425}
426 426
427void KDateTable::focusOutEvent( QFocusEvent *e ) 427void KDateTable::focusOutEvent( QFocusEvent *e )
428{ 428{
429 repaintContents(false); 429 repaintContents(false);
430 QGridView::focusOutEvent( e ); 430 QGridView::focusOutEvent( e );
431} 431}
432 432
433QSize 433QSize
434KDateTable::sizeHint() const 434KDateTable::sizeHint() const
435{ 435{
436 if(maxCell.height()>0 && maxCell.width()>0) 436 if(maxCell.height()>0 && maxCell.width()>0)
437 { 437 {
438 return QSize((maxCell.width()+2)*numCols()+2*frameWidth(), 438 return QSize((maxCell.width()+2)*numCols()+2*frameWidth(),
439 (maxCell.height()+4)*numRows()+2*frameWidth()); 439 (maxCell.height()+4)*numRows()+2*frameWidth());
440 } else { 440 } else {
441 return QSize(-1, -1); 441 return QSize(-1, -1);
442 } 442 }
443} 443}
444 444
445KDateInternalMonthPicker::KDateInternalMonthPicker 445KDateInternalMonthPicker::KDateInternalMonthPicker
446(QWidget* parent, const char* name) 446(QWidget* parent, const char* name)
447 : QGridView(parent, name), 447 : QGridView(parent, name),
448 result(0) // invalid 448 result(0) // invalid
449{ 449{
450 QRect rect; 450 QRect rect;
451 QFont font; 451 QFont font;
452 // ----- 452 // -----
453 activeCol = -1; 453 activeCol = -1;
454 activeRow = -1; 454 activeRow = -1;
455 font=KGlobalSettings::generalFont(); 455 font=KGlobalSettings::generalFont();
diff --git a/microkde/kdecore/kstandarddirs.cpp b/microkde/kdecore/kstandarddirs.cpp
index 810c889..4ab1a68 100644
--- a/microkde/kdecore/kstandarddirs.cpp
+++ b/microkde/kdecore/kstandarddirs.cpp
@@ -1078,359 +1078,361 @@ QString KStandardDirs::relativeLocation(const char *type, const QString &absPath
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) 1206QString 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 QString confFile; 1286 QString confFile;
1287#ifdef DESKTOP_VERSION 1287#ifdef DESKTOP_VERSION
1288 confFile = qApp->applicationDirPath ()+ "/.microkdehome" ; 1288 confFile = qApp->applicationDirPath ()+ "/.microkdehome" ;
1289 QFileInfo fi ( confFile ); 1289 QFileInfo fi ( confFile );
1290 if ( !fi.exists() ) 1290 if ( !fi.exists() )
1291 confFile = QDir::homeDirPath() + "/.microkdehome"; 1291 confFile = QDir::homeDirPath() + "/.microkdehome";
1292 else 1292 else
1293 qDebug("Loading path info from " + confFile ); 1293 qDebug("Loading path info from " + confFile );
1294 1294
1295#else 1295#else
1296 confFile = QDir::homeDirPath() + "/.microkdehome"; 1296 confFile = QDir::homeDirPath() + "/.microkdehome";
1297#endif 1297#endif
1298 KConfig cfg ( confFile ); 1298 KConfig cfg ( confFile );
1299 cfg.setGroup("Global"); 1299 cfg.setGroup("Global");
1300 localKdeDir = cfg.readEntry( "MICROKDEHOME", QDir::homeDirPath() + "/kdepim/" ); 1300 localKdeDir = cfg.readEntry( "MICROKDEHOME", QDir::homeDirPath() + "/kdepim/" );
1301#ifdef DESKTOP_VERSION 1301#ifdef DESKTOP_VERSION
1302 if ( localKdeDir.startsWith( "LOCAL:" ) ) { 1302 if ( localKdeDir.startsWith( "LOCAL:" ) ) {
1303#ifdef _WIN32_ 1303#ifdef _WIN32_
1304 localKdeDir = qApp->applicationDirPath () + "\\"+ localKdeDir.mid( 6 ); 1304 localKdeDir = qApp->applicationDirPath () + "\\"+ localKdeDir.mid( 6 );
1305#else 1305#else
1306 localKdeDir = qApp->applicationDirPath () + "/"+ localKdeDir.mid( 6 ); 1306 localKdeDir = qApp->applicationDirPath () + "/"+ localKdeDir.mid( 6 );
1307#endif 1307#endif
1308 qDebug("Using local conf dir %s ",localKdeDir.latin1() ); 1308 qDebug("Using local conf dir %s ",localKdeDir.latin1() );
1309 // <stdlib.h>
1310 setenv( "LOCALMICROKDEHOME", localKdeDir.latin1(), 1 );
1309 } 1311 }
1310#endif 1312#endif
1311 } 1313 }
1312 } 1314 }
1313 else 1315 else
1314 { 1316 {
1315 // We treat root different to prevent root messing up the 1317 // We treat root different to prevent root messing up the
1316 // file permissions in the users home directory. 1318 // file permissions in the users home directory.
1317 localKdeDir = readEnvPath("MICROKDEROOTHOME"); 1319 localKdeDir = readEnvPath("MICROKDEROOTHOME");
1318 if (!localKdeDir.isEmpty()) 1320 if (!localKdeDir.isEmpty())
1319 { 1321 {
1320 if (localKdeDir.at(localKdeDir.length()-1) != '/') 1322 if (localKdeDir.at(localKdeDir.length()-1) != '/')
1321 localKdeDir += '/'; 1323 localKdeDir += '/';
1322 } 1324 }
1323 else 1325 else
1324 { 1326 {
1325//US struct passwd *pw = getpwuid(0); 1327//US struct passwd *pw = getpwuid(0);
1326//US localKdeDir = QFile::decodeName((pw && pw->pw_dir) ? pw->pw_dir : "/root") + "/.microkde/"; 1328//US localKdeDir = QFile::decodeName((pw && pw->pw_dir) ? pw->pw_dir : "/root") + "/.microkde/";
1327 qDebug("KStandardDirs::addKDEDefaults: 1 has to be fixed"); 1329 qDebug("KStandardDirs::addKDEDefaults: 1 has to be fixed");
1328 } 1330 }
1329 1331
1330 } 1332 }
1331 1333
1332//US localKdeDir = appDir(); 1334//US localKdeDir = appDir();
1333 1335
1334//US 1336//US
1335// qDebug("KStandardDirs::addKDEDefaults: localKdeDir=%s", localKdeDir.latin1()); 1337// qDebug("KStandardDirs::addKDEDefaults: localKdeDir=%s", localKdeDir.latin1());
1336 if (localKdeDir != "-/") 1338 if (localKdeDir != "-/")
1337 { 1339 {
1338 localKdeDir = KShell::tildeExpand(localKdeDir); 1340 localKdeDir = KShell::tildeExpand(localKdeDir);
1339 addPrefix(localKdeDir); 1341 addPrefix(localKdeDir);
1340 } 1342 }
1341 1343
1342 for (QStringList::ConstIterator it = kdedirList.begin(); 1344 for (QStringList::ConstIterator it = kdedirList.begin();
1343 it != kdedirList.end(); it++) 1345 it != kdedirList.end(); it++)
1344 { 1346 {
1345 QString dir = KShell::tildeExpand(*it); 1347 QString dir = KShell::tildeExpand(*it);
1346 addPrefix(dir); 1348 addPrefix(dir);
1347 } 1349 }
1348 // end KDEDIRS 1350 // end KDEDIRS
1349 1351
1350 // begin XDG_CONFIG_XXX 1352 // begin XDG_CONFIG_XXX
1351 QStringList xdgdirList; 1353 QStringList xdgdirList;
1352 QString xdgdirs = readEnvPath("XDG_CONFIG_DIRS"); 1354 QString xdgdirs = readEnvPath("XDG_CONFIG_DIRS");
1353 if (!xdgdirs.isEmpty()) 1355 if (!xdgdirs.isEmpty())
1354 { 1356 {
1355 tokenize(xdgdirList, xdgdirs, ":"); 1357 tokenize(xdgdirList, xdgdirs, ":");
1356 } 1358 }
1357 else 1359 else
1358 { 1360 {
1359 xdgdirList.clear(); 1361 xdgdirList.clear();
1360 xdgdirList.append("/etc/xdg"); 1362 xdgdirList.append("/etc/xdg");
1361 } 1363 }
1362 1364
1363 QString localXdgDir = readEnvPath("XDG_CONFIG_HOME"); 1365 QString localXdgDir = readEnvPath("XDG_CONFIG_HOME");
1364 if (!localXdgDir.isEmpty()) 1366 if (!localXdgDir.isEmpty())
1365 { 1367 {
1366 if (localXdgDir.at(localXdgDir.length()-1) != '/') 1368 if (localXdgDir.at(localXdgDir.length()-1) != '/')
1367 localXdgDir += '/'; 1369 localXdgDir += '/';
1368 } 1370 }
1369 else 1371 else
1370 { 1372 {
1371//US if (getuid()) 1373//US if (getuid())
1372 if (true) 1374 if (true)
1373 { 1375 {
1374 localXdgDir = QDir::homeDirPath() + "/.config/"; 1376 localXdgDir = QDir::homeDirPath() + "/.config/";
1375 } 1377 }
1376 else 1378 else
1377 { 1379 {
1378//US struct passwd *pw = getpwuid(0); 1380//US struct passwd *pw = getpwuid(0);
1379//US localXdgDir = QFile::decodeName((pw && pw->pw_dir) ? pw->pw_dir : "/root") + "/.config/"; 1381//US localXdgDir = QFile::decodeName((pw && pw->pw_dir) ? pw->pw_dir : "/root") + "/.config/";
1380 qDebug("KStandardDirs::addKDEDefaults: 2 has to be fixed"); 1382 qDebug("KStandardDirs::addKDEDefaults: 2 has to be fixed");
1381 } 1383 }
1382 } 1384 }
1383 1385
1384 localXdgDir = KShell::tildeExpand(localXdgDir); 1386 localXdgDir = KShell::tildeExpand(localXdgDir);
1385 addXdgConfigPrefix(localXdgDir); 1387 addXdgConfigPrefix(localXdgDir);
1386 1388
1387 for (QStringList::ConstIterator it = xdgdirList.begin(); 1389 for (QStringList::ConstIterator it = xdgdirList.begin();
1388 it != xdgdirList.end(); it++) 1390 it != xdgdirList.end(); it++)
1389 { 1391 {
1390 QString dir = KShell::tildeExpand(*it); 1392 QString dir = KShell::tildeExpand(*it);
1391 addXdgConfigPrefix(dir); 1393 addXdgConfigPrefix(dir);
1392 } 1394 }
1393 // end XDG_CONFIG_XXX 1395 // end XDG_CONFIG_XXX
1394 1396
1395 // begin XDG_DATA_XXX 1397 // begin XDG_DATA_XXX
1396 xdgdirs = readEnvPath("XDG_DATA_DIRS"); 1398 xdgdirs = readEnvPath("XDG_DATA_DIRS");
1397 if (!xdgdirs.isEmpty()) 1399 if (!xdgdirs.isEmpty())
1398 { 1400 {
1399 tokenize(xdgdirList, xdgdirs, ":"); 1401 tokenize(xdgdirList, xdgdirs, ":");
1400 } 1402 }
1401 else 1403 else
1402 { 1404 {
1403 xdgdirList.clear(); 1405 xdgdirList.clear();
1404 for (QStringList::ConstIterator it = kdedirList.begin(); 1406 for (QStringList::ConstIterator it = kdedirList.begin();
1405 it != kdedirList.end(); it++) 1407 it != kdedirList.end(); it++)
1406 { 1408 {
1407 QString dir = *it; 1409 QString dir = *it;
1408 if (dir.at(dir.length()-1) != '/') 1410 if (dir.at(dir.length()-1) != '/')
1409 dir += '/'; 1411 dir += '/';
1410 xdgdirList.append(dir+"share/"); 1412 xdgdirList.append(dir+"share/");
1411 } 1413 }
1412 1414
1413 xdgdirList.append("/usr/local/share/"); 1415 xdgdirList.append("/usr/local/share/");
1414 xdgdirList.append("/usr/share/"); 1416 xdgdirList.append("/usr/share/");
1415 } 1417 }
1416 1418
1417 localXdgDir = readEnvPath("XDG_DATA_HOME"); 1419 localXdgDir = readEnvPath("XDG_DATA_HOME");
1418 if (!localXdgDir.isEmpty()) 1420 if (!localXdgDir.isEmpty())
1419 { 1421 {
1420 if (localXdgDir.at(localXdgDir.length()-1) != '/') 1422 if (localXdgDir.at(localXdgDir.length()-1) != '/')
1421 localXdgDir += '/'; 1423 localXdgDir += '/';
1422 } 1424 }
1423 else 1425 else
1424 { 1426 {
1425//US if (getuid()) 1427//US if (getuid())
1426 if (true) 1428 if (true)
1427 { 1429 {
1428 localXdgDir = QDir::homeDirPath() + "/.local/share/"; 1430 localXdgDir = QDir::homeDirPath() + "/.local/share/";
1429 } 1431 }
1430 else 1432 else
1431 { 1433 {
1432//US struct passwd *pw = getpwuid(0); 1434//US struct passwd *pw = getpwuid(0);
1433//US localXdgDir = QFile::decodeName((pw && pw->pw_dir) ? pw->pw_dir : "/root") + "/.local/share/"; 1435//US localXdgDir = QFile::decodeName((pw && pw->pw_dir) ? pw->pw_dir : "/root") + "/.local/share/";
1434 qDebug("KStandardDirs::addKDEDefaults: 3 has to be fixed"); 1436 qDebug("KStandardDirs::addKDEDefaults: 3 has to be fixed");
1435 } 1437 }
1436 } 1438 }
diff --git a/microkde/kdecore/kstandarddirs.h b/microkde/kdecore/kstandarddirs.h
index bee864e..901384e 100644
--- a/microkde/kdecore/kstandarddirs.h
+++ b/microkde/kdecore/kstandarddirs.h
@@ -522,160 +522,164 @@ public:
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/*!
651 * \relates KStandardDirs 652 * \relates KStandardDirs
652 * This function is just for convenience. It simply calls 653 * This function is just for convenience. It simply calls
653 *instance->dirs()->\link KStandardDirs::findResource() findResource\endlink(type, filename). 654 *instance->dirs()->\link KStandardDirs::findResource() findResource\endlink(type, filename).
654 **/ 655 **/
655QString locate( const char *type, const QString& filename /*US , const KInstance* instance = KGlobal::instance()*/ ); 656QString locate( const char *type, const QString& filename /*US , const KInstance* instance = KGlobal::instance()*/ );
656 657
657/*! 658/*!
658 * \relates KStandardDirs 659 * \relates KStandardDirs
659 * This function is much like locate. However it returns a 660 * This function is much like locate. However it returns a
660 * filename suitable for writing to. No check is made if the 661 * filename suitable for writing to. No check is made if the
661 * specified filename actually exists. Missing directories 662 * specified filename actually exists. Missing directories
662 * are created. If filename is only a directory, without a 663 * are created. If filename is only a directory, without a
663 * specific file, filename must have a trailing slash. 664 * specific file, filename must have a trailing slash.
664 * 665 *
665 **/ 666 **/
666QString locateLocal( const char *type, const QString& filename /*US , const KInstance* instance = KGlobal::instance() */ ); 667QString locateLocal( const char *type, const QString& filename /*US , const KInstance* instance = KGlobal::instance() */ );
667 668
668/*! 669/*!
669 * \relates KStandardDirs 670 * \relates KStandardDirs
670 * This function is much like locate. No check is made if the 671 * This function is much like locate. No check is made if the
671 * specified filename actually exists. Missing directories 672 * specified filename actually exists. Missing directories
672 * are created if @p createDir is true. If filename is only 673 * are created if @p createDir is true. If filename is only
673 * a directory, without a specific file, 674 * a directory, without a specific file,
674 * filename must have a trailing slash. 675 * filename must have a trailing slash.
675 * 676 *
676 **/ 677 **/
677QString locateLocal( const char *type, const QString& filename, bool createDir /*US , const KInstance* instance = KGlobal::instance() */); 678QString locateLocal( const char *type, const QString& filename, bool createDir /*US , const KInstance* instance = KGlobal::instance() */);
678 679
680QString readEnvPath(const char *env);
681
682
679/*! @} */ 683/*! @} */
680 684
681#endif // SSK_KSTDDIRS_H 685#endif // SSK_KSTDDIRS_H