00001 #ifndef K3DSDK_PROPERTY_H
00002 #define K3DSDK_PROPERTY_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00027 #include <k3dsdk/iproperty.h>
00028 #include <vector>
00029
00030 namespace k3d
00031 {
00032
00033 class idocument;
00034 class inode;
00035 class iunknown;
00036
00037 namespace property
00038 {
00039
00041 void connect(idocument& Document, iproperty& From, iproperty& To);
00043 iproperty* connection(idocument& Document, iproperty& Property);
00045 void disconnect(idocument& Document, iproperty& Property);
00046
00048 iproperty* get(iunknown& Object, const string_t& Name);
00049
00051 template<typename value_t>
00052 iproperty* get(iunknown& Object, const string_t& Name)
00053 {
00054 iproperty* const property = get(Object, Name);
00055 return property && (property->property_type() == typeid(value_t)) ? property : 0;
00056 }
00057
00059 const boost::any internal_value(iunknown& Object, const string_t& Name);
00061 template<typename value_t>
00062 const value_t internal_value(iunknown& Object, const string_t& Name)
00063 {
00064 return boost::any_cast<value_t>(internal_value(Object, Name));
00065 }
00066
00068 const boost::any internal_value(iproperty& Property);
00070 template<typename value_t>
00071 const value_t internal_value(iproperty& Property)
00072 {
00073 return boost::any_cast<value_t>(internal_value(Property));
00074 }
00075
00077 const boost::any pipeline_value(iunknown& Object, const string_t& Name);
00079 template<typename value_t>
00080 const value_t pipeline_value(iunknown& Object, const string_t& Name)
00081 {
00082 return boost::any_cast<value_t>(pipeline_value(Object, Name));
00083 }
00085 const boost::any pipeline_value(iproperty& Property);
00087 template<typename value_t>
00088 const value_t pipeline_value(iproperty& Property)
00089 {
00090 return boost::any_cast<value_t>(pipeline_value(Property));
00091 }
00092
00096 bool set_internal_value(iunknown& Object, const string_t Name, const boost::any& Value);
00097
00101 bool set_internal_value(iproperty& Property, const boost::any& Value);
00102
00104 const std::vector<iproperty*> user_properties(iunknown& Object);
00105
00107 iproperty* create(inode& Owner, const std::type_info& Type, const string_t& Name, const string_t& Label, const string_t& Description, const boost::any& Value = boost::any());
00109 iproperty* create(inode& Owner, const string_t& Type, const string_t& Name, const string_t& Label, const string_t& Description, const boost::any& Value = boost::any());
00111 template<typename T>
00112 iproperty* create(inode& Owner, const string_t& Name, const string_t& Label, const string_t& Description, const boost::any& Value = boost::any())
00113 {
00114 return create(Owner, typeid(T), Name, Label, Description, Value);
00115 }
00116
00117 namespace ri
00118 {
00119
00121 iproperty* create_attribute(inode& Owner, const std::type_info& Type, const string_t& AttributeName, const string_t& Name, const string_t& Label, const string_t& Description, const boost::any& Value = boost::any());
00123 iproperty* create_attribute(inode& Owner, const string_t& Type, const string_t& AttributeName, const string_t& Name, const string_t& Label, const string_t& Description, const boost::any& Value = boost::any());
00125 template<typename T>
00126 iproperty* create_attribute(inode& Owner, const string_t& AttributeName, const string_t& Name, const string_t& Label, const string_t& Description, const boost::any& Value = boost::any())
00127 {
00128 return create_attribute(Owner, typeid(T), AttributeName, Name, Label, Description, Value);
00129 }
00130
00132 iproperty* create_option(inode& Owner, const std::type_info& Type, const string_t& OptionName, const string_t& Name, const string_t& Label, const string_t& Description, const boost::any& Value = boost::any());
00134 iproperty* create_option(inode& Owner, const string_t& Type, const string_t& OptionName, const string_t& Name, const string_t& Label, const string_t& Description, const boost::any& Value = boost::any());
00136 template<typename T>
00137 iproperty* create_option(inode& Owner, const string_t& OptionName, const string_t& Name, const string_t& Label, const string_t& Description, const boost::any& Value = boost::any())
00138 {
00139 return create_option(Owner, typeid(T), OptionName, Name, Label, Description, Value);
00140 }
00141
00142 }
00143
00144 }
00145
00146 }
00147
00148 #endif // !K3DSDK_PROPERTY_H
00149