Merge remote-tracking branch 'origin/simplify-plugin'
This commit is contained in:
commit
b828580464
@ -41,9 +41,6 @@ public:
|
|||||||
, m_queue( queue )
|
, m_queue( queue )
|
||||||
, m_jobIndex( 0 )
|
, m_jobIndex( 0 )
|
||||||
{
|
{
|
||||||
#ifdef WITH_PYTHON
|
|
||||||
new CalamaresPython::Helper( this );
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void setJobs( const JobList& jobs )
|
void setJobs( const JobList& jobs )
|
||||||
|
@ -231,7 +231,9 @@ Helper::Helper( QObject* parent )
|
|||||||
}
|
}
|
||||||
|
|
||||||
Helper::~Helper()
|
Helper::~Helper()
|
||||||
{}
|
{
|
||||||
|
s_instance = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
boost::python::dict
|
boost::python::dict
|
||||||
|
@ -48,7 +48,6 @@ class Helper : public QObject
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit Helper( QObject* parent = nullptr );
|
|
||||||
virtual ~Helper();
|
virtual ~Helper();
|
||||||
|
|
||||||
boost::python::dict createCleanNamespace();
|
boost::python::dict createCleanNamespace();
|
||||||
@ -57,6 +56,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
friend Helper* Calamares::PythonJob::helper();
|
friend Helper* Calamares::PythonJob::helper();
|
||||||
|
explicit Helper( QObject* parent = nullptr );
|
||||||
static Helper* s_instance;
|
static Helper* s_instance;
|
||||||
|
|
||||||
boost::python::object m_mainModule;
|
boost::python::object m_mainModule;
|
||||||
|
@ -322,7 +322,7 @@ PythonJob::exec()
|
|||||||
}
|
}
|
||||||
if ( !m_description.isEmpty() )
|
if ( !m_description.isEmpty() )
|
||||||
{
|
{
|
||||||
cDebug() << "Job" << prettyName() << "(func) ->" << m_description;
|
cDebug() << "Job description from pretty_name" << prettyName() << "=" << m_description;
|
||||||
emit progress( 0 );
|
emit progress( 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -337,7 +337,7 @@ PythonJob::exec()
|
|||||||
auto i_newline = m_description.indexOf('\n');
|
auto i_newline = m_description.indexOf('\n');
|
||||||
if ( i_newline > 0 )
|
if ( i_newline > 0 )
|
||||||
m_description.truncate( i_newline );
|
m_description.truncate( i_newline );
|
||||||
cDebug() << "Job" << prettyName() << "(doc) ->" << m_description;
|
cDebug() << "Job description from __doc__" << prettyName() << "=" << m_description;
|
||||||
emit progress( 0 );
|
emit progress( 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -381,8 +381,10 @@ PythonJob::emitProgress( qreal progressValue )
|
|||||||
CalamaresPython::Helper*
|
CalamaresPython::Helper*
|
||||||
PythonJob::helper()
|
PythonJob::helper()
|
||||||
{
|
{
|
||||||
return CalamaresPython::Helper::s_instance;
|
auto ptr = CalamaresPython::Helper::s_instance;
|
||||||
|
if (!ptr)
|
||||||
|
ptr = new CalamaresPython::Helper;
|
||||||
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -29,47 +29,42 @@
|
|||||||
|
|
||||||
Q_GLOBAL_STATIC( QObjectCleanupHandler, factorycleanup )
|
Q_GLOBAL_STATIC( QObjectCleanupHandler, factorycleanup )
|
||||||
|
|
||||||
extern int kLibraryDebugArea();
|
|
||||||
|
|
||||||
namespace Calamares
|
namespace Calamares
|
||||||
{
|
{
|
||||||
|
|
||||||
PluginFactory::PluginFactory()
|
PluginFactory::PluginFactory()
|
||||||
: d_ptr( new PluginFactoryPrivate )
|
: pd_ptr( new PluginFactoryPrivate )
|
||||||
{
|
{
|
||||||
Q_D( PluginFactory );
|
pd_ptr->q_ptr = this;
|
||||||
d->q_ptr = this;
|
|
||||||
|
|
||||||
factorycleanup()->add( this );
|
factorycleanup()->add( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
PluginFactory::PluginFactory( PluginFactoryPrivate& d )
|
PluginFactory::PluginFactory( PluginFactoryPrivate& d )
|
||||||
: d_ptr( &d )
|
: pd_ptr( &d )
|
||||||
{
|
{
|
||||||
factorycleanup()->add( this );
|
factorycleanup()->add( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
PluginFactory::~PluginFactory()
|
PluginFactory::~PluginFactory()
|
||||||
{
|
{
|
||||||
delete d_ptr;
|
delete pd_ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PluginFactory::doRegisterPlugin( const QString& keyword, const QMetaObject* metaObject, CreateInstanceFunction instanceFunction )
|
void PluginFactory::doRegisterPlugin( const QString& keyword, const QMetaObject* metaObject, CreateInstanceFunction instanceFunction )
|
||||||
{
|
{
|
||||||
Q_D( PluginFactory );
|
|
||||||
|
|
||||||
Q_ASSERT( metaObject );
|
Q_ASSERT( metaObject );
|
||||||
|
|
||||||
// we allow different interfaces to be registered without keyword
|
// we allow different interfaces to be registered without keyword
|
||||||
if ( !keyword.isEmpty() )
|
if ( !keyword.isEmpty() )
|
||||||
{
|
{
|
||||||
if ( d->createInstanceHash.contains( keyword ) )
|
if ( pd_ptr->createInstanceHash.contains( keyword ) )
|
||||||
qWarning() << "A plugin with the keyword" << keyword << "was already registered. A keyword must be unique!";
|
qWarning() << "A plugin with the keyword" << keyword << "was already registered. A keyword must be unique!";
|
||||||
d->createInstanceHash.insert( keyword, PluginFactoryPrivate::Plugin( metaObject, instanceFunction ) );
|
pd_ptr->createInstanceHash.insert( keyword, PluginFactoryPrivate::Plugin( metaObject, instanceFunction ) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const QList<PluginFactoryPrivate::Plugin> clashes( d->createInstanceHash.values( keyword ) );
|
const QList<PluginFactoryPrivate::Plugin> clashes( pd_ptr->createInstanceHash.values( keyword ) );
|
||||||
const QMetaObject* superClass = metaObject->superClass();
|
const QMetaObject* superClass = metaObject->superClass();
|
||||||
if ( superClass )
|
if ( superClass )
|
||||||
{
|
{
|
||||||
@ -96,17 +91,15 @@ void PluginFactory::doRegisterPlugin( const QString& keyword, const QMetaObject*
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
d->createInstanceHash.insertMulti( keyword, PluginFactoryPrivate::Plugin( metaObject, instanceFunction ) );
|
pd_ptr->createInstanceHash.insertMulti( keyword, PluginFactoryPrivate::Plugin( metaObject, instanceFunction ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QObject* PluginFactory::create( const char* iface, QWidget* parentWidget, QObject* parent, const QString& keyword )
|
QObject* PluginFactory::create( const char* iface, QWidget* parentWidget, QObject* parent, const QString& keyword )
|
||||||
{
|
{
|
||||||
Q_D( PluginFactory );
|
|
||||||
|
|
||||||
QObject* obj = nullptr;
|
QObject* obj = nullptr;
|
||||||
|
|
||||||
const QList<PluginFactoryPrivate::Plugin> candidates( d->createInstanceHash.values( keyword ) );
|
const QList<PluginFactoryPrivate::Plugin> candidates( pd_ptr->createInstanceHash.values( keyword ) );
|
||||||
// for !keyword.isEmpty() candidates.count() is 0 or 1
|
// for !keyword.isEmpty() candidates.count() is 0 or 1
|
||||||
|
|
||||||
for ( const PluginFactoryPrivate::Plugin& plugin : candidates )
|
for ( const PluginFactoryPrivate::Plugin& plugin : candidates )
|
||||||
|
@ -37,71 +37,6 @@ class PluginFactoryPrivate;
|
|||||||
|
|
||||||
#define CalamaresPluginFactory_iid "io.calamares.PluginFactory"
|
#define CalamaresPluginFactory_iid "io.calamares.PluginFactory"
|
||||||
|
|
||||||
#define CALAMARES_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY_SKEL(name, baseFactory, ...) \
|
|
||||||
class name : public Calamares::PluginFactory \
|
|
||||||
{ \
|
|
||||||
Q_OBJECT \
|
|
||||||
Q_INTERFACES(Calamares::PluginFactory) \
|
|
||||||
__VA_ARGS__ \
|
|
||||||
public: \
|
|
||||||
explicit name(); \
|
|
||||||
~name(); \
|
|
||||||
private: \
|
|
||||||
void init(); \
|
|
||||||
};
|
|
||||||
|
|
||||||
#define CALAMARES_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY(name, baseFactory) \
|
|
||||||
CALAMARES_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY_SKEL(name, baseFactory, Q_PLUGIN_METADATA(IID CalamaresPluginFactory_iid))
|
|
||||||
|
|
||||||
#define CALAMARES_PLUGIN_FACTORY_DEFINITION_WITH_BASEFACTORY(name, baseFactory, pluginRegistrations) \
|
|
||||||
name::name() \
|
|
||||||
{ \
|
|
||||||
pluginRegistrations \
|
|
||||||
} \
|
|
||||||
name::~name() {}
|
|
||||||
|
|
||||||
#define CALAMARES_PLUGIN_FACTORY_WITH_BASEFACTORY(name, baseFactory, pluginRegistrations) \
|
|
||||||
CALAMARES_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY(name, baseFactory) \
|
|
||||||
CALAMARES_PLUGIN_FACTORY_DEFINITION_WITH_BASEFACTORY(name, baseFactory, pluginRegistrations)
|
|
||||||
|
|
||||||
#define CALAMARES_PLUGIN_FACTORY_DECLARATION(name) CALAMARES_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY(name, Calamares::PluginFactory)
|
|
||||||
#define CALAMARES_PLUGIN_FACTORY_DEFINITION(name, pluginRegistrations) CALAMARES_PLUGIN_FACTORY_DEFINITION_WITH_BASEFACTORY(name, Calamares::PluginFactory, pluginRegistrations)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \relates PluginFactory
|
|
||||||
*
|
|
||||||
* Create a PluginFactory subclass and export it as the root plugin object.
|
|
||||||
*
|
|
||||||
* \param name The name of the PluginFactory derived class.
|
|
||||||
*
|
|
||||||
* \param pluginRegistrations Code to be inserted into the constructor of the
|
|
||||||
* class. Usually a series of registerPlugin() calls.
|
|
||||||
*
|
|
||||||
* Example:
|
|
||||||
* \code
|
|
||||||
* #include <PluginFactory.h>
|
|
||||||
* #include <plugininterface.h>
|
|
||||||
*
|
|
||||||
* class MyPlugin : public PluginInterface
|
|
||||||
* {
|
|
||||||
* public:
|
|
||||||
* MyPlugin(QObject *parent, const QVariantList &args)
|
|
||||||
* : PluginInterface(parent)
|
|
||||||
* {}
|
|
||||||
* };
|
|
||||||
*
|
|
||||||
* CALAMARES_PLUGIN_FACTORY(MyPluginFactory,
|
|
||||||
* registerPlugin<MyPlugin>();
|
|
||||||
* )
|
|
||||||
*
|
|
||||||
* #include <myplugin.moc>
|
|
||||||
* \endcode
|
|
||||||
*
|
|
||||||
* \see CALAMARES_PLUGIN_FACTORY_DECLARATION
|
|
||||||
* \see CALAMARES_PLUGIN_FACTORY_DEFINITION
|
|
||||||
*/
|
|
||||||
#define CALAMARES_PLUGIN_FACTORY(name, pluginRegistrations) CALAMARES_PLUGIN_FACTORY_WITH_BASEFACTORY(name, Calamares::PluginFactory, pluginRegistrations)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \relates PluginFactory
|
* \relates PluginFactory
|
||||||
*
|
*
|
||||||
@ -113,7 +48,18 @@ class PluginFactoryPrivate;
|
|||||||
* \see CALAMARES_PLUGIN_FACTORY
|
* \see CALAMARES_PLUGIN_FACTORY
|
||||||
* \see CALAMARES_PLUGIN_FACTORY_DEFINITION
|
* \see CALAMARES_PLUGIN_FACTORY_DEFINITION
|
||||||
*/
|
*/
|
||||||
#define CALAMARES_PLUGIN_FACTORY_DECLARATION(name) CALAMARES_PLUGIN_FACTORY_DECLARATION_WITH_BASEFACTORY(name, Calamares::PluginFactory)
|
#define CALAMARES_PLUGIN_FACTORY_DECLARATION(name) \
|
||||||
|
class name : public Calamares::PluginFactory \
|
||||||
|
{ \
|
||||||
|
Q_OBJECT \
|
||||||
|
Q_INTERFACES(Calamares::PluginFactory) \
|
||||||
|
Q_PLUGIN_METADATA(IID CalamaresPluginFactory_iid) \
|
||||||
|
public: \
|
||||||
|
explicit name(); \
|
||||||
|
~name(); \
|
||||||
|
private: \
|
||||||
|
void init(); \
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \relates PluginFactory
|
* \relates PluginFactory
|
||||||
@ -128,7 +74,12 @@ class PluginFactoryPrivate;
|
|||||||
* \see CALAMARES_PLUGIN_FACTORY
|
* \see CALAMARES_PLUGIN_FACTORY
|
||||||
* \see CALAMARES_PLUGIN_FACTORY_DECLARATION
|
* \see CALAMARES_PLUGIN_FACTORY_DECLARATION
|
||||||
*/
|
*/
|
||||||
#define CALAMARES_PLUGIN_FACTORY_DEFINITION(name, pluginRegistrations) CALAMARES_PLUGIN_FACTORY_DEFINITION_WITH_BASEFACTORY(name, Calamares::PluginFactory, pluginRegistrations)
|
#define CALAMARES_PLUGIN_FACTORY_DEFINITION(name, pluginRegistrations) \
|
||||||
|
name::name() \
|
||||||
|
{ \
|
||||||
|
pluginRegistrations \
|
||||||
|
} \
|
||||||
|
name::~name() {}
|
||||||
|
|
||||||
namespace Calamares
|
namespace Calamares
|
||||||
{
|
{
|
||||||
@ -160,13 +111,11 @@ namespace Calamares
|
|||||||
* T(QObject *parent, const QVariantList &args)
|
* T(QObject *parent, const QVariantList &args)
|
||||||
* \endcode
|
* \endcode
|
||||||
*
|
*
|
||||||
* You should typically use either CALAMARES_PLUGIN_FACTORY() or
|
* You should typically use CALAMARES_PLUGIN_FACTORY_DEFINITION() in your plugin code to
|
||||||
* CALAMARES_PLUGIN_FACTORY_WITH_JSON() in your plugin code to create the factory. The
|
* create the factory. The pattern is
|
||||||
* typical pattern is
|
|
||||||
*
|
*
|
||||||
* \code
|
* \code
|
||||||
* #include <PluginFactory.h>
|
* #include "utils/PluginFactory.h"
|
||||||
* #include <plugininterface.h>
|
|
||||||
*
|
*
|
||||||
* class MyPlugin : public PluginInterface
|
* class MyPlugin : public PluginInterface
|
||||||
* {
|
* {
|
||||||
@ -176,10 +125,9 @@ namespace Calamares
|
|||||||
* {}
|
* {}
|
||||||
* };
|
* };
|
||||||
*
|
*
|
||||||
* CALAMARES_PLUGIN_FACTORY(MyPluginFactory,
|
* CALAMARES_PLUGIN_FACTORY_DEFINITION(MyPluginFactory,
|
||||||
* registerPlugin<MyPlugin>();
|
* registerPlugin<MyPlugin>();
|
||||||
* )
|
* )
|
||||||
* #include <myplugin.moc>
|
|
||||||
* \endcode
|
* \endcode
|
||||||
*
|
*
|
||||||
* If you want to load a library use KPluginLoader.
|
* If you want to load a library use KPluginLoader.
|
||||||
@ -200,7 +148,7 @@ namespace Calamares
|
|||||||
class DLLEXPORT PluginFactory : public QObject
|
class DLLEXPORT PluginFactory : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_DECLARE_PRIVATE( PluginFactory )
|
friend class PluginFactoryPrivate;
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* This constructor creates a factory for a plugin.
|
* This constructor creates a factory for a plugin.
|
||||||
@ -301,7 +249,7 @@ protected:
|
|||||||
doRegisterPlugin( keyword, &T::staticMetaObject, instanceFunction );
|
doRegisterPlugin( keyword, &T::staticMetaObject, instanceFunction );
|
||||||
}
|
}
|
||||||
|
|
||||||
PluginFactoryPrivate* const d_ptr;
|
PluginFactoryPrivate* const pd_ptr;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function is called when the factory asked to create an Object.
|
* This function is called when the factory asked to create an Object.
|
||||||
|
@ -100,6 +100,7 @@ ViewManager::ViewManager( QObject* parent )
|
|||||||
ViewManager::~ViewManager()
|
ViewManager::~ViewManager()
|
||||||
{
|
{
|
||||||
m_widget->deleteLater();
|
m_widget->deleteLater();
|
||||||
|
s_instance = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -123,7 +123,7 @@ signals:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
explicit ViewManager( QObject* parent = nullptr );
|
explicit ViewManager( QObject* parent = nullptr );
|
||||||
virtual ~ViewManager();
|
virtual ~ViewManager() override;
|
||||||
|
|
||||||
void insertViewStep( int before, ViewStep* step );
|
void insertViewStep( int before, ViewStep* step );
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ class ModuleManager : public QObject
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit ModuleManager( const QStringList& paths, QObject* parent = nullptr );
|
explicit ModuleManager( const QStringList& paths, QObject* parent = nullptr );
|
||||||
virtual ~ModuleManager();
|
virtual ~ModuleManager() override;
|
||||||
|
|
||||||
static ModuleManager* instance();
|
static ModuleManager* instance();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user