Crazy Eddie's GUI System  0.8.6
CEGUI::PropertySet Class Reference

Interface providing introspection capabilities. More...

Inherits CEGUI::PropertyReceiver.

Inherited by CEGUI::Element, CEGUI::Font, and CEGUI::XMLParser.

+ Collaboration diagram for CEGUI::PropertySet:

Public Types

typedef ConstMapIterator< PropertyRegistry > PropertyIterator
 

Public Member Functions

 PropertySet (void)
 Constructs a new PropertySet object.
 
virtual ~PropertySet (void)
 Destructor for PropertySet objects.
 
void addProperty (Property *property)
 Adds a new Property to the PropertySet. More...
 
void removeProperty (const String &name)
 Removes a Property from the PropertySet. More...
 
PropertygetPropertyInstance (const String &name) const
 Retrieves a property instance (that was previously added) More...
 
void clearProperties (void)
 Removes all Property objects from the PropertySet.
 
bool isPropertyPresent (const String &name) const
 Checks to see if a Property with the given name is in the PropertySet. More...
 
const StringgetPropertyHelp (const String &name) const
 Return the help text for the specified Property. More...
 
String getProperty (const String &name) const
 Gets the current value of the specified Property. More...
 
template<typename T >
PropertyHelper< T >::return_type getProperty (const String &name) const
 Gets the current value of the specified Property. More...
 
void setProperty (const String &name, const String &value)
 Sets the current value of a Property. More...
 
template<typename T >
void setProperty (const String &name, typename PropertyHelper< T >::pass_type value)
 Sets the current value of a Property. More...
 
bool isPropertyDefault (const String &name) const
 Returns whether a Property is at it's default value. More...
 
String getPropertyDefault (const String &name) const
 Returns the default value of a Property as a String. More...
 
PropertyIterator getPropertyIterator (void) const
 Return a PropertySet::PropertyIterator object to iterate over the available Properties.
 

Detailed Description

Interface providing introspection capabilities.

CEGUI uses this interface for introspection and serialisation, especially in CEGUI::Window and classes that inherit it.

If you are just a user of an existing PropertySet class there are just 2 methods that you should be aware of - PropertySet::setProperty and PropertySet::getProperty. Both methods are available in 2 variants - string fallback mode and templated native mode. It is recommended to use the native mode. Code example:

CEGUI::Window* wnd = ...;
// native mode property set
wnd->setProperty<float>("Alpha", 0.5f); // set Alpha to 50%
// string fallback mode
wnd->setProperty("Alpha", "0.5"); // set Alpha to 50%
// native mode property get
const float alpha = wnd->getProperty<float>("Alpha");
// string fallback mode
const String alphaString = wnd->getProperty("Alpha");

If you use native mode with the wrong type CEGUI will resort to string fallback and will try to convert the type to whatever you requested.

CEGUI::Window* wnd = ...;
// will set Alpha to 100% but is slower due to the casts
wnd->setProperty<int>("Alpha", 1);
// retrieves Alpha as string, then proceeds to convert that to int
// beware of rounding errors!
wnd->getProperty<int>("Alpha");

We will always offer string fallback mode because it is necessary for serialisation and scripting. Scripting languages are often duck typed and cannot use C++ templated code.

The CEGUI::Property instances hold pointers to getter and setter of a given property. They are designed in such a way that multiple PropertySets (multiple widgets) can share the Property instances to save memory. This means that PropertySets don't own the Properties themselves. The Property instances are usually static members of the PropertySet classes or static local variables in the scope of the constructor or a method called from there.

It's unusual but multiple instances of the same class can have different Properties added to them.

It is recommended to use the CEGUI_DEFINE_PROPERTY macro instead of using PropertySet::addProperty directly. This takes care of property initialisation as well as it's addition to the PropertySet instance.

Member Function Documentation

void CEGUI::PropertySet::addProperty ( Property property)

Adds a new Property to the PropertySet.

Parameters
propertyPointer to the Property object to be added to the PropertySet.
Exceptions
NullObjectExceptionThrown if property is NULL.
AlreadyExistsExceptionThrown if a Property with the same name as property already exists in the PropertySet
Note
You most likely don't want to use this method unless you are implementing a custom Property class. Please see CEGUI_DEFINE_PROPERTY instead.
String CEGUI::PropertySet::getProperty ( const String name) const

Gets the current value of the specified Property.

Parameters
nameString containing the name of the Property who's value is to be returned.
Returns
String object containing a textual representation of the requested Property.
Exceptions
UnknownObjectExceptionThrown if no Property named name is in the PropertySet.
template<typename T >
PropertyHelper<T>::return_type CEGUI::PropertySet::getProperty ( const String name) const
inline

Gets the current value of the specified Property.

Parameters
nameString containing the name of the Property who's value is to be returned.
Returns
String object containing a textual representation of the requested Property.
Exceptions
UnknownObjectExceptionThrown if no Property named name is in the PropertySet.

This method tries to do a native type get without string conversion if possible, if that is not possible, it gracefully falls back to string conversion

References CEGUI::Property::get(), and CEGUI::TypedProperty< T >::getNative().

String CEGUI::PropertySet::getPropertyDefault ( const String name) const

Returns the default value of a Property as a String.

Parameters
nameString containing the name of the Property who's default string is to be returned.
Returns
String object containing a textual representation of the default value for this property.
const String& CEGUI::PropertySet::getPropertyHelp ( const String name) const

Return the help text for the specified Property.

Parameters
nameString holding the name of the Property who's help text is to be returned.
Returns
String object containing the help text for the Property name.
Exceptions
UnknownObjectExceptionThrown if no Property named name is in the PropertySet.
Property* CEGUI::PropertySet::getPropertyInstance ( const String name) const

Retrieves a property instance (that was previously added)

Parameters
nameString containing the name of the Property to be retrieved. If Property name is not in the set, exception is thrown.
Returns
Pointer to the property instance
bool CEGUI::PropertySet::isPropertyDefault ( const String name) const

Returns whether a Property is at it's default value.

Parameters
nameString containing the name of the Property who's default state is to be tested.
Returns
  • true if the property has it's default value.
  • false if the property has been modified from it's default value.
bool CEGUI::PropertySet::isPropertyPresent ( const String name) const

Checks to see if a Property with the given name is in the PropertySet.

Parameters
nameString containing the name of the Property to check for.
Returns
true if a Property named name is in the PropertySet. false if no Property named name is in the PropertySet.
void CEGUI::PropertySet::removeProperty ( const String name)

Removes a Property from the PropertySet.

Parameters
nameString containing the name of the Property to be removed. If Property name is not in the set, nothing happens.
void CEGUI::PropertySet::setProperty ( const String name,
const String value 
)

Sets the current value of a Property.

Parameters
nameString containing the name of the Property who's value is to be set.
valueString containing a textual representation of the new value for the Property
Exceptions
UnknownObjectExceptionThrown if no Property named name is in the PropertySet.
InvalidRequestExceptionThrown when the Property was unable to interpret the content of value.
template<typename T >
void CEGUI::PropertySet::setProperty ( const String name,
typename PropertyHelper< T >::pass_type  value 
)
inline

Sets the current value of a Property.

Parameters
nameString containing the name of the Property who's value is to be set.
valueString containing a textual representation of the new value for the Property
Exceptions
UnknownObjectExceptionThrown if no Property named name is in the PropertySet.
InvalidRequestExceptionThrown when the Property was unable to interpret the content of value.

This method tries to do a native type set without string conversion if possible, if that is not possible, it gracefully falls back to string conversion

References CEGUI::Property::set(), and CEGUI::TypedProperty< T >::setNative().