//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicExecuteScriptFeature::onActionTriggered(bool isChecked) { std::vector<RimCalcScript*> selection = RicScriptFeatureImpl::selectedScripts(); CVF_ASSERT(selection.size() > 0); RiuMainWindow* mainWindow = RiuMainWindow::instance(); mainWindow->showProcessMonitorDockPanel(); RimCalcScript* calcScript = selection[0]; RiaApplication* app = RiaApplication::instance(); QString octavePath = app->octavePath(); if (!octavePath.isEmpty()) { // TODO: Must rename RimCalcScript::absolutePath to absoluteFileName, as the code below is confusing // absolutePath() is a function in QFileInfo QFileInfo fi(calcScript->absolutePath()); QString octaveFunctionSearchPath = fi.absolutePath(); QStringList arguments = app->octaveArguments(); arguments.append("--path"); arguments << octaveFunctionSearchPath; arguments << calcScript->absolutePath(); RiaApplication::instance()->launchProcess(octavePath, arguments); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicExecuteScriptFeature::onActionTriggered(bool isChecked) { std::vector<RimCalcScript*> selection = RicScriptFeatureImpl::selectedScripts(); CVF_ASSERT(selection.size() > 0); RiuMainWindow* mainWindow = RiuMainWindow::instance(); mainWindow->showProcessMonitorDockPanel(); RimCalcScript* calcScript = selection[0]; RiaApplication* app = RiaApplication::instance(); QString octavePath = app->octavePath(); if (!octavePath.isEmpty()) { QStringList arguments = RimCalcScript::createCommandLineArguments(calcScript->absoluteFileName()); RiaApplication::instance()->launchProcess(octavePath, arguments); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimScriptCollection::readContentFromDisc() { calcScripts.deleteAllChildObjects(); if (directory().isEmpty()) { for (size_t i = 0; i < subDirectories.size(); ++i) { if (subDirectories[i]) subDirectories[i]->readContentFromDisc(); } return; } QDir myDir(this->directory()); if (!myDir.isReadable()) { return; } // Build a list of all scripts in the specified directory { QString filter = "*.m"; QStringList fileList = caf::Utils::getFilesInDirectory(directory, filter, true); int i; for (i = 0; i < fileList.size(); i++) { QString fileName = fileList.at(i); QFileInfo fi(fileName); if (fi.exists()) { RimCalcScript* calcScript = new RimCalcScript; calcScript->absolutePath = fileName; calcScript->setUiName(fi.baseName()); calcScripts.push_back(calcScript); } } } // Add subfolders { QDir dir(directory); QFileInfoList fileInfoList = dir.entryInfoList(QDir::AllDirs | QDir::NoDotAndDotDot | QDir::Readable); subDirectories.deleteAllChildObjects(); QStringList retFileNames; QListIterator<QFileInfo> it(fileInfoList); while (it.hasNext()) { QFileInfo fi = it.next(); RimScriptCollection* scriptLocation = new RimScriptCollection; scriptLocation->directory = fi.absoluteFilePath(); scriptLocation->setUiName(fi.baseName()); scriptLocation->readContentFromDisc(); subDirectories.push_back(scriptLocation); } } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RicNewScriptFeature::onActionTriggered(bool isChecked) { std::vector<RimCalcScript*> calcScripts = RicScriptFeatureImpl::selectedScripts(); std::vector<RimScriptCollection*> calcScriptCollections = RicScriptFeatureImpl::selectedScriptCollections(); RimCalcScript* calcScript = calcScripts.size() > 0 ? calcScripts[0] : NULL; RimScriptCollection* scriptColl = calcScriptCollections.size() > 0 ? calcScriptCollections[0] : NULL; QString fullPathNewScript; if (calcScript) { QFileInfo existingScriptFileInfo(calcScript->absolutePath()); fullPathNewScript = existingScriptFileInfo.absolutePath(); } else if (scriptColl) { fullPathNewScript = scriptColl->directory(); } else { return; } QString fullPathFilenameNewScript; fullPathFilenameNewScript = fullPathNewScript + "/untitled.m"; int num= 1; while (caf::Utils::fileExists(fullPathFilenameNewScript)) { fullPathFilenameNewScript = fullPathNewScript + "/untitled" + QString::number(num) + ".m"; num++; } bool ok; fullPathFilenameNewScript = QInputDialog::getText(nullptr, "Specify new script file", "File name", QLineEdit::Normal, fullPathFilenameNewScript, &ok, RiuTools::defaultDialogFlags()); if (ok && !fullPathFilenameNewScript.isEmpty()) { QFile file(fullPathFilenameNewScript); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { QMessageBox::warning(Riu3DMainWindowTools::mainWindowWidget(), "Script editor", "Failed to create file\n" + fullPathFilenameNewScript); return; } RicRefreshScriptsFeature::refreshScriptFolders(); if (calcScript) { Riu3DMainWindowTools::selectAsCurrentItem(calcScript); } RiaApplication* app = RiaApplication::instance(); QString scriptEditor = app->scriptEditorPath(); if (!scriptEditor.isEmpty()) { QStringList arguments; arguments << fullPathFilenameNewScript; QProcess* myProcess = new QProcess(this); myProcess->start(scriptEditor, arguments); if (!myProcess->waitForStarted(1000)) { QMessageBox::warning(Riu3DMainWindowTools::mainWindowWidget(), "Script editor", "Failed to start script editor executable\n" + scriptEditor); } } } }