Script: Some refactoring.

This commit is contained in:
Friedemann Kleint
2010-01-15 17:30:26 +01:00
parent 96e31c2a0f
commit 1855316aaa
5 changed files with 163 additions and 95 deletions

View File

@@ -231,15 +231,15 @@ bool ScriptManagerPrivate::runScript(const QString &script, QString *errorMessag
return !failed;
}
void ScriptManagerPrivate::ensureEngineInitialized()
ScriptManager::QScriptEnginePtr ScriptManagerPrivate::ensureEngineInitialized()
{
if (m_engine)
return;
m_engine = new QScriptEngine(this);
if (!m_engine.isNull())
return m_engine;
m_engine = QScriptEnginePtr(new QScriptEngine(this));
// register QObjects that occur as properties
SharedTools::registerQObject<QMainWindow>(m_engine);
SharedTools::registerQObject<QStatusBar>(m_engine);
SharedTools::registerQObject<QSettings>(m_engine);
SharedTools::registerQObject<QMainWindow>(m_engine.data());
SharedTools::registerQObject<QStatusBar>(m_engine.data());
SharedTools::registerQObject<QSettings>(m_engine.data());
// WB interfaces
// SharedTools::registerQObjectInterface<Core::MessageManager, MessageManagerPrototype>(m_engine);
@@ -248,17 +248,17 @@ void ScriptManagerPrivate::ensureEngineInitialized()
// SharedTools::registerQObjectInterface<Core::FileManager, FileManagerPrototype>(m_engine);
// SharedTools::registerQObjectInterface<Core::IEditor, EditorPrototype>(m_engine);
qScriptRegisterSequenceMetaType<QList<Core::IEditor *> >(m_engine);
qScriptRegisterSequenceMetaType<QList<Core::IEditor *> >(m_engine.data());
// SharedTools::registerQObjectInterface<Core::EditorGroup, EditorGroupPrototype>(m_engine);
qScriptRegisterSequenceMetaType<QList<Core::EditorGroup *> >(m_engine);
qScriptRegisterSequenceMetaType<QList<Core::EditorGroup *> >(m_engine.data());
SharedTools::registerQObjectInterface<Core::EditorManager, EditorManagerPrototype>(m_engine);
SharedTools::registerQObjectInterface<Core::EditorManager, EditorManagerPrototype>(m_engine.data());
// SharedTools::registerQObjectInterface<Core::ICore, CorePrototype>(m_engine);
// Make "core" available
m_engine->globalObject().setProperty(QLatin1String("core"), qScriptValueFromValue(m_engine, Core::ICore::instance()));
m_engine->globalObject().setProperty(QLatin1String("core"), qScriptValueFromValue(m_engine.data(), Core::ICore::instance()));
// CLASSIC: registerInterfaceWithDefaultPrototype<Core::MessageManager, MessageManagerPrototype>(m_engine);
@@ -284,9 +284,10 @@ void ScriptManagerPrivate::ensureEngineInitialized()
m_engine->globalObject().setProperty(QLatin1String("getOpenFileName"), m_engine->newFunction(fileBox<QFileDialog::AcceptOpen, QFileDialog::ExistingFile> , 2));
m_engine->globalObject().setProperty(QLatin1String("getSaveFileName"), m_engine->newFunction(fileBox<QFileDialog::AcceptSave, QFileDialog::AnyFile> , 2));
m_engine->globalObject().setProperty(QLatin1String("getExistingDirectory"), m_engine->newFunction(fileBox<QFileDialog::AcceptSave, QFileDialog::DirectoryOnly> , 2));
return m_engine;
}
QString ScriptManagerPrivate::engineError(QScriptEngine *scriptEngine)
QString ScriptManagerPrivate::engineError(const QScriptEnginePtr &scriptEngine)
{
QScriptValue error = scriptEngine->evaluate(QLatin1String("Error"));
if (error.isValid())

View File

@@ -34,7 +34,11 @@
#include <QtCore/QObject>
#include <QtCore/QString>
#include <QtScript/QScriptEngine>
#include <QtCore/QSharedPointer>
QT_BEGIN_NAMESPACE
class QScriptEngine;
QT_END_NAMESPACE
namespace Core {
@@ -47,6 +51,8 @@ class CORE_EXPORT ScriptManager : public QObject
{
Q_OBJECT
public:
typedef QSharedPointer<QScriptEngine> QScriptEnginePtr;
// A stack frame as returned by a failed invocation (exception)
// fileName may be empty. lineNumber can be 0 for the top frame (goof-up?).
struct StackFrame {
@@ -62,6 +68,8 @@ public:
// Run a script
virtual bool runScript(const QString &script, QString *errorMessage, Stack *errorStack) = 0;
virtual bool runScript(const QString &script, QString *errorMessage) = 0;
virtual QScriptEnginePtr scriptEngine() = 0;
};
} // namespace Core

View File

@@ -47,13 +47,14 @@ public:
bool runScript(const QString &script, QString *errorMessage, Stack *stack);
bool runScript(const QString &script, QString *errorMessage);
virtual QScriptEnginePtr scriptEngine() { return ensureEngineInitialized(); }
static QString engineError(QScriptEngine *scriptEngine);
static QString engineError(const QScriptEnginePtr &scriptEngine);
private:
void ensureEngineInitialized();
QScriptEnginePtr ensureEngineInitialized();
QScriptEngine *m_engine;
QScriptEnginePtr m_engine;
};
} // namespace Internal