diff options
Diffstat (limited to 'kutils/kcmoduleinfo.cpp')
-rw-r--r-- | kutils/kcmoduleinfo.cpp | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/kutils/kcmoduleinfo.cpp b/kutils/kcmoduleinfo.cpp new file mode 100644 index 000000000..ababaadba --- /dev/null +++ b/kutils/kcmoduleinfo.cpp @@ -0,0 +1,240 @@ +/* + Copyright (c) 1999 Matthias Hoelzer-Kluepfel <hoelzer@kde.org> + Copyright (c) 2000 Matthias Elter <elter@kde.org> + Copyright (c) 2003 Daniel Molkentin <molkentin@kde.org> + Copyright (c) 2003 Matthias Kretz <kretz@kde.org> + + This file is part of the KDE project + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2, as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include <qvariant.h> + +#include <kdesktopfile.h> +#include <kdebug.h> +#include <kglobal.h> +#include <kstandarddirs.h> +#include <klocale.h> + +#include "kcmoduleinfo.h" + +class KCModuleInfo::KCModuleInfoPrivate +{ + public: + KCModuleInfoPrivate() : + testModule( false ) + {} + ~KCModuleInfoPrivate() + { } + + QString factoryName; + bool testModule; + +}; + +KCModuleInfo::KCModuleInfo() +{ + _allLoaded = false; + d = new KCModuleInfoPrivate; +} + +KCModuleInfo::KCModuleInfo(const QString& desktopFile) +{ + init( KService::serviceByStorageId(desktopFile) ); +} + +KCModuleInfo::KCModuleInfo( KService::Ptr moduleInfo ) +{ + init(moduleInfo); +} + +KCModuleInfo::KCModuleInfo( const KCModuleInfo &rhs ) +{ + d = new KCModuleInfoPrivate; + ( *this ) = rhs; +} + +// this re-implementation exists to ensure that other code always calls +// our re-implementation, so in case we add data to the d pointer in the future +// we can be sure that we get called when we are copied. +KCModuleInfo &KCModuleInfo::operator=( const KCModuleInfo &rhs ) +{ + _keywords = rhs._keywords; + _name = rhs._name; + _icon = rhs._icon; + _lib = rhs._lib; + _handle = rhs._handle; + _fileName = rhs._fileName; + _doc = rhs._doc; + _comment = rhs._comment; + _needsRootPrivileges = rhs._needsRootPrivileges; + _isHiddenByDefault = rhs._isHiddenByDefault; + _allLoaded = rhs._allLoaded; + _service = rhs._service; + + *d = *(rhs.d); + + return *this; +} + +QString KCModuleInfo::factoryName() const +{ + if( d->factoryName.isEmpty() ) + { + d->factoryName = _service->property("X-KDE-FactoryName", QVariant::String).toString(); + if ( d->factoryName.isEmpty() ) + d->factoryName = library(); + } + + return d->factoryName; +} + +bool KCModuleInfo::operator==( const KCModuleInfo & rhs ) const +{ + return ( ( _name == rhs._name ) && ( _lib == rhs._lib ) && ( _fileName == rhs._fileName ) ); +} + +bool KCModuleInfo::operator!=( const KCModuleInfo & rhs ) const +{ + return ! operator==( rhs ); +} + +KCModuleInfo::~KCModuleInfo() +{ + delete d; +} + +void KCModuleInfo::init(KService::Ptr s) +{ + _allLoaded = false; + d = new KCModuleInfoPrivate; + + if ( s ) + _service = s; + else + { + kdDebug(712) << "Could not find the service." << endl; + return; + } + + // set the modules simple attributes + setName(_service->name()); + setComment(_service->comment()); + setIcon(_service->icon()); + + _fileName = ( _service->desktopEntryPath() ); + + // library and factory + setLibrary(_service->library()); + + // get the keyword list + setKeywords(_service->keywords()); +} + +void +KCModuleInfo::loadAll() +{ + if( !_service ) /* We have a bogus service. All get functions will return empty/zero values */ + return; + + _allLoaded = true; + + // library and factory + setHandle(_service->property("X-KDE-FactoryName", QVariant::String).toString()); + + QVariant tmp; + + // read weight + tmp = _service->property( "X-KDE-Weight", QVariant::Int ); + setWeight( tmp.isValid() ? tmp.toInt() : 100 ); + + // does the module need super user privileges? + tmp = _service->property( "X-KDE-RootOnly", QVariant::Bool ); + setNeedsRootPrivileges( tmp.isValid() ? tmp.toBool() : false ); + + // does the module need to be shown to root only? + // Deprecated ! KDE 4 + tmp = _service->property( "X-KDE-IsHiddenByDefault", QVariant::Bool ); + setIsHiddenByDefault( tmp.isValid() ? tmp.toBool() : false ); + + // get the documentation path + setDocPath( _service->property( "DocPath", QVariant::String ).toString() ); + + tmp = _service->property( "X-KDE-Test-Module", QVariant::Bool ); + setNeedsTest( tmp.isValid() ? tmp.asBool() : false ); +} + +QString +KCModuleInfo::docPath() const +{ + if (!_allLoaded) + const_cast<KCModuleInfo*>(this)->loadAll(); + + return _doc; +} + +QString +KCModuleInfo::handle() const +{ + if (!_allLoaded) + const_cast<KCModuleInfo*>(this)->loadAll(); + + if (_handle.isEmpty()) + return _lib; + + return _handle; +} + +int +KCModuleInfo::weight() const +{ + if (!_allLoaded) + const_cast<KCModuleInfo*>(this)->loadAll(); + + return _weight; +} + +bool +KCModuleInfo::needsRootPrivileges() const +{ + if (!_allLoaded) + const_cast<KCModuleInfo*>(this)->loadAll(); + + return _needsRootPrivileges; +} + +bool +KCModuleInfo::isHiddenByDefault() const +{ + if (!_allLoaded) + const_cast<KCModuleInfo*>(this)->loadAll(); + + return _isHiddenByDefault; +} + +bool KCModuleInfo::needsTest() const +{ + return d->testModule; +} + +void KCModuleInfo::setNeedsTest( bool val ) +{ + d->testModule = val; +} + + + +// vim: ts=2 sw=2 et |