summaryrefslogtreecommitdiffstats
path: root/examples/uml/duse-mt/src/plugins/javascriptconsole/javascriptconsoleplugin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/uml/duse-mt/src/plugins/javascriptconsole/javascriptconsoleplugin.cpp')
-rw-r--r--examples/uml/duse-mt/src/plugins/javascriptconsole/javascriptconsoleplugin.cpp49
1 files changed, 31 insertions, 18 deletions
diff --git a/examples/uml/duse-mt/src/plugins/javascriptconsole/javascriptconsoleplugin.cpp b/examples/uml/duse-mt/src/plugins/javascriptconsole/javascriptconsoleplugin.cpp
index 828ccc60..5c5b239e 100644
--- a/examples/uml/duse-mt/src/plugins/javascriptconsole/javascriptconsoleplugin.cpp
+++ b/examples/uml/duse-mt/src/plugins/javascriptconsole/javascriptconsoleplugin.cpp
@@ -97,68 +97,81 @@ void scriptValueToQList(const QScriptValue &obj, QList<T *> &elements)
JavaScriptConsolePlugin::JavaScriptConsolePlugin(QObject *parent) :
DuSE::IPlugin(parent),
_javaScriptConsole(new Ui::JavaScriptConsole),
- _codeCompletionView(new QListView)
+ _codeCompletionView(new QListView),
+ _engine(0)
{
}
JavaScriptConsolePlugin::~JavaScriptConsolePlugin()
{
delete _javaScriptConsole;
+ delete _engine;
}
-bool JavaScriptConsolePlugin::initialize(DuSE::ICore *core)
+bool JavaScriptConsolePlugin::initialize()
{
QWidget *javaScriptConsoleWidget = new QWidget;
_javaScriptConsole->setupUi(javaScriptConsoleWidget);
- core->uiController()->addDockWidget(Qt::BottomDockWidgetArea, tr("JavaScript Console"), javaScriptConsoleWidget);
+ DuSE::ICore::self()->uiController()->addDockWidget(Qt::BottomDockWidgetArea, tr("JavaScript Console"), javaScriptConsoleWidget);
_javaScriptConsole->txeJavaScript->installEventFilter(this);
_codeCompletionView->installEventFilter(this);
- _javaScriptConsole->txeJavaScript->setText("self");
-
_codeCompletionView->setParent(_javaScriptConsole->txeJavaScript);
_codeCompletionView->hide();
connect(_javaScriptConsole->psbJSEvaluate, &QPushButton::clicked, this, &JavaScriptConsolePlugin::evaluate);
- connect(_javaScriptConsole->psbJSEvaluate, SIGNAL(clicked()), core->uiController(), SIGNAL(updateCurrentModelingObject()));
- connect(core->uiController(), &DuSE::IUiController::currentModelingObjectChanged, this, &JavaScriptConsolePlugin::setSelfProperty);
- connect(core->projectController(), SIGNAL(modelOpened(QList<QModelingObject*>)), this, SLOT(setRootAndInputProperties(QList<QModelingObject*>)));
+ connect(_javaScriptConsole->psbJSEvaluate, SIGNAL(clicked()), DuSE::ICore::self()->uiController(), SIGNAL(updateCurrentModelingObject()));
- qScriptRegisterMetaType(&_engine, qSetToScriptValue<QObject>, scriptValueToQSet<QObject>);
- qScriptRegisterMetaType(&_engine, qListToScriptValue<QObject>, scriptValueToQList<QObject>);
+ connect(DuSE::ICore::self()->uiController(), &DuSE::IUiController::currentModelingObjectChanged, this, &JavaScriptConsolePlugin::setSelfProperty);
+ connect(DuSE::ICore::self()->projectController(), SIGNAL(modelOpened(QList<QModelingObject*>)), this, SLOT(initializeEngine(QList<QModelingObject*>)));
+ connect(DuSE::ICore::self()->projectController(), SIGNAL(modelAboutToBeClosed(QList<QModelingObject*>)), this, SLOT(destroyEngine()));
return true;
}
void JavaScriptConsolePlugin::setSelfProperty(QModelingObject *modelingObject)
{
- _engine.globalObject().setProperty("self", _engine.newQObject(modelingObject));
+ _engine->globalObject().setProperty("self", _engine->newQObject(modelingObject));
}
-void JavaScriptConsolePlugin::setRootAndInputProperties(QList<QModelingObject *> modelingObjects)
+void JavaScriptConsolePlugin::initializeEngine(QList<QModelingObject *> modelingObjects)
{
if (modelingObjects.size() == 0)
return;
+ _engine = new QScriptEngine;
+ qScriptRegisterMetaType(_engine, qSetToScriptValue<QObject>, scriptValueToQSet<QObject>);
+ qScriptRegisterMetaType(_engine, qListToScriptValue<QObject>, scriptValueToQList<QObject>);
+
QModelingObject *modelingObject = modelingObjects.at(0);
- _engine.globalObject().setProperty(modelingObject->objectName(), _engine.newQObject(modelingObject));
+ _engine->globalObject().setProperty(modelingObject->objectName(), _engine->newQObject(modelingObject));
- QScriptValue array = _engine.newArray();
+ QScriptValue array = _engine->newArray();
foreach (QModelingObject *modelingObject, modelingObjects)
- array.property(QString::fromLatin1("push")).call(array, QScriptValueList() << _engine.newQObject(modelingObject));
- _engine.globalObject().setProperty("input", array);
+ array.property(QString::fromLatin1("push")).call(array, QScriptValueList() << _engine->newQObject(modelingObject));
+ _engine->globalObject().setProperty("input", array);
_javaScriptConsole->txeJavaScript->setText("self");
+ _javaScriptConsole->psbJSEvaluate->setEnabled(true);
QTimer::singleShot(0, this, SLOT(evaluate()));
}
+void JavaScriptConsolePlugin::destroyEngine()
+{
+ delete _engine;
+ _engine = 0;
+ _javaScriptConsole->txeJavaScript->clear();
+ _javaScriptConsole->txeJavaScriptEvaluation->clear();
+ _javaScriptConsole->psbJSEvaluate->setEnabled(false);
+}
+
bool JavaScriptConsolePlugin::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::KeyPress && obj == _javaScriptConsole->txeJavaScript) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if (keyEvent->key() == 46) {
- QModelingObject *modelingObject = dynamic_cast<QModelingObject *>(_engine.evaluate(_javaScriptConsole->txeJavaScript->toPlainText()).toQObject());
+ QModelingObject *modelingObject = dynamic_cast<QModelingObject *>(_engine->evaluate(_javaScriptConsole->txeJavaScript->toPlainText()).toQObject());
if (modelingObject) {
const QMetaObject *metaObject = modelingObject->metaObject();
int propertyCount = metaObject->propertyCount();
@@ -197,5 +210,5 @@ bool JavaScriptConsolePlugin::eventFilter(QObject *obj, QEvent *event)
void JavaScriptConsolePlugin::evaluate()
{
- _javaScriptConsole->txeJavaScriptEvaluation->setText(_engine.evaluate(_javaScriptConsole->txeJavaScript->toPlainText()).toString());
+ _javaScriptConsole->txeJavaScriptEvaluation->setText(_engine->evaluate(_javaScriptConsole->txeJavaScript->toPlainText()).toString());
}