summaryrefslogtreecommitdiffabout
Unidiff
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
@@ -42,498 +42,498 @@
42#include <qpainter.h> 42#include <qpainter.h>
43#endif 43#endif
44 44
45 45
46#include "externalapphandler.h" 46#include "externalapphandler.h"
47#include <kabc/addresseeview.h> 47#include <kabc/addresseeview.h>
48 48
49 49
50//US #ifndef DESKTOP_VERSION 50//US #ifndef DESKTOP_VERSION
51//US #include <qtopia/qcopenvelope_qws.h> 51//US #include <qtopia/qcopenvelope_qws.h>
52//US #include <qpe/qpeapplication.h> 52//US #include <qpe/qpeapplication.h>
53//US #endif 53//US #endif
54 54
55//US static int kphoneInstalled = 0; 55//US static int kphoneInstalled = 0;
56 56
57using namespace KABC; 57using namespace KABC;
58 58
59AddresseeView::AddresseeView( QWidget *parent, const char *name ) 59AddresseeView::AddresseeView( QWidget *parent, const char *name )
60 : QTextBrowser( parent, name ) 60 : QTextBrowser( parent, name )
61 61
62 62
63{ 63{
64//US setWrapPolicy( QTextEdit::AtWordBoundary ); 64//US setWrapPolicy( QTextEdit::AtWordBoundary );
65 setLinkUnderline( false ); 65 setLinkUnderline( false );
66 // setVScrollBarMode( QScrollView::AlwaysOff ); 66 // setVScrollBarMode( QScrollView::AlwaysOff );
67 //setHScrollBarMode( QScrollView::AlwaysOff ); 67 //setHScrollBarMode( QScrollView::AlwaysOff );
68 68
69//US QStyleSheet *sheet = styleSheet(); 69//US QStyleSheet *sheet = styleSheet();
70//US QStyleSheetItem *link = sheet->item( "a" ); 70//US QStyleSheetItem *link = sheet->item( "a" );
71//US link->setColor( KGlobalSettings::linkColor() ); 71//US link->setColor( KGlobalSettings::linkColor() );
72 72
73} 73}
74void AddresseeView::printMe() 74void AddresseeView::printMe()
75{ 75{
76#ifdef DESKTOP_VERSION 76#ifdef DESKTOP_VERSION
77 QPrinter printer; 77 QPrinter printer;
78 if (!printer.setup() ) 78 if (!printer.setup() )
79 return; 79 return;
80 QPainter p; 80 QPainter p;
81 p.begin ( &printer ); 81 p.begin ( &printer );
82 QPaintDeviceMetrics m = QPaintDeviceMetrics ( &printer ); 82 QPaintDeviceMetrics m = QPaintDeviceMetrics ( &printer );
83 float dx, dy; 83 float dx, dy;
84 int wid = (m.width() * 9)/10; 84 int wid = (m.width() * 9)/10;
85 dx = (float) wid/(float)contentsWidth (); 85 dx = (float) wid/(float)contentsWidth ();
86 dy = (float)(m.height()) / (float)contentsHeight (); 86 dy = (float)(m.height()) / (float)contentsHeight ();
87 float scale; 87 float scale;
88 // scale to fit the width or height of the paper 88 // scale to fit the width or height of the paper
89 if ( dx < dy ) 89 if ( dx < dy )
90 scale = dx; 90 scale = dx;
91 else 91 else
92 scale = dy; 92 scale = dy;
93 p.translate( m.width()/10,0 ); 93 p.translate( m.width()/10,0 );
94 p.scale( scale, scale ); 94 p.scale( scale, scale );
95 drawContents ( &p, 0,0, contentsWidth (), contentsHeight () ); 95 drawContents ( &p, 0,0, contentsWidth (), contentsHeight () );
96 p.end(); 96 p.end();
97#endif 97#endif
98} 98}
99void AddresseeView::setSource(const QString& n) 99void AddresseeView::setSource(const QString& n)
100{ 100{
101 //qDebug("********AddresseeView::setSource %s", n.latin1()); 101 //qDebug("********AddresseeView::setSource %s", n.latin1());
102 102
103 if ( n.left( 6 ) == "mailto" ) 103 if ( n.left( 6 ) == "mailto" )
104 ExternalAppHandler::instance()->mailToOneContact( n.mid(7) ); 104 ExternalAppHandler::instance()->mailToOneContact( n.mid(7) );
105 else if ( n.left( 7 ) == "phoneto" ) 105 else if ( n.left( 7 ) == "phoneto" )
106 ExternalAppHandler::instance()->callByPhone( n.mid(8) ); 106 ExternalAppHandler::instance()->callByPhone( n.mid(8) );
107 else if ( n.left( 5 ) == "faxto" ) 107 else if ( n.left( 5 ) == "faxto" )
108 ExternalAppHandler::instance()->callByFax( n.mid(6) ); 108 ExternalAppHandler::instance()->callByFax( n.mid(6) );
109 else if ( n.left( 5 ) == "smsto" ) 109 else if ( n.left( 5 ) == "smsto" )
110 ExternalAppHandler::instance()->callBySMS( n.mid(6) ); 110 ExternalAppHandler::instance()->callBySMS( n.mid(6) );
111 else if ( n.left( 7 ) == "pagerto" ) 111 else if ( n.left( 7 ) == "pagerto" )
112 ExternalAppHandler::instance()->callByPager( n.mid(8) ); 112 ExternalAppHandler::instance()->callByPager( n.mid(8) );
113 else if ( n.left( 5 ) == "sipto" ) 113 else if ( n.left( 5 ) == "sipto" )
114 ExternalAppHandler::instance()->callBySIP( n.mid(6) ); 114 ExternalAppHandler::instance()->callBySIP( n.mid(6) );
115 115
116} 116}
117void AddresseeView::setAddressee( const KABC::Addressee& mAddressee ) 117void AddresseeView::setAddressee( const KABC::Addressee& mAddressee )
118{ 118{
119 bool kemailAvail = ExternalAppHandler::instance()->isEmailAppAvailable(); 119 bool kemailAvail = ExternalAppHandler::instance()->isEmailAppAvailable();
120 // mAddressee = addr; 120 // mAddressee = addr;
121 // clear view 121 // clear view
122 //setText( QString::null ); 122 //setText( QString::null );
123 123
124 if ( mAddressee.isEmpty() ) { 124 if ( mAddressee.isEmpty() ) {
125 setText( QString::null); 125 setText( QString::null);
126 return; 126 return;
127 } 127 }
128 QString name = ( mAddressee.assembledName().isEmpty() ? 128 QString name = ( mAddressee.assembledName().isEmpty() ?
129 mAddressee.formattedName() : mAddressee.assembledName() ); 129 mAddressee.formattedName() : mAddressee.assembledName() );
130 130
131 QString dynamicPart; 131 QString dynamicPart;
132 132
133 dynamicPart += getPhoneNumbers( mAddressee.phoneNumbers(),true ); 133 dynamicPart += getPhoneNumbers( mAddressee.phoneNumbers(),true );
134 QStringList emails = mAddressee.emails(); 134 QStringList emails = mAddressee.emails();
135 QStringList::ConstIterator emailIt; 135 QStringList::ConstIterator emailIt;
136 QString type = i18n( "Email" ); 136 QString type = i18n( "Email" );
137 emailIt = emails.begin(); 137 emailIt = emails.begin();
138 if ( emailIt != emails.end() ) { 138 if ( emailIt != emails.end() ) {
139 if ( kemailAvail ) { 139 if ( kemailAvail ) {
140 dynamicPart += QString( 140 dynamicPart += QString(
141 "<tr><td align=\"right\"><b>%1</b></td>" 141 "<tr><td align=\"right\"><b>%1</b></td>"
142 "<td align=\"left\"><a href=\"mailto:%2 <%3> \">%4</a></td></tr>" ) 142 "<td align=\"left\"><a href=\"mailto:%2 <%3> \">%4</a></td></tr>" )
143 .arg( type ) 143 .arg( type )
144 .arg( name ) 144 .arg( name )
145 .arg( *emailIt ) 145 .arg( *emailIt )
146 .arg( *emailIt ); 146 .arg( *emailIt );
147 ++emailIt; 147 ++emailIt;
148 } else { 148 } else {
149 dynamicPart += QString( 149 dynamicPart += QString(
150 "<tr><td align=\"right\"><b>%1</b></td>" 150 "<tr><td align=\"right\"><b>%1</b></td>"
151 "<td align=\"left\">%2</td></tr>" ) 151 "<td align=\"left\">%2</td></tr>" )
152 .arg( type ) 152 .arg( type )
153 .arg( *emailIt ); 153 .arg( *emailIt );
154 ++emailIt; 154 ++emailIt;
155 } 155 }
156 } 156 }
157 if ( mAddressee.birthday().date().isValid() ) { 157 if ( mAddressee.birthday().date().isValid() ) {
158 dynamicPart += QString( 158 dynamicPart += QString(
159 "<tr><td align=\"right\"><b>%1</b></td>" 159 "<tr><td align=\"right\"><b>%1</b></td>"
160 "<td align=\"left\">%2</td></tr>" ) 160 "<td align=\"left\">%2</td></tr>" )
161 .arg( i18n ("Birthday") ) 161 .arg( i18n ("Birthday") )
162 .arg( KGlobal::locale()->formatDate( mAddressee.birthday().date() ,true) ); 162 .arg( KGlobal::locale()->formatDate( mAddressee.birthday().date() ,true) );
163 } 163 }
164 dynamicPart += getPhoneNumbers( mAddressee.phoneNumbers(), false ); 164 dynamicPart += getPhoneNumbers( mAddressee.phoneNumbers(), false );
165 165
166 for ( ; emailIt != emails.end(); ++emailIt ) { 166 for ( ; emailIt != emails.end(); ++emailIt ) {
167 if ( kemailAvail ) { 167 if ( kemailAvail ) {
168 dynamicPart += QString( 168 dynamicPart += QString(
169 "<tr><td align=\"right\"><b>%1</b></td>" 169 "<tr><td align=\"right\"><b>%1</b></td>"
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(
427 "<tr><td align=\"right\"><b>%1</b></td>" 427 "<tr><td align=\"right\"><b>%1</b></td>"
428 "<td align=\"left\"><a href=\"%2%3 \">%4</a> %5</td></tr>" ) 428 "<td align=\"left\"><a href=\"%2%3 \">%4</a> %5</td></tr>" )
429 .arg( KABC::PhoneNumber::typeLabel( phonetype ) ) 429 .arg( KABC::PhoneNumber::typeLabel( phonetype ) )
430 .arg( extension ) 430 .arg( extension )
431 .arg( (*phoneIt).number() ) 431 .arg( (*phoneIt).number() )
432 .arg( (*phoneIt).number() ) 432 .arg( (*phoneIt).number() )
433 .arg( sms ); 433 .arg( sms );
434 434
435 } else { 435 } else {
436 dynamicPart += QString( 436 dynamicPart += QString(
437 "<tr><td align=\"right\"><b>%1</b></td>" 437 "<tr><td align=\"right\"><b>%1</b></td>"
438 "<td align=\"left\">%2 %3</td></tr>" ) 438 "<td align=\"left\">%2 %3</td></tr>" )
439 .arg( KABC::PhoneNumber::typeLabel( phonetype ) ) 439 .arg( KABC::PhoneNumber::typeLabel( phonetype ) )
440 .arg( (*phoneIt).number() ) 440 .arg( (*phoneIt).number() )
441 .arg( sms ); 441 .arg( sms );
442 } 442 }
443 } 443 }
444 return dynamicPart; 444 return dynamicPart;
445} 445}
446/* 446/*
447KABC::Addressee AddresseeView::addressee() const 447KABC::Addressee AddresseeView::addressee() const
448{ 448{
449 return mAddressee; 449 return mAddressee;
450} 450}
451*/ 451*/
452void AddresseeView::addTag(const QString & tag,const QString & text) 452void AddresseeView::addTag(const QString & tag,const QString & text)
453{ 453{
454 if ( text.isEmpty() ) 454 if ( text.isEmpty() )
455 return; 455 return;
456 int number=text.contains("\n"); 456 int number=text.contains("\n");
457 QString str = "<" + tag + ">"; 457 QString str = "<" + tag + ">";
458 QString tmpText=text; 458 QString tmpText=text;
459 QString tmpStr=str; 459 QString tmpStr=str;
460 if(number !=-1) 460 if(number !=-1)
461 { 461 {
462 if (number > 0) { 462 if (number > 0) {
463 int pos=0; 463 int pos=0;
464 QString tmp; 464 QString tmp;
465 for(int i=0;i<=number;i++) { 465 for(int i=0;i<=number;i++) {
466 pos=tmpText.find("\n"); 466 pos=tmpText.find("\n");
467 tmp=tmpText.left(pos); 467 tmp=tmpText.left(pos);
468 tmpText=tmpText.right(tmpText.length()-pos-1); 468 tmpText=tmpText.right(tmpText.length()-pos-1);
469 tmpStr+=tmp+"<br>"; 469 tmpStr+=tmp+"<br>";
470 } 470 }
471 } 471 }
472 else tmpStr += tmpText; 472 else tmpStr += tmpText;
473 tmpStr+="</" + tag + ">"; 473 tmpStr+="</" + tag + ">";
474 mText.append(tmpStr); 474 mText.append(tmpStr);
475 } 475 }
476 else 476 else
477 { 477 {
478 str += text + "</" + tag + ">"; 478 str += text + "</" + tag + ">";
479 mText.append(str); 479 mText.append(str);
480 } 480 }
481} 481}
482 482
483AddresseeChooser::AddresseeChooser( KABC::Addressee loc, KABC::Addressee rem, bool takeloc, QWidget *parent, const char *name ) : KDialogBase(parent,name, 483AddresseeChooser::AddresseeChooser( KABC::Addressee loc, KABC::Addressee rem, bool takeloc, QWidget *parent, const char *name ) : KDialogBase(parent,name,
484 true ,i18n("Conflict! Please choose Adressee!"),Ok|User1|Close,Close, false) 484 true ,i18n("Conflict! Please choose Adressee!"),Ok|User1|Close,Close, false)
485{ 485{
486 findButton( Close )->setText( i18n("Cancel Sync")); 486 findButton( Close )->setText( i18n("Cancel Sync"));
487 findButton( Ok )->setText( i18n("Remote")); 487 findButton( Ok )->setText( i18n("Remote"));
488 findButton( User1 )->setText( i18n("Local")); 488 findButton( User1 )->setText( i18n("Local"));
489 QWidget* topframe = new QWidget( this ); 489 QWidget* topframe = new QWidget( this );
490 setMainWidget( topframe ); 490 setMainWidget( topframe );
491 QBoxLayout* bl; 491 QBoxLayout* bl;
492 if ( QApplication::desktop()->width() < 640 ) { 492 if ( QApplication::desktop()->width() < 640 ) {
493 bl = new QVBoxLayout( topframe ); 493 bl = new QVBoxLayout( topframe );
494 } else { 494 } else {
495 bl = new QHBoxLayout( topframe ); 495 bl = new QHBoxLayout( topframe );
496 } 496 }
497 QVBox* subframe = new QVBox( topframe ); 497 QVBox* subframe = new QVBox( topframe );
498 bl->addWidget(subframe ); 498 bl->addWidget(subframe );
499 QLabel* lab = new QLabel( i18n("Local Addressee"), subframe ); 499 QLabel* lab = new QLabel( i18n("Local Addressee"), subframe );
500 if ( takeloc ) 500 if ( takeloc )
501 lab->setBackgroundColor(Qt::green.light() ); 501 lab->setBackgroundColor(Qt::green.light() );
502 AddresseeView * av = new AddresseeView( subframe ); 502 AddresseeView * av = new AddresseeView( subframe );
503 av->setAddressee( loc ); 503 av->setAddressee( loc );
504 subframe = new QVBox( topframe ); 504 subframe = new QVBox( topframe );
505 bl->addWidget(subframe ); 505 bl->addWidget(subframe );
506 lab = new QLabel( i18n("Remote Addressee"), subframe ); 506 lab = new QLabel( i18n("Remote Addressee"), subframe );
507 if ( !takeloc ) 507 if ( !takeloc )
508 lab->setBackgroundColor(Qt::green.light() ); 508 lab->setBackgroundColor(Qt::green.light() );
509 av = new AddresseeView( subframe ); 509 av = new AddresseeView( subframe );
510 av->setAddressee( rem ); 510 av->setAddressee( rem );
511 QObject::connect(findButton( Ok ),SIGNAL(clicked()),this, SLOT(slot_remote())); 511 QObject::connect(findButton( Ok ),SIGNAL(clicked()),this, SLOT(slot_remote()));
512 QObject::connect(this,SIGNAL(user1Clicked()),this, SLOT(slot_local())); 512 QObject::connect(this,SIGNAL(user1Clicked()),this, SLOT(slot_local()));
513#ifndef DESKTOP_VERSION 513#ifndef DESKTOP_VERSION
514 showMaximized(); 514 showMaximized();
515#else 515#else
516 resize ( 640, 400 ); 516 resize ( 640, 400 );
517#endif 517#endif
518} 518}
519 519
520int AddresseeChooser::executeD( bool local ) 520int AddresseeChooser::executeD( bool local )
521{ 521{
522 mSyncResult = 3; 522 mSyncResult = 3;
523 if ( local ) 523 if ( local )
524 findButton( User1 )->setFocus(); 524 findButton( User1 )->setFocus();
525 else 525 else
526 findButton( Ok )->setFocus(); 526 findButton( Ok )->setFocus();
527 exec(); 527 exec();
528 return mSyncResult; 528 return mSyncResult;
529} 529}
530void AddresseeChooser::slot_remote() 530void AddresseeChooser::slot_remote()
531{ 531{
532 mSyncResult = 2; 532 mSyncResult = 2;
533 accept(); 533 accept();
534} 534}
535void AddresseeChooser::slot_local() 535void AddresseeChooser::slot_local()
536{ 536{
537 mSyncResult = 1; 537 mSyncResult = 1;
538 accept(); 538 accept();
539} 539}
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
@@ -1,163 +1,163 @@
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 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
@@ -71,513 +71,513 @@ KDateValidator::date(const QString& text, QDate& d) const
71 } else 71 } else
72 return Valid; 72 return Valid;
73} 73}
74 74
75void 75void
76KDateValidator::fixup( QString& ) const 76KDateValidator::fixup( QString& ) const
77{ 77{
78 78
79} 79}
80 80
81KDateTable::KDateTable(QWidget *parent, QDate date_, const char* name, WFlags f) 81KDateTable::KDateTable(QWidget *parent, QDate date_, const char* name, WFlags f)
82 : QGridView(parent, name, f) 82 : QGridView(parent, name, f)
83{ 83{
84 setFont( KGlobalSettings::generalFont() ); 84 setFont( KGlobalSettings::generalFont() );
85 if(!date_.isValid()) 85 if(!date_.isValid())
86 { 86 {
87 date_=QDate::currentDate(); 87 date_=QDate::currentDate();
88 } 88 }
89 setFocusPolicy( QWidget::StrongFocus ); 89 setFocusPolicy( QWidget::StrongFocus );
90 setNumRows(7); // 6 weeks max + headline 90 setNumRows(7); // 6 weeks max + headline
91 setNumCols(7); // 7 days a week 91 setNumCols(7); // 7 days a week
92 setHScrollBarMode(AlwaysOff); 92 setHScrollBarMode(AlwaysOff);
93 setVScrollBarMode(AlwaysOff); 93 setVScrollBarMode(AlwaysOff);
94 viewport()->setBackgroundColor(QColor(220,245,255)); 94 viewport()->setBackgroundColor(QColor(220,245,255));
95#if 0 95#if 0
96 viewport()->setEraseColor(lightGray); 96 viewport()->setEraseColor(lightGray);
97#endif 97#endif
98 mMarkCurrent = false; 98 mMarkCurrent = false;
99 setDate(date_); // this initializes firstday, numdays, numDaysPrevMonth 99 setDate(date_); // this initializes firstday, numdays, numDaysPrevMonth
100} 100}
101 101
102void 102void
103KDateTable::paintCell(QPainter *painter, int row, int col) 103KDateTable::paintCell(QPainter *painter, int row, int col)
104{ 104{
105 QRect rect; 105 QRect rect;
106 QString text; 106 QString text;
107 QPen pen; 107 QPen pen;
108 int w=cellWidth(); 108 int w=cellWidth();
109 int h=cellHeight(); 109 int h=cellHeight();
110 int pos; 110 int pos;
111 QBrush brushBlue(blue); 111 QBrush brushBlue(blue);
112 QBrush brushLightblue(QColor(220,245,255)); 112 QBrush brushLightblue(QColor(220,245,255));
113 QFont _font=font(); 113 QFont _font=font();
114 // ----- 114 // -----
115 if(row==0) 115 if(row==0)
116 { // we are drawing the headline 116 { // we are drawing the headline
117 _font.setBold(true); 117 _font.setBold(true);
118 painter->setFont(_font); 118 painter->setFont(_font);
119 bool normalday = true; 119 bool normalday = true;
120 QString daystr; 120 QString daystr;
121 if (KGlobal::locale()->weekStartsMonday()) 121 if (KGlobal::locale()->weekStartsMonday())
122 { 122 {
123 daystr = KGlobal::locale()->weekDayName(col+1, true); 123 daystr = KGlobal::locale()->weekDayName(col+1, true);
124 if (col == 5 || col == 6) 124 if (col == 5 || col == 6)
125 normalday = false; 125 normalday = false;
126 } else { 126 } else {
127 daystr = KGlobal::locale()->weekDayName(col==0? 7 : col, true); 127 daystr = KGlobal::locale()->weekDayName(col==0? 7 : col, true);
128 if (col == 0 || col == 6) 128 if (col == 0 || col == 6)
129 normalday = false; 129 normalday = false;
130 } 130 }
131 if (!normalday) 131 if (!normalday)
132 { 132 {
133 painter->setPen(QColor(220,245,255)); 133 painter->setPen(QColor(220,245,255));
134 painter->setBrush(brushLightblue); 134 painter->setBrush(brushLightblue);
135 painter->drawRect(0, 0, w, h); 135 painter->drawRect(0, 0, w, h);
136 painter->setPen(blue); 136 painter->setPen(blue);
137 } else { 137 } else {
138 painter->setPen(blue); 138 painter->setPen(blue);
139 painter->setBrush(brushBlue); 139 painter->setBrush(brushBlue);
140 painter->drawRect(0, 0, w, h); 140 painter->drawRect(0, 0, w, h);
141 painter->setPen(white); 141 painter->setPen(white);
142 } 142 }
143 painter->drawText(0, 0, w, h-1, AlignCenter, 143 painter->drawText(0, 0, w, h-1, AlignCenter,
144 daystr, -1, &rect); 144 daystr, -1, &rect);
145 painter->setPen(black); 145 painter->setPen(black);
146 painter->moveTo(0, h-1); 146 painter->moveTo(0, h-1);
147 painter->lineTo(w-1, h-1); 147 painter->lineTo(w-1, h-1);
148 // ----- draw the weekday: 148 // ----- draw the weekday:
149 } else { 149 } else {
150 painter->setFont(_font); 150 painter->setFont(_font);
151 pos=7*(row-1)+col; 151 pos=7*(row-1)+col;
152 if (KGlobal::locale()->weekStartsMonday()) 152 if (KGlobal::locale()->weekStartsMonday())
153 pos++; 153 pos++;
154 if(pos<firstday || (firstday+numdays<=pos)) 154 if(pos<firstday || (firstday+numdays<=pos))
155 { // we are either 155 { // we are either
156 // ° painting a day of the previous month or 156 // ° painting a day of the previous month or
157 // ° painting a day of the following month 157 // ° painting a day of the following month
158 if(pos<firstday) 158 if(pos<firstday)
159 { // previous month 159 { // previous month
160 text.setNum(numDaysPrevMonth+pos-firstday+1); 160 text.setNum(numDaysPrevMonth+pos-firstday+1);
161 } else { // following month 161 } else { // following month
162 text.setNum(pos-firstday-numdays+1); 162 text.setNum(pos-firstday-numdays+1);
163 } 163 }
164 painter->setPen(gray); 164 painter->setPen(gray);
165 } else { // paint a day of the current month 165 } else { // paint a day of the current month
166 text.setNum(pos-firstday+1); 166 text.setNum(pos-firstday+1);
167 painter->setPen(black); 167 painter->setPen(black);
168 } 168 }
169 169
170 pen=painter->pen(); 170 pen=painter->pen();
171 if(firstday+date.day()-1==pos) 171 if(firstday+date.day()-1==pos)
172 { 172 {
173 if(mMarkCurrent && firstday+QDate::currentDate().day()-1==pos) 173 if(mMarkCurrent && firstday+QDate::currentDate().day()-1==pos)
174 painter->setPen(green); 174 painter->setPen(green);
175 else 175 else
176 painter->setPen(red); 176 painter->setPen(red);
177 if(hasFocus()) 177 if(hasFocus())
178 { 178 {
179 painter->setBrush(darkRed); 179 painter->setBrush(darkRed);
180 pen=white; 180 pen=white;
181 } else { 181 } else {
182 painter->setBrush(darkGray); 182 painter->setBrush(darkGray);
183 pen=white; 183 pen=white;
184 } 184 }
185 } else { 185 } else {
186 if(mMarkCurrent && firstday+QDate::currentDate().day()-1==pos) 186 if(mMarkCurrent && firstday+QDate::currentDate().day()-1==pos)
187 { 187 {
188 painter->setPen(green); 188 painter->setPen(green);
189 painter->setBrush(darkGreen); 189 painter->setBrush(darkGreen);
190 pen=white; 190 pen=white;
191 } else { 191 } else {
192 painter->setBrush(QColor(220,245,255)); 192 painter->setBrush(QColor(220,245,255));
193 painter->setPen(QColor(220,245,255)); 193 painter->setPen(QColor(220,245,255));
194 } 194 }
195 } 195 }
196 painter->drawRect(0, 0, w, h); 196 painter->drawRect(0, 0, w, h);
197 painter->setPen(pen); 197 painter->setPen(pen);
198 painter->drawText(0, 0, w, h, AlignCenter, text, -1, &rect); 198 painter->drawText(0, 0, w, h, AlignCenter, text, -1, &rect);
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();
456 int fontsize = 10; 456 int fontsize = 10;
457 int add = 2; 457 int add = 2;
458 if ( QApplication::desktop()->width() >= 480 && QApplication::desktop()->width() <= 640 ) 458 if ( QApplication::desktop()->width() >= 480 && QApplication::desktop()->width() <= 640 )
459 add += 8; 459 add += 8;
460 if ( QApplication::desktop()->width() > 640 ) 460 if ( QApplication::desktop()->width() > 640 )
461 add += 6; 461 add += 6;
462 font.setPointSize(fontsize+add); 462 font.setPointSize(fontsize+add);
463 setFont(font); 463 setFont(font);
464 setHScrollBarMode(AlwaysOff); 464 setHScrollBarMode(AlwaysOff);
465 setVScrollBarMode(AlwaysOff); 465 setVScrollBarMode(AlwaysOff);
466 setFrameStyle(QFrame::NoFrame); 466 setFrameStyle(QFrame::NoFrame);
467 setNumRows(4); 467 setNumRows(4);
468 setNumCols(3); 468 setNumCols(3);
469 // enable to find drawing failures: 469 // enable to find drawing failures:
470 // setTableFlags(Tbl_clipCellPainting); 470 // setTableFlags(Tbl_clipCellPainting);
471#if 0 471#if 0
472 viewport()->setEraseColor(lightGray); // for consistency with the datepicker 472 viewport()->setEraseColor(lightGray); // for consistency with the datepicker
473#endif 473#endif
474 // ----- find the preferred size 474 // ----- find the preferred size
475 // (this is slow, possibly, but unfortunatly it is needed here): 475 // (this is slow, possibly, but unfortunatly it is needed here):
476 QFontMetrics metrics(font); 476 QFontMetrics metrics(font);
477 for(int i=1; i <= 12; ++i) 477 for(int i=1; i <= 12; ++i)
478 { 478 {
479 rect=metrics.boundingRect(KGlobal::locale()->monthName(i, false)); 479 rect=metrics.boundingRect(KGlobal::locale()->monthName(i, false));
480 if(max.width()<rect.width()) max.setWidth(rect.width()); 480 if(max.width()<rect.width()) max.setWidth(rect.width());
481 if(max.height()<rect.height()) max.setHeight(rect.height()); 481 if(max.height()<rect.height()) max.setHeight(rect.height());
482 } 482 }
483 483
484} 484}
485 485
486QSize 486QSize
487KDateInternalMonthPicker::sizeHint() const 487KDateInternalMonthPicker::sizeHint() const
488{ 488{
489 return QSize((max.width()+6)*numCols()+2*frameWidth(), 489 return QSize((max.width()+6)*numCols()+2*frameWidth(),
490 (max.height()+6)*numRows()+2*frameWidth()); 490 (max.height()+6)*numRows()+2*frameWidth());
491} 491}
492 492
493int 493int
494KDateInternalMonthPicker::getResult() const 494KDateInternalMonthPicker::getResult() const
495{ 495{
496 return result; 496 return result;
497} 497}
498 498
499void 499void
500KDateInternalMonthPicker::setupPainter(QPainter *p) 500KDateInternalMonthPicker::setupPainter(QPainter *p)
501{ 501{
502 p->setPen(black); 502 p->setPen(black);
503} 503}
504 504
505void 505void
506KDateInternalMonthPicker::viewportResizeEvent(QResizeEvent*) 506KDateInternalMonthPicker::viewportResizeEvent(QResizeEvent*)
507{ 507{
508 setCellWidth(width()/3); 508 setCellWidth(width()/3);
509 setCellHeight(height()/4); 509 setCellHeight(height()/4);
510} 510}
511 511
512void 512void
513KDateInternalMonthPicker::paintCell(QPainter* painter, int row, int col) 513KDateInternalMonthPicker::paintCell(QPainter* painter, int row, int col)
514{ 514{
515 int index; 515 int index;
516 QString text; 516 QString text;
517 // ----- find the number of the cell: 517 // ----- find the number of the cell:
518 index=3*row+col+1; 518 index=3*row+col+1;
519 text=KGlobal::locale()->monthName(index, false); 519 text=KGlobal::locale()->monthName(index, false);
520 painter->drawText(0, 0, cellWidth(), cellHeight(), AlignCenter, text); 520 painter->drawText(0, 0, cellWidth(), cellHeight(), AlignCenter, text);
521 if ( activeCol == col && activeRow == row ) 521 if ( activeCol == col && activeRow == row )
522 painter->drawRect( 0, 0, cellWidth(), cellHeight() ); 522 painter->drawRect( 0, 0, cellWidth(), cellHeight() );
523} 523}
524 524
525void 525void
526KDateInternalMonthPicker::contentsMousePressEvent(QMouseEvent *e) 526KDateInternalMonthPicker::contentsMousePressEvent(QMouseEvent *e)
527{ 527{
528 if(!isEnabled() || e->button() != LeftButton) 528 if(!isEnabled() || e->button() != LeftButton)
529 { 529 {
530 KNotifyClient::beep(); 530 KNotifyClient::beep();
531 return; 531 return;
532 } 532 }
533 // ----- 533 // -----
534 int row, col; 534 int row, col;
535 QPoint mouseCoord; 535 QPoint mouseCoord;
536 // ----- 536 // -----
537 mouseCoord = e->pos(); 537 mouseCoord = e->pos();
538 row=rowAt(mouseCoord.y()); 538 row=rowAt(mouseCoord.y());
539 col=columnAt(mouseCoord.x()); 539 col=columnAt(mouseCoord.x());
540 540
541 if(row<0 || col<0) 541 if(row<0 || col<0)
542 { // the user clicked on the frame of the table 542 { // the user clicked on the frame of the table
543 activeCol = -1; 543 activeCol = -1;
544 activeRow = -1; 544 activeRow = -1;
545 } else { 545 } else {
546 activeCol = col; 546 activeCol = col;
547 activeRow = row; 547 activeRow = row;
548 updateCell( row, col /*, false */ ); 548 updateCell( row, col /*, false */ );
549 } 549 }
550} 550}
551 551
552void 552void
553KDateInternalMonthPicker::contentsMouseMoveEvent(QMouseEvent *e) 553KDateInternalMonthPicker::contentsMouseMoveEvent(QMouseEvent *e)
554{ 554{
555 if (e->state() & LeftButton) 555 if (e->state() & LeftButton)
556 { 556 {
557 int row, col; 557 int row, col;
558 QPoint mouseCoord; 558 QPoint mouseCoord;
559 // ----- 559 // -----
560 mouseCoord = e->pos(); 560 mouseCoord = e->pos();
561 row=rowAt(mouseCoord.y()); 561 row=rowAt(mouseCoord.y());
562 col=columnAt(mouseCoord.x()); 562 col=columnAt(mouseCoord.x());
563 int tmpRow = -1, tmpCol = -1; 563 int tmpRow = -1, tmpCol = -1;
564 if(row<0 || col<0) 564 if(row<0 || col<0)
565 { // the user clicked on the frame of the table 565 { // the user clicked on the frame of the table
566 if ( activeCol > -1 ) 566 if ( activeCol > -1 )
567 { 567 {
568 tmpRow = activeRow; 568 tmpRow = activeRow;
569 tmpCol = activeCol; 569 tmpCol = activeCol;
570 } 570 }
571 activeCol = -1; 571 activeCol = -1;
572 activeRow = -1; 572 activeRow = -1;
573 } else { 573 } else {
574 bool differentCell = (activeRow != row || activeCol != col); 574 bool differentCell = (activeRow != row || activeCol != col);
575 if ( activeCol > -1 && differentCell) 575 if ( activeCol > -1 && differentCell)
576 { 576 {
577 tmpRow = activeRow; 577 tmpRow = activeRow;
578 tmpCol = activeCol; 578 tmpCol = activeCol;
579 } 579 }
580 if ( differentCell) 580 if ( differentCell)
581 { 581 {
582 activeRow = row; 582 activeRow = row;
583 activeCol = col; 583 activeCol = col;
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
@@ -950,615 +950,617 @@ static int tokenize( QStringList& tokens, const QString& str,
950 950
951QString KStandardDirs::kde_default(const char *type) { 951QString KStandardDirs::kde_default(const char *type) {
952 if (!strcmp(type, "data")) 952 if (!strcmp(type, "data"))
953 return "apps/"; 953 return "apps/";
954 if (!strcmp(type, "html")) 954 if (!strcmp(type, "html"))
955 return "share/doc/HTML/"; 955 return "share/doc/HTML/";
956 if (!strcmp(type, "icon")) 956 if (!strcmp(type, "icon"))
957 return "share/icons/"; 957 return "share/icons/";
958 if (!strcmp(type, "config")) 958 if (!strcmp(type, "config"))
959 return "config/"; 959 return "config/";
960 if (!strcmp(type, "pixmap")) 960 if (!strcmp(type, "pixmap"))
961 return "share/pixmaps/"; 961 return "share/pixmaps/";
962 if (!strcmp(type, "apps")) 962 if (!strcmp(type, "apps"))
963 return "share/applnk/"; 963 return "share/applnk/";
964 if (!strcmp(type, "sound")) 964 if (!strcmp(type, "sound"))
965 return "share/sounds/"; 965 return "share/sounds/";
966 if (!strcmp(type, "locale")) 966 if (!strcmp(type, "locale"))
967 return "share/locale/"; 967 return "share/locale/";
968 if (!strcmp(type, "services")) 968 if (!strcmp(type, "services"))
969 return "share/services/"; 969 return "share/services/";
970 if (!strcmp(type, "servicetypes")) 970 if (!strcmp(type, "servicetypes"))
971 return "share/servicetypes/"; 971 return "share/servicetypes/";
972 if (!strcmp(type, "mime")) 972 if (!strcmp(type, "mime"))
973 return "share/mimelnk/"; 973 return "share/mimelnk/";
974 if (!strcmp(type, "cgi")) 974 if (!strcmp(type, "cgi"))
975 return "cgi-bin/"; 975 return "cgi-bin/";
976 if (!strcmp(type, "wallpaper")) 976 if (!strcmp(type, "wallpaper"))
977 return "share/wallpapers/"; 977 return "share/wallpapers/";
978 if (!strcmp(type, "templates")) 978 if (!strcmp(type, "templates"))
979 return "share/templates/"; 979 return "share/templates/";
980 if (!strcmp(type, "exe")) 980 if (!strcmp(type, "exe"))
981 return "bin/"; 981 return "bin/";
982 if (!strcmp(type, "lib")) 982 if (!strcmp(type, "lib"))
983 return "lib/"; 983 return "lib/";
984 if (!strcmp(type, "module")) 984 if (!strcmp(type, "module"))
985 return "lib/kde3/"; 985 return "lib/kde3/";
986 if (!strcmp(type, "qtplugins")) 986 if (!strcmp(type, "qtplugins"))
987 return "lib/kde3/plugins"; 987 return "lib/kde3/plugins";
988 if (!strcmp(type, "xdgdata-apps")) 988 if (!strcmp(type, "xdgdata-apps"))
989 return "applications/"; 989 return "applications/";
990 if (!strcmp(type, "xdgdata-dirs")) 990 if (!strcmp(type, "xdgdata-dirs"))
991 return "desktop-directories/"; 991 return "desktop-directories/";
992 if (!strcmp(type, "xdgconf-menu")) 992 if (!strcmp(type, "xdgconf-menu"))
993 return "menus/"; 993 return "menus/";
994 if (!strcmp(type, "tmp")) 994 if (!strcmp(type, "tmp"))
995 return "tmp/"; 995 return "tmp/";
996 996
997 qFatal("unknown resource type %s", type); 997 qFatal("unknown resource type %s", type);
998 return QString::null; 998 return QString::null;
999} 999}
1000 1000
1001QString KStandardDirs::saveLocation(const char *type, 1001QString KStandardDirs::saveLocation(const char *type,
1002 const QString& suffix, 1002 const QString& suffix,
1003 bool create) const 1003 bool create) const
1004{ 1004{
1005 //qDebug("KStandardDirs::saveLocation called %s %s", type,suffix.latin1() ); 1005 //qDebug("KStandardDirs::saveLocation called %s %s", type,suffix.latin1() );
1006 //return ""; 1006 //return "";
1007 checkConfig(); 1007 checkConfig();
1008 1008
1009 QString *pPath = savelocations.find(type); 1009 QString *pPath = savelocations.find(type);
1010 if (!pPath) 1010 if (!pPath)
1011 { 1011 {
1012 QStringList *dirs = relatives.find(type); 1012 QStringList *dirs = relatives.find(type);
1013 if (!dirs && ( 1013 if (!dirs && (
1014 (strcmp(type, "socket") == 0) || 1014 (strcmp(type, "socket") == 0) ||
1015 (strcmp(type, "tmp") == 0) || 1015 (strcmp(type, "tmp") == 0) ||
1016 (strcmp(type, "cache") == 0) )) 1016 (strcmp(type, "cache") == 0) ))
1017 { 1017 {
1018 (void) resourceDirs(type); // Generate socket|tmp|cache resource. 1018 (void) resourceDirs(type); // Generate socket|tmp|cache resource.
1019 dirs = relatives.find(type); // Search again. 1019 dirs = relatives.find(type); // Search again.
1020 } 1020 }
1021 if (dirs) 1021 if (dirs)
1022 { 1022 {
1023 // Check for existance of typed directory + suffix 1023 // Check for existance of typed directory + suffix
1024 if (strncmp(type, "xdgdata-", 8) == 0) 1024 if (strncmp(type, "xdgdata-", 8) == 0)
1025 pPath = new QString(realPath(localxdgdatadir() + dirs->last())); 1025 pPath = new QString(realPath(localxdgdatadir() + dirs->last()));
1026 else if (strncmp(type, "xdgconf-", 8) == 0) 1026 else if (strncmp(type, "xdgconf-", 8) == 0)
1027 pPath = new QString(realPath(localxdgconfdir() + dirs->last())); 1027 pPath = new QString(realPath(localxdgconfdir() + dirs->last()));
1028 else 1028 else
1029 pPath = new QString(realPath(localkdedir() + dirs->last())); 1029 pPath = new QString(realPath(localkdedir() + dirs->last()));
1030 } 1030 }
1031 else { 1031 else {
1032 dirs = absolutes.find(type); 1032 dirs = absolutes.find(type);
1033 if (!dirs) 1033 if (!dirs)
1034 qFatal("KStandardDirs: The resource type %s is not registered", type); 1034 qFatal("KStandardDirs: The resource type %s is not registered", type);
1035 pPath = new QString(realPath(dirs->last())); 1035 pPath = new QString(realPath(dirs->last()));
1036 } 1036 }
1037 1037
1038 savelocations.insert(type, pPath); 1038 savelocations.insert(type, pPath);
1039 } 1039 }
1040 1040
1041 QString fullPath = *pPath + suffix; 1041 QString fullPath = *pPath + suffix;
1042//US struct stat st; 1042//US struct stat st;
1043//US if (stat(QFile::encodeName(fullPath), &st) != 0 || !(S_ISDIR(st.st_mode))) 1043//US if (stat(QFile::encodeName(fullPath), &st) != 0 || !(S_ISDIR(st.st_mode)))
1044 QFileInfo fullPathInfo(QFile::encodeName(fullPath)); 1044 QFileInfo fullPathInfo(QFile::encodeName(fullPath));
1045 if (fullPathInfo.isReadable() || !fullPathInfo.isDir()) 1045 if (fullPathInfo.isReadable() || !fullPathInfo.isDir())
1046 1046
1047 1047
1048 { 1048 {
1049 if(!create) { 1049 if(!create) {
1050#ifndef NDEBUG 1050#ifndef NDEBUG
1051 qDebug("save location %s doesn't exist", fullPath.latin1()); 1051 qDebug("save location %s doesn't exist", fullPath.latin1());
1052#endif 1052#endif
1053 return fullPath; 1053 return fullPath;
1054 } 1054 }
1055 if(!makeDir(fullPath, 0700)) { 1055 if(!makeDir(fullPath, 0700)) {
1056 qWarning("failed to create %s", fullPath.latin1()); 1056 qWarning("failed to create %s", fullPath.latin1());
1057 return fullPath; 1057 return fullPath;
1058 } 1058 }
1059 dircache.remove(type); 1059 dircache.remove(type);
1060 } 1060 }
1061 return fullPath; 1061 return fullPath;
1062} 1062}
1063 1063
1064QString KStandardDirs::relativeLocation(const char *type, const QString &absPath) 1064QString KStandardDirs::relativeLocation(const char *type, const QString &absPath)
1065{ 1065{
1066 QString fullPath = absPath; 1066 QString fullPath = absPath;
1067 int i = absPath.findRev('/'); 1067 int i = absPath.findRev('/');
1068 if (i != -1) 1068 if (i != -1)
1069 { 1069 {
1070 fullPath = realPath(absPath.left(i+1))+absPath.mid(i+1); // Normalize 1070 fullPath = realPath(absPath.left(i+1))+absPath.mid(i+1); // Normalize
1071 } 1071 }
1072 1072
1073 QStringList candidates = resourceDirs(type); 1073 QStringList candidates = resourceDirs(type);
1074 1074
1075 for (QStringList::ConstIterator it = candidates.begin(); 1075 for (QStringList::ConstIterator it = candidates.begin();
1076 it != candidates.end(); it++) 1076 it != candidates.end(); it++)
1077 if (fullPath.startsWith(*it)) 1077 if (fullPath.startsWith(*it))
1078 { 1078 {
1079 return fullPath.mid((*it).length()); 1079 return fullPath.mid((*it).length());
1080 } 1080 }
1081 1081
1082 return absPath; 1082 return absPath;
1083} 1083}
1084 1084
1085 1085
1086bool KStandardDirs::makeDir(const QString& dir2, int mode) 1086bool KStandardDirs::makeDir(const QString& dir2, int mode)
1087{ 1087{
1088 QString dir = QDir::convertSeparators( dir2 ); 1088 QString dir = QDir::convertSeparators( dir2 );
1089#if 0 1089#if 0
1090 //LR 1090 //LR
1091 1091
1092 // we want an absolute path 1092 // we want an absolute path
1093 if (dir.at(0) != '/') 1093 if (dir.at(0) != '/')
1094 return false; 1094 return false;
1095 1095
1096 QString target = dir; 1096 QString target = dir;
1097 uint len = target.length(); 1097 uint len = target.length();
1098 1098
1099 // append trailing slash if missing 1099 // append trailing slash if missing
1100 if (dir.at(len - 1) != '/') 1100 if (dir.at(len - 1) != '/')
1101 target += '/'; 1101 target += '/';
1102 1102
1103 QString base(""); 1103 QString base("");
1104 uint i = 1; 1104 uint i = 1;
1105 1105
1106 while( i < len ) 1106 while( i < len )
1107 { 1107 {
1108//US struct stat st; 1108//US struct stat st;
1109 int pos = target.find('/', i); 1109 int pos = target.find('/', i);
1110 base += target.mid(i - 1, pos - i + 1); 1110 base += target.mid(i - 1, pos - i + 1);
1111 QCString baseEncoded = QFile::encodeName(base); 1111 QCString baseEncoded = QFile::encodeName(base);
1112 // bail out if we encountered a problem 1112 // bail out if we encountered a problem
1113//US if (stat(baseEncoded, &st) != 0) 1113//US if (stat(baseEncoded, &st) != 0)
1114 QFileInfo baseEncodedInfo(baseEncoded); 1114 QFileInfo baseEncodedInfo(baseEncoded);
1115 if (!baseEncodedInfo.exists()) 1115 if (!baseEncodedInfo.exists())
1116 { 1116 {
1117 // Directory does not exist.... 1117 // Directory does not exist....
1118 // Or maybe a dangling symlink ? 1118 // Or maybe a dangling symlink ?
1119//US if (lstat(baseEncoded, &st) == 0) 1119//US if (lstat(baseEncoded, &st) == 0)
1120 if (baseEncodedInfo.isSymLink()) { 1120 if (baseEncodedInfo.isSymLink()) {
1121//US (void)unlink(baseEncoded); // try removing 1121//US (void)unlink(baseEncoded); // try removing
1122 QFile(baseEncoded).remove(); 1122 QFile(baseEncoded).remove();
1123 } 1123 }
1124 1124
1125 //US if ( mkdir(baseEncoded, (mode_t) mode) != 0) 1125 //US if ( mkdir(baseEncoded, (mode_t) mode) != 0)
1126 QDir dirObj; 1126 QDir dirObj;
1127 if ( dirObj.mkdir(baseEncoded) != true ) 1127 if ( dirObj.mkdir(baseEncoded) != true )
1128 { 1128 {
1129 //US perror("trying to create local folder"); 1129 //US perror("trying to create local folder");
1130 return false; // Couldn't create it :-( 1130 return false; // Couldn't create it :-(
1131 } 1131 }
1132 } 1132 }
1133 i = pos + 1; 1133 i = pos + 1;
1134 } 1134 }
1135 return true; 1135 return true;
1136#endif 1136#endif
1137 1137
1138 // ******************************************** 1138 // ********************************************
1139 // new code for WIN32 1139 // new code for WIN32
1140 QDir dirObj; 1140 QDir dirObj;
1141 1141
1142 1142
1143 // we want an absolute path 1143 // we want an absolute path
1144#ifndef _WIN32_ 1144#ifndef _WIN32_
1145 if (dir.at(0) != '/') 1145 if (dir.at(0) != '/')
1146 return false; 1146 return false;
1147#endif 1147#endif
1148 1148
1149 QString target = dir; 1149 QString target = dir;
1150 uint len = target.length(); 1150 uint len = target.length();
1151#ifndef _WIN32_ 1151#ifndef _WIN32_
1152 // append trailing slash if missing 1152 // append trailing slash if missing
1153 if (dir.at(len - 1) != '/') 1153 if (dir.at(len - 1) != '/')
1154 target += '/'; 1154 target += '/';
1155#endif 1155#endif
1156 1156
1157 QString base(""); 1157 QString base("");
1158 uint i = 1; 1158 uint i = 1;
1159 1159
1160 while( i < len ) 1160 while( i < len )
1161 { 1161 {
1162//US struct stat st; 1162//US struct stat st;
1163#ifndef _WIN32_ 1163#ifndef _WIN32_
1164 int pos = target.find('/', i); 1164 int pos = target.find('/', i);
1165#else 1165#else
1166 int pos = target.find('\\', i); 1166 int pos = target.find('\\', i);
1167#endif 1167#endif
1168 if ( pos < 0 ) 1168 if ( pos < 0 )
1169 return true; 1169 return true;
1170 base += target.mid(i - 1, pos - i + 1); 1170 base += target.mid(i - 1, pos - i + 1);
1171 //QMessageBox::information( 0,"cap111", base, 1 ); 1171 //QMessageBox::information( 0,"cap111", base, 1 );
1172/*US 1172/*US
1173 QCString baseEncoded = QFile::encodeName(base); 1173 QCString baseEncoded = QFile::encodeName(base);
1174 // bail out if we encountered a problem 1174 // bail out if we encountered a problem
1175 if (stat(baseEncoded, &st) != 0) 1175 if (stat(baseEncoded, &st) != 0)
1176 { 1176 {
1177 // Directory does not exist.... 1177 // Directory does not exist....
1178 // Or maybe a dangling symlink ? 1178 // Or maybe a dangling symlink ?
1179 if (lstat(baseEncoded, &st) == 0) 1179 if (lstat(baseEncoded, &st) == 0)
1180 (void)unlink(baseEncoded); // try removing 1180 (void)unlink(baseEncoded); // try removing
1181 1181
1182 1182
1183 if ( mkdir(baseEncoded, (mode_t) mode) != 0) { 1183 if ( mkdir(baseEncoded, (mode_t) mode) != 0) {
1184 perror("trying to create local folder"); 1184 perror("trying to create local folder");
1185 return false; // Couldn't create it :-( 1185 return false; // Couldn't create it :-(
1186 } 1186 }
1187 } 1187 }
1188*/ 1188*/
1189 1189
1190 if (dirObj.exists(base) == false) 1190 if (dirObj.exists(base) == false)
1191 { 1191 {
1192 //qDebug("KStandardDirs::makeDir try to create : %s" , base.latin1()); 1192 //qDebug("KStandardDirs::makeDir try to create : %s" , base.latin1());
1193 if (dirObj.mkdir(base) != true) 1193 if (dirObj.mkdir(base) != true)
1194 { 1194 {
1195 qDebug("KStandardDirs::makeDir could not create: %s" , base.latin1()); 1195 qDebug("KStandardDirs::makeDir could not create: %s" , base.latin1());
1196 return false; 1196 return false;
1197 } 1197 }
1198 } 1198 }
1199 1199
1200 i = pos + 1; 1200 i = pos + 1;
1201 } 1201 }
1202 return true; 1202 return true;
1203 1203
1204} 1204}
1205 1205
1206static QString readEnvPath(const char *env) 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 }
1437 1439
1438 localXdgDir = KShell::tildeExpand(localXdgDir); 1440 localXdgDir = KShell::tildeExpand(localXdgDir);
1439 addXdgDataPrefix(localXdgDir); 1441 addXdgDataPrefix(localXdgDir);
1440 1442
1441 for (QStringList::ConstIterator it = xdgdirList.begin(); 1443 for (QStringList::ConstIterator it = xdgdirList.begin();
1442 it != xdgdirList.end(); it++) 1444 it != xdgdirList.end(); it++)
1443 { 1445 {
1444 QString dir = KShell::tildeExpand(*it); 1446 QString dir = KShell::tildeExpand(*it);
1445 1447
1446 addXdgDataPrefix(dir); 1448 addXdgDataPrefix(dir);
1447 } 1449 }
1448 // end XDG_DATA_XXX 1450 // end XDG_DATA_XXX
1449 1451
1450 1452
1451 uint index = 0; 1453 uint index = 0;
1452 while (types[index] != 0) { 1454 while (types[index] != 0) {
1453 addResourceType(types[index], kde_default(types[index])); 1455 addResourceType(types[index], kde_default(types[index]));
1454 index++; 1456 index++;
1455 } 1457 }
1456 1458
1457 addResourceDir("home", QDir::homeDirPath()); 1459 addResourceDir("home", QDir::homeDirPath());
1458} 1460}
1459 1461
1460void KStandardDirs::checkConfig() const 1462void KStandardDirs::checkConfig() const
1461{ 1463{
1462/*US 1464/*US
1463 if (!addedCustoms && KGlobal::_instance && KGlobal::_instance->_config) 1465 if (!addedCustoms && KGlobal::_instance && KGlobal::_instance->_config)
1464 const_cast<KStandardDirs*>(this)->addCustomized(KGlobal::_instance->_config); 1466 const_cast<KStandardDirs*>(this)->addCustomized(KGlobal::_instance->_config);
1465*/ 1467*/
1466 if (!addedCustoms && KGlobal::config()) 1468 if (!addedCustoms && KGlobal::config())
1467 const_cast<KStandardDirs*>(this)->addCustomized(KGlobal::config()); 1469 const_cast<KStandardDirs*>(this)->addCustomized(KGlobal::config());
1468} 1470}
1469 1471
1470bool KStandardDirs::addCustomized(KConfig *config) 1472bool KStandardDirs::addCustomized(KConfig *config)
1471{ 1473{
1472 if (addedCustoms) // there are already customized entries 1474 if (addedCustoms) // there are already customized entries
1473 return false; // we just quite and hope they are the right ones 1475 return false; // we just quite and hope they are the right ones
1474 1476
1475 // save the numbers of config directories. If this changes, 1477 // save the numbers of config directories. If this changes,
1476 // we will return true to give KConfig a chance to reparse 1478 // we will return true to give KConfig a chance to reparse
1477 uint configdirs = resourceDirs("config").count(); 1479 uint configdirs = resourceDirs("config").count();
1478 1480
1479 // reading the prefixes in 1481 // reading the prefixes in
1480 QString oldGroup = config->group(); 1482 QString oldGroup = config->group();
1481 config->setGroup("Directories"); 1483 config->setGroup("Directories");
1482 1484
1483 QStringList list; 1485 QStringList list;
1484 QStringList::ConstIterator it; 1486 QStringList::ConstIterator it;
1485 list = config->readListEntry("prefixes"); 1487 list = config->readListEntry("prefixes");
1486 for (it = list.begin(); it != list.end(); it++) 1488 for (it = list.begin(); it != list.end(); it++)
1487 addPrefix(*it); 1489 addPrefix(*it);
1488 1490
1489 // iterating over all entries in the group Directories 1491 // iterating over all entries in the group Directories
1490 // to find entries that start with dir_$type 1492 // to find entries that start with dir_$type
1491/*US 1493/*US
1492 QMap<QString, QString> entries = config->entryMap("Directories"); 1494 QMap<QString, QString> entries = config->entryMap("Directories");
1493 1495
1494 QMap<QString, QString>::ConstIterator it2; 1496 QMap<QString, QString>::ConstIterator it2;
1495 for (it2 = entries.begin(); it2 != entries.end(); it2++) 1497 for (it2 = entries.begin(); it2 != entries.end(); it2++)
1496 { 1498 {
1497 QString key = it2.key(); 1499 QString key = it2.key();
1498 if (key.left(4) == "dir_") { 1500 if (key.left(4) == "dir_") {
1499 // generate directory list, there may be more than 1. 1501 // generate directory list, there may be more than 1.
1500 QStringList dirs = QStringList::split(',', *it2); 1502 QStringList dirs = QStringList::split(',', *it2);
1501 QStringList::Iterator sIt(dirs.begin()); 1503 QStringList::Iterator sIt(dirs.begin());
1502 QString resType = key.mid(4, key.length()); 1504 QString resType = key.mid(4, key.length());
1503 for (; sIt != dirs.end(); ++sIt) { 1505 for (; sIt != dirs.end(); ++sIt) {
1504 addResourceDir(resType.latin1(), *sIt); 1506 addResourceDir(resType.latin1(), *sIt);
1505 } 1507 }
1506 } 1508 }
1507 } 1509 }
1508 1510
1509 // Process KIOSK restrictions. 1511 // Process KIOSK restrictions.
1510 config->setGroup("KDE Resource Restrictions"); 1512 config->setGroup("KDE Resource Restrictions");
1511 entries = config->entryMap("KDE Resource Restrictions"); 1513 entries = config->entryMap("KDE Resource Restrictions");
1512 for (it2 = entries.begin(); it2 != entries.end(); it2++) 1514 for (it2 = entries.begin(); it2 != entries.end(); it2++)
1513 { 1515 {
1514 QString key = it2.key(); 1516 QString key = it2.key();
1515 if (!config->readBoolEntry(key, true)) 1517 if (!config->readBoolEntry(key, true))
1516 { 1518 {
1517 d->restrictionsActive = true; 1519 d->restrictionsActive = true;
1518 d->restrictions.insert(key.latin1(), &d->restrictionsActive); // Anything will do 1520 d->restrictions.insert(key.latin1(), &d->restrictionsActive); // Anything will do
1519 dircache.remove(key.latin1()); 1521 dircache.remove(key.latin1());
1520 } 1522 }
1521 } 1523 }
1522*/ 1524*/
1523 // save it for future calls - that will return 1525 // save it for future calls - that will return
1524 addedCustoms = true; 1526 addedCustoms = true;
1525 config->setGroup(oldGroup); 1527 config->setGroup(oldGroup);
1526 1528
1527 // return true if the number of config dirs changed 1529 // return true if the number of config dirs changed
1528 return (resourceDirs("config").count() != configdirs); 1530 return (resourceDirs("config").count() != configdirs);
1529} 1531}
1530 1532
1531QString KStandardDirs::localkdedir() const 1533QString KStandardDirs::localkdedir() const
1532{ 1534{
1533 // Return the prefix to use for saving 1535 // Return the prefix to use for saving
1534 return prefixes.first(); 1536 return prefixes.first();
1535} 1537}
1536 1538
1537QString KStandardDirs::localxdgdatadir() const 1539QString KStandardDirs::localxdgdatadir() const
1538{ 1540{
1539 // Return the prefix to use for saving 1541 // Return the prefix to use for saving
1540 return d->xdgdata_prefixes.first(); 1542 return d->xdgdata_prefixes.first();
1541} 1543}
1542 1544
1543QString KStandardDirs::localxdgconfdir() const 1545QString KStandardDirs::localxdgconfdir() const
1544{ 1546{
1545 // Return the prefix to use for saving 1547 // Return the prefix to use for saving
1546 return d->xdgconf_prefixes.first(); 1548 return d->xdgconf_prefixes.first();
1547} 1549}
1548 1550
1549void KStandardDirs::setAppDir( const QString &appDir ) 1551void KStandardDirs::setAppDir( const QString &appDir )
1550{ 1552{
1551 mAppDir = appDir; 1553 mAppDir = appDir;
1552 1554
1553 if ( mAppDir.right( 1 ) != "/" ) 1555 if ( mAppDir.right( 1 ) != "/" )
1554 mAppDir += "/"; 1556 mAppDir += "/";
1555} 1557}
1556 1558
1557QString KStandardDirs::appDir() 1559QString KStandardDirs::appDir()
1558{ 1560{
1559 return mAppDir; 1561 return mAppDir;
1560} 1562}
1561 1563
1562// just to make code more readable without macros 1564// just to make code more readable without macros
1563QString locate( const char *type, 1565QString locate( const char *type,
1564 const QString& filename/*US , const KInstance* inst*/ ) 1566 const QString& filename/*US , const KInstance* inst*/ )
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
@@ -394,288 +394,292 @@ public:
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/*!
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