Add registerGetterSetter to remove need for getEngine()

This commit is contained in:
Ryan Huffman 2014-04-30 11:17:36 -07:00
parent 65fd2a7724
commit 9e684a0bc8
3 changed files with 26 additions and 13 deletions

View file

@ -3407,16 +3407,13 @@ ScriptEngine* Application::loadScript(const QString& scriptName, bool loadScript
scriptEngine->registerGlobalObject("Overlays", &_overlays);
QScriptEngine &qScriptEngine = scriptEngine->getEngine();
QScriptValue getLocationFunction = qScriptEngine.newFunction(LocationScriptingInterface::locationGetter);
QScriptValue setLocationFunction = qScriptEngine.newFunction(LocationScriptingInterface::locationSetter, 1);
qScriptEngine.globalObject().setProperty("location", getLocationFunction, QScriptValue::PropertyGetter);
qScriptEngine.globalObject().setProperty("location", setLocationFunction, QScriptValue::PropertySetter);
QScriptValue windowValue = scriptEngine->registerGlobalObject("Window", WindowScriptingInterface::getInstance());
scriptEngine->registerGetterSetter("location", LocationScriptingInterface::locationGetter,
LocationScriptingInterface::locationSetter, windowValue);
QScriptValue windowValue = qScriptEngine.newQObject(WindowScriptingInterface::getInstance());
qScriptEngine.globalObject().setProperty("Window", windowValue);
windowValue.setProperty("location", getLocationFunction, QScriptValue::PropertyGetter);
windowValue.setProperty("location", setLocationFunction, QScriptValue::PropertySetter);
// register `location` on the global object.
scriptEngine->registerGetterSetter("location", LocationScriptingInterface::locationGetter,
LocationScriptingInterface::locationSetter);
scriptEngine->registerGlobalObject("Menu", MenuScriptingInterface::getInstance());
scriptEngine->registerGlobalObject("Settings", SettingsScriptingInterface::getInstance());

View file

@ -248,10 +248,26 @@ void ScriptEngine::init() {
_particlesScriptingInterface.getParticlePacketSender()->setProcessCallIntervalHint(SCRIPT_DATA_CALLBACK_USECS);
}
void ScriptEngine::registerGlobalObject(const QString& name, QObject* object) {
QScriptValue ScriptEngine::registerGlobalObject(const QString& name, QObject* object) {
if (object) {
QScriptValue value = _engine.newQObject(object);
_engine.globalObject().setProperty(name, value);
return value;
}
return QScriptValue::NullValue;
}
void ScriptEngine::registerGetterSetter(const QString& name, QScriptEngine::FunctionSignature getter,
QScriptEngine::FunctionSignature setter, QScriptValue object) {
QScriptValue setterFunction = _engine.newFunction(setter, 1);
QScriptValue getterFunction = _engine.newFunction(getter);
if (object.isNull()) {
object.setProperty(name, setterFunction, QScriptValue::PropertySetter);
object.setProperty(name, getterFunction, QScriptValue::PropertyGetter);
} else {
_engine.globalObject().setProperty(name, setterFunction, QScriptValue::PropertySetter);
_engine.globalObject().setProperty(name, getterFunction, QScriptValue::PropertyGetter);
}
}

View file

@ -58,7 +58,9 @@ public:
const QString& getScriptName() const { return _scriptName; }
void cleanupMenuItems();
void registerGlobalObject(const QString& name, QObject* object); /// registers a global object by name
QScriptValue registerGlobalObject(const QString& name, QObject* object); /// registers a global object by name
void registerGetterSetter(const QString& name, QScriptEngine::FunctionSignature getter,
QScriptEngine::FunctionSignature setter, QScriptValue object = QScriptValue::NullValue);
Q_INVOKABLE void setIsAvatar(bool isAvatar);
bool isAvatar() const { return _isAvatar; }
@ -69,8 +71,6 @@ public:
bool isListeningToAudioStream() const { return _isListeningToAudioStream; }
void setIsListeningToAudioStream(bool isListeningToAudioStream) { _isListeningToAudioStream = isListeningToAudioStream; }
QScriptEngine& getEngine() { return _engine; }
void setAvatarSound(Sound* avatarSound) { _avatarSound = avatarSound; }
bool isPlayingAvatarSound() const { return _avatarSound != NULL; }