Expose global_storage and utils as objects in PythonQt.calamares.

This commit is contained in:
Teo Mrnjavac 2016-10-21 16:39:44 +02:00
parent 864109fd4e
commit a3887d268a

View File

@ -23,6 +23,8 @@
#include "viewpages/PythonQtViewStep.h" #include "viewpages/PythonQtViewStep.h"
#include "ViewManager.h" #include "ViewManager.h"
#include "CalamaresConfig.h" #include "CalamaresConfig.h"
#include "viewpages/PythonQtGlobalStorageWrapper.h"
#include "viewpages/PythonQtUtilsWrapper.h"
#include "GlobalStorage.h" #include "GlobalStorage.h"
#include "JobQueue.h" #include "JobQueue.h"
@ -33,48 +35,11 @@
#include <QPointer> #include <QPointer>
/**
* @brief This GlobalStorage class is a namespace-free wrapper for
* Calamares::GlobalStorage. This is unfortunately a necessity
* because PythonQt doesn't like namespaces.
*/
class GlobalStorage : public QObject
{
Q_OBJECT
public:
explicit GlobalStorage( Calamares::GlobalStorage* gs )
: QObject( gs )
, m_gs( gs )
{}
public slots:
bool contains( const QString& key ) const
{ return m_gs->contains( key ); }
int count() const
{ return m_gs->count(); }
void insert( const QString& key, const QVariant& value )
{ m_gs->insert( key, value ); }
QStringList keys() const
{ return m_gs->keys(); }
int remove( const QString& key )
{ return m_gs->remove( key ); }
QVariant value( const QString& key ) const
{ return m_gs->value( key ); }
private:
Calamares::GlobalStorage* m_gs;
};
static QPointer< GlobalStorage > s_gs = nullptr; static QPointer< GlobalStorage > s_gs = nullptr;
static QPointer< Utils > s_utils = nullptr;
namespace Calamares { namespace Calamares {
Module::Type Module::Type
PythonQtViewModule::type() const PythonQtViewModule::type() const
{ {
@ -111,17 +76,25 @@ PythonQtViewModule::loadSelf()
//PythonQt::self()->registerClass( &PythonQtViewStep::staticMetaObject, //PythonQt::self()->registerClass( &PythonQtViewStep::staticMetaObject,
// "calamares" ); // "calamares" );
// Prepare GlobalStorage object, in module PythonQt.calamares // We only do the following to force PythonQt to create a submodule
if ( !s_gs ) // "calamares" for us to put our static objects in
s_gs = new ::GlobalStorage( Calamares::JobQueue::instance()->globalStorage() );
PythonQt::self()->registerClass( &::GlobalStorage::staticMetaObject, PythonQt::self()->registerClass( &::GlobalStorage::staticMetaObject,
"calamares" ); "calamares" );
// Get a PythonQtObjectPtr to the PythonQt.calamares submodule
PythonQtObjectPtr pqtm = PythonQt::priv()->pythonQtModule(); PythonQtObjectPtr pqtm = PythonQt::priv()->pythonQtModule();
PythonQtObjectPtr cala = PythonQt::self()->lookupObject( pqtm, "calamares" ); PythonQtObjectPtr cala = PythonQt::self()->lookupObject( pqtm, "calamares" );
// Prepare GlobalStorage object, in module PythonQt.calamares
if ( !s_gs )
s_gs = new ::GlobalStorage( Calamares::JobQueue::instance()->globalStorage() );
cala.addObject( "global_storage", s_gs ); cala.addObject( "global_storage", s_gs );
// Prepare Utils object, in module PythonQt.calamares
if ( !s_utils )
s_utils = new ::Utils( Calamares::JobQueue::instance()->globalStorage() );
cala.addObject( "utils", s_utils );
// Basic stdout/stderr handling // Basic stdout/stderr handling
QObject::connect( PythonQt::self(), &PythonQt::pythonStdOut, QObject::connect( PythonQt::self(), &PythonQt::pythonStdOut,
[]( const QString& message ) []( const QString& message )
@ -228,5 +201,3 @@ PythonQtViewModule::~PythonQtViewModule()
} }
} // namespace Calamares } // namespace Calamares
#include "PythonQtViewModule.moc"