Showing the changes to interface/src/Application.cpp (1 of 30 files). Show all
Unified · Split
| @@ -28,6 +28,7 @@ · 27 unmodified lines | ||
| 28 | 28 | #include <QDesktopWidget> |
| 29 | 29 | #include <QCheckBox> |
| 30 | 30 | #include <QImage> |
| 31 | +#include <QInputDialog> | |
| 31 | 32 | #include <QKeyEvent> |
| 32 | 33 | #include <QMainWindow> |
| 33 | 34 | #include <QMenuBar> |
| @@ -250,7 +251,7 @@ Application::Application(int& argc, char** argv, timeval &startup_time) : · 216 unmodified lines | ||
| 250 | 251 | QMetaObject::invokeMethod(&accountManager, "checkAndSignalForAccessToken", Qt::QueuedConnection); |
| 251 | 252 | |
| 252 | 253 | _settings = new QSettings(this); |
| 253 | − | |
| 254 | + | |
| 254 | 255 | // Check to see if the user passed in a command line option for loading a local |
| 255 | 256 | // Voxel File. |
| 256 | 257 | _voxelsFilename = getCmdOption(argc, constArgv, "-i"); |
| @@ -329,9 +330,20 @@ Application::Application(int& argc, char** argv, timeval &startup_time) : · 72 unmodified lines | ||
| 329 | 330 | |
| 330 | 331 | LocalVoxelsList::getInstance()->addPersistantTree(DOMAIN_TREE_NAME, _voxels.getTree()); |
| 331 | 332 | LocalVoxelsList::getInstance()->addPersistantTree(CLIPBOARD_TREE_NAME, &_clipboard); |
| 332 | − | |
| 333 | − // do this as late as possible so that all required subsystems are inialized | |
| 334 | − loadScripts(); | |
| 333 | + | |
| 334 | + // check first run... | |
| 335 | + QVariant firstRunValue = _settings->value("firstRun",QVariant(true)); | |
| 336 | + if (firstRunValue.isValid() && firstRunValue.toBool()) { | |
| 337 | + qDebug() << "This is a first run..."; | |
| 338 | + // clear the scripts, and set out script to our default scripts | |
| 339 | + clearScriptsBeforeRunning(); | |
| 340 | + loadScript("http://public.highfidelity.io/scripts/defaultScripts.js"); | |
| 341 | + | |
| 342 | + _settings->setValue("firstRun",QVariant(false)); | |
| 343 | + } else { | |
| 344 | + // do this as late as possible so that all required subsystems are inialized | |
| 345 | + loadScripts(); | |
| 346 | + } | |
| 335 | 347 | } |
| 336 | 348 | |
| 337 | 349 | Application::~Application() { |
| @@ -3453,6 +3465,13 @@ void Application::loadScripts() { · 3115 unmodified lines | ||
| 3453 | 3465 | settings->endArray(); |
| 3454 | 3466 | } |
| 3455 | 3467 | |
| 3468 | +void Application::clearScriptsBeforeRunning() { | |
| 3469 | + // clears all scripts from the settings | |
| 3470 | + QSettings* settings = new QSettings(this); | |
| 3471 | + settings->beginWriteArray("Settings"); | |
| 3472 | + settings->endArray(); | |
| 3473 | +} | |
| 3474 | + | |
| 3456 | 3475 | void Application::saveScripts() { |
| 3457 | 3476 | // saves all current running scripts |
| 3458 | 3477 | QSettings* settings = new QSettings(this); |
| @@ -3508,35 +3527,17 @@ void Application::cleanupScriptMenuItem(const QString& scriptMenuName) { · 49 unmodified lines | ||
| 3508 | 3527 | Menu::getInstance()->removeAction(Menu::getInstance()->getActiveScriptsMenu(), scriptMenuName); |
| 3509 | 3528 | } |
| 3510 | 3529 | |
| 3511 | −void Application::loadScript(const QString& fileNameString) { | |
| 3512 | − QByteArray fileNameAscii = fileNameString.toLocal8Bit(); | |
| 3513 | − const char* fileName = fileNameAscii.data(); | |
| 3514 | − | |
| 3515 | − std::ifstream file(fileName, std::ios::in|std::ios::binary|std::ios::ate); | |
| 3516 | − if(!file.is_open()) { | |
| 3517 | − qDebug("Error loading file %s", fileName); | |
| 3518 | − return; | |
| 3519 | − } | |
| 3520 | − qDebug("Loading file %s...", fileName); | |
| 3521 | − _activeScripts.append(fileNameString); | |
| 3522 | − | |
| 3523 | − // get file length.... | |
| 3524 | − unsigned long fileLength = file.tellg(); | |
| 3525 | − file.seekg( 0, std::ios::beg ); | |
| 3526 | − | |
| 3527 | − // read the entire file into a buffer, WHAT!? Why not. | |
| 3528 | − char* entireFile = new char[fileLength+1]; | |
| 3529 | − file.read((char*)entireFile, fileLength); | |
| 3530 | − file.close(); | |
| 3531 | − | |
| 3532 | − entireFile[fileLength] = 0;// null terminate | |
| 3533 | − QString script(entireFile); | |
| 3534 | − delete[] entireFile; | |
| 3530 | +void Application::loadScript(const QString& scriptName) { | |
| 3535 | 3531 | |
| 3536 | 3532 | // start the script on a new thread... |
| 3537 | 3533 | bool wantMenuItems = true; // tells the ScriptEngine object to add menu items for itself |
| 3534 | + ScriptEngine* scriptEngine = new ScriptEngine(QUrl(scriptName), wantMenuItems, &_controllerScriptingInterface); | |
| 3538 | 3535 | |
| 3539 | − ScriptEngine* scriptEngine = new ScriptEngine(script, wantMenuItems, fileName, &_controllerScriptingInterface); | |
| 3536 | + if (!scriptEngine->hasScript()) { | |
| 3537 | + qDebug() << "Application::loadScript(), script failed to load..."; | |
| 3538 | + return; | |
| 3539 | + } | |
| 3540 | + _activeScripts.append(scriptName); | |
| 3540 | 3541 | |
| 3541 | 3542 | // add a stop menu item |
| 3542 | 3543 | Menu::getInstance()->addActionToQMenuAndActionHash(Menu::getInstance()->getActiveScriptsMenu(), |
| @@ -3599,6 +3600,31 @@ void Application::loadDialog() { · 56 unmodified lines | ||
| 3599 | 3600 | loadScript(fileNameString); |
| 3600 | 3601 | } |
| 3601 | 3602 | |
| 3603 | +void Application::loadScriptURLDialog() { | |
| 3604 | + | |
| 3605 | + QInputDialog scriptURLDialog(Application::getInstance()->getWindow()); | |
| 3606 | + scriptURLDialog.setWindowTitle("Open and Run Script URL"); | |
| 3607 | + scriptURLDialog.setLabelText("Script:"); | |
| 3608 | + scriptURLDialog.setWindowFlags(Qt::Sheet); | |
| 3609 | + const float DIALOG_RATIO_OF_WINDOW = 0.30f; | |
| 3610 | + scriptURLDialog.resize(scriptURLDialog.parentWidget()->size().width() * DIALOG_RATIO_OF_WINDOW, | |
| 3611 | + scriptURLDialog.size().height()); | |
| 3612 | + | |
| 3613 | + int dialogReturn = scriptURLDialog.exec(); | |
| 3614 | + QString newScript; | |
| 3615 | + if (dialogReturn == QDialog::Accepted) { | |
| 3616 | + if (scriptURLDialog.textValue().size() > 0) { | |
| 3617 | + // the user input a new hostname, use that | |
| 3618 | + newScript = scriptURLDialog.textValue(); | |
| 3619 | + } | |
| 3620 | + loadScript(newScript); | |
| 3621 | + } | |
| 3622 | + | |
| 3623 | + sendFakeEnterEvent(); | |
| 3624 | +} | |
| 3625 | + | |
| 3626 | + | |
| 3627 | + | |
| 3602 | 3628 | void Application::toggleLogDialog() { |
| 3603 | 3629 | if (! _logDialog) { |
| 3604 | 3630 | _logDialog = new LogDialog(_glWidget, getLogger()); |