SVN commit 784004 by staniek:
Port plugin interface to KDE4 in KMobileTools and KitchenSync
Use KDE4's K_PLUGIN_FACTORY and K_EXPORT_PLUGIN instead of KDE3's
K_EXPORT_COMPONENT_FACTORY, what means not only porting but fixing bugs
related to loading KDE3-like plugins on Windows.
Also:
- simplify the code a bit in device loader and service loader using foreach()
M +2 -14 engines/at_engine/at_engine.cpp
M +0 -13 engines/at_engine/at_engine.h
M +8 -4 engines/fake_engine/fakeengine.cpp
M +4 -2 engines/fake_engine/fakeengine.h
M +11 -13 libkmobiletools/deviceloader.cpp
M +5 -4 libkmobiletools/engine.cpp
M +11 -10 libkmobiletools/serviceloader.cpp
M +2 -2 mainpart/kmobiletools_mainpart.cpp
M +8 -5 mainpart/services/addressbook/addressbook.cpp
M +3 -2 mainpart/services/addressbook/addressbook.h
--- trunk/KDE/kdepim/kmobiletools/kmobiletools/engines/at_engine/at_engine.cpp #784003:784004
@@ -78,23 +78,11 @@
KMobileTools::Engine::queryClose();
}
-K_EXPORT_COMPONENT_FACTORY( kmobiletools_at, AT_EngineFactory )
+K_PLUGIN_FACTORY( AT_EngineFactory, registerPlugin<AT_Engine>(); )
+K_EXPORT_PLUGIN( AT_EngineFactory("kmobiletools_at") )
-AT_EngineFactory::AT_EngineFactory()
-{
-}
-AT_EngineFactory::~AT_EngineFactory()
-{
-}
-AT_Engine *AT_EngineFactory::createObject(QObject *parent, const char * /*classname*/, const QStringList &/*args*/ )
-{
- return new AT_Engine(parent); /// @TODO we have to specify engine name, perhaps in args
-}
-
-
-
/*!
\fn AT_Engine::probePhone()
*/
--- trunk/KDE/kdepim/kmobiletools/kmobiletools/engines/at_engine/at_engine.h #784003:784004
@@ -133,17 +133,4 @@
void foundDeviceData(FindDeviceDataJob*);
};
-
-class AT_EngineFactory : public KLibFactory
-{
- Q_OBJECT
-public:
- AT_EngineFactory();
- virtual ~AT_EngineFactory();
- virtual AT_Engine* createObject( QObject *parent, const char *classname, const QStringList &args );
-
-private:
-};
-
-
#endif
--- trunk/KDE/kdepim/kmobiletools/kmobiletools/engines/fake_engine/fakeengine.cpp #784003:784004
@@ -307,9 +307,10 @@
status( QString( "Enqueued addressee \"%1\" to be removed." ).arg( addressee.name() ) );
}
-K_EXPORT_COMPONENT_FACTORY( kmobiletools_fake, FakeEngineFactory )
+K_EXPORT_PLUGIN( FakeEngineFactory )
FakeEngineFactory::FakeEngineFactory()
+ : KPluginFactory("kmobiletools_fake")
{
}
@@ -317,10 +318,13 @@
{
}
-FakeEngine *FakeEngineFactory::createObject(QObject *parent, const char *classname, const QStringList& args)
+QObject *FakeEngineFactory::create(
+ const char *iface, QWidget *parentWidget, QObject *parent, const QVariantList &args, const QString &keyword )
{
- Q_UNUSED(classname)
- QString deviceName = args.at( 0 );
+ Q_UNUSED(iface)
+ Q_UNUSED(parentWidget)
+ Q_UNUSED(keyword)
+ QString deviceName = args.at( 0 ).toString();
return new FakeEngine( parent, deviceName );
}
--- trunk/KDE/kdepim/kmobiletools/kmobiletools/engines/fake_engine/fakeengine.h #784003:784004
@@ -163,13 +163,15 @@
};
-class FakeEngineFactory : public KLibFactory
+class FakeEngineFactory : public KPluginFactory
{
Q_OBJECT
public:
FakeEngineFactory();
virtual ~FakeEngineFactory();
- virtual FakeEngine* createObject( QObject *parent, const char *classname, const QStringList &args );
+
+ vitual QObject *create(
+ const char *iface, QWidget *parentWidget, QObject *parent, const QVariantList &args, const QString &keyword );
};
#endif
--- trunk/KDE/kdepim/kmobiletools/kmobiletools/libkmobiletools/deviceloader.cpp #784003:784004
@@ -85,33 +85,31 @@
return false;
// check if a there's a suitable engine service in the list
- int serviceNumber = 0;
- bool engineFound = false;
- for( ; serviceNumber < d->m_engineOffers.size(); serviceNumber++ ) {
- if( d->m_engineOffers.at( serviceNumber )->name() == engineName ) {
- engineFound = true;
+ KService::Ptr engineService;
+ foreach( KService::Ptr engineOffer, d->m_engineOffers ) {
+ if( engineOffer->name() == engineName ) {
+ engineService = engineOffer;
break;
}
}
// no suitable engine available?
- if( !engineFound )
+ if( engineService.isNull() )
return false;
// try to load the engine
- QStringList argDeviceName( deviceName );
- // get a reference to the service
- const KService& engineService = *d->m_engineOffers.at( serviceNumber ).constData();
- KPluginLoader pluginLoader( engineService );
-
// create the engine instance
- KMobileTools::EngineXP* engine = pluginLoader.factory()->create<KMobileTools::EngineXP>((QObject*)0, argDeviceName );
+ KPluginFactory *factory = KPluginLoader pluginLoader( *engineService ).factory();
+ if( !factory )
+ return false;
+ QStringList argDeviceName( deviceName );
+ KMobileTools::EngineXP* engine = factory->create<KMobileTools::EngineXP>((QObject*)0, argDeviceName );
if( !engine )
return false;
// retrieve information about the engine
- d->m_engineInformation.insert( deviceName, KPluginInfo( d->m_engineOffers.at( serviceNumber ) ) );
+ d->m_engineInformation.insert( deviceName, KPluginInfo( engineService ) );
d->m_loadedDevices.insert( deviceName, engine );
emit deviceLoaded( deviceName );
--- trunk/KDE/kdepim/kmobiletools/kmobiletools/libkmobiletools/engine.cpp #784003:784004
@@ -214,13 +214,14 @@
Engine *Engine::load(const QString &libname, QObject *parent)
{
kDebug() <<"Engine::load(" << libname <<")";
- KLibFactory *factory=KLibLoader::self()->factory(qPrintable(libname));
+ KPluginLoader loader(libname);
+ KPluginFactory *factory=loader.factory();
if(!factory) {
- kDebug() <<"Error loading library:" << KLibLoader::self()->lastErrorMessage();
+ kDebug() <<"Error loading library:" << loader.errorString();
return NULL;
}
- Engine *ret=static_cast<KMobileTools::Engine *>(factory->create(parent, "KMobileTools::Engine" ) );
- if(parent) ret->setObjectName(parent->objectName());
+ Engine *ret=factory->create<KMobileTools::Engine>(parent);
+ if(ret && parent) ret->setObjectName(parent->objectName());
return ret;
}
--- trunk/KDE/kdepim/kmobiletools/kmobiletools/libkmobiletools/serviceloader.cpp #784003:784004
@@ -86,27 +86,28 @@
return;
// iterate over the services and look which one we can use
- KMobileTools::CoreService* service;
QStringList deviceNameList;
deviceNameList << deviceName;
- for( int i=0; i<serviceOffers.size(); i++ ) {
- // get a reference to the service
- const KService& coreService = *serviceOffers.at( i ).constData();
- KPluginLoader pluginLoader( coreService );
-
- QObject* serviceObject = pluginLoader.factory()->create<KMobileTools::CoreService>((QObject*)0, deviceNameList );
+ foreach( KService::Ptr coreService, serviceOffers ) {
+ // get a reference to the service
+ KPluginFactory *factory = KPluginLoader( *coreService ).factory();
+ if( !factory )
+ continue;
+ QObject* serviceObject = factory->create<KMobileTools::CoreService>((QObject*)0, deviceNameList );
if( !serviceObject )
continue;
- service = qobject_cast<KMobileTools::CoreService*>( serviceObject );
+ KMobileTools::CoreService* service = qobject_cast<KMobileTools::CoreService*>( serviceObject );
if( !service )
continue;
bool fulfillsRequirements = true;
QStringList requirements = service->requires();
- for( int j=0; j<requirements.size(); j++ ) {
- if( !engine->implements( requirements.at(i) ) )
+ foreach( const QString& requirement, requirements ) {
+ if( !engine->implements( requirement ) ) {
fulfillsRequirements = false;
+ break;
+ }
}
// service fulfills our requirements
--- trunk/KDE/kdepim/kmobiletools/kmobiletools/mainpart/kmobiletools_mainpart.cpp #784003:784004
@@ -81,8 +81,8 @@
#include "jobqueueview/jobqueueview.h"
#include "jobqueueview/jobitem.h"
-typedef KParts::GenericFactory<kmobiletoolsMainPart> kmobiletoolsMainPartFactory;
-K_EXPORT_COMPONENT_FACTORY( kmobiletoolsmainpart, kmobiletoolsMainPartFactory )
+K_PLUGIN_FACTORY( kmobiletoolsMainPartFactory, registerPlugin<kmobiletoolsMainPart>(); )
+K_EXPORT_PLUGIN( kmobiletoolsMainPartFactory )
KAboutData *kmobiletoolsMainPart::createAboutData()
{
--- trunk/KDE/kdepim/kmobiletools/kmobiletools/mainpart/services/addressbook/addressbook.cpp #784003:784004
@@ -319,9 +319,10 @@
}
}
-K_EXPORT_COMPONENT_FACTORY( libkmtaddressbook_service, AddressbookFactory )
+K_EXPORT_PLUGIN( AddressbookFactory )
AddressbookFactory::AddressbookFactory()
+ : KPluginFactory("libkmtaddressbook_service")
{
}
@@ -329,11 +330,13 @@
{
}
-Addressbook *AddressbookFactory::createObject(QObject *parent, const char *classname, const QStringList& args)
+QObject *AddressbookFactory::create(
+ const char *iface, QWidget *parentWidget, QObject *parent, const QVariantList &args, const QString &keyword )
{
- Q_UNUSED(classname)
- QStringList arguments( args );
- return new Addressbook( parent, arguments.at(0) );
+ Q_UNUSED(iface)
+ Q_UNUSED(parentWidget)
+ Q_UNUSED(keyword)
+ return new Addressbook( parent, args.at(0).toString() );
}
#include "addressbook.moc"
--- trunk/KDE/kdepim/kmobiletools/kmobiletools/mainpart/services/addressbook/addressbook.h #784003:784004
@@ -155,13 +155,14 @@
QAction* m_deleteContact;
};
-class AddressbookFactory : public KLibFactory
+class AddressbookFactory : public KPluginFactory
{
Q_OBJECT
public:
AddressbookFactory();
virtual ~AddressbookFactory();
- virtual Addressbook* createObject( QObject *parent, const char *classname, const QStringList &args );
+ virtual QObject *create(
+ const char *iface, QWidget *parentWidget, QObject *parent, const QVariantList &args, const QString &keyword );
};
#endif
_______________________________________________
kmobiletools mailing list
kmobiletools@...
https://mail.kde.org/mailman/listinfo/kmobiletools