28#include <qstringlist.h>
35#include <kparts/componentfactory.h>
45#include "pluginloader.moc"
175 return d->m_shouldLoad;
180 d->m_shouldLoad=value;
200 Q_ASSERT( s_instance == 0 );
205 d->m_ignores = ignores;
207 KTrader::OfferList offers = KTrader::self()->query(
"KIPI/Plugin");
208 KConfig* config = KGlobal::config();
209 config->setGroup( QString::fromLatin1(
"KIPI/EnabledPlugin" ) );
211 KTrader::OfferList::ConstIterator iter;
212 for(iter = offers.begin(); iter != offers.end(); ++iter)
214 KService::Ptr service = *iter;
215 QString name = service->name();
216 QString comment = service->comment();
217 QString library = service->library();
218 QStringList reqFeatures = service->property( QString::fromLatin1(
"X-KIPI-ReqFeatures" ) ).toStringList();
220 if (library.isEmpty() || name.isEmpty() )
222 kdWarning( 51001 ) <<
"KIPI::PluginLoader: Plugin had an empty name or library file - this should not happen." <<
endl;
226 if ( d->m_ignores.contains( name ) )
228 kdDebug( 51001 ) <<
"KIPI::PluginLoader: plugin " << name <<
" is in the ignore list for host application" <<
endl;
232 bool appHasAllReqFeatures=
true;
233 for( QStringList::Iterator featureIt = reqFeatures.begin(); featureIt != reqFeatures.end(); ++featureIt )
235 if ( !d->m_interface->hasFeature( *featureIt ) )
237 kdDebug( 51001 ) <<
"Plugin " << name <<
" was not loaded because the host application is missing\n"
238 <<
"the feature " << *featureIt <<
endl;
239 appHasAllReqFeatures=
false;
244 bool load = config->readBoolEntry( name,
true );
246 if (!appHasAllReqFeatures)
249 Info* info =
new Info( name, comment, library, load );
250 d->m_pluginList.append( info );
261 for( PluginList::Iterator it = d->m_pluginList.begin(); it != d->m_pluginList.end(); ++it )
274 plugin = KParts::ComponentFactory
275 ::createInstanceFromLibrary<Plugin>(info->
library().local8Bit().data(),
276 d->m_interface, 0, QStringList(), &error);
279 kdDebug( 51001 ) <<
"KIPI::PluginLoader: Loaded plugin " << plugin->name() <<
endl;
282 kdWarning( 51001 ) <<
"KIPI::PluginLoader:: createInstanceFromLibrary returned 0 for "
284 <<
" (" << info->
library() <<
")"
285 <<
" with error number "
287 if (error == KParts::ComponentFactory::ErrNoLibrary)
288 kdWarning( 51001 ) <<
"KLibLoader says: "
289 << KLibLoader::self()->lastErrorMessage() <<
endl;
299 return d->m_pluginList;
304 Q_ASSERT( s_instance != 0);
326 setChecked(
info->shouldLoad() );
337 : QScrollView( parent,
"KIPI::PluginLoader::ConfigWidget" )
340 QWidget* top =
new QWidget( viewport() );
342 setResizePolicy( AutoOneFit );
344 QVBoxLayout* lay =
new QVBoxLayout( top, KDialog::marginHint(), KDialog::spacingHint() );
347 for( PluginLoader::PluginList::Iterator it = list.begin(); it != list.end(); ++it )
350 lay->addWidget( cb );
351 d->_boxes.append( cb );
364 KConfig* config = KGlobal::config();
365 config->setGroup( QString::fromLatin1(
"KIPI/EnabledPlugin" ) );
366 bool changes =
false;
368 for( QValueList<PluginCheckBox*>::Iterator it = d->_boxes.begin(); it != d->_boxes.end(); ++it )
370 bool orig = (*it)->info->shouldLoad();
371 bool load = (*it)->isChecked();
375 config->writeEntry( (*it)->info->name(), load );
376 (*it)->info->setShouldLoad(load);
383 if ( (*it)->info->plugin() )
KDStream & endl(KDStream &stream)
Definition KDStream.cpp:264
Definition interface.h:64
Definition pluginloader.cpp:320
PluginLoader::Info * info
Definition pluginloader.cpp:328
PluginCheckBox(PluginLoader::Info *info, QWidget *parent)
Definition pluginloader.cpp:323
Definition pluginloader.h:50
Plugin * plugin() const
Definition pluginloader.cpp:163
void setShouldLoad(bool)
Definition pluginloader.cpp:178
bool shouldLoad() const
Definition pluginloader.cpp:173
void setPlugin(Plugin *)
Definition pluginloader.cpp:168
QString comment() const
Definition pluginloader.cpp:153
Info(const QString &name, const QString &comment, const QString &library, bool shouldLoad)
Definition pluginloader.cpp:133
QString name() const
Definition pluginloader.cpp:148
QString library() const
Definition pluginloader.cpp:158
~Info()
Definition pluginloader.cpp:143
QValueList< Info * > PluginList
Definition pluginloader.h:81
virtual ~PluginLoader()
Definition pluginloader.cpp:254
PluginLoader(const QStringList &ignores, Interface *interface)
Definition pluginloader.cpp:198
void loadPlugins()
Definition pluginloader.cpp:259
ConfigWidget * configWidget(QWidget *parent)
Definition pluginloader.cpp:313
static PluginLoader * instance()
Definition pluginloader.cpp:302
void loadPlugin(Info *)
Definition pluginloader.cpp:268
void unplug(KIPI::PluginLoader::Info *)
const PluginList & pluginList()
Definition pluginloader.cpp:297
friend class ConfigWidget
Definition pluginloader.h:95
void plug(KIPI::PluginLoader::Info *)
Definition batchprogressdialog.cpp:70
Definition pluginloader.cpp:125
QString m_comment
Definition pluginloader.cpp:127
QString m_name
Definition pluginloader.cpp:126
bool m_shouldLoad
Definition pluginloader.cpp:130
QString m_library
Definition pluginloader.cpp:128
Plugin * m_plugin
Definition pluginloader.cpp:129
Definition pluginloader.cpp:192
PluginList m_pluginList
Definition pluginloader.cpp:193
QStringList m_ignores
Definition pluginloader.cpp:195
Interface * m_interface
Definition pluginloader.cpp:194