//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimUiTreeModelPdm::slotRefreshScriptTree(QString path) { RimProject* proj = RIApplication::instance()->project(); if (!proj || !proj->scriptCollection()) return; RimScriptCollection* changedSColl = proj->scriptCollection()->findScriptCollection(path); if (changedSColl) { changedSColl->readContentFromDisc(); this->rebuildUiSubTree(changedSColl); } }
//-------------------------------------------------------------------------------------------------- /// Support list of multiple script paths divided by ';' //-------------------------------------------------------------------------------------------------- void RimProject::setScriptDirectories(const QString& scriptDirectories) { scriptCollection->calcScripts().deleteAllChildObjects(); scriptCollection->subDirectories().deleteAllChildObjects(); QStringList pathList = scriptDirectories.split(';'); foreach(QString path, pathList) { QDir dir(path); if (!path.isEmpty() && dir.exists() && dir.isReadable()) { RimScriptCollection* sharedScriptLocation = new RimScriptCollection; sharedScriptLocation->directory = path; sharedScriptLocation->setUiName(dir.dirName()); sharedScriptLocation->readContentFromDisc(); scriptCollection->subDirectories.push_back(sharedScriptLocation); } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- 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); } } } }