Added FormLoader plugin

This commit is contained in:
Micke Prag 2009-04-06 16:42:36 +00:00
parent 46a8eddd95
commit ad60c6978a
6 changed files with 155 additions and 0 deletions

View file

@ -0,0 +1,19 @@
# -------------------------------------------------
# Project created by QtCreator 2009-03-10T12:16:44
# -------------------------------------------------
QT += core \
gui \
script
TARGET = FormLoader
TEMPLATE = lib
CONFIG += plugin uitools
SOURCES += formloaderplugin.cpp \
formloaderobject.cpp
HEADERS += formloaderplugin.h \
formloaderobject.h
macx {
DESTDIR = ../../TelldusCenter/TelldusCenter.app/Contents/Plugins/script
}
!macx {
DESTDIR = ../../TelldusCenter/Plugins/script
}

View file

@ -0,0 +1,57 @@
#include "formloaderobject.h"
#include <QApplication>
#include <QWidget>
#include <QScriptEngine>
#include <QUiLoader>
#include <QStringList>
#include <QDir>
#include <QDebug>
FormLoaderObject::FormLoaderObject( QScriptEngine *e, QObject * parent )
: QObject(parent),
engine(e)
{
}
FormLoaderObject::~FormLoaderObject() {
}
void FormLoaderObject::load( const QString &name ) {
foreach( QString path, qApp->libraryPaths() ) {
QDir dir(path);
if (!dir.cd("Forms")) {
continue;
}
if (!dir.cd(name)) {
continue;
}
if (!dir.exists( QString("%1.ui").arg(name) )) {
qDebug() << "UI-file not found for form" << name;
continue;
}
if (!dir.exists( QString("%1.js").arg(name) )) {
qDebug() << "JS-file not found for form" << name;
continue;
}
QString scriptFileName( dir.filePath(QString("%1.js").arg(name)) );
QFile scriptFile(scriptFileName);
scriptFile.open(QIODevice::ReadOnly);
engine->evaluate(scriptFile.readAll(), scriptFileName);
scriptFile.close();
QUiLoader loader;
QFile uiFile( dir.filePath(QString("%1.ui").arg(name)) );
uiFile.open( QIODevice::ReadOnly );
QWidget *ui = loader.load(&uiFile);
uiFile.close();
QScriptValue ctor = engine->evaluate(name);
QScriptValue scriptUi = engine->newQObject(ui, QScriptEngine::ScriptOwnership);
QScriptValue calc = ctor.construct(QScriptValueList() << scriptUi);
ui->show();
return;
}
qDebug() << "Form" << name << "not found!";
}

View file

@ -0,0 +1,22 @@
#ifndef FORMLOADEROBJECT_H
#define FORMLOADEROBJECT_H
#include <QObject>
class QScriptEngine;
class FormLoaderObject : public QObject
{
Q_OBJECT
public:
FormLoaderObject( QScriptEngine *engine, QObject * parent = 0 );
virtual ~FormLoaderObject();
public slots:
void load( const QString &name );
private:
QScriptEngine *engine;
};
#endif // FORMLOADEROBJECT_H

View file

@ -0,0 +1,35 @@
#include "formloaderplugin.h"
#include "formloaderobject.h"
#include <QScriptEngine>
#include <QDebug>
class FormLoaderPluginPrivate {
public:
FormLoaderObject *formloader;
};
FormLoaderPlugin::FormLoaderPlugin ( QObject * parent )
:QScriptExtensionPlugin( parent )
{
d = new FormLoaderPluginPrivate;
d->formloader = 0;
}
FormLoaderPlugin::~FormLoaderPlugin() {
delete d;
}
void FormLoaderPlugin::initialize ( const QString & key, QScriptEngine * engine ) {
if (key == "com.telldus.form") {
d->formloader = new FormLoaderObject(engine, this);
QScriptValue value = engine->newQObject(d->formloader);
engine->globalObject().property("com").property("telldus").setProperty("form", value);
}
}
QStringList FormLoaderPlugin::keys () const {
return QStringList() << "com.telldus.form";
}
Q_EXPORT_PLUGIN2(FormLoaderInterface, FormLoaderPlugin)

View file

@ -0,0 +1,21 @@
#ifndef FORMLOADERPLUGIN_H
#define FORMLOADERPLUGIN_H
#include <QScriptExtensionPlugin>
class FormLoaderPluginPrivate;
class FormLoaderPlugin : public QScriptExtensionPlugin {
public:
FormLoaderPlugin ( QObject * parent = 0 );
~FormLoaderPlugin ();
virtual void initialize ( const QString & key, QScriptEngine * engine );
virtual QStringList keys () const;
private:
FormLoaderPluginPrivate *d;
};
#endif // FORMLOADERPLUGIN_H

View file

@ -1,5 +1,6 @@
TEMPLATE=subdirs
SUBDIRS = Devices \
FormLoader \
Systray \
TouchInterface