hsqml-0.1.0: cbits/HsQMLEngine.cpp
#include "hsqml.h"
#include "HsQMLManager.h"
#include "HsQMLEngine.h"
#include "HsQMLObject.h"
#include "HsQMLWindow.h"
HsQMLEngine::HsQMLEngine(HsQMLEngineConfig& config)
{
// Obtain, re-parent, and set QML global object
if (config.contextObject) {
QObject* contextObject = config.contextObject->object();
contextObject->setParent(this);
mEngine.rootContext()->setContextObject(contextObject);
}
// Create window
HsQMLWindow* win = new HsQMLWindow(this);
win->setSource(config.initialURL);
win->setVisible(config.showWindow);
if (config.setWindowTitle) {
win->setTitle(config.windowTitle);
}
mWindows.insert(win);
}
HsQMLEngine::~HsQMLEngine()
{
}
QDeclarativeEngine* HsQMLEngine::engine()
{
return &mEngine;
}
extern "C" void hsqml_create_engine(
HsQMLObjectHandle* contextObject,
HsQMLUrlHandle* initialURL,
int showWindow,
int setWindowTitle,
HsQMLStringHandle* windowTitle)
{
HsQMLEngineConfig config;
config.contextObject = reinterpret_cast<HsQMLObjectProxy*>(contextObject);
config.initialURL = *reinterpret_cast<QUrl*>(initialURL);
config.showWindow = static_cast<bool>(showWindow);
if (setWindowTitle) {
config.setWindowTitle = true;
config.windowTitle = *reinterpret_cast<QString*>(windowTitle);
}
Q_ASSERT (gManager);
QMetaObject::invokeMethod(
gManager, "createEngine", Qt::QueuedConnection,
Q_ARG(HsQMLEngineConfig, config));
}