14 #ifndef smtk_attribute_ValueItem_h
15 #define smtk_attribute_ValueItem_h
17 #include "smtk/CoreExports.h"
19 #include "smtk/attribute/Item.h"
20 #include "smtk/attribute/SearchStyle.h"
30 class ValueItemDefinition;
41 virtual std::size_t numberOfValues()
const {
return m_isSet.size(); }
43 std::size_t numberOfRequiredValues()
const;
44 std::size_t maxNumberOfValues()
const;
46 std::string valueLabel(std::size_t element)
const;
48 bool isExtensible()
const;
50 bool allowsExpressions()
const;
51 bool isExpression()
const;
55 virtual bool setNumberOfValues(std::size_t newSize) = 0;
65 bool activeChildren =
true)
override;
67 int discreteIndex(std::size_t elementIndex = 0)
const
69 assert(m_discreteIndices.size() > elementIndex);
70 return m_discreteIndices[elementIndex];
72 bool isDiscrete()
const;
73 bool isDiscreteIndexValid(
int value)
const;
74 bool setDiscreteIndex(
int value) {
return this->setDiscreteIndex(0, value); }
76 bool setDiscreteIndex(std::size_t elementIndex,
int value);
79 std::vector<std::string>
80 relevantEnums(
bool includeCategories,
bool includeReadAccess,
unsigned int readAccessLevel)
const;
83 void detachOwningResource()
override;
90 void reset()
override;
93 bool rotate(std::size_t fromPosition, std::size_t toPosition)
override;
95 virtual bool setToDefault(std::size_t elementIndex = 0) = 0;
97 virtual bool isUsingDefault(std::size_t elementIndex)
const = 0;
99 virtual bool isUsingDefault()
const = 0;
101 bool hasDefault()
const;
102 virtual std::string valueAsString()
const {
return this->valueAsString(0); }
104 virtual std::string valueAsString(std::size_t elementIndex)
const = 0;
105 virtual bool setValueFromString(std::size_t elementIndex,
const std::string& stringVal) = 0;
106 virtual bool isSet(std::size_t elementIndex = 0)
const;
107 virtual void unset(std::size_t elementIndex = 0);
111 std::size_t numberOfChildrenItems()
const {
return m_childrenItems.size(); }
113 const std::map<std::string, smtk::attribute::ItemPtr>& childrenItems()
const
115 return m_childrenItems;
118 std::size_t numberOfActiveChildrenItems()
const {
return m_activeChildrenItems.size(); }
122 if ((i < 0) || (
static_cast<std::size_t
>(i) >= m_activeChildrenItems.size()))
127 return m_activeChildrenItems[
static_cast<std::size_t
>(i)];
151 ValueItem(
Item* owningItem,
int myPosition,
int mySubGroupPosition);
157 virtual void updateDiscreteValue(std::size_t elementIndex) = 0;
158 virtual void updateActiveChildrenItems();
159 bool isValidInternal(
bool useCategories,
const std::set<std::string>& categories)
const override;
160 std::vector<int> m_discreteIndices;
161 std::vector<bool> m_isSet;
163 std::map<std::string, smtk::attribute::ItemPtr> m_childrenItems;
164 std::vector<smtk::attribute::ItemPtr> m_activeChildrenItems;