00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "konq_propsview.h"
00021 #include "konq_settings.h"
00022
00023 #include <kdebug.h>
00024 #include <kstandarddirs.h>
00025 #include <kpixmap.h>
00026 #include <qpixmapcache.h>
00027 #include <qiconview.h>
00028 #include <unistd.h>
00029 #include <qfile.h>
00030 #include <iostream>
00031 #include <ktrader.h>
00032 #include <kinstance.h>
00033 #include <assert.h>
00034
00035 #include <ksimpleconfig.h>
00036
00037 static QPixmap wallpaperPixmap( const QString & _wallpaper )
00038 {
00039 QString key = "wallpapers/";
00040 key += _wallpaper;
00041 KPixmap pix;
00042
00043 if ( QPixmapCache::find( key, pix ) )
00044 return pix;
00045
00046 QString path = locate("tiles", _wallpaper);
00047 if (path.isEmpty())
00048 path = locate("wallpaper", _wallpaper);
00049 if (!path.isEmpty())
00050 {
00051
00052
00053
00054
00055 pix.load( path );
00056 if ( pix.isNull() )
00057 kdWarning(1203) << "Could not load wallpaper " << path << endl;
00058 else
00059 QPixmapCache::insert( key, pix );
00060 return pix;
00061 } else kdWarning(1203) << "Couldn't locate wallpaper " << _wallpaper << endl;
00062 return QPixmap();
00063 }
00064
00065 struct KonqPropsView::Private
00066 {
00067 QStringList* previewsToShow;
00068 bool previewsEnabled:1;
00069 bool caseInsensitiveSort:1;
00070 bool dirsfirst:1;
00071 bool descending:1;
00072 QString sortcriterion;
00073 };
00074
00075 KonqPropsView::KonqPropsView( KInstance * instance, KonqPropsView * defaultProps )
00076 : m_bSaveViewPropertiesLocally( false ),
00077
00078 m_dotDirExists( true ),
00079 m_currentConfig( defaultProps ? 0L : instance->config() ),
00080 m_defaultProps( defaultProps )
00081 {
00082
00083 KConfig *config = instance->config();
00084 KConfigGroupSaver cgs(config, "Settings");
00085
00086 d = new Private;
00087 d->previewsToShow = 0;
00088 d->caseInsensitiveSort=config->readBoolEntry( "CaseInsensitiveSort", true );
00089
00090 m_iIconSize = config->readNumEntry( "IconSize", 0 );
00091 m_iItemTextPos = config->readNumEntry( "ItemTextPos", QIconView::Bottom );
00092 d->sortcriterion = config->readEntry( "SortingCriterion", "sort_nci" );
00093 d->dirsfirst = config->readBoolEntry( "SortDirsFirst", true );
00094 d->descending = config->readBoolEntry( "SortDescending", false );
00095 m_bShowDot = config->readBoolEntry( "ShowDotFiles", false );
00096 m_bShowDirectoryOverlays = config->readBoolEntry( "ShowDirectoryOverlays", false );
00097
00098 m_dontPreview = config->readListEntry( "DontPreview" );
00099 m_dontPreview.remove("audio/");
00100
00101
00102
00103
00104 if (!config->readBoolEntry("EnableSoundPreviews", false))
00105 {
00106 if (!m_dontPreview.contains("audio/"))
00107 m_dontPreview.append("audio/");
00108 }
00109
00110 d->previewsEnabled = config->readBoolEntry( "PreviewsEnabled", true );
00111
00112 QColor tc = KonqFMSettings::settings()->normalTextColor();
00113 m_textColor = config->readColorEntry( "TextColor", &tc );
00114 m_bgColor = config->readColorEntry( "BgColor" );
00115 m_bgPixmapFile = config->readPathEntry( "BgImage" );
00116
00117
00118
00119
00120
00121
00122 if (!defaultProps)
00123 {
00124 KConfigGroupSaver cgs2(KGlobal::config(), "Settings");
00125 m_textColor = KGlobal::config()->readColorEntry( "TextColor", &m_textColor );
00126 m_bgColor = KGlobal::config()->readColorEntry( "BgColor", &m_bgColor );
00127 m_bgPixmapFile = KGlobal::config()->readPathEntry( "BgImage", m_bgPixmapFile );
00128
00129 }
00130
00131 KGlobal::dirs()->addResourceType("tiles",
00132 KGlobal::dirs()->kde_default("data") + "konqueror/tiles/");
00133 }
00134
00135 bool KonqPropsView::isCaseInsensitiveSort() const
00136 {
00137 return d->caseInsensitiveSort;
00138 }
00139
00140 bool KonqPropsView::isDirsFirst() const
00141 {
00142 return d->dirsfirst;
00143 }
00144
00145 bool KonqPropsView::isDescending() const
00146 {
00147 return d->descending;
00148 }
00149
00150 KConfigBase * KonqPropsView::currentConfig()
00151 {
00152 if ( !m_currentConfig )
00153 {
00154
00155 assert ( m_bSaveViewPropertiesLocally );
00156 assert ( !isDefaultProperties() );
00157
00158 if (!dotDirectory.isEmpty())
00159 m_currentConfig = new KSimpleConfig( dotDirectory );
00160
00161 }
00162 return m_currentConfig;
00163 }
00164
00165 KConfigBase * KonqPropsView::currentColorConfig()
00166 {
00167
00168 if ( m_bSaveViewPropertiesLocally && !isDefaultProperties() )
00169 return currentConfig();
00170 else
00171
00172 return KGlobal::config();
00173 }
00174
00175 KonqPropsView::~KonqPropsView()
00176 {
00177 delete d->previewsToShow;
00178 delete d;
00179 d=0;
00180 }
00181
00182 bool KonqPropsView::enterDir( const KURL & dir )
00183 {
00184
00185
00186 assert( !isDefaultProperties() );
00187
00188
00189 KURL u ( dir );
00190 u.addPath(".directory");
00191 bool dotDirExists = u.isLocalFile() && QFile::exists( u.path() );
00192 dotDirectory = u.isLocalFile() ? u.path() : QString::null;
00193
00194
00195
00196 if (dotDirExists || m_dotDirExists)
00197 {
00198 m_iIconSize = m_defaultProps->iconSize();
00199 m_iItemTextPos = m_defaultProps->itemTextPos();
00200 d->sortcriterion = m_defaultProps->sortCriterion();
00201 d->dirsfirst = m_defaultProps->isDirsFirst();
00202 d->descending = m_defaultProps->isDescending();
00203 m_bShowDot = m_defaultProps->isShowingDotFiles();
00204 d->caseInsensitiveSort=m_defaultProps->isCaseInsensitiveSort();
00205 m_dontPreview = m_defaultProps->m_dontPreview;
00206 m_textColor = m_defaultProps->m_textColor;
00207 m_bgColor = m_defaultProps->m_bgColor;
00208 m_bgPixmapFile = m_defaultProps->bgPixmapFile();
00209 }
00210
00211 if (dotDirExists)
00212 {
00213
00214 KSimpleConfig * config = new KSimpleConfig( dotDirectory, true );
00215 config->setGroup("URL properties");
00216
00217 m_iIconSize = config->readNumEntry( "IconSize", m_iIconSize );
00218 m_iItemTextPos = config->readNumEntry( "ItemTextPos", m_iItemTextPos );
00219 d->sortcriterion = config->readEntry( "SortingCriterion" , d->sortcriterion );
00220 d->dirsfirst = config->readBoolEntry( "SortDirsFirst", d->dirsfirst );
00221 d->descending = config->readBoolEntry( "SortDescending", d->descending );
00222 m_bShowDot = config->readBoolEntry( "ShowDotFiles", m_bShowDot );
00223 d->caseInsensitiveSort=config->readBoolEntry("CaseInsensitiveSort",d->caseInsensitiveSort);
00224 m_bShowDirectoryOverlays = config->readBoolEntry( "ShowDirectoryOverlays", m_bShowDirectoryOverlays );
00225 if (config->hasKey( "DontPreview" ))
00226 {
00227 m_dontPreview = config->readListEntry( "DontPreview" );
00228
00229
00230
00231
00232
00233 if (config->hasKey("EnableSoundPreviews"))
00234 {
00235
00236 if (!config->readBoolEntry("EnableSoundPreviews", false))
00237 if (!m_dontPreview.contains("audio/"))
00238 m_dontPreview.append("audio/");
00239 }
00240 else
00241 {
00242 if (m_defaultProps->m_dontPreview.contains("audio/"))
00243 if (!m_dontPreview.contains("audio/"))
00244 m_dontPreview.append("audio/");
00245 }
00246 }
00247
00248
00249
00250 m_textColor = config->readColorEntry( "TextColor", &m_textColor );
00251 m_bgColor = config->readColorEntry( "BgColor", &m_bgColor );
00252 m_bgPixmapFile = config->readPathEntry( "BgImage", m_bgPixmapFile );
00253
00254 d->previewsEnabled = config->readBoolEntry( "PreviewsEnabled", d->previewsEnabled );
00255 delete config;
00256 }
00257
00258 bool configChanged=(m_dotDirExists|| dotDirExists);
00259 m_dotDirExists = dotDirExists;
00260 m_currentConfig = 0L;
00261
00262 return configChanged;
00263 }
00264
00265 void KonqPropsView::setSaveViewPropertiesLocally( bool value )
00266 {
00267 assert( !isDefaultProperties() );
00268
00269
00270 if ( m_bSaveViewPropertiesLocally )
00271 delete m_currentConfig;
00272
00273 m_bSaveViewPropertiesLocally = value;
00274 m_currentConfig = 0L;
00275 }
00276
00277 void KonqPropsView::setIconSize( int size )
00278 {
00279 m_iIconSize = size;
00280 if ( m_defaultProps && !m_bSaveViewPropertiesLocally )
00281 m_defaultProps->setIconSize( size );
00282 else if (currentConfig())
00283 {
00284 KConfigGroupSaver cgs(currentConfig(), currentGroup());
00285 currentConfig()->writeEntry( "IconSize", m_iIconSize );
00286 currentConfig()->sync();
00287 }
00288 }
00289
00290 void KonqPropsView::setItemTextPos( int pos )
00291 {
00292 m_iItemTextPos = pos;
00293 if ( m_defaultProps && !m_bSaveViewPropertiesLocally )
00294 m_defaultProps->setItemTextPos( pos );
00295 else if (currentConfig())
00296 {
00297 KConfigGroupSaver cgs(currentConfig(), currentGroup());
00298 currentConfig()->writeEntry( "ItemTextPos", m_iItemTextPos );
00299 currentConfig()->sync();
00300 }
00301 }
00302
00303 void KonqPropsView::setSortCriterion( const QString &criterion )
00304 {
00305 d->sortcriterion = criterion;
00306 if ( m_defaultProps && !m_bSaveViewPropertiesLocally )
00307 m_defaultProps->setSortCriterion( criterion );
00308 else if (currentConfig())
00309 {
00310 KConfigGroupSaver cgs(currentConfig(), currentGroup());
00311 currentConfig()->writeEntry( "SortingCriterion", d->sortcriterion );
00312 currentConfig()->sync();
00313 }
00314 }
00315
00316 void KonqPropsView::setDirsFirst( bool first)
00317 {
00318 d->dirsfirst = first;
00319 if ( m_defaultProps && !m_bSaveViewPropertiesLocally )
00320 m_defaultProps->setDirsFirst( first );
00321 else if (currentConfig())
00322 {
00323 KConfigGroupSaver cgs(currentConfig(), currentGroup());
00324 currentConfig()->writeEntry( "SortDirsFirst", d->dirsfirst );
00325 currentConfig()->sync();
00326 }
00327 }
00328
00329 void KonqPropsView::setDescending( bool descend)
00330 {
00331 d->descending = descend;
00332 if ( m_defaultProps && !m_bSaveViewPropertiesLocally )
00333 m_defaultProps->setDescending( descend );
00334 else if (currentConfig())
00335 {
00336 KConfigGroupSaver cgs(currentConfig(), currentGroup());
00337 currentConfig()->writeEntry( "SortDescending", d->descending );
00338 currentConfig()->sync();
00339 }
00340 }
00341
00342 void KonqPropsView::setShowingDotFiles( bool show )
00343 {
00344 kdDebug(1203) << "KonqPropsView::setShowingDotFiles " << show << endl;
00345 m_bShowDot = show;
00346 if ( m_defaultProps && !m_bSaveViewPropertiesLocally )
00347 {
00348 kdDebug(1203) << "Saving in default properties" << endl;
00349 m_defaultProps->setShowingDotFiles( show );
00350 }
00351 else if (currentConfig())
00352 {
00353 kdDebug(1203) << "Saving in current config" << endl;
00354 KConfigGroupSaver cgs(currentConfig(), currentGroup());
00355 currentConfig()->writeEntry( "ShowDotFiles", m_bShowDot );
00356 currentConfig()->sync();
00357 }
00358 }
00359
00360 void KonqPropsView::setCaseInsensitiveSort( bool on )
00361 {
00362 kdDebug(1203) << "KonqPropsView::setCaseInsensitiveSort " << on << endl;
00363 d->caseInsensitiveSort = on;
00364 if ( m_defaultProps && !m_bSaveViewPropertiesLocally )
00365 {
00366 kdDebug(1203) << "Saving in default properties" << endl;
00367 m_defaultProps->setCaseInsensitiveSort( on );
00368 }
00369 else if (currentConfig())
00370 {
00371 kdDebug(1203) << "Saving in current config" << endl;
00372 KConfigGroupSaver cgs(currentConfig(), currentGroup());
00373 currentConfig()->writeEntry( "CaseInsensitiveSort", d->caseInsensitiveSort );
00374 currentConfig()->sync();
00375 }
00376 }
00377
00378 void KonqPropsView::setShowingDirectoryOverlays( bool show )
00379 {
00380 kdDebug(1203) << "KonqPropsView::setShowingDirectoryOverlays " << show << endl;
00381 m_bShowDirectoryOverlays = show;
00382 if ( m_defaultProps && !m_bSaveViewPropertiesLocally )
00383 {
00384 kdDebug(1203) << "Saving in default properties" << endl;
00385 m_defaultProps->setShowingDirectoryOverlays( show );
00386 }
00387 else if (currentConfig())
00388 {
00389 kdDebug(1203) << "Saving in current config" << endl;
00390 KConfigGroupSaver cgs(currentConfig(), currentGroup());
00391 currentConfig()->writeEntry( "ShowDirectoryOverlays", m_bShowDirectoryOverlays );
00392 currentConfig()->sync();
00393 }
00394 }
00395
00396 void KonqPropsView::setShowingPreview( const QString &preview, bool show )
00397 {
00398 if ( m_dontPreview.contains( preview ) != show )
00399 return;
00400 else if ( show )
00401 m_dontPreview.remove( preview );
00402 else
00403 m_dontPreview.append( preview );
00404 if ( m_defaultProps && !m_bSaveViewPropertiesLocally )
00405 m_defaultProps->setShowingPreview( preview, show );
00406 else if (currentConfig())
00407 {
00408 KConfigGroupSaver cgs(currentConfig(), currentGroup());
00409
00410
00411
00412 bool audioEnabled = !m_dontPreview.contains("audio/");
00413
00414
00415 if (!audioEnabled)
00416 m_dontPreview.remove("audio/");
00417 currentConfig()->writeEntry( "DontPreview", m_dontPreview );
00418 currentConfig()->writeEntry( "EnableSoundPreviews", audioEnabled );
00419 currentConfig()->sync();
00420 if (!audioEnabled)
00421 m_dontPreview.append("audio/");
00422
00423 }
00424
00425 delete d->previewsToShow;
00426 d->previewsToShow = 0;
00427 }
00428
00429 void KonqPropsView::setShowingPreview( bool show )
00430 {
00431 d->previewsEnabled = show;
00432
00433 if ( m_defaultProps && !m_bSaveViewPropertiesLocally )
00434 {
00435 kdDebug(1203) << "Saving in default properties" << endl;
00436 m_defaultProps-> setShowingPreview( show );
00437 }
00438 else if (currentConfig())
00439 {
00440 kdDebug(1203) << "Saving in current config" << endl;
00441 KConfigGroupSaver cgs(currentConfig(), currentGroup());
00442 currentConfig()->writeEntry( "PreviewsEnabled", d->previewsEnabled );
00443 currentConfig()->sync();
00444 }
00445
00446 delete d->previewsToShow;
00447 d->previewsToShow = 0;
00448 }
00449
00450 bool KonqPropsView::isShowingPreview()
00451 {
00452 return d->previewsEnabled;
00453 }
00454
00455 void KonqPropsView::setBgColor( const QColor & color )
00456 {
00457 m_bgColor = color;
00458 if ( m_defaultProps && !m_bSaveViewPropertiesLocally )
00459 {
00460 m_defaultProps->setBgColor( color );
00461 }
00462 else
00463 {
00464 KConfigBase * colorConfig = currentColorConfig();
00465 if (colorConfig)
00466 {
00467 KConfigGroupSaver cgs(colorConfig, currentGroup());
00468 colorConfig->writeEntry( "BgColor", m_bgColor );
00469 colorConfig->sync();
00470 }
00471 }
00472 }
00473
00474 const QColor & KonqPropsView::bgColor( QWidget * widget ) const
00475 {
00476 if ( !m_bgColor.isValid() )
00477 return widget->colorGroup().base();
00478 else
00479 return m_bgColor;
00480 }
00481
00482 void KonqPropsView::setTextColor( const QColor & color )
00483 {
00484 m_textColor = color;
00485 if ( m_defaultProps && !m_bSaveViewPropertiesLocally )
00486 {
00487 m_defaultProps->setTextColor( color );
00488 }
00489 else
00490 {
00491 KConfigBase * colorConfig = currentColorConfig();
00492 if (colorConfig)
00493 {
00494 KConfigGroupSaver cgs(colorConfig, currentGroup());
00495 colorConfig->writeEntry( "TextColor", m_textColor );
00496 colorConfig->sync();
00497 }
00498 }
00499 }
00500
00501 const QColor & KonqPropsView::textColor( QWidget * widget ) const
00502 {
00503 if ( !m_textColor.isValid() )
00504 return widget->colorGroup().text();
00505 else
00506 return m_textColor;
00507 }
00508
00509 void KonqPropsView::setBgPixmapFile( const QString & file )
00510 {
00511 m_bgPixmapFile = file;
00512
00513 if ( m_defaultProps && !m_bSaveViewPropertiesLocally )
00514 {
00515 m_defaultProps->setBgPixmapFile( file );
00516 }
00517 else
00518 {
00519 KConfigBase * colorConfig = currentColorConfig();
00520 if (colorConfig)
00521 {
00522 KConfigGroupSaver cgs(colorConfig, currentGroup());
00523 colorConfig->writePathEntry( "BgImage", file );
00524 colorConfig->sync();
00525 }
00526 }
00527 }
00528
00529 QPixmap KonqPropsView::loadPixmap() const
00530 {
00531
00532 QPixmap bgPixmap;
00533 if ( !m_bgPixmapFile.isEmpty() )
00534 bgPixmap = wallpaperPixmap( m_bgPixmapFile );
00535 return bgPixmap;
00536 }
00537
00538 void KonqPropsView::applyColors(QWidget * widget) const
00539 {
00540 if ( m_bgPixmapFile.isEmpty() )
00541 widget->setPaletteBackgroundColor( bgColor( widget ) );
00542 else
00543 {
00544 QPixmap pix = loadPixmap();
00545
00546
00547
00548
00549
00550 if ( ! pix.isNull() )
00551 widget->setBackgroundPixmap( pix );
00552
00553 }
00554
00555 if ( m_textColor.isValid() )
00556 widget->setPaletteForegroundColor( m_textColor );
00557 }
00558
00559 const QStringList& KonqPropsView::previewSettings()
00560 {
00561 if ( ! d->previewsToShow )
00562 {
00563 d->previewsToShow = new QStringList;
00564
00565 if (d->previewsEnabled) {
00566 KTrader::OfferList plugins = KTrader::self()->query( "ThumbCreator" );
00567 for ( KTrader::OfferList::ConstIterator it = plugins.begin(); it != plugins.end(); ++it )
00568 {
00569 QString name = (*it)->desktopEntryName();
00570 if ( ! m_dontPreview.contains(name) )
00571 d->previewsToShow->append( name );
00572 }
00573 if ( ! m_dontPreview.contains( "audio/" ) )
00574 d->previewsToShow->append( "audio/" );
00575 }
00576 }
00577
00578 return *(d->previewsToShow);
00579 }
00580
00581 const QString& KonqPropsView::sortCriterion() const {
00582 return d->sortcriterion;
00583 }
00584