Merge pull request #3369 from ctrlaltdavid/20007

Code Review for Job #20007
This commit is contained in:
Brad Hefta-Gaub 2014-09-06 15:36:29 -07:00
commit a77739f31c
7 changed files with 36 additions and 19 deletions

View file

@ -382,6 +382,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
_runningScriptsWidget->setRunningScripts(getRunningScripts());
connect(_runningScriptsWidget, &RunningScriptsWidget::stopScriptName, this, &Application::stopScript);
connect(this, SIGNAL(aboutToQuit()), this, SLOT(saveScripts()));
// check first run...
QVariant firstRunValue = _settings->value("firstRun",QVariant(true));
if (firstRunValue.isValid() && firstRunValue.toBool()) {
@ -393,7 +395,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
QMutexLocker locker(&_settingsMutex);
_settings->setValue("firstRun",QVariant(false));
} else {
// do this as late as possible so that all required subsystems are inialized
// do this as late as possible so that all required subsystems are initialized
loadScripts();
QMutexLocker locker(&_settingsMutex);
@ -425,7 +427,6 @@ Application::~Application() {
saveSettings();
storeSizeAndPosition();
saveScripts();
int DELAY_TIME = 1000;
UserActivityLogger::getInstance().close(DELAY_TIME);
@ -3683,18 +3684,26 @@ void Application::clearScriptsBeforeRunning() {
}
void Application::saveScripts() {
// saves all current running scripts
// Saves all currently running user-loaded scripts
QMutexLocker locker(&_settingsMutex);
_settings->beginWriteArray("Settings");
for (int i = 0; i < getRunningScripts().size(); ++i){
_settings->setArrayIndex(i);
_settings->setValue("script", getRunningScripts().at(i));
QStringList runningScripts = getRunningScripts();
int i = 0;
for (QStringList::const_iterator it = runningScripts.begin(); it != runningScripts.end(); it += 1) {
if (getScriptEngine(*it)->isUserLoaded()) {
_settings->setArrayIndex(i);
_settings->setValue("script", *it);
i += 1;
}
}
_settings->endArray();
}
ScriptEngine* Application::loadScript(const QString& scriptName, bool loadScriptFromEditor, bool activateMainWindow) {
QUrl scriptUrl(scriptName);
ScriptEngine* Application::loadScript(const QString& scriptFilename, bool isUserLoaded,
bool loadScriptFromEditor, bool activateMainWindow) {
QUrl scriptUrl(scriptFilename);
const QString& scriptURLString = scriptUrl.toString();
if (_scriptEnginesHash.contains(scriptURLString) && loadScriptFromEditor
&& !_scriptEnginesHash[scriptURLString]->isFinished()) {
@ -3703,7 +3712,7 @@ ScriptEngine* Application::loadScript(const QString& scriptName, bool loadScript
}
ScriptEngine* scriptEngine;
if (scriptName.isNull()) {
if (scriptFilename.isNull()) {
scriptEngine = new ScriptEngine(NO_SCRIPT, "", &_controllerScriptingInterface);
} else {
// start the script on a new thread...
@ -3719,6 +3728,7 @@ ScriptEngine* Application::loadScript(const QString& scriptName, bool loadScript
_runningScriptsWidget->setRunningScripts(getRunningScripts());
UserActivityLogger::getInstance().loadedScript(scriptURLString);
}
scriptEngine->setUserLoaded(isUserLoaded);
// setup the packet senders and jurisdiction listeners of the script engine's scripting interfaces so
// we can use the same ones from the application.
@ -3751,7 +3761,7 @@ ScriptEngine* Application::loadScript(const QString& scriptName, bool loadScript
connect(scriptEngine, SIGNAL(finished(const QString&)), this, SLOT(scriptFinished(const QString&)));
connect(scriptEngine, SIGNAL(loadScript(const QString&)), this, SLOT(loadScript(const QString&)));
connect(scriptEngine, SIGNAL(loadScript(const QString&, bool)), this, SLOT(loadScript(const QString&, bool)));
scriptEngine->registerGlobalObject("Overlays", &_overlays);
@ -3821,7 +3831,7 @@ void Application::stopAllScripts(bool restart) {
// stops all current running scripts
for (QHash<QString, ScriptEngine*>::const_iterator it = _scriptEnginesHash.constBegin();
it != _scriptEnginesHash.constEnd(); it++) {
if (restart) {
if (restart && it.value()->isUserLoaded()) {
connect(it.value(), SIGNAL(finished(const QString&)), SLOT(loadScript(const QString&)));
}
it.value()->stop();

View file

@ -150,7 +150,6 @@ public:
void setPreviousScriptLocation(const QString& previousScriptLocation);
void storeSizeAndPosition();
void clearScriptsBeforeRunning();
void saveScripts();
void initializeGL();
void paintGL();
void resizeGL(int width, int height);
@ -340,13 +339,15 @@ public slots:
void loadScriptURLDialog();
void toggleLogDialog();
void initAvatarAndViewFrustum();
ScriptEngine* loadScript(const QString& fileNameString = QString(), bool loadScriptFromEditor = false, bool activateMainWindow = false);
ScriptEngine* loadScript(const QString& scriptFilename = QString(), bool isUserLoaded = true,
bool loadScriptFromEditor = false, bool activateMainWindow = false);
void scriptFinished(const QString& scriptName);
void stopAllScripts(bool restart = false);
void stopScript(const QString& scriptName);
void reloadAllScripts();
void loadDefaultScripts();
void toggleRunningScriptsWidget();
void saveScripts();
void uploadHead();
void uploadSkeleton();

View file

@ -52,7 +52,7 @@ JSConsole::JSConsole(QWidget* parent, ScriptEngine* scriptEngine) :
if (_scriptEngine == NULL) {
_scriptEngine = Application::getInstance()->loadScript();
_scriptEngine = Application::getInstance()->loadScript(QString(), false);
}
connect(_scriptEngine, SIGNAL(evaluationFinished(QScriptValue, bool)),

View file

@ -69,7 +69,7 @@ void RunningScriptsWidget::updateFileFilter(const QString& filter) {
void RunningScriptsWidget::loadScriptFromList(const QModelIndex& index) {
QVariant scriptFile = _proxyModel.data(index, ScriptsModel::ScriptPath);
Application::getInstance()->loadScript(scriptFile.toString(), false, false);
Application::getInstance()->loadScript(scriptFile.toString());
}
void RunningScriptsWidget::loadSelectedScript() {

View file

@ -93,7 +93,7 @@ bool ScriptEditorWidget::setRunning(bool run) {
if (run) {
const QString& scriptURLString = QUrl(_currentScript).toString();
_scriptEngine = Application::getInstance()->loadScript(scriptURLString, true);
_scriptEngine = Application::getInstance()->loadScript(scriptURLString, true, true);
connect(_scriptEngine, &ScriptEngine::runningStateChanged, this, &ScriptEditorWidget::runningStateChanged);
connect(_scriptEngine, &ScriptEngine::errorMessage, this, &ScriptEditorWidget::onScriptError);
connect(_scriptEngine, &ScriptEngine::printedMessage, this, &ScriptEditorWidget::onScriptPrint);

View file

@ -88,6 +88,7 @@ ScriptEngine::ScriptEngine(const QString& scriptContents, const QString& fileNam
_isRunning(false),
_isInitialized(false),
_isAvatar(false),
_isUserLoaded(false),
_avatarIdentityTimer(NULL),
_avatarBillboardTimer(NULL),
_timerFunctionMap(),
@ -113,6 +114,7 @@ ScriptEngine::ScriptEngine(const QUrl& scriptURL,
_isRunning(false),
_isInitialized(false),
_isAvatar(false),
_isUserLoaded(false),
_avatarIdentityTimer(NULL),
_avatarBillboardTimer(NULL),
_timerFunctionMap(),
@ -708,7 +710,7 @@ void ScriptEngine::include(const QString& includeFile) {
void ScriptEngine::load(const QString& loadFile) {
QUrl url = resolveInclude(loadFile);
emit loadScript(url.toString());
emit loadScript(url.toString(), false);
}
void ScriptEngine::nodeKilled(SharedNodePointer node) {

View file

@ -93,6 +93,9 @@ public:
bool isFinished() const { return _isFinished; }
bool isRunning() const { return _isRunning; }
void setUserLoaded(bool isUserLoaded) { _isUserLoaded = isUserLoaded; }
bool isUserLoaded() const { return _isUserLoaded; }
public slots:
void stop();
@ -116,7 +119,7 @@ signals:
void errorMessage(const QString& message);
void runningStateChanged();
void evaluationFinished(QScriptValue result, bool isException);
void loadScript(const QString& scriptName);
void loadScript(const QString& scriptName, bool isUserLoaded);
protected:
QString _scriptContents;
@ -152,7 +155,8 @@ private:
Vec3 _vec3Library;
ScriptUUID _uuidLibrary;
AnimationCache _animationCache;
bool _isUserLoaded;
ArrayBufferClass* _arrayBufferClass;
QHash<QUuid, quint16> _outgoingScriptAudioSequenceNumbers;