SMTK  @SMTK_VERSION@
Simulation Modeling Tool Kit
GroupItemDefinition.h
Go to the documentation of this file.
1 //=========================================================================
2 // Copyright (c) Kitware, Inc.
3 // All rights reserved.
4 // See LICENSE.txt for details.
5 //
6 // This software is distributed WITHOUT ANY WARRANTY; without even
7 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
8 // PURPOSE. See the above copyright notice for more information.
9 //=========================================================================
10 
13 
14 #ifndef smtk_attribute_GroupItemDefinition_h
15 #define smtk_attribute_GroupItemDefinition_h
16 
17 #include "smtk/attribute/ItemDefinition.h"
18 #include <map>
19 #include <string>
20 #include <vector>
21 
22 namespace smtk
23 {
24 namespace attribute
25 {
26 class GroupItem;
31 
32 class SMTKCORE_EXPORT GroupItemDefinition : public ItemDefinition
33 {
34 public:
36  static smtk::attribute::GroupItemDefinitionPtr New(const std::string& myName)
37  {
39  }
40 
41  ~GroupItemDefinition() override;
42  Item::Type type() const override;
43  std::size_t numberOfItemDefinitions() const { return m_itemDefs.size(); }
44  smtk::attribute::ItemDefinitionPtr itemDefinition(int ith) const
45  {
46  return (ith < 0) ? smtk::attribute::ItemDefinitionPtr()
47  : (static_cast<unsigned int>(ith) >= m_itemDefs.size()
49  : m_itemDefs[static_cast<std::size_t>(ith)]);
50  }
51  bool addItemDefinition(smtk::attribute::ItemDefinitionPtr cdef);
52  template<typename T>
53  typename smtk::internal::shared_ptr_type<T>::SharedPointerType addItemDefinition(
54  const std::string& inName)
55  {
56  typedef smtk::internal::shared_ptr_type<T> SharedTypes;
57  typename SharedTypes::SharedPointerType item;
58 
59  // First see if there is a item by the same name
60  if (this->findItemPosition(inName) < 0)
61  {
62  std::size_t n = m_itemDefs.size();
63  item = SharedTypes::RawPointerType::New(inName);
64  if (m_isConditional)
65  {
66  item->setIsOptional(true);
67  }
68  m_itemDefs.push_back(item);
69  m_itemDefPositions[inName] = static_cast<int>(n);
70  }
71  return item;
72  }
73 
81  bool removeItemDefinition(ItemDefinitionPtr itemDef);
82 
83  int findItemPosition(const std::string& name) const;
84 
92  bool isExtensible() const { return m_isExtensible; }
93  void setIsExtensible(bool mode);
95 
96  std::size_t numberOfRequiredGroups() const { return m_numberOfRequiredGroups; }
97 
99  bool setNumberOfRequiredGroups(std::size_t gsize);
100 
108  void setIsConditional(bool value) { m_isConditional = value; }
109  bool isConditional() const { return m_isConditional; }
111 
116  void setMinNumberOfChoices(unsigned int value) { m_minNumberOfChoices = value; }
117  unsigned int minNumberOfChoices() const { return m_minNumberOfChoices; }
119 
124  void setMaxNumberOfChoices(unsigned int value) { m_maxNumberOfChoices = value; }
125  unsigned int maxNumberOfChoices() const { return m_maxNumberOfChoices; }
127 
128  bool hasSubGroupLabels() const { return !m_labels.empty(); }
129 
134  std::size_t maxNumberOfGroups() const { return m_maxNumberOfGroups; }
137  bool setMaxNumberOfGroups(std::size_t esize);
138 
139  void setSubGroupLabel(std::size_t element, const std::string& elabel);
140  void setCommonSubGroupLabel(const std::string& elabel);
141  bool usingCommonSubGroupLabel() const { return m_useCommonLabel; }
142  std::string subGroupLabel(std::size_t element) const;
143 
144  smtk::attribute::ItemPtr buildItem(Attribute* owningAttribute, int itemPosition) const override;
145  smtk::attribute::ItemPtr buildItem(Item* owningItem, int position, int subGroupPosition)
146  const override;
147  void buildGroup(smtk::attribute::GroupItem* group, int subGroupPosition) const;
148 
150  smtk::attribute::ItemDefinition::CopyInfo& info) const override;
151 
152 protected:
153  GroupItemDefinition(const std::string& myname);
154  void applyCategories(
155  const smtk::attribute::Categories::Stack& inheritedFromParent,
156  smtk::attribute::Categories& inheritedToParent) override;
157  void applyAdvanceLevels(
158  const unsigned int& readLevelFromParent,
159  const unsigned int& writeLevelFromParent) override;
160  std::vector<smtk::attribute::ItemDefinitionPtr> m_itemDefs;
161  std::map<std::string, int> m_itemDefPositions;
162  std::vector<std::string> m_labels;
163  std::size_t m_numberOfRequiredGroups;
164  std::size_t m_maxNumberOfGroups;
165  bool m_isExtensible;
166  bool m_useCommonLabel;
167  bool m_isConditional;
168  unsigned int m_maxNumberOfChoices;
169  unsigned int m_minNumberOfChoices;
170 
171 private:
172 };
173 
174 inline int GroupItemDefinition::findItemPosition(const std::string& inName) const
175 {
176  std::map<std::string, int>::const_iterator it;
177  it = m_itemDefPositions.find(inName);
178  if (it == m_itemDefPositions.end())
179  {
180  return -1; // named item doesn't exist
181  }
182  return it->second;
183 }
184 } // namespace attribute
185 } // namespace smtk
186 
187 #endif /* smtk_attribute_GroupItemDefinition_h */
smtk
The main namespace for the Simulation Modeling Tool Kit (SMTK).
Definition: doc.h:33
smtk::attribute::GroupItemDefinition::isConditional
bool isConditional() const
Returns or sets the definition's conditional property.
Definition: GroupItemDefinition.h:109
smtk::attribute::Item::Type
Type
Definition: Item.h:53
smtk::attribute::GroupItem
A group item represents an array of structures in SMTK.
Definition: GroupItem.h:48
smtk::attribute::GroupItemDefinition::setMaxNumberOfChoices
void setMaxNumberOfChoices(unsigned int value)
Returns or sets the default maximum number of choices that must be set for GroupItems,...
Definition: GroupItemDefinition.h:124
smtk::attribute::GroupItemDefinition::maxNumberOfGroups
std::size_t maxNumberOfGroups() const
Returns or Sets the maximum number of groups that items from this def can have.
Definition: GroupItemDefinition.h:134
smtk::attribute::Categories::Stack
Definition: Categories.h:146
smtk::attribute::ItemDefinition
Definition: ItemDefinition.h:37
smtk::attribute::GroupItemDefinition::maxNumberOfChoices
unsigned int maxNumberOfChoices() const
Returns or sets the default maximum number of choices that must be set for GroupItems,...
Definition: GroupItemDefinition.h:125
smtk::internal::shared_ptr_type
Definition: PublicPointerDefs.h:729
smtk::attribute::GroupItemDefinition::setMinNumberOfChoices
void setMinNumberOfChoices(unsigned int value)
Returns or sets the default minimum number of choices that must be set for GroupItems,...
Definition: GroupItemDefinition.h:116
smtk::attribute::GroupItemDefinitionPtr
smtk::shared_ptr< smtk::attribute::GroupItemDefinition > GroupItemDefinitionPtr
Definition: PublicPointerDefs.h:510
smtk::attribute::ItemDefinition::CopyInfo
Definition: ItemDefinition.h:47
smtk::attribute::GroupItemDefinition::minNumberOfChoices
unsigned int minNumberOfChoices() const
Returns or sets the default minimum number of choices that must be set for GroupItems,...
Definition: GroupItemDefinition.h:117
smtkTypeMacro
#define smtkTypeMacro(...)
Add typedefs to a class for identifcation.
Definition: SharedFromThis.h:51
smtk::attribute::GroupItemDefinition::setIsConditional
void setIsConditional(bool value)
Returns or sets the definition's conditional property.
Definition: GroupItemDefinition.h:108
smtk::attribute::Categories
Represents the category constraints associated with an Attribute, Attribute Definition,...
Definition: Categories.h:32
smtk::attribute::ItemPtr
smtk::shared_ptr< smtk::attribute::Item > ItemPtr
Definition: PublicPointerDefs.h:467
smtk::attribute::GroupItemDefinition
A GroupItemDefinition represents a collection of Item Definitions.
Definition: GroupItemDefinition.h:32
smtk::attribute::ItemDefinitionPtr
smtk::shared_ptr< smtk::attribute::ItemDefinition > ItemDefinitionPtr
Definition: PublicPointerDefs.h:473
smtk::attribute::GroupItemDefinition::isExtensible
bool isExtensible() const
Returns or sets the def's extensibility property.
Definition: GroupItemDefinition.h:92