#include <ModelAPI_AttributeRefAttr.h>
#include <ModelAPI_AttributeReference.h>
#include <ModelAPI_AttributeRefList.h>
+#include <ModelAPI_AttributeRefAttrList.h>
#include <ModelAPI_AttributeString.h>
+#include <ModelAPI_AttributeStringArray.h>
#include <ModelAPI_AttributeIntArray.h>
#include <ModelAPI_Data.h>
#include <ModelAPI_Feature.h>
std::set<AttributePtr> myRefsToMe;
/// flag that may block the "attribute updated" sending
bool mySendAttributeUpdated;
- /// if some attribute was changed, but mySendAttributeUpdated was false, this flag stores this
- bool myWasChangedButBlocked;
+ /// if some attribute was changed, but mySendAttributeUpdated was false, this stores this
+ std::list<ModelAPI_Attribute*> myWasChangedButBlocked;
/// Returns label of this feature
TDF_Label label()
friend class Model_AttributeRefAttrList;
friend class Model_AttributeSelection;
friend class Model_AttributeSelectionList;
+ friend class Model_ValidatorsFactory;
+ friend class Model_SelectionNaming;
public:
/// The simplest constructor. "setLabel" must be called just after to initialize correctly.
MODEL_EXPORT virtual std::shared_ptr<ModelAPI_AttributeDocRef> document(const std::string& theID);
/// Returns the attribute that contains real value with double precision
MODEL_EXPORT virtual std::shared_ptr<ModelAPI_AttributeDouble> real(const std::string& theID);
+ /// Returns the attribute that contains double values array
+ MODEL_EXPORT virtual
+ std::shared_ptr<ModelAPI_AttributeDoubleArray> realArray(const std::string& theID);
/// Returns the attribute that contains integer value
MODEL_EXPORT virtual std::shared_ptr<ModelAPI_AttributeInteger>
integer(const std::string& theID);
MODEL_EXPORT virtual std::shared_ptr<ModelAPI_AttributeSelection>
selection(const std::string& theID);
/// Returns the attribute that contains selection to a shape
- MODEL_EXPORT virtual std::shared_ptr<ModelAPI_AttributeSelectionList>
+ MODEL_EXPORT virtual std::shared_ptr<ModelAPI_AttributeSelectionList>
selectionList(const std::string& theID);
/// Returns the attribute that contains reference to an attribute of a feature
MODEL_EXPORT virtual std::shared_ptr<ModelAPI_AttributeRefAttr>
/// Returns the attribute that contains list of references to features
MODEL_EXPORT virtual std::shared_ptr<ModelAPI_AttributeRefList>
reflist(const std::string& theID);
+ /// Returns the attribute that contains list of references to features
+ /// or reference to an attribute of a feature
+ MODEL_EXPORT virtual std::shared_ptr<ModelAPI_AttributeRefAttrList>
+ refattrlist(const std::string& theID);
/// Returns the attribute that contains boolean value
MODEL_EXPORT virtual std::shared_ptr<ModelAPI_AttributeBoolean>
boolean(const std::string& theID);
/// Returns the attribute that contains integer values array
MODEL_EXPORT virtual std::shared_ptr<ModelAPI_AttributeIntArray>
intArray(const std::string& theID);
+ /// Returns the attribute that contains string values array
+ MODEL_EXPORT virtual std::shared_ptr<ModelAPI_AttributeStringArray>
+ stringArray(const std::string& theID);
+ /// Returns the attribute that contains string values array
+ MODEL_EXPORT virtual std::shared_ptr<ModelAPI_AttributeTables>
+ tables(const std::string& theID);
/// Returns the generic attribute by identifier
/// \param theID identifier of the attribute
/// \param theID identifier of the attribute that can be referenced by this ID later
/// \param theAttrType type of the created attribute (received from the type method)
/// \returns the just created attribute
- MODEL_EXPORT virtual AttributePtr
+ MODEL_EXPORT virtual AttributePtr
addAttribute(const std::string& theID, const std::string theAttrType);
/// Useful method for "set" methods of the attributes: sends an UPDATE event and
/// makes attribute initialized
MODEL_EXPORT virtual void sendAttributeUpdated(ModelAPI_Attribute* theAttr);
/// Blocks sending "attribute updated" if theBlock is true
- MODEL_EXPORT virtual void blockSendAttributeUpdated(const bool theBlock);
+ /// \param theBlock allows switching on/off the blocking state
+ /// \param theSendMessage if false, it does not send the update message
+ /// even if something is changed
+ /// (normally is it used in attributeChanged because this message will be sent anyway)
+ /// \returns the previous state of block
+ MODEL_EXPORT virtual bool blockSendAttributeUpdated(
+ const bool theBlock, const bool theSendMessage = true);
/// Puts feature to the document data sub-structure
MODEL_EXPORT void setLabel(TDF_Label theLab);
MODEL_EXPORT virtual const std::set<AttributePtr>& refsToMe() {return myRefsToMe;}
/// returns all references by attributes of this data
- /// \param theRefs returned list of pairs: id of referenced attribute and list of referenced objects
+ /// \param theRefs returned list of pairs:
+ /// id of referenced attribute and list of referenced objects
MODEL_EXPORT virtual void referencesToObjects(
std::list<std::pair<std::string, std::list<ObjectPtr> > >& theRefs);
/// \param theFeature feature referenced to this
/// \param theAttrID identifier of the attribute that is references from theFeature to this
/// \param theApplyConcealment applies consealment flag changes
- void addBackReference(FeaturePtr theFeature, std::string theAttrID,
+ void addBackReference(FeaturePtr theFeature, std::string theAttrID,
const bool theApplyConcealment = true);
/// Makes the concealment flag up to date for this object-owner.