BOOL TSHPath::IsNetworkPath(LPCTSTR pszPath) { static TModuleProc1<BOOL,LPCTSTR> isNetworkPath(GetModule(), IsNetworkPathStr); return isNetworkPath(pszPath); }
OSAppBase::OSAppBase( int & argc, char ** argv, const QSharedPointer<MeasureManager> &t_measureManager ) : QApplication(argc, argv), m_measureManager(t_measureManager) { openstudio::path userMeasuresDir = BCLMeasure::userMeasuresDir(); if (isNetworkPath(userMeasuresDir) && !isNetworkPathAvailable(userMeasuresDir)) { QTimer::singleShot(0, this, SLOT(showMeasureUpdateDlg())); } else { LOG(Debug, "Measures dir: " << openstudio::toString(userMeasuresDir)); if (!QDir().exists(toQString(userMeasuresDir))){ BCLMeasure::setUserMeasuresDir(userMeasuresDir); } } m_measureManager->updateMeasuresLists(); m_waitDialog = boost::shared_ptr<WaitDialog>(new WaitDialog("Loading Model","Loading Model")); }
boost::optional<openstudio::BCLMeasure> BCLMeasureDialog::createMeasure() { openstudio::path userMeasuresDir = BCLMeasure::userMeasuresDir(); if (isNetworkPath(userMeasuresDir) && !isNetworkPathAvailable(userMeasuresDir)) { QMessageBox::information(this, "Cannot Create Measure", "Your My Measures Directory appears to be on a network drive that is not currently available.\nYou can change your specified My Measures Directory using 'Preferences->Change My Measures Directory'.", QMessageBox::Ok); return boost::optional<openstudio::BCLMeasure>(); } std::string name = toString(m_nameLineEdit->text()); std::string className = BCLMeasure::makeClassName(name); std::string lowerClassName = toUnderscoreCase(className); std::string description = toString(m_descriptionTextEdit->toPlainText()); std::string modelerDescription = toString(m_modelerDescriptionTextEdit->toPlainText()); std::string measureTypeStr = toString(m_measureTypeComboBox->currentText()); MeasureType measureType; if ( measureTypeStr == "OpenStudio Measure"){ measureType = MeasureType::ModelMeasure; }else if ( measureTypeStr == "EnergyPlus Measure"){ measureType = MeasureType::EnergyPlusMeasure; }else if ( measureTypeStr == "Utility Measure"){ measureType = MeasureType::UtilityMeasure; }else if ( measureTypeStr == "Reporting Measure"){ measureType = MeasureType::ReportingMeasure; } QString folderName = toQString(lowerClassName).append("/"); openstudio::path measureDir = userMeasuresDir / toPath(folderName); // prompt user ??? if (openstudio::filesystem::exists(measureDir)){ int i = 1; while (openstudio::filesystem::exists(measureDir)){ folderName = toQString(lowerClassName).append(" ").append(QString::number(i)).append("/"); measureDir = userMeasuresDir / toPath(folderName); ++i; } // DLM: do we want to alter the class name to indicate this copy? //className = className + toString(QString::number(i)); //lowerClassName = lowerClassName + toString(QString::number(i)); } QStringList taxonomyParts; QString taxonomyFirstLevel = m_taxonomyFirstLevelComboBox->currentText(); QString taxonomySecondLevel = m_taxonomySecondLevelComboBox->currentText(); taxonomyParts << taxonomyFirstLevel; if (!taxonomySecondLevel.isEmpty()){ taxonomyParts << taxonomySecondLevel; } std::string taxonomyTag = toString(taxonomyParts.join(".")); std::vector<Attribute> attributes; QList<QListWidgetItem *> items = m_intendedSoftwareToolListWidget->findItems(".*", Qt::MatchRegExp); for (QListWidgetItem * item : items){ if (item->checkState() == Qt::Checked){ std::string intendedSoftwareTool = toString(item->text()); attributes.push_back(Attribute("Intended Software Tool", intendedSoftwareTool)); } } items = m_intendedUseCaseListWidget->findItems(".*", Qt::MatchRegExp); for (QListWidgetItem * item : items){ if (item->checkState() == Qt::Checked){ std::string intendedUseCase = toString(item->text()); attributes.push_back(Attribute("Intended Use Case", intendedUseCase)); } } boost::optional<BCLMeasure> result; if (m_bclMeasureToCopy){ // have measure to copy, use clone result = m_bclMeasureToCopy->clone(measureDir); if (result){ result->changeUID(); // change the files on disk result->updateMeasureScript(m_bclMeasureToCopy->measureType(), measureType, m_bclMeasureToCopy->className(), className, name, description, modelerDescription); result->updateMeasureTests(m_bclMeasureToCopy->className(), className); result->checkForUpdatesFiles(); // change the xml std::string lowerClassName = toUnderscoreCase(className); result->setName(lowerClassName); result->setClassName(className); result->setDisplayName(name); result->setDescription(description); result->setModelerDescription(modelerDescription); result->setArguments(m_bclMeasureToCopy->arguments()); result->setTaxonomyTag(taxonomyTag); result->setMeasureType(measureType); // xml checksum is out of date for (const Attribute& attribute : attributes){ result->addAttribute(attribute); } result->save(); } }else{ try{ // starting new measure result = BCLMeasure(name, className, measureDir, taxonomyTag, measureType, description, modelerDescription); for (const Attribute& attribute : attributes){ result->addAttribute(attribute); } result->save(); }catch(std::exception&){ } } return result; }