示例#1
0
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"));
}
示例#2
0
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;
}