51 #ifndef _RXPROPERTY_H_INCLUDED_ 
   52 #define _RXPROPERTY_H_INCLUDED_ 
   57 class OdRxPropertyBaseImpl;
 
   58 class OdRxValueIteratorImpl;
 
   59 class OdRxPropertyIteratorImpl;
 
   60 class OdRxDictionaryPropertyImpl;
 
   61 class OdRxPropertyImpl;
 
   62 class OdRxCollectionPropertyImpl;
 
   63 class OdRxIndexedPropertyImpl;
 
  116   friend class OdRxPropertyImpl;
 
  184   friend class OdRxCollectionPropertyImpl;
 
  220   friend class OdRxIndexedPropertyImpl;
 
  241   friend class OdRxDictionaryPropertyImpl;
 
  245 #define ODRX_DECLARE_RX_PROPERTY_RO(Object, Name, Type) struct Object ## Name ## Property : OdRxProperty {\ 
  246   static OdRxMemberPtr createObject(const OdRxClass* owner)\ 
  248     OdRxMemberPtr res = OdRxObjectImpl<Object ## Name ## Property>::createObject();\ 
  249     ((Object ## Name ## Property*)res.get())->init(__OD_T(#Name), &OdRxValueType::Desc<Type>::value(), owner);\ 
  252   virtual OdResult subGetValue(const OdRxObject* pO, OdRxValue& value) const ODRX_OVERRIDE;\ 
  253   virtual bool isReadOnly(const OdRxObject*) const ODRX_OVERRIDE { return true; }\ 
  256 #define ODRX_DECLARE_RX_PROPERTY(Object, Name, Type) struct Object ## Name ## Property : OdRxProperty {\ 
  257   static OdRxMemberPtr createObject(const OdRxClass* owner)\ 
  259     OdRxMemberPtr res = OdRxObjectImpl<Object ## Name ## Property>::createObject();\ 
  260     ((Object ## Name ## Property*)res.get())->init(__OD_T(#Name), &OdRxValueType::Desc<Type>::value(), owner);\ 
  263   virtual OdResult subGetValue(const OdRxObject* pO, OdRxValue& value) const ODRX_OVERRIDE;\ 
  264   virtual OdResult subSetValue(OdRxObject* pO, const OdRxValue& value) const ODRX_OVERRIDE;\ 
  267 #define ODRX_DECLARE_RX_INDEXED_PROPERTY(Object, Name, Type) \ 
  268 struct Object ## Name ## Property : OdRxIndexedProperty {\ 
  269   static OdRxMemberPtr createObject(const OdRxClass* owner)\ 
  271     OdRxMemberPtr res = OdRxObjectImpl<Object ## Name ## Property>::createObject();\ 
  272     ((Object ## Name ## Property*)res.get())->init(__OD_T(#Name), &OdRxValueType::Desc<Type>::value(), owner);\ 
  275   virtual OdResult subGetValue(const OdRxObject* pO, int index, OdRxValue& value) const ODRX_OVERRIDE; \ 
  276   virtual OdResult subSetValue(OdRxObject* pO, int index, const OdRxValue& value) const ODRX_OVERRIDE; \ 
  277   virtual OdResult subInsertValue(OdRxObject* pO, int index, const OdRxValue& value) const ODRX_OVERRIDE; \ 
  278   virtual OdResult subRemoveValue(OdRxObject* pO, int index) const ODRX_OVERRIDE; \ 
  279   virtual OdRxValueIteratorPtr subNewValueIterator(const OdRxObject* pO) const ODRX_OVERRIDE;\ 
  280   virtual OdResult subTryGetCount(const OdRxObject* pO, int& count) const ODRX_OVERRIDE;\ 
  283 #define ODRX_DECLARE_RX_CPLX_INDEXED_PROPERTY(Object, Name, Type) \ 
  284 struct Object ## Name ## Property : OdRxIndexedProperty {\ 
  285   static OdRxMemberPtr createObject(const OdRxClass* owner)\ 
  287     OdRxMemberPtr res = OdRxObjectImpl<Object ## Name ## Property>::createObject();\ 
  288     ((Object ## Name ## Property*)res.get())->init(__OD_T(#Name), &OdRxValueType::Desc<Type>::value(), owner);\ 
  291   virtual OdResult subGetValue(const OdRxObject* pO, int index, OdRxValue& value) const ODRX_OVERRIDE; \ 
  292   virtual OdResult subSetValue(OdRxObject* pO, int index, const OdRxValue& value) const ODRX_OVERRIDE; \ 
  293   virtual OdResult subInsertValue(OdRxObject* pO, int index, const OdRxValue& value) const ODRX_OVERRIDE; \ 
  294   virtual OdResult subRemoveValue(OdRxObject* pO, int index) const ODRX_OVERRIDE; \ 
  295   virtual OdRxValueIteratorPtr subNewValueIterator(const OdRxObject* pO) const ODRX_OVERRIDE;\ 
  296   virtual OdResult subTryGetCount(const OdRxObject* pO, int& count) const ODRX_OVERRIDE;\ 
  297   virtual OdResult subChildren(OdArray<OdRxMemberPtr>& children) const ODRX_OVERRIDE;\ 
  300 #define ODRX_DECLARE_RX_PROPERTY_START(Object, Name, Type) struct Object ## Name ## Property : OdRxProperty {\ 
  301   static OdRxMemberPtr createObject(const OdRxClass* owner)\ 
  303     OdRxMemberPtr res = OdRxObjectImpl<Object ## Name ## Property>::createObject();\ 
  304     ((Object ## Name ## Property*)res.get())->init(__OD_T(#Name), &OdRxValueType::Desc<Type>::value(), owner);\ 
  308 #define ODRX_DECLARE_RX_PROPERTY_END } 
  310 #define ODRX_DECLARE_RX_PROPERTY_READONLY virtual bool isReadOnly(const OdRxObject*) const ODRX_OVERRIDE { return true; } 
  312 #define ODRX_DECLARE_RX_PROPERTY_GET_BY_VAL(Object, ObjGetMemberName, Type) \ 
  313   virtual OdResult subGetValue(const OdRxObject* pO, OdRxValue& value) const ODRX_OVERRIDE\ 
  315     Object ## Ptr pObj = Object::cast(pO);\ 
  316     if (pObj.isNull()) return eNotApplicable;\ 
  317     value = static_cast<Type>(pObj->ObjGetMemberName());\ 
  321 #define ODRX_DECLARE_RX_PROPERTY_SET_BY_VAL(Object, ObjSetMemberName, Type) \ 
  322   virtual OdResult subSetValue(OdRxObject* pO, const OdRxValue& value) const ODRX_OVERRIDE\ 
  324     Object ## Ptr pObj = Object::cast(pO);\ 
  325     if (pObj.isNull()) return eNotApplicable;\ 
  326     pObj->ObjSetMemberName(*rxvalue_cast<Type>(&value));\ 
  330 #define ODRX_DECLARE_RX_PROPERTY_SUBCHILDREN_START \ 
  331   virtual OdResult subChildren(OdArray<OdRxMemberPtr>& children) const { 
  333 #define ODRX_DECLARE_RX_PROPERTY_SUBCHILDREN_END return eOk; } 
  335 #define ODRX_DECLARE_RX_PROPERTY_SUBCHILDREN_ADD(Name, Type) \ 
  336   children.append(OdRxSubProperty::createObject(__OD_T(#Name), OdRxValueType::Desc<Type>::value(), this)) 
OdSmartPtr< OdRxPropertyBase > OdRxPropertyBasePtr
OdSmartPtr< OdRxProperty > OdRxPropertyPtr
OdSmartPtr< OdRxValueIterator > OdRxValueIteratorPtr
OdSmartPtr< OdRxCollectionProperty > OdRxCollectionPropertyPtr
OdSmartPtr< OdRxIndexedProperty > OdRxIndexedPropertyPtr
virtual OdResult subTryGetCount(const OdRxObject *pO, int &count) const
ODRX_DECLARE_MEMBERS(OdRxCollectionProperty)
OdRxCollectionProperty(OdRxCollectionPropertyImpl *pImpl)
OdRxValueIteratorPtr newValueIterator(const OdRxObject *pO) const
OdResult tryGetCount(const OdRxObject *pO, int &count) const
virtual OdRxValueIteratorPtr subNewValueIterator(const OdRxObject *pO) const
virtual OdRxValueIterator * newValueIterator(const OdRxCollectionProperty *pProp, const OdRxObject *pO) const
ODRX_DECLARE_MEMBERS(OdRxCollectionPropertyOverrule)
virtual OdResult tryGetCount(const OdRxCollectionProperty *pProp, const OdRxObject *pO, int &count) const
OdResult setValue(OdRxObject *pO, const OdString &key, const OdRxValue &value) const
OdRxDictionaryProperty(OdRxDictionaryPropertyImpl *pImpl)
ODRX_DECLARE_MEMBERS(OdRxDictionaryProperty)
static OdRxCollectionPropertyPtr createObject(const OdString &name, const OdRxValueType &type, const OdRxObject *owner=NULL)
OdResult getValue(const OdRxObject *pO, const OdString &key, OdRxValue &value) const
virtual OdResult subSetValue(OdRxObject *pO, const OdString &key, const OdRxValue &value) const
virtual OdResult subGetValue(const OdRxObject *pO, const OdString &key, OdRxValue &value) const
OdResult getValue(const OdRxObject *pO, int index, OdRxValue &value) const
OdResult removeValue(OdRxObject *pO, int index) const
OdRxIndexedProperty(OdRxIndexedPropertyImpl *pImpl)
virtual OdResult subGetValue(const OdRxObject *pO, int index, OdRxValue &value) const
OdResult setValue(OdRxObject *pO, int index, const OdRxValue &value) const
virtual OdResult subSetValue(OdRxObject *pO, int index, const OdRxValue &value) const
virtual OdResult subRemoveValue(OdRxObject *pO, int index) const
static OdRxCollectionPropertyPtr createObject(const OdString &name, const OdRxValueType &type, const OdRxObject *owner=NULL)
virtual OdResult subInsertValue(OdRxObject *pO, int index, const OdRxValue &value) const
OdResult insertValue(OdRxObject *pO, int index, const OdRxValue &value) const
ODRX_DECLARE_MEMBERS(OdRxIndexedProperty)
virtual OdResult subRemoveValue(OdRxObject *pO, int index) const ODRX_OVERRIDE
virtual OdResult subGetValue(const OdRxObject *pO, int index, OdRxValue &value) const ODRX_OVERRIDE
virtual OdResult subSetValue(OdRxObject *pO, int index, const OdRxValue &value) const ODRX_OVERRIDE
virtual OdResult subInsertValue(OdRxObject *pO, int index, const OdRxValue &value) const ODRX_OVERRIDE
static OdRxMemberPtr createObject(const OdString &memberName, const OdRxValueType &type, const OdRxProperty *owner)
virtual OdRxValueIteratorPtr subNewValueIterator(const OdRxObject *pO) const ODRX_OVERRIDE
virtual OdResult subTryGetCount(const OdRxObject *pO, int &count) const ODRX_OVERRIDE
void init(const OdString &name, const OdRxValueType *type, const OdRxObject *owner=0)
ODRX_DECLARE_MEMBERS(OdRxPromotingQueryContext)
ODRX_DECLARE_MEMBERS(OdRxPropertyBase)
virtual bool isReadOnly(const OdRxObject *pO) const
OdRxPropertyBase(OdRxPropertyBaseImpl *)
OdResult setValue(OdRxObject *pO, const OdRxValue &value) const
OdResult getValue(const OdRxObject *pO, OdRxValue &value) const
OdRxProperty(OdRxPropertyImpl *)
ODRX_DECLARE_MEMBERS(OdRxProperty)
virtual OdResult subSetValue(OdRxObject *pO, const OdRxValue &value) const
virtual OdResult subGetValue(const OdRxObject *pO, OdRxValue &value) const
ODRX_DECLARE_MEMBERS(OdRxPropertyOverrule)
virtual OdResult getValue(const OdRxProperty *pProp, const OdRxObject *pO, OdRxValue &value) const
virtual OdResult setValue(const OdRxProperty *pProp, OdRxObject *pO, const OdRxValue &value) const
virtual bool isReadOnly(const OdRxObject *pO) const ODRX_OVERRIDE
virtual OdResult subGetValue(const OdRxObject *pO, OdRxValue &value) const ODRX_OVERRIDE
virtual OdResult subSetValue(OdRxObject *pO, const OdRxValue &value) const ODRX_OVERRIDE
static OdRxMemberPtr createObject(const OdString &memberName, const OdRxValueType &type, const OdRxProperty *owner)
OdRxSubPropertyOfIndexedProperty()
virtual OdResult subSetValue(OdRxObject *pO, int index, const OdRxValue &value) const ODRX_OVERRIDE
static OdRxMemberPtr createObject(const OdString &memberName, const OdRxValueType &type, const OdRxIndexedProperty *owner)
virtual OdResult subGetValue(const OdRxObject *pO, int index, OdRxValue &value) const ODRX_OVERRIDE
GLuint const GLchar * name
GLuint GLsizei GLsizei GLint GLenum * type
GLsizei const GLfloat * value
ODRX_DECLARE_MEMBERS(OdRxValueIterator)
virtual OdRxValue current() const =0