kdecore Library API Documentation

kinstance.cpp

00001 /* This file is part of the KDE libraries
00002    Copyright (C) 1999 Torben Weis <weis@kde.org>
00003 
00004    This library is free software; you can redistribute it and/or
00005    modify it under the terms of the GNU Library General Public
00006    License version 2 as published by the Free Software Foundation.
00007 
00008    This library is distributed in the hope that it will be useful,
00009    but WITHOUT ANY WARRANTY; without even the implied warranty of
00010    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00011    Library General Public License for more details.
00012 
00013    You should have received a copy of the GNU Library General Public License
00014    along with this library; see the file COPYING.LIB.  If not, write to
00015    the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
00016    Boston, MA 02111-1307, USA.
00017 */
00018 #include "kinstance.h"
00019 
00020 #include "kconfig.h"
00021 #include "klocale.h"
00022 #include "kcharsets.h"
00023 #include "kiconloader.h"
00024 #include "kaboutdata.h"
00025 #include "kstandarddirs.h"
00026 #include "kdebug.h"
00027 #include "kglobal.h"
00028 #include "kmimesourcefactory.h"
00029 
00030 #include <qfont.h>
00031 
00032 class KInstancePrivate
00033 {
00034 public:
00035     KInstancePrivate ()
00036     {
00037         mimeSourceFactory = 0L;
00038     }
00039 
00040     ~KInstancePrivate ()
00041     {
00042         delete mimeSourceFactory;
00043     }
00044 
00045     KMimeSourceFactory* mimeSourceFactory;
00046     QString configName;
00047     bool ownAboutdata;
00048 };
00049 
00050 KInstance::KInstance( const QCString& name)
00051   : _dirs (0L),
00052     _config (0L),
00053     _iconLoader (0L),
00054     _name( name ), _aboutData( new KAboutData( name, "", 0 ) )
00055 {
00056     Q_ASSERT(!name.isEmpty());
00057     if (!KGlobal::_instance)
00058     {
00059       KGlobal::_instance = this;
00060       KGlobal::setActiveInstance(this);
00061     }
00062 
00063     d = new KInstancePrivate ();
00064     d->ownAboutdata = true;
00065 }
00066 
00067 KInstance::KInstance( const KAboutData * aboutData )
00068   : _dirs (0L),
00069     _config (0L),
00070     _iconLoader (0L),
00071     _name( aboutData->appName() ), _aboutData( aboutData )
00072 {
00073     Q_ASSERT(!_name.isEmpty());
00074 
00075     if (!KGlobal::_instance)
00076     {
00077       KGlobal::_instance = this;
00078       KGlobal::setActiveInstance(this);
00079     }
00080 
00081     d = new KInstancePrivate ();
00082     d->ownAboutdata = false;
00083 }
00084 
00085 KInstance::KInstance( KInstance* src )
00086   : _dirs ( src->_dirs ),
00087     _config ( src->_config ),
00088     _iconLoader ( src->_iconLoader ),
00089     _name( src->_name ), _aboutData( src->_aboutData )
00090 {
00091     Q_ASSERT(!_name.isEmpty());
00092 
00093     if (!KGlobal::_instance || KGlobal::_instance == src )
00094     {
00095       KGlobal::_instance = this;
00096       KGlobal::setActiveInstance(this);
00097     }
00098 
00099     d = new KInstancePrivate ();
00100     d->ownAboutdata = src->d->ownAboutdata;
00101 
00102     src->_dirs = 0L;
00103     src->_config = 0L;
00104     src->_iconLoader = 0L;
00105     src->_aboutData = 0L;
00106     delete src;
00107 }
00108 
00109 KInstance::~KInstance()
00110 {
00111     if (d->ownAboutdata)
00112         delete _aboutData;
00113     _aboutData = 0;
00114 
00115     delete d;
00116     d = 0;
00117 
00118     delete _iconLoader;
00119     _iconLoader = 0;
00120     delete _config;
00121     _config = 0;
00122     delete _dirs;
00123     _dirs = 0;
00124 
00125     if (KGlobal::_instance == this)
00126         KGlobal::_instance = 0;
00127     if (KGlobal::activeInstance() == this)
00128         KGlobal::setActiveInstance(0);
00129 }
00130 
00131 
00132 KStandardDirs *KInstance::dirs() const
00133 {
00134     if( _dirs == 0 ) {
00135     _dirs = new KStandardDirs( );
00136         if (_config)
00137             if (_dirs->addCustomized(_config))
00138                 _config->reparseConfiguration();
00139     }
00140 
00141     return _dirs;
00142 }
00143 
00144 KConfig *KInstance::config() const
00145 {
00146     if( _config == 0 ) {
00147         if ( !d->configName.isEmpty() )
00148         {
00149             _config = new KConfig( d->configName );
00150             // Check whether custom config files are allowed.
00151             _config->setGroup( "KDE Action Restrictions" );
00152             if (_config->readBoolEntry( "custom_config", true))
00153             {
00154                _config->setGroup(QString::null);
00155             }
00156             else
00157             {
00158                delete _config;
00159                _config = 0;
00160             }
00161 
00162         }
00163 
00164         if ( _config == 0 )
00165         {
00166         if ( !_name.isEmpty() )
00167             _config = new KConfig( _name + "rc");
00168         else
00169             _config = new KConfig();
00170     }
00171         if (_dirs)
00172             if (_dirs->addCustomized(_config))
00173                 _config->reparseConfiguration();
00174     }
00175 
00176     return _config;
00177 }
00178 
00179 void KInstance::setConfigName(const QString &configName)
00180 {
00181     d->configName = configName;
00182 }
00183 
00184 KIconLoader *KInstance::iconLoader() const
00185 {
00186     if( _iconLoader == 0 ) {
00187     _iconLoader = new KIconLoader( _name, dirs() );
00188     _iconLoader->enableDelayedIconSetLoading( true );
00189     }
00190 
00191     return _iconLoader;
00192 }
00193 
00194 void KInstance::newIconLoader() const
00195 {
00196     KIconTheme::reconfigure();
00197     _iconLoader->reconfigure( _name, dirs() );
00198 }
00199 
00200 const KAboutData * KInstance::aboutData() const
00201 {
00202     return _aboutData;
00203 }
00204 
00205 QCString KInstance::instanceName() const
00206 {
00207     return _name;
00208 }
00209 
00210 KMimeSourceFactory* KInstance::mimeSourceFactory () const
00211 {
00212   if (!d->mimeSourceFactory)
00213   {
00214     d->mimeSourceFactory = new KMimeSourceFactory(iconLoader());
00215   }
00216 
00217   return d->mimeSourceFactory;
00218 }
00219 
00220 void KInstance::virtual_hook( int, void* )
00221 { /*BASE::virtual_hook( id, data );*/ }
00222 
KDE Logo
This file is part of the documentation for kdelibs Version 3.1.4.
Documentation copyright © 1996-2002 the KDE developers.
Generated on Sun Feb 27 22:14:46 2005 by doxygen 1.3.4 written by Dimitri van Heesch, © 1997-2001