History

first cut at cleaning up ScriptEngine class

Brad Hefta-Gaub committed 11 years ago

Commit f85cb2c1 parent f51f17b6 files · +276 −160Browse files

Showing the changes to interface/src/Application.cpp (1 of 6 files). Show all

Unified · Split

interface/src/Application.cpp+36−32
@@ -4011,8 +4011,8 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri · 4010 unmodified lines
40114011 AvatarManager::registerMetaTypes(scriptEngine);
40124012
40134013 // hook our avatar and avatar hash map object into this script engine
4014− scriptEngine->setAvatarData(_myAvatar, "MyAvatar"); // leave it as a MyAvatar class to expose thrust features
4015− scriptEngine->setAvatarHashMap(DependencyManager::get<AvatarManager>().data(), "AvatarList");
4014+ scriptEngine->registerGlobalObject("MyAvatar", _myAvatar);
4015+ scriptEngine->registerGlobalObject("AvatarList", DependencyManager::get<AvatarManager>().data());
40164016
40174017 scriptEngine->registerGlobalObject("Camera", &_myCamera);
40184018
@@ -4036,9 +4036,9 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri · 17 unmodified lines
40364036
40374037 scriptEngine->registerGlobalObject("Desktop", DependencyManager::get<DesktopScriptingInterface>().data());
40384038
4039− QScriptValue windowValue = scriptEngine->registerGlobalObject("Window", DependencyManager::get<WindowScriptingInterface>().data());
4039+ scriptEngine->registerGlobalObject("Window", DependencyManager::get<WindowScriptingInterface>().data());
40404040 scriptEngine->registerGetterSetter("location", LocationScriptingInterface::locationGetter,
4041− LocationScriptingInterface::locationSetter, windowValue);
4041+ LocationScriptingInterface::locationSetter, "Window");
40424042 // register `location` on the global object.
40434043 scriptEngine->registerGetterSetter("location", LocationScriptingInterface::locationGetter,
40444044 LocationScriptingInterface::locationSetter);
@@ -4068,9 +4068,9 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri · 23 unmodified lines
40684068
40694069 scriptEngine->registerGlobalObject("Paths", DependencyManager::get<PathUtils>().data());
40704070
4071− QScriptValue hmdInterface = scriptEngine->registerGlobalObject("HMD", &HMDScriptingInterface::getInstance());
4072− scriptEngine->registerFunction(hmdInterface, "getHUDLookAtPosition2D", HMDScriptingInterface::getHUDLookAtPosition2D, 0);
4073− scriptEngine->registerFunction(hmdInterface, "getHUDLookAtPosition3D", HMDScriptingInterface::getHUDLookAtPosition3D, 0);
4071+ scriptEngine->registerGlobalObject("HMD", &HMDScriptingInterface::getInstance());
4072+ scriptEngine->registerFunction("HMD", "getHUDLookAtPosition2D", HMDScriptingInterface::getHUDLookAtPosition2D, 0);
4073+ scriptEngine->registerFunction("HMD", "getHUDLookAtPosition3D", HMDScriptingInterface::getHUDLookAtPosition3D, 0);
40744074
40754075 scriptEngine->registerGlobalObject("Scene", DependencyManager::get<SceneScriptingInterface>().data());
40764076
@@ -4079,31 +4079,6 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri · 2 unmodified lines
40794079 #ifdef HAVE_RTMIDI
40804080 scriptEngine->registerGlobalObject("MIDI", &MIDIManager::getInstance());
40814081 #endif
4082−
4083− // TODO: Consider moving some of this functionality into the ScriptEngine class instead. It seems wrong that this
4084− // work is being done in the Application class when really these dependencies are more related to the ScriptEngine's
4085− // implementation
4086− QThread* workerThread = new QThread(this);
4087− QString scriptEngineName = QString("Script Thread:") + scriptEngine->getFilename();
4088− workerThread->setObjectName(scriptEngineName);
4089−
4090− // when the worker thread is started, call our engine's run..
4091− connect(workerThread, &QThread::started, scriptEngine, &ScriptEngine::run);
4092−
4093− // when the thread is terminated, add both scriptEngine and thread to the deleteLater queue
4094− connect(scriptEngine, &ScriptEngine::doneRunning, scriptEngine, &ScriptEngine::deleteLater);
4095− connect(workerThread, &QThread::finished, workerThread, &QThread::deleteLater);
4096−
4097− // tell the thread to stop when the script engine is done
4098− connect(scriptEngine, &ScriptEngine::destroyed, workerThread, &QThread::quit);
4099−
4100− auto nodeList = DependencyManager::get<NodeList>();
4101− connect(nodeList.data(), &NodeList::nodeKilled, scriptEngine, &ScriptEngine::nodeKilled);
4102−
4103− scriptEngine->moveToThread(workerThread);
4104−
4105− // Starts an event loop, and emits workerThread->started()
4106− workerThread->start();
41074082 }
41084083
41094084 void Application::initializeAcceptedFiles() {
@@ -4249,17 +4224,34 @@ ScriptEngine* Application::loadScript(const QString& scriptFilename, bool isUser · 139 unmodified lines
42494224 scriptEngine->setUserLoaded(isUserLoaded);
42504225
42514226 if (scriptFilename.isNull()) {
4227+ // This appears to be the script engine used by the script widget's evaluation window before the file has been saved...
4228+
4229+ qDebug() << "############################# HELLO WE ARE HERE!!!! ##################################";
42524230 // this had better be the script editor (we should de-couple so somebody who thinks they are loading a script
42534231 // doesn't just get an empty script engine)
42544232
42554233 // we can complete setup now since there isn't a script we have to load
42564234 registerScriptEngineWithApplicationServices(scriptEngine);
4235+ scriptEngine->runInThread();
4236+
4237+ //FIXME - intentionally attempting to test thread safe call to registerGlobalObject()
4238+ qDebug() << "about to attempt to call registerGlobalObject on wrong thread!!! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<";
4239+ scriptEngine->registerGlobalObject("LODManager2", DependencyManager::get<LODManager>().data());
4240+
4241+ qDebug() << "about to attempt to call registerFunction on wrong thread!!! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<";
4242+ scriptEngine->registerFunction("WebWindow2", WebWindowClass::constructor, 1);
4243+
4244+ qDebug() << "about to attempt to call registerGetterSetter on wrong thread!!! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<";
4245+ scriptEngine->registerGetterSetter("foo_location", LocationScriptingInterface::locationGetter, LocationScriptingInterface::locationSetter);
4246+
4247+
42574248 } else {
42584249 // connect to the appropriate signals of this script engine
42594250 connect(scriptEngine, &ScriptEngine::scriptLoaded, this, &Application::handleScriptEngineLoaded);
42604251 connect(scriptEngine, &ScriptEngine::errorLoadingScript, this, &Application::handleScriptLoadError);
42614252
42624253 // get the script engine object to load the script at the designated script URL
4254+ qDebug() << "calling scriptEngine->loadURL(" << scriptUrl << ", " << reload << ");";
42634255 scriptEngine->loadURL(scriptUrl, reload);
42644256 }
42654257
@@ -4276,6 +4268,7 @@ void Application::reloadScript(const QString& scriptName, bool isUserLoaded) { · 10 unmodified lines
42764268 }
42774269
42784270 void Application::handleScriptEngineLoaded(const QString& scriptFilename) {
4271+ qDebug() << "handleScriptEngineLoaded().... scriptFilename:" << scriptFilename;
42794272 ScriptEngine* scriptEngine = qobject_cast<ScriptEngine*>(sender());
42804273
42814274 _scriptEnginesHash.insertMulti(scriptFilename, scriptEngine);
@@ -4284,6 +4277,17 @@ void Application::handleScriptEngineLoaded(const QString& scriptFilename) { · 2 unmodified lines
42844277
42854278 // register our application services and set it off on its own thread
42864279 registerScriptEngineWithApplicationServices(scriptEngine);
4280+ scriptEngine->runInThread();
4281+
4282+ //FIXME - intentionally attempting to test thread safe call to registerGlobalObject()
4283+ qDebug() << "about to attempt to call registerGlobalObject on wrong thread!!! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<";
4284+ scriptEngine->registerGlobalObject("LODManager2", DependencyManager::get<LODManager>().data());
4285+
4286+ qDebug() << "about to attempt to call registerFunction on wrong thread!!! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<";
4287+ scriptEngine->registerFunction("WebWindow2", WebWindowClass::constructor, 1);
4288+
4289+ qDebug() << "about to attempt to call registerGetterSetter on wrong thread!!! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<";
4290+ scriptEngine->registerGetterSetter("foo_location", LocationScriptingInterface::locationGetter, LocationScriptingInterface::locationSetter);
42874291 }
42884292
42894293 void Application::handleScriptLoadError(const QString& scriptFilename) {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t