diff --git a/telldus-gui/TelldusCenter/CMakeLists.txt b/telldus-gui/TelldusCenter/CMakeLists.txt index 3d706849..2de68625 100644 --- a/telldus-gui/TelldusCenter/CMakeLists.txt +++ b/telldus-gui/TelldusCenter/CMakeLists.txt @@ -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 diff --git a/telldus-gui/TelldusCenter/configurationdialog.cpp b/telldus-gui/TelldusCenter/configurationdialog.cpp new file mode 100644 index 00000000..9ee4b734 --- /dev/null +++ b/telldus-gui/TelldusCenter/configurationdialog.cpp @@ -0,0 +1,11 @@ +#include "configurationdialog.h" +#include + +ConfigurationDialog::ConfigurationDialog(QWidget *parent) : + QDialog(parent) +{ +} + +void ConfigurationDialog::open() { + this->exec(); +} diff --git a/telldus-gui/TelldusCenter/configurationdialog.h b/telldus-gui/TelldusCenter/configurationdialog.h new file mode 100644 index 00000000..d516ce42 --- /dev/null +++ b/telldus-gui/TelldusCenter/configurationdialog.h @@ -0,0 +1,19 @@ +#ifndef CONFIGURATIONDIALOG_H +#define CONFIGURATIONDIALOG_H + +#include + +class ConfigurationDialog : public QDialog +{ + Q_OBJECT +public: + explicit ConfigurationDialog(QWidget *parent = 0); + +signals: + +public slots: + void open(); + +}; + +#endif // CONFIGURATIONDIALOG_H diff --git a/telldus-gui/TelldusCenter/mainwindow.cpp b/telldus-gui/TelldusCenter/mainwindow.cpp index 06aebd89..07fa0b8d 100644 --- a/telldus-gui/TelldusCenter/mainwindow.cpp +++ b/telldus-gui/TelldusCenter/mainwindow.cpp @@ -9,12 +9,14 @@ #include #include #include +#include #include #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() { "

Copyright © 2010 Telldus Technologies AB

").arg(VERSION_STRING(VERSION))); } +void MainWindow::slotConfigure() { + d->env->engine()->evaluate("application.configuration.open();"); +} + void MainWindow::slotPagesClick() { QAction *action = qobject_cast(sender()); if (action) { diff --git a/telldus-gui/TelldusCenter/mainwindow.h b/telldus-gui/TelldusCenter/mainwindow.h index 8a08f3cb..bc073723 100644 --- a/telldus-gui/TelldusCenter/mainwindow.h +++ b/telldus-gui/TelldusCenter/mainwindow.h @@ -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: diff --git a/telldus-gui/TelldusCenter/scriptenvironment.cpp b/telldus-gui/TelldusCenter/scriptenvironment.cpp index 093a4ff6..c64989c6 100644 --- a/telldus-gui/TelldusCenter/scriptenvironment.cpp +++ b/telldus-gui/TelldusCenter/scriptenvironment.cpp @@ -1,4 +1,5 @@ #include "scriptenvironment.h" +#include "configurationdialog.h" #include #include #include @@ -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(); } diff --git a/telldus-gui/TelldusCenter/tellduscenterapplication.cpp b/telldus-gui/TelldusCenter/tellduscenterapplication.cpp index 35fceaad..2890237c 100644 --- a/telldus-gui/TelldusCenter/tellduscenterapplication.cpp +++ b/telldus-gui/TelldusCenter/tellduscenterapplication.cpp @@ -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(); } }