|  | OGRE 14.3
    Object-Oriented Graphics Rendering Engine | 
Associate values of arbitrary type with names. More...
| Classes | |
| class | Ogre::Property< T > | 
| Property instance with passthrough calls to a given object.  More... | |
| class | Ogre::PropertyBase | 
| Base interface for an instance of a property.  More... | |
| class | Ogre::PropertyDef | 
| Definition of a property of an object.  More... | |
| class | Ogre::PropertySet | 
| Defines a complete set of properties for a single object instance.  More... | |
| struct | Ogre::PropertyValue | 
| A simple structure designed just as a holder of property values between the instances of objects they might target.  More... | |
| Typedefs | |
| typedef GeneralAllocatedObject | Ogre::PropertyAlloc | 
| typedef std::map< String, PropertyDef > | Ogre::PropertyDefMap | 
| Map from property name to shared definition. | |
| typedef std::map< String, PropertyValue > | Ogre::PropertyValueMap | 
| Defines a transferable map of properties using wrapped value types (Ogre::Any) | |
| Enumerations | |
| enum | Ogre::PropertyType { Ogre::PROP_SHORT = 0 , Ogre::PROP_UNSIGNED_SHORT = 1 , Ogre::PROP_INT = 2 , Ogre::PROP_UNSIGNED_INT = 3 , Ogre::PROP_LONG = 4 , Ogre::PROP_UNSIGNED_LONG = 5 , Ogre::PROP_REAL = 6 , Ogre::PROP_STRING = 7 , Ogre::PROP_VECTOR2 = 8 , Ogre::PROP_VECTOR3 = 9 , Ogre::PROP_VECTOR4 = 10 , Ogre::PROP_COLOUR = 11 , Ogre::PROP_BOOL = 12 , Ogre::PROP_QUATERNION = 13 , Ogre::PROP_MATRIX3 = 14 , Ogre::PROP_MATRIX4 = 15 , Ogre::PROP_UNKNOWN = 999 } | 
| The type of a property.  More... | |
Associate values of arbitrary type with names.
OGRE's property system allows you to associate values of arbitrary type with names, and have those values exposed via a self-describing interface. Unlike Ogre::StringInterface, the values are passed as their native types without needing conversion to or from strings; they are simply wrapped in an Ogre::Any and casts are performed to access them.
Property values are actually not stored in this system; instead the property definitions reference getter & setter methods which provide the 'backing' for the property. This means you can directly expose features of your classes as properties without any duplication.
There are two aspects to exposing a property on your class. One is exposing the definition of the property (PropertyDef), which should be shared between all instances and probably stored in a static PropertyDefMap somewhere. The second is the instance 'wiring' which ensures that a call to set a property calls a method on this particular instance of the class; this is formed by a number of Property instances, contained in a PropertySet. Each Property has an explicit binding to getter and setter instance methods.
So, here's an example of setting up properties on an instance:
| typedef GeneralAllocatedObject Ogre::PropertyAlloc | 
| typedef std::map<String, PropertyDef> Ogre::PropertyDefMap | 
Map from property name to shared definition.
| typedef std::map<String, PropertyValue> Ogre::PropertyValueMap | 
Defines a transferable map of properties using wrapped value types (Ogre::Any)
| enum Ogre::PropertyType |