Added configuration dialog

This commit is contained in:
Micke Prag 2010-12-20 14:52:54 +00:00
parent 6281cf8b95
commit 68f55ac85d
7 changed files with 66 additions and 16 deletions

View file

@ -9,6 +9,7 @@ endif(COMMAND cmake_policy)
######## Non configurable options ########
SET( telldus-center_SRCS
configurationdialog.cpp
main.cpp
mainwindow.cpp
scriptenvironment.cpp
@ -26,6 +27,7 @@ SET( telldus-center_HDRS
)
SET( telldus-center_MOC_HDRS
configurationdialog.h
mainwindow.h
scriptenvironment.h
tellduscenterapplication.h

View file

@ -0,0 +1,11 @@
#include "configurationdialog.h"
#include <QDebug>
ConfigurationDialog::ConfigurationDialog(QWidget *parent) :
QDialog(parent)
{
}
void ConfigurationDialog::open() {
this->exec();
}

View file

@ -0,0 +1,19 @@
#ifndef CONFIGURATIONDIALOG_H
#define CONFIGURATIONDIALOG_H
#include <QDialog>
class ConfigurationDialog : public QDialog
{
Q_OBJECT
public:
explicit ConfigurationDialog(QWidget *parent = 0);
signals:
public slots:
void open();
};
#endif // CONFIGURATIONDIALOG_H

View file

@ -9,12 +9,14 @@
#include <QSettings>
#include <QVBoxLayout>
#include <QCloseEvent>
#include <QScriptEngine>
#include <QDebug>
#include "tellduscenterapplication.h"
#include "tellduscenterplugin.h"
#include "message.h"
#include "plugintree.h"
#include "scriptenvironment.h"
#define VERSION_STRING_HELPER(X) #X
#define VERSION_STRING(X) VERSION_STRING_HELPER(X)
@ -26,15 +28,17 @@ public:
QStackedLayout *stackedLayout;
PluginTree pluginTree;
QActionGroup *pagesActionGroup;
ScriptEnvironment *env;
};
MainWindow::MainWindow(QWidget *parent, Qt::WFlags flags)
MainWindow::MainWindow(ScriptEnvironment *env, QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
d = new MainWindowPrivate;
d->pagesActionGroup = new QActionGroup( this );
d->message = new Message();
connect(qApp, SIGNAL(showMessage(QString,QString,QString)), d->message, SLOT(showMessage(QString,QString,QString)));
d->env = env;
//setAttribute(Qt::WA_DeleteOnClose, true);
@ -81,6 +85,8 @@ void MainWindow::setupMenu() {
// File
QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
QAction *config = fileMenu->addAction(tr("&Configure"), this, SLOT(slotConfigure()));
fileMenu->addSeparator();
QAction *quit = fileMenu->addAction(tr("&Quit"), qApp, SLOT(quit()));
quit->setMenuRole( QAction::QuitRole );
@ -130,6 +136,10 @@ void MainWindow::slotAboutApplication() {
"<p>Copyright &copy; 2010 Telldus Technologies AB<p></center>").arg(VERSION_STRING(VERSION)));
}
void MainWindow::slotConfigure() {
d->env->engine()->evaluate("application.configuration.open();");
}
void MainWindow::slotPagesClick() {
QAction *action = qobject_cast<QAction *>(sender());
if (action) {

View file

@ -6,6 +6,7 @@
class QToolBar;
class Message;
class ScriptEnvironment;
class MainWindowPrivate;
@ -14,7 +15,7 @@ class MainWindow : public QMainWindow
Q_OBJECT
public:
MainWindow(QWidget *parent = 0, Qt::WFlags flags = 0);
MainWindow(ScriptEnvironment *env, QWidget *parent = 0, Qt::WFlags flags = 0);
~MainWindow();
public slots:
@ -25,6 +26,7 @@ protected:
private slots:
void slotAboutApplication();
void slotConfigure();
void slotPagesClick();
private:

View file

@ -1,4 +1,5 @@
#include "scriptenvironment.h"
#include "configurationdialog.h"
#include <QScriptEngine>
#include <QScriptValueIterator>
#include <QStringList>
@ -35,6 +36,13 @@ ScriptEnvironment::ScriptEnvironment(QObject *parent) :
self.setProperty("self", self);
d->scriptEngine.setGlobalObject(self);
QScriptValue application = d->scriptEngine.newQObject(parent);
d->scriptEngine.globalObject().setProperty("application", application);
//Create configuration dialog
QScriptValue configurationDialogObject = d->scriptEngine.newQObject(new ConfigurationDialog(), QScriptEngine::ScriptOwnership, QScriptEngine::ExcludeSuperClassContents);
d->scriptEngine.globalObject().property("application").setProperty("configuration", configurationDialogObject);
//Collect garbage (ie our old global object)
d->scriptEngine.collectGarbage();
}

View file

@ -20,7 +20,7 @@ class TelldusCenterApplicationPrivate {
public:
PluginList plugins;
MainWindow *mainWindow;
ScriptEnvironment scriptEnvironment;
ScriptEnvironment *scriptEnvironment;
};
TelldusCenterApplication::TelldusCenterApplication(int &argc, char **argv)
@ -28,6 +28,7 @@ TelldusCenterApplication::TelldusCenterApplication(int &argc, char **argv)
{
d = new TelldusCenterApplicationPrivate;
connect(this, SIGNAL(messageReceived(const QString &)), this, SLOT(msgReceived(const QString &)));
d->scriptEnvironment = new ScriptEnvironment(this);
}
TelldusCenterApplication::~TelldusCenterApplication() {
@ -36,7 +37,7 @@ TelldusCenterApplication::~TelldusCenterApplication() {
}
void TelldusCenterApplication::initialize() {
d->mainWindow = new MainWindow( );
d->mainWindow = new MainWindow( d->scriptEnvironment );
this->setActivationWindow(d->mainWindow, false);
@ -55,7 +56,7 @@ PluginList TelldusCenterApplication::plugins() const {
}
QScriptValue TelldusCenterApplication::mainWindow() {
QScriptValue value = d->scriptEnvironment.engine()->newQObject(d->mainWindow);
QScriptValue value = d->scriptEnvironment->engine()->newQObject(d->mainWindow);
return value;
}
@ -100,11 +101,8 @@ void TelldusCenterApplication::loadPlugins() {
this->setLibraryPaths( QStringList(pluginsDir.absolutePath()) );
QScriptValue object = d->scriptEnvironment.engine()->newQObject(this);
d->scriptEnvironment.engine()->globalObject().setProperty("application", object);
QScriptValue mainWindowObject = d->scriptEnvironment.engine()->newQObject(d->mainWindow);
d->scriptEnvironment.engine()->globalObject().property("application").setProperty("mainwindow", mainWindowObject);
QScriptValue mainWindowObject = d->scriptEnvironment->engine()->newQObject(d->mainWindow);
d->scriptEnvironment->engine()->globalObject().property("application").setProperty("mainwindow", mainWindowObject);
foreach (QString fileName, pluginsDir.entryList(QDir::Files)) {
QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
@ -130,7 +128,7 @@ void TelldusCenterApplication::loadPlugin(QObject *plugin) {
}
void TelldusCenterApplication::loadScripts() {
foreach (QString extension, d->scriptEnvironment.engine()->availableExtensions()) {
foreach (QString extension, d->scriptEnvironment->engine()->availableExtensions()) {
if (extension.startsWith("...")) {
continue;
}
@ -150,12 +148,12 @@ void TelldusCenterApplication::loadScripts() {
this->installTranslator(translator);
}
d->scriptEnvironment.engine()->importExtension( extension );
if (d->scriptEnvironment.engine()->hasUncaughtException()) {
qDebug() << QString("Error in %1:%2:").arg(extension).arg(d->scriptEnvironment.engine()->uncaughtExceptionLineNumber())
<< d->scriptEnvironment.engine()->uncaughtException().toString();
d->scriptEnvironment->engine()->importExtension( extension );
if (d->scriptEnvironment->engine()->hasUncaughtException()) {
qDebug() << QString("Error in %1:%2:").arg(extension).arg(d->scriptEnvironment->engine()->uncaughtExceptionLineNumber())
<< d->scriptEnvironment->engine()->uncaughtException().toString();
}
d->scriptEnvironment.engine()->clearExceptions();
d->scriptEnvironment->engine()->clearExceptions();
}
}