51#ifndef _RXPROPERTY_H_INCLUDED_
52#define _RXPROPERTY_H_INCLUDED_
57class OdRxPropertyBaseImpl;
58class OdRxValueIteratorImpl;
59class OdRxPropertyIteratorImpl;
60class OdRxDictionaryPropertyImpl;
61class OdRxPropertyImpl;
62class OdRxCollectionPropertyImpl;
63class OdRxIndexedPropertyImpl;
120 friend class OdRxPropertyImpl;
191 friend class OdRxCollectionPropertyImpl;
227 friend class OdRxIndexedPropertyImpl;
248 friend class OdRxDictionaryPropertyImpl;
252#define ODRX_DECLARE_RX_PROPERTY_RO(Object, Name, Type) struct Object ## Name ## Property : OdRxProperty {\
253 static OdRxMemberPtr createObject(const OdRxClass* owner)\
255 OdRxMemberPtr res = OdRxObjectImpl<Object ## Name ## Property>::createObject();\
256 ((Object ## Name ## Property*)res.get())->init(__OD_T(#Name), &OdRxValueType::Desc<Type>::value(), owner);\
259 virtual OdResult subGetValue(const OdRxObject* pO, OdRxValue& value) const ODRX_OVERRIDE;\
260 virtual bool isReadOnly(const OdRxObject*) const ODRX_OVERRIDE { return true; }\
263#define ODRX_DECLARE_RX_PROPERTY(Object, Name, Type) struct Object ## Name ## Property : OdRxProperty {\
264 static OdRxMemberPtr createObject(const OdRxClass* owner)\
266 OdRxMemberPtr res = OdRxObjectImpl<Object ## Name ## Property>::createObject();\
267 ((Object ## Name ## Property*)res.get())->init(__OD_T(#Name), &OdRxValueType::Desc<Type>::value(), owner);\
270 virtual OdResult subGetValue(const OdRxObject* pO, OdRxValue& value) const ODRX_OVERRIDE;\
271 virtual OdResult subSetValue(OdRxObject* pO, const OdRxValue& value) const ODRX_OVERRIDE;\
274#define ODRX_DECLARE_RX_INDEXED_PROPERTY(Object, Name, Type) \
275struct Object ## Name ## Property : OdRxIndexedProperty {\
276 static OdRxMemberPtr createObject(const OdRxClass* owner)\
278 OdRxMemberPtr res = OdRxObjectImpl<Object ## Name ## Property>::createObject();\
279 ((Object ## Name ## Property*)res.get())->init(__OD_T(#Name), &OdRxValueType::Desc<Type>::value(), owner);\
282 virtual OdResult subGetValue(const OdRxObject* pO, int index, OdRxValue& value) const ODRX_OVERRIDE; \
283 virtual OdResult subSetValue(OdRxObject* pO, int index, const OdRxValue& value) const ODRX_OVERRIDE; \
284 virtual OdResult subInsertValue(OdRxObject* pO, int index, const OdRxValue& value) const ODRX_OVERRIDE; \
285 virtual OdResult subRemoveValue(OdRxObject* pO, int index) const ODRX_OVERRIDE; \
286 virtual OdRxValueIteratorPtr subNewValueIterator(const OdRxObject* pO) const ODRX_OVERRIDE;\
287 virtual OdResult subTryGetCount(const OdRxObject* pO, int& count) const ODRX_OVERRIDE;\
290#define ODRX_DECLARE_RX_CPLX_INDEXED_PROPERTY(Object, Name, Type) \
291struct Object ## Name ## Property : OdRxIndexedProperty {\
292 static OdRxMemberPtr createObject(const OdRxClass* owner)\
294 OdRxMemberPtr res = OdRxObjectImpl<Object ## Name ## Property>::createObject();\
295 ((Object ## Name ## Property*)res.get())->init(__OD_T(#Name), &OdRxValueType::Desc<Type>::value(), owner);\
298 virtual OdResult subGetValue(const OdRxObject* pO, int index, OdRxValue& value) const ODRX_OVERRIDE; \
299 virtual OdResult subSetValue(OdRxObject* pO, int index, const OdRxValue& value) const ODRX_OVERRIDE; \
300 virtual OdResult subInsertValue(OdRxObject* pO, int index, const OdRxValue& value) const ODRX_OVERRIDE; \
301 virtual OdResult subRemoveValue(OdRxObject* pO, int index) const ODRX_OVERRIDE; \
302 virtual OdRxValueIteratorPtr subNewValueIterator(const OdRxObject* pO) const ODRX_OVERRIDE;\
303 virtual OdResult subTryGetCount(const OdRxObject* pO, int& count) const ODRX_OVERRIDE;\
304 virtual OdResult subChildren(OdArray<OdRxMemberPtr>& children) const ODRX_OVERRIDE;\
307#define ODRX_DECLARE_RX_PROPERTY_START(Object, Name, Type) struct Object ## Name ## Property : OdRxProperty {\
308 static OdRxMemberPtr createObject(const OdRxClass* owner)\
310 OdRxMemberPtr res = OdRxObjectImpl<Object ## Name ## Property>::createObject();\
311 ((Object ## Name ## Property*)res.get())->init(__OD_T(#Name), &OdRxValueType::Desc<Type>::value(), owner);\
315#define ODRX_DECLARE_RX_PROPERTY_END }
317#define ODRX_DECLARE_RX_PROPERTY_READONLY virtual bool isReadOnly(const OdRxObject*) const ODRX_OVERRIDE { return true; }
319#define ODRX_DECLARE_RX_PROPERTY_GET_BY_VAL(Object, ObjGetMemberName, Type) \
320 virtual OdResult subGetValue(const OdRxObject* pO, OdRxValue& value) const ODRX_OVERRIDE\
322 Object ## Ptr pObj = Object::cast(pO);\
323 if (pObj.isNull()) return eNotApplicable;\
324 value = static_cast<Type>(pObj->ObjGetMemberName());\
328#define ODRX_DECLARE_RX_PROPERTY_SET_BY_VAL(Object, ObjSetMemberName, Type) \
329 virtual OdResult subSetValue(OdRxObject* pO, const OdRxValue& value) const ODRX_OVERRIDE\
331 Object ## Ptr pObj = Object::cast(pO);\
332 if (pObj.isNull()) return eNotApplicable;\
333 pObj->ObjSetMemberName(*rxvalue_cast<Type>(&value));\
337#define ODRX_DECLARE_RX_PROPERTY_SUBCHILDREN_START \
338 virtual OdResult subChildren(OdArray<OdRxMemberPtr>& children) const {
340#define ODRX_DECLARE_RX_PROPERTY_SUBCHILDREN_END return eOk; }
342#define ODRX_DECLARE_RX_PROPERTY_SUBCHILDREN_ADD(Name, Type) \
343 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
ODRX_DECLARE_MEMBERS(OdRxCollectionPropertyOverrule)
virtual OdResult tryGetCount(const OdRxCollectionProperty *pProp, const OdRxObject *pO, int &count) const
virtual OdRxValueIterator * newValueIterator(const OdRxCollectionProperty *pProp, const OdRxObject *pO) 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