bool OSArgument::setMaxValue(int maxValue) { if (m_type == OSArgumentType::Double) { double test = (double)maxValue; return setMaxValue(test); } else if (m_type != OSArgumentType::Integer) { return false; } double minValue = std::numeric_limits<int>::min(); if (hasDomain() && (m_domainType == OSDomainType::Interval)){ std::vector<int> domain = domainAsInteger(); if (domain.size() == 2){ minValue = domain[0]; } } m_domainType = OSDomainType::Interval; m_domain.clear(); m_domain.push_back(QVariant(minValue)); m_domain.push_back(QVariant(maxValue)); onChange(); return true; }
bool OSArgument::setMinValue(double minValue) { if (m_type == OSArgumentType::Integer){ int test = floor(minValue); if (test == minValue){ return setMinValue(test); } return false; } else if (m_type != OSArgumentType::Double) { return false; } double maxValue = std::numeric_limits<double>::max(); if (hasDomain() && (m_domainType == OSDomainType::Interval)){ std::vector<double> domain = domainAsDouble(); if (domain.size() == 2){ maxValue = domain[1]; } } m_domainType = OSDomainType::Interval; m_domain.clear(); m_domain.push_back(QVariant(minValue)); m_domain.push_back(QVariant(maxValue)); onChange(); return true; }
std::string OSArgument::print() const { std::stringstream ss; // name ss << name(); if (!displayName().empty()) { ss << " (" << displayName() << ")"; } ss << std::endl; // type and required ss << type().valueName() << ", "; if (required()) { ss << "Required"; } else { ss << "Optional"; } ss << std::endl; // value ss << "Value: "; if (hasValue()) { ss << printValue(false) << " "; } if (hasDefaultValue()) { ss << "(" << printDefaultValue() << ")"; } ss << std::endl; if (m_type.value() == OSArgumentType::Choice) { ss << "Choices:" << std::endl; int dnn = m_choiceDisplayNames.size(); for (int i = 0, n = m_choices.size(); i < n; ++i) { ss << " " << m_choices[i]; if ((i < dnn) && (!m_choiceDisplayNames[i].empty())) { ss << " (" << m_choiceDisplayNames[i] << ")"; } ss << std::endl; } } if (hasDomain()) { ss << m_domainType.valueName() << " Domain: "; if (m_domainType == OSDomainType::Interval) { OS_ASSERT(m_domain.size() == 2u); ss << "[" << printQVariant(m_domain[0]) << ", " << printQVariant(m_domain[1]) << "]" << std::endl; } else { ss << std::endl; for (const QVariant& value : m_domain) { ss << " " << printQVariant(value) << std::endl; } } } return ss.str(); }
std::vector<double> OSArgument::domainAsDouble() const { if (!hasDomain()) { LOG_AND_THROW("No domain set for OSArgument '" << name() << "'."); } DoubleVector result; BOOST_FOREACH(const QVariant& value,m_domain) { result.push_back(value.toDouble()); }
std::vector<openstudio::path> OSArgument::domainAsPath() const { if (!hasDomain()) { LOG_AND_THROW("No domain set for OSArgument '" << name() << "'."); } std::vector<openstudio::path> result; for (const QVariant& value : m_domain) { result.push_back(toPath(value.toString())); } return result; }
std::vector<std::string> OSArgument::domainAsString() const { if (!hasDomain()) { LOG_AND_THROW("No domain set for OSArgument '" << name() << "'."); } StringVector result; for (const QVariant& value : m_domain) { result.push_back(printQVariant(value)); } return result; }
std::vector<int> OSArgument::domainAsInteger() const { if (!hasDomain()) { LOG_AND_THROW("No domain set for OSArgument '" << name() << "'."); } IntVector result; for (const QVariant& value : m_domain) { result.push_back(value.toInt()); } return result; }
std::vector<Quantity> OSArgument::domainAsQuantity() const { if (!hasDomain()) { LOG_AND_THROW("No domain set for OSArgument '" << name() << "'."); } QuantityVector result; for (const QVariant& value : m_domain) { result.push_back(value.value<openstudio::Quantity>()); } return result; }
std::vector<bool> OSArgument::domainAsBool() const { if (!hasDomain()) { LOG_AND_THROW("No domain set for OSArgument '" << name() << "'."); } BoolVector result; for (const QVariant& value : m_domain) { if ("true" == value.toString()) { result.push_back(true); } result.push_back(false); } return result; }
void ConfigFile::addDomain(ConfigDomain *domain, int lineNumber) { if (!domain) // No domain, nothing to do return; // Sanity check if (hasDomain(domain->_name)) throw Exception("Duplicate domain \"%s\" (line %d)", domain->_name.c_str(), lineNumber); // Add the domain to the list and map _domainList.push_back(domain); _domainMap.insert(std::make_pair(domain->_name, domain)); }
std::vector<QVariant> OSArgument::domainAsQVariant() const { if (!hasDomain()) { LOG_AND_THROW("No domain set for OSArgument '" << name() << "'."); } return m_domain; }