00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <list>
00026 #include <string>
00027
00028
00029 #ifndef BOOST_FILESYSTEM_VERSION
00030 #define BOOST_FILESYSTEM_VERSION 2
00031 #endif
00032 #include <boost/filesystem.hpp>
00033
00034 #include "exceptions/WPropertyNameMalformed.h"
00035 #include "WProperties.h"
00036 #include "WPropertyBase.h"
00037 #include "WPropertyVariable.h"
00038
00039 WPropertyBase::WPropertyBase( std::string name, std::string description ):
00040 boost::enable_shared_from_this< WPropertyBase >(),
00041 m_name( name ),
00042 m_description( description ),
00043 m_hidden( false ),
00044 m_purpose( PV_PURPOSE_PARAMETER ),
00045 signal_PropertyChange(),
00046 m_updateCondition( new WConditionSet() )
00047 {
00048
00049 if( ( m_name.find( std::string( "/" ) ) != std::string::npos ) || m_name.empty() )
00050 {
00051 throw WPropertyNameMalformed( std::string( "Property name \"" + name +
00052 "\" is malformed. Do not use slashes (\"/\") or empty strings in property names." ) );
00053 }
00054 }
00055
00056 WPropertyBase::WPropertyBase( const WPropertyBase& from ):
00057 boost::enable_shared_from_this< WPropertyBase >(),
00058 m_name( from.m_name ),
00059 m_description( from.m_description ),
00060 m_hidden( from.m_hidden ),
00061 m_type( from.m_type ),
00062 m_purpose( from.m_purpose ),
00063 signal_PropertyChange(),
00064 m_updateCondition( new WConditionSet() )
00065 {
00066 }
00067
00068 WPropertyBase::~WPropertyBase()
00069 {
00070
00071 }
00072
00073 std::string WPropertyBase::getName() const
00074 {
00075 return m_name;
00076 }
00077
00078 std::string WPropertyBase::getDescription() const
00079 {
00080 return m_description;
00081 }
00082
00083 PROPERTY_TYPE WPropertyBase::getType() const
00084 {
00085 return m_type;
00086 }
00087
00088 PROPERTY_PURPOSE WPropertyBase::getPurpose() const
00089 {
00090 return m_purpose;
00091 }
00092
00093 void WPropertyBase::setPurpose( PROPERTY_PURPOSE purpose )
00094 {
00095 m_purpose = purpose;
00096 }
00097
00098 void WPropertyBase::updateType()
00099 {
00100 m_type = PV_UNKNOWN;
00101 }
00102
00103 bool WPropertyBase::isHidden() const
00104 {
00105 return m_hidden;
00106 }
00107
00108 void WPropertyBase::setHidden( bool hidden )
00109 {
00110 if( m_hidden != hidden )
00111 {
00112 m_hidden = hidden;
00113 m_updateCondition->notify();
00114 }
00115 }
00116
00117 WPropInt WPropertyBase::toPropInt()
00118 {
00119 return boost::shared_static_cast< WPVInt >( shared_from_this() );
00120 }
00121
00122 WPropDouble WPropertyBase::toPropDouble()
00123 {
00124 return boost::shared_static_cast< WPVDouble >( shared_from_this() );
00125 }
00126
00127 WPropBool WPropertyBase::toPropBool()
00128 {
00129 return boost::shared_static_cast< WPVBool >( shared_from_this() );
00130 }
00131
00132 WPropString WPropertyBase::toPropString()
00133 {
00134 return boost::shared_static_cast< WPVString >( shared_from_this() );
00135 }
00136
00137 WPropFilename WPropertyBase::toPropFilename()
00138 {
00139 return boost::shared_static_cast< WPVFilename >( shared_from_this() );
00140 }
00141
00142 WPropSelection WPropertyBase::toPropSelection()
00143 {
00144 return boost::shared_static_cast< WPVSelection >( shared_from_this() );
00145 }
00146
00147 WPropColor WPropertyBase::toPropColor()
00148 {
00149 return boost::shared_static_cast< WPVColor >( shared_from_this() );
00150 }
00151
00152 WPropPosition WPropertyBase::toPropPosition()
00153 {
00154 return boost::shared_static_cast< WPVPosition >( shared_from_this() );
00155 }
00156
00157 WPropGroup WPropertyBase::toPropGroup()
00158 {
00159 return boost::shared_static_cast< WPVGroup >( shared_from_this() );
00160 }
00161
00162 WPropMatrix4X4 WPropertyBase::toPropMatrix4X4()
00163 {
00164 return boost::shared_static_cast< WPVMatrix4X4 >( shared_from_this() );
00165 }
00166
00167 WPropTrigger WPropertyBase::toPropTrigger()
00168 {
00169 return boost::shared_static_cast< WPVTrigger >( shared_from_this() );
00170 }
00171
00172 boost::shared_ptr< WCondition > WPropertyBase::getUpdateCondition() const
00173 {
00174 return m_updateCondition;
00175 }
00176