10 #ifndef smtk_attribute_ValueItem_h
11 #define smtk_attribute_ValueItem_h
13 #include "smtk/CoreExports.h"
15 #include "smtk/attribute/Item.h"
16 #include "smtk/attribute/SearchStyle.h"
26 class ValueItemDefinition;
47 virtual std::size_t numberOfValues()
const {
return m_isSet.size(); }
49 std::size_t numberOfRequiredValues()
const;
50 std::size_t maxNumberOfValues()
const;
52 std::string valueLabel(std::size_t element)
const;
54 bool isExtensible()
const;
56 bool allowsExpressions()
const;
57 bool isExpression()
const;
61 virtual bool setNumberOfValues(std::size_t newSize) = 0;
71 bool activeChildren =
true)
override;
73 int discreteIndex(std::size_t elementIndex = 0)
const
75 assert(m_discreteIndices.size() > elementIndex);
76 return m_discreteIndices[elementIndex];
78 bool isDiscrete()
const;
79 bool isDiscreteIndexValid(
int value)
const;
80 bool setDiscreteIndex(
int value) {
return this->setDiscreteIndex(0, value); }
82 bool setDiscreteIndex(std::size_t elementIndex,
int value);
85 std::vector<std::string>
86 relevantEnums(
bool includeCategories,
bool includeReadAccess,
unsigned int readAccessLevel)
const;
89 void detachOwningResource()
override;
96 void reset()
override;
99 bool rotate(std::size_t fromPosition, std::size_t toPosition)
override;
101 virtual bool setToDefault(std::size_t elementIndex = 0) = 0;
103 virtual bool isUsingDefault(std::size_t elementIndex)
const = 0;
105 virtual bool isUsingDefault()
const = 0;
107 bool hasDefault()
const;
108 virtual std::string valueAsString()
const {
return this->valueAsString(0); }
110 virtual std::string valueAsString(std::size_t elementIndex)
const = 0;
111 virtual bool setValueFromString(
const std::string& stringVal)
113 return this->setValueFromString(0, stringVal);
115 virtual bool setValueFromString(std::size_t elementIndex,
const std::string& stringVal) = 0;
116 virtual bool isSet(std::size_t elementIndex = 0)
const;
117 virtual void unset(std::size_t elementIndex = 0);
121 std::size_t numberOfChildrenItems()
const {
return m_childrenItems.size(); }
123 const std::map<std::string, smtk::attribute::ItemPtr>& childrenItems()
const
125 return m_childrenItems;
128 std::size_t numberOfActiveChildrenItems()
const {
return m_activeChildrenItems.size(); }
132 if ((i < 0) || (
static_cast<std::size_t
>(i) >= m_activeChildrenItems.size()))
137 return m_activeChildrenItems[
static_cast<std::size_t
>(i)];
161 ValueItem(
Item* owningItem,
int myPosition,
int mySubGroupPosition);
167 virtual void updateDiscreteValue(std::size_t elementIndex) = 0;
168 virtual void updateActiveChildrenItems();
169 bool isValidInternal(
bool useCategories,
const std::set<std::string>& categories)
const override;
170 virtual bool initializeValues() = 0;
172 std::vector<int> m_discreteIndices;
173 std::vector<bool> m_isSet;
175 std::map<std::string, smtk::attribute::ItemPtr> m_childrenItems;
176 std::vector<smtk::attribute::ItemPtr> m_activeChildrenItems;