Crazy Eddie's GUI System  0.8.4
TplWindowRendererProperty.h
00001 /***********************************************************************
00002     created:    27/08/2011
00003     author:     Hans Mackowiak
00004 
00005     purpose:    
00006 *************************************************************************/
00007 /***************************************************************************
00008  *   Copyright (C) 2004 - 2011 Paul D Turner & The CEGUI Development Team
00009  *
00010  *   Permission is hereby granted, free of charge, to any person obtaining
00011  *   a copy of this software and associated documentation files (the
00012  *   "Software"), to deal in the Software without restriction, including
00013  *   without limitation the rights to use, copy, modify, merge, publish,
00014  *   distribute, sublicense, and/or sell copies of the Software, and to
00015  *   permit persons to whom the Software is furnished to do so, subject to
00016  *   the following conditions:
00017  *
00018  *   The above copyright notice and this permission notice shall be
00019  *   included in all copies or substantial portions of the Software.
00020  *
00021  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
00022  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00023  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
00024  *   IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
00025  *   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
00026  *   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
00027  *   OTHER DEALINGS IN THE SOFTWARE.
00028  ***************************************************************************/
00029 #ifndef _TplWindowRendererProperty_h_
00030 #define _TplWindowRendererProperty_h_
00031 
00032 #include "CEGUI/TplProperty.h"
00033 
00034 // Start of CEGUI namespace section
00035 namespace CEGUI
00036 {
00037  
00038 template<class C, typename T>
00039 class TplWindowRendererProperty : public TplProperty<C, T>
00040 {
00041 public:
00042     TplWindowRendererProperty(
00043         const String& name, const String& help, const String& origin,
00044         typename TplProperty<C, T>::Setter setter,
00045         typename TplProperty<C, T>::GetterFunctor getter,
00046         typename TplProperty<C, T>::Helper::pass_type defaultValue = T(),
00047         bool writesXML = true) :
00048 
00049         TplProperty<C, T>(name, help, origin,
00050                           setter, getter,
00051                           defaultValue, writesXML)
00052     {}
00053 
00054     virtual Property* clone() const
00055     {
00056         return CEGUI_NEW_AO TplWindowRendererProperty<C, T>(*this);
00057     }
00058 
00059 protected:
00061     void setNative_impl(PropertyReceiver* receiver,
00062                         typename TplProperty<C, T>::Helper::pass_type value)
00063     {
00064         C* instance = static_cast<C*>(
00065             static_cast<const Window*>(receiver)->getWindowRenderer());
00066 
00067         CEGUI_CALL_MEMBER_FN(*instance, this->d_setter)(value);
00068     }
00069 
00071     typename TplProperty<C, T>::Helper::safe_method_return_type
00072     getNative_impl(const PropertyReceiver* receiver) const
00073     {
00074         const C* instance = static_cast<const C*>(
00075             static_cast<const Window*>(receiver)->getWindowRenderer());
00076 
00077         return this->d_getter(instance);
00078     }
00079 };
00080 
00090 #define CEGUI_DEFINE_WINDOW_RENDERER_PROPERTY(class_type, property_native_type, name, help, setter, getter, default_value)\
00091 {\
00092     static ::CEGUI::TplWindowRendererProperty<class_type, property_native_type> sProperty(\
00093             name, help, TypeName, setter, getter, default_value);\
00094     \
00095     this->registerProperty(&sProperty);\
00096 }
00097 
00098 
00110 #define CEGUI_DEFINE_WINDOW_RENDERER_PROPERTY_NO_XML(class_type, property_native_type, name, help, setter, getter, default_value)\
00111 {\
00112     static ::CEGUI::TplWindowRendererProperty<class_type, property_native_type> sProperty(\
00113             name, help, TypeName, setter, getter, default_value, false);\
00114     \
00115     this->registerProperty(&sProperty,true);\
00116 }
00117 } // End of  CEGUI namespace section
00118 
00119 #endif  // end of guard _TplWindowRendererProperty_h_
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends