OpenLexocad  27.1
Property.h File Reference
#include <string>
#include <Base/Persistence.h>
#include <Base/StringTool.h>
#include <Core/PropertyValue.h>
#include <bitset>
#include "DocObject.h"

Go to the source code of this file.

Classes

class  Core::PropertyFactory
 
class  Core::Property
 
class  Core::PropertyLinkBaseBase
 

Namespaces

 Core
 

Macros

#define _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING
 
#define TYPESYSTEM_PROPERTY_HEADER(_prop_, _parentProp_)
 
#define __ADD_PROPERTY(_prop_, _defaultval_, _propertyKind_)
 
#define LX_ADD_PROPERTY(_prop_, _defaultval_, _propertyKind_)
 
#define __ADD_PROPERTY_OPT(_prop_, _propertyKind_)
 
#define LX_ADD_PROPERTY_OPT(_prop_, _propertyKind_)
 
#define __ADD_PROPERTY_EMPTY(_prop_, _propertyKind_)
 
#define LX_ADD_PROPERTY_EMPTY(_prop_, _propertyKind_)
 
#define DECLARE_PROPERTY_FACTORY(_factoryName_, _property_)
 
#define REGISTER_PROPERTY_FACTORY(_factoryName_, _property_)   Core::PropertyFactory::registry[#_property_] = (Core::PropertyFactory*)new _factoryName_();
 
#define DECLARE_OPTIONAL_PROPERTY_HEADER(_class_, _parentclass_)
 
#define DECLARE_OPTIONAL_PROPERTY_SOURCE(_class_, _parentclass_)
 
#define DECL_PROPERTY_ACCESS(_name_, _type_)
 DECL_PROPERTY and DEFINE_PROPERTY are macros used for accessing the properties via a getter and setter method. More...
 
#define DEFINE_PROPERTY_ACCESS(_class_, _name_, _propname_, _type_)
 

Enumerations

enum  Core::PropertyKind {
  Core::P_NO_MODIFICATION = 0, Core::P_MODIFY_PLACEMENT = 1 << 0, Core::P_LINK = 1 << 1, Core::P_MODIFY_VISIBLITY = 1 << 3,
  Core::P_MODIFY_SHAPE = 1 << 4, Core::P_MODIFY_APPEARANCE = 1 << 5, Core::P_BACKLINK = 1 << 6
}
 

Macro Definition Documentation

◆ __ADD_PROPERTY

#define __ADD_PROPERTY (   _prop_,
  _defaultval_,
  _propertyKind_ 
)
Value:
do \
{ \
assert(!this->_prop_.isOptional() && "Don't set a default value for an optional property!"); \
this->_prop_.enableNotify(false); \
this->_prop_.setContainer(this); \
this->_prop_.addToContainer(#_prop_); \
this->_prop_.setValue(_defaultval_); \
this->_prop_.setHasValue(true); \
this->_prop_.enableNotify(true); \
this->_prop_.setStatus(Core::Property::New); \
this->_prop_.setDefaultValue(true); \
this->_prop_.setPropertyKind(_propertyKind_); \
} while (0)
Definition: Property.h:86

◆ __ADD_PROPERTY_EMPTY

#define __ADD_PROPERTY_EMPTY (   _prop_,
  _propertyKind_ 
)
Value:
do \
{ \
this->_prop_.enableNotify(false); \
this->_prop_.setContainer(this); \
this->_prop_.addToContainer(#_prop_); \
this->_prop_.enableNotify(true); \
this->_prop_.setStatus(Core::Property::New); \
this->_prop_.setPropertyKind(_propertyKind_); \
this->_prop_.setHasValue(false); \
} while (0)
Definition: Property.h:86

◆ __ADD_PROPERTY_OPT

#define __ADD_PROPERTY_OPT (   _prop_,
  _propertyKind_ 
)
Value:
do \
{ \
this->_prop_.enableNotify(false); \
this->_prop_.setContainer(this); \
this->_prop_.addToContainer(#_prop_); \
this->_prop_.enableNotify(true); \
this->_prop_.setPropertyKind(_propertyKind_); \
this->_prop_.setHasValue(false); \
} while (0)

◆ _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING

#define _SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING

◆ DECL_PROPERTY_ACCESS

#define DECL_PROPERTY_ACCESS (   _name_,
  _type_ 
)
Value:
public: \
_type_ get##_name_() const; \
\
public: \
void set##_name_(const _type_& aValue);

DECL_PROPERTY and DEFINE_PROPERTY are macros used for accessing the properties via a getter and setter method.

Author
HPK
Since
24.0

◆ DECLARE_OPTIONAL_PROPERTY_HEADER

#define DECLARE_OPTIONAL_PROPERTY_HEADER (   _class_,
  _parentclass_ 
)
Value:
class LX_CORE_EXPORT _class_ : public _parentclass_ \
{ \
TYPESYSTEM_HEADER(); \
\
public: \
void copyValue(Core::Property* p) override; \
void save(Base::AbstractWriter& writer, Base::PersistenceVersion& save_version); \
bool isOptional() const { return true; } \
};
Definition: Persistence.h:14
LX_CORE_EXPORT Version & version
Definition: AbstractXMLReader.h:7
Definition: Writer.h:16
Definition: Property.h:77

◆ DECLARE_OPTIONAL_PROPERTY_SOURCE

#define DECLARE_OPTIONAL_PROPERTY_SOURCE (   _class_,
  _parentclass_ 
)

◆ DECLARE_PROPERTY_FACTORY

#define DECLARE_PROPERTY_FACTORY (   _factoryName_,
  _property_ 
)
Value:
class _factoryName_ : public Core::PropertyFactory \
{ \
private: \
virtual Core::Property* createByFactory() \
{ \
Core::Property* p = new _property_; \
return p; \
} \
};
Definition: Property.h:65
Definition: Property.h:77

◆ DEFINE_PROPERTY_ACCESS

#define DEFINE_PROPERTY_ACCESS (   _class_,
  _name_,
  _propname_,
  _type_ 
)
Value:
_type_ _class_::get##_name_() const { return _propname_.getValue(); } \
void _class_::set##_name_(const _type_& aValue) { _propname_.setValue(aValue); }
constexpr get_t< Type... > get
Variable template for lists of observed components.
Definition: entt.hpp:6068

◆ LX_ADD_PROPERTY

#define LX_ADD_PROPERTY (   _prop_,
  _defaultval_,
  _propertyKind_ 
)
Value:
do \
{ \
assert(!this->_prop_.isOptional() && "Don't set a default value for an optional property!"); \
this->_prop_.enableNotify(false); \
this->_prop_.setContainer(this); \
/* this->_prop_.addToContainer(#_prop_);*/ \
this->_prop_.setValue(_defaultval_); \
this->_prop_.setHasValue(true); \
this->_prop_.enableNotify(true); \
this->_prop_.setStatus(Core::Property::New); \
this->_prop_.setDefaultValue(true); \
this->_prop_.setPropertyKind(_propertyKind_); \
this->fieldData->addField((Core::PropertyContainer*)this, #_prop_, (Core::Property*)&this->_prop_); \
} while (0)
Definition: PropertyContainer.h:107
Definition: Property.h:86
Definition: Property.h:77

◆ LX_ADD_PROPERTY_EMPTY

#define LX_ADD_PROPERTY_EMPTY (   _prop_,
  _propertyKind_ 
)
Value:
do \
{ \
this->_prop_.enableNotify(false); \
this->_prop_.setContainer(this); \
this->_prop_.enableNotify(true); \
this->_prop_.setStatus(Core::Property::New); \
this->_prop_.setPropertyKind(_propertyKind_); \
this->_prop_.setHasValue(false); \
this->fieldData->addField(this, #_prop_, &this->_prop_); \
} while (0)
Definition: Property.h:86

◆ LX_ADD_PROPERTY_OPT

#define LX_ADD_PROPERTY_OPT (   _prop_,
  _propertyKind_ 
)
Value:
do \
{ \
this->_prop_.enableNotify(false); \
this->_prop_.setContainer(this); \
/*this->_prop_.addToContainer(#_prop_);*/ \
this->_prop_.enableNotify(true); \
this->_prop_.setPropertyKind(_propertyKind_); \
this->_prop_.setHasValue(false); \
this->fieldData->addField(this, #_prop_, &this->_prop_); \
} while (0)

◆ REGISTER_PROPERTY_FACTORY

#define REGISTER_PROPERTY_FACTORY (   _factoryName_,
  _property_ 
)    Core::PropertyFactory::registry[#_property_] = (Core::PropertyFactory*)new _factoryName_();

◆ TYPESYSTEM_PROPERTY_HEADER

#define TYPESYSTEM_PROPERTY_HEADER (   _prop_,
  _parentProp_ 
)
Value:
public: \
static void* create(void) { return new _prop_(); } \
static void init(const char* propName) { initSubclass(_prop_::classTypeId, propName, #_parentProp_, &(_prop_::create)); } \
static Base::Type getClassTypeId(void) { return _prop_::classTypeId; } \
virtual Base::Type getTypeId(void) const { return _prop_::classTypeId; } \
\
private: \
static Base::Type classTypeId;
Definition: Type.h:52