00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#include "kplugininfo.h"
00021
#include <ksimpleconfig.h>
00022
#include <ktrader.h>
00023
#include <kdebug.h>
00024
#include <kconfigbase.h>
00025
#include <kglobal.h>
00026
#include <kstandarddirs.h>
00027
#include <kservice.h>
00028
00029
class KPluginInfo::KPluginInfoPrivate
00030 {
00031
public:
00032 KPluginInfoPrivate()
00033 : hidden( false )
00034 , enabledbydefault( false )
00035 , pluginenabled( false )
00036 , config( 0 )
00037 , kcmservicesCached( false )
00038 {}
00039
00040 ~KPluginInfoPrivate()
00041 {
00042
delete config;
00043 }
00044
00045
QString specfile;
00046
QString name;
00047
QString comment;
00048
QString icon;
00049
QString author;
00050
QString email;
00051
QString pluginName;
00052
QString version;
00053
QString website;
00054
QString category;
00055
QString license;
00056
QStringList dependencies;
00057
00058
bool hidden;
00059
bool enabledbydefault;
00060
bool pluginenabled;
00061
00062
KConfig * config;
00063
QString configgroup;
00064
KService::Ptr service;
00065
QValueList<KService::Ptr> kcmservices;
00066
bool kcmservicesCached;
00067 };
00068
00069 KPluginInfo::KPluginInfo(
const QString & filename,
const char* resource )
00070 : d( new KPluginInfoPrivate )
00071 {
00072
KConfig file( filename,
true,
true, resource );
00073
00074 d->specfile = filename;
00075
00076
if( filename.
endsWith( QString::fromAscii(
".desktop" ) ) )
00077 {
00078 file.
setDesktopGroup();
00079 d->hidden = file.
readBoolEntry(
"Hidden",
false );
00080
if( d->hidden )
00081
return;
00082
00083 d->name = file.
readEntry(
"Name" );
00084 d->comment = file.
readEntry(
"Comment" );
00085 d->icon = file.
readEntry(
"Icon" );
00086 d->author = file.
readEntry(
"X-KDE-PluginInfo-Author" );
00087 d->email = file.
readEntry(
"X-KDE-PluginInfo-Email" );
00088 d->pluginName = file.
readEntry(
"X-KDE-PluginInfo-Name" );
00089 d->version = file.
readEntry(
"X-KDE-PluginInfo-Version" );
00090 d->website = file.
readEntry(
"X-KDE-PluginInfo-Website" );
00091 d->category = file.
readEntry(
"X-KDE-PluginInfo-Category" );
00092 d->license = file.
readEntry(
"X-KDE-PluginInfo-License" );
00093 d->dependencies = file.
readListEntry(
"X-KDE-PluginInfo-Depends" );
00094 d->enabledbydefault = file.
readBoolEntry(
00095
"X-KDE-PluginInfo-EnabledByDefault",
false );
00096 }
00097
else if( filename.
endsWith( QString::fromAscii(
".plugin" ) ) )
00098 {
00099
00100 d->name = file.
readEntry(
"Name" );
00101 d->comment = file.
readEntry(
"Comment" );
00102 d->icon = file.
readEntry(
"Icon" );
00103 d->author = file.
readEntry(
"Author" );
00104 d->email = file.
readEntry(
"Email" );
00105 d->pluginName = file.
readPathEntry(
"Filename" );
00106
00107 d->website = file.
readEntry(
"Site" );
00108 d->category = file.
readEntry(
"Type" );
00109 d->license = file.
readEntry(
"License" );
00110 d->dependencies = file.
readListEntry(
"Require" );
00111 }
00112 }
00113
00114 KPluginInfo::KPluginInfo(
const KService::Ptr service )
00115 : d( new KPluginInfoPrivate )
00116 {
00117 d->service = service;
00118 d->specfile = service->desktopEntryPath();
00119
00120
if ( service->isDeleted() )
00121 {
00122 d->hidden =
true;
00123
return;
00124 }
00125
00126 d->name = service->name();
00127 d->comment = service->comment();
00128 d->icon = service->icon();
00129 d->author = service->property(
"X-KDE-PluginInfo-Author" ).toString();
00130 d->email = service->property(
"X-KDE-PluginInfo-Email" ).toString();
00131 d->pluginName = service->property(
"X-KDE-PluginInfo-Name" ).toString();
00132 d->version = service->property(
"X-KDE-PluginInfo-Version" ).toString();
00133 d->website = service->property(
"X-KDE-PluginInfo-Website" ).toString();
00134 d->category = service->property(
"X-KDE-PluginInfo-Category" ).toString();
00135 d->license = service->property(
"X-KDE-PluginInfo-License" ).toString();
00136 d->dependencies =
00137 service->property(
"X-KDE-PluginInfo-Depends" ).toStringList();
00138
QVariant tmp = service->property(
"X-KDE-PluginInfo-EnabledByDefault" );
00139 d->enabledbydefault = tmp.
isValid() ? tmp.
toBool() :
false;
00140 }
00141
00142
00143
00144
00145
00146
00147
00148 KPluginInfo::~KPluginInfo()
00149 {
00150
delete d;
00151 }
00152
00153 QValueList<KPluginInfo*> KPluginInfo::fromServices(
const KService::List & services,
KConfig * config,
const QString & group )
00154 {
00155
QValueList<KPluginInfo*> infolist;
00156
KPluginInfo * info;
00157
for( KService::List::ConstIterator it = services.
begin();
00158 it != services.
end(); ++it )
00159 {
00160 info =
new KPluginInfo( *it );
00161 info->
setConfig( config, group );
00162 infolist += info;
00163 }
00164
return infolist;
00165 }
00166
00167 QValueList<KPluginInfo*> KPluginInfo::fromFiles(
const QStringList & files,
KConfig * config,
const QString & group )
00168 {
00169
QValueList<KPluginInfo*> infolist;
00170
for( QStringList::ConstIterator it = files.begin(); it != files.end(); ++it )
00171 {
00172
KPluginInfo * info =
new KPluginInfo( *it );
00173 info->
setConfig( config, group );
00174 infolist += info;
00175 }
00176
return infolist;
00177 }
00178
00179 QValueList<KPluginInfo*> KPluginInfo::fromKPartsInstanceName(
const QString & name,
KConfig * config,
const QString & group )
00180 {
00181
QStringList files =
KGlobal::dirs()->
findAllResources(
"data", name +
00182
"/kpartplugins/*.desktop",
true,
false );
00183
return fromFiles( files, config, group );
00184 }
00185
00186 bool KPluginInfo::isHidden()
const
00187
{
00188
return d->hidden;
00189 }
00190
00191 void KPluginInfo::setPluginEnabled(
bool enabled )
00192 {
00193
kdDebug( 703 ) <<
k_funcinfo <<
endl;
00194 d->pluginenabled = enabled;
00195 }
00196
00197 bool KPluginInfo::isPluginEnabled()
const
00198
{
00199
kdDebug( 703 ) <<
k_funcinfo <<
endl;
00200
return d->pluginenabled;
00201 }
00202
00203 bool KPluginInfo::isPluginEnabledByDefault()
const
00204
{
00205
kdDebug( 703 ) <<
k_funcinfo <<
endl;
00206
return d->enabledbydefault;
00207 }
00208
00209 const QString &
KPluginInfo::name()
const
00210
{
00211
return d->name;
00212 }
00213
00214 const QString &
KPluginInfo::comment()
const
00215
{
00216
return d->comment;
00217 }
00218
00219 const QString &
KPluginInfo::icon()
const
00220
{
00221
return d->icon;
00222 }
00223
00224 const QString &
KPluginInfo::specfile()
const
00225
{
00226
return d->specfile;
00227 }
00228
00229 const QString &
KPluginInfo::author()
const
00230
{
00231
return d->author;
00232 }
00233
00234 const QString &
KPluginInfo::email()
const
00235
{
00236
return d->email;
00237 }
00238
00239 const QString &
KPluginInfo::category()
const
00240
{
00241
return d->category;
00242 }
00243
00244 const QString &
KPluginInfo::pluginName()
const
00245
{
00246
return d->pluginName;
00247 }
00248
00249 const QString &
KPluginInfo::version()
const
00250
{
00251
return d->version;
00252 }
00253
00254 const QString &
KPluginInfo::website()
const
00255
{
00256
return d->website;
00257 }
00258
00259 const QString &
KPluginInfo::license()
const
00260
{
00261
return d->license;
00262 }
00263
00264 const QStringList &
KPluginInfo::dependencies()
const
00265
{
00266
return d->dependencies;
00267 }
00268
00269 KService::Ptr KPluginInfo::service()
const
00270
{
00271
return d->service;
00272 }
00273
00274 const QValueList<KService::Ptr> &
KPluginInfo::kcmServices()
const
00275
{
00276
if ( !d->kcmservicesCached )
00277 {
00278 d->kcmservices = KTrader::self()->query(
"KCModule",
"'" + d->pluginName +
00279
"' in [X-KDE-ParentComponents]" );
00280
kdDebug( 703 ) <<
"found " << d->kcmservices.count() <<
" offers for " <<
00281 d->pluginName <<
endl;
00282
00283 d->kcmservicesCached =
true;
00284 }
00285
00286
return d->kcmservices;
00287 }
00288
00289 void KPluginInfo::setConfig(
KConfig * config,
const QString & group )
00290 {
00291 d->config = config;
00292 d->configgroup = group;
00293 }
00294
00295 KConfig *
KPluginInfo::config()
const
00296
{
00297
return d->config;
00298 }
00299
00300 const QString &
KPluginInfo::configgroup()
const
00301
{
00302
return d->configgroup;
00303 }
00304
00305 QVariant KPluginInfo::property(
const QString & key )
const
00306
{
00307
if( d->service )
00308
return d->service->property( key );
00309
else
00310
return QVariant();
00311 }
00312
00313 QVariant KPluginInfo::operator[](
const QString & key )
const
00314
{
00315
return property( key );
00316 }
00317
00318 void KPluginInfo::save(
KConfigGroup * config )
00319 {
00320
kdDebug( 703 ) <<
k_funcinfo <<
endl;
00321
if( 0 == config )
00322 {
00323
if( 0 == d->config )
00324 {
00325
kdWarning( 703 ) <<
"no KConfigGroup, cannot save" <<
endl;
00326
return;
00327 }
00328 d->config->setGroup( d->configgroup );
00329 d->config->writeEntry( d->pluginName +
"Enabled",
isPluginEnabled() );
00330 }
00331
else
00332 config->
writeEntry( d->pluginName +
"Enabled",
isPluginEnabled() );
00333 }
00334
00335 void KPluginInfo::load(
KConfigGroup * config )
00336 {
00337
kdDebug( 703 ) <<
k_funcinfo <<
endl;
00338
if( 0 == config )
00339 {
00340
if( 0 == d->config )
00341 {
00342
kdWarning( 703 ) <<
"no KConfigGroup, cannot load" <<
endl;
00343
return;
00344 }
00345 d->config->setGroup( d->configgroup );
00346
setPluginEnabled( d->config->readBoolEntry( d->pluginName +
"Enabled",
isPluginEnabledByDefault() ) );
00347 }
00348
else
00349
setPluginEnabled( config->
readBoolEntry( d->pluginName +
"Enabled",
isPluginEnabledByDefault() ) );
00350 }
00351
00352 void KPluginInfo::defaults()
00353 {
00354
kdDebug( 703 ) <<
k_funcinfo <<
endl;
00355
setPluginEnabled(
isPluginEnabledByDefault() );
00356 }
00357
00358