From 87260a4c5813ada502fc95d57d7178ff9e45e659 Mon Sep 17 00:00:00 2001 From: Thijs Wenker Date: Wed, 30 Apr 2014 00:58:22 +0200 Subject: [PATCH] ability to load a script thats running from an external link into the ScriptEditor , followed by a save dialog --- interface/src/ui/ScriptEditorWidget.cpp | 41 +++++++++++++++++-------- interface/src/ui/ScriptEditorWindow.cpp | 6 ++++ interface/src/ui/ScriptEditorWindow.h | 3 ++ 3 files changed, 37 insertions(+), 13 deletions(-) diff --git a/interface/src/ui/ScriptEditorWidget.cpp b/interface/src/ui/ScriptEditorWidget.cpp index 95d60e3b4f..08a68b1d8c 100644 --- a/interface/src/ui/ScriptEditorWidget.cpp +++ b/interface/src/ui/ScriptEditorWidget.cpp @@ -101,21 +101,36 @@ bool ScriptEditorWidget::saveFile(const QString &scriptPath) { } void ScriptEditorWidget::loadFile(const QString& scriptPath) { - QFile file(scriptPath); - if (!file.open(QFile::ReadOnly | QFile::Text)) { - QMessageBox::warning(this, tr("Interface"), tr("Cannot read script %1:\n%2.").arg(scriptPath).arg(file.errorString())); - return; + QUrl url(scriptPath); + + // if the scheme length is one or lower, maybe they typed in a file, let's try + const int WINDOWS_DRIVE_LETTER_SIZE = 1; + if (url.scheme().size() <= WINDOWS_DRIVE_LETTER_SIZE) { + QFile file(scriptPath); + if (!file.open(QFile::ReadOnly | QFile::Text)) { + QMessageBox::warning(this, tr("Interface"), tr("Cannot read script %1:\n%2.").arg(scriptPath).arg(file.errorString())); + return; + } + QTextStream in(&file); + _scriptEditorWidgetUI->scriptEdit->setPlainText(in.readAll()); + setScriptFile(scriptPath); + + disconnect(this, SLOT(onScriptError(const QString&))); + disconnect(this, SLOT(onScriptPrint(const QString&))); + } else { + QNetworkAccessManager* networkManager = new QNetworkAccessManager(this); + QNetworkReply* reply = networkManager->get(QNetworkRequest(url)); + qDebug() << "Downloading included script at" << scriptPath; + QEventLoop loop; + QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit())); + loop.exec(); + _scriptEditorWidgetUI->scriptEdit->setPlainText(reply->readAll()); + if (!saveAs()) { + emit static_cast(this->parent()->parent()->parent())->terminateCurrentTab(); + } } - QTextStream in(&file); - _scriptEditorWidgetUI->scriptEdit->setPlainText(in.readAll()); - - setScriptFile(scriptPath); - - disconnect(this, SLOT(onScriptError(const QString&))); - disconnect(this, SLOT(onScriptPrint(const QString&))); - - _scriptEngine = Application::getInstance()->getScriptEngine(scriptPath); + _scriptEngine = Application::getInstance()->getScriptEngine(_currentScript); if (_scriptEngine != NULL) { connect(_scriptEngine, SIGNAL(runningStateChanged()), this, SIGNAL(runningStateChanged())); connect(_scriptEngine, SIGNAL(errorMessage(const QString&)), this, SLOT(onScriptError(const QString&))); diff --git a/interface/src/ui/ScriptEditorWindow.cpp b/interface/src/ui/ScriptEditorWindow.cpp index 2d52165612..9f90606f5b 100644 --- a/interface/src/ui/ScriptEditorWindow.cpp +++ b/interface/src/ui/ScriptEditorWindow.cpp @@ -202,3 +202,9 @@ void ScriptEditorWindow::updateScriptNameOrStatus() { } } } + +void ScriptEditorWindow::terminateCurrentTab() { + if (_ScriptEditorWindowUI->tabWidget->currentIndex() != -1) { + _ScriptEditorWindowUI->tabWidget->removeTab(_ScriptEditorWindowUI->tabWidget->currentIndex()); + } +} diff --git a/interface/src/ui/ScriptEditorWindow.h b/interface/src/ui/ScriptEditorWindow.h index 0bf5015ccf..c934e44073 100644 --- a/interface/src/ui/ScriptEditorWindow.h +++ b/interface/src/ui/ScriptEditorWindow.h @@ -37,6 +37,9 @@ private: void setRunningState(bool run); void setScriptName(const QString& scriptName); +public slots: + void terminateCurrentTab(); + private slots: void loadScriptMenu(const QString& scriptName); void loadScriptClicked();