Go to the documentation of this file.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
00026
00027
00028
00029
00030 #ifndef RVIZ_PROPERTY_MANAGER_H
00031 #define RVIZ_PROPERTY_MANAGER_H
00032
00033 #include "forwards.h"
00034 #include "ros/assert.h"
00035
00036 #include <boost/bind.hpp>
00037 #include <boost/thread/mutex.hpp>
00038
00039 #include <map>
00040 #include <set>
00041
00042 namespace rviz
00043 {
00044
00045 class Config;
00046 class PropertyTreeWidget;
00047 class PropertyBase;
00048 class CategoryProperty;
00049
00055 class PropertyManager
00056 {
00057 public:
00062 PropertyManager();
00066 ~PropertyManager();
00067
00078 template<typename T, typename G, typename S>
00079 boost::weak_ptr<T> createProperty(const std::string& name, const std::string& prefix, const G& getter, const S& setter, const CategoryPropertyWPtr& parent, void* user_data = NULL)
00080 {
00081 boost::shared_ptr<T> property(new T( name, prefix, parent, getter, setter ));
00082 addProperty(property, name, prefix, user_data);
00083
00084 return boost::weak_ptr<T>(property);
00085 }
00086
00087 void addProperty(const PropertyBasePtr& property, const std::string& name, const std::string& prefix, void* user_data);
00088
00095 CategoryPropertyWPtr createCategory(const std::string& name, const std::string& prefix, const CategoryPropertyWPtr& parent = CategoryPropertyWPtr(), void* user_data = NULL);
00096
00097 CategoryPropertyWPtr createCheckboxCategory(const std::string& label, const std::string& name, const std::string& prefix, const boost::function<bool(void)>& getter,
00098 const boost::function<void(bool)>& setter, const CategoryPropertyWPtr& parent = CategoryPropertyWPtr(), void* user_data = NULL);
00099
00100 StatusPropertyWPtr createStatus(const std::string& name, const std::string& prefix, const CategoryPropertyWPtr& parent = CategoryPropertyWPtr(), void* user_data = NULL);
00101
00102 bool hasProperty(const std::string& name, const std::string& prefix) { return properties_.find(std::make_pair(prefix, name)) != properties_.end(); }
00103
00108 void deleteProperty( const PropertyBasePtr& property );
00114 void deleteProperty( const std::string& name, const std::string& prefix );
00119 void deleteByUserData( void* user_data );
00124 void deleteChildren( const PropertyBasePtr& property );
00125
00130 void propertySet( const PropertyBasePtr& property );
00131
00136 void save(const boost::shared_ptr<Config>& config);
00141 void load(const boost::shared_ptr<Config>& config, const StatusCallback& cb = StatusCallback());
00142
00147 PropertyTreeWidget* getPropertyTreeWidget() { return grid_; }
00148
00152 void changePrefix(const std::string& old_prefix, const std::string& new_prefix);
00153
00154 void setPropertyTreeWidget(PropertyTreeWidget* grid);
00155
00156 void setDefaultUserData(void* data) { default_user_data_ = data; }
00157
00158 void refreshAll();
00159 void clear();
00160 void update();
00161
00162 protected:
00163 PropertyTreeWidget* grid_;
00164
00165 typedef std::map< std::pair<std::string, std::string>, PropertyBasePtr > M_Property;
00166 M_Property properties_;
00167
00168 boost::mutex changed_mutex_;
00169 typedef std::set<PropertyBaseWPtr> S_PropertyBaseWPtr;
00170 S_PropertyBaseWPtr changed_properties_;
00171
00172 void* default_user_data_;
00173
00174 boost::shared_ptr<Config> config_;
00175 };
00176
00177 }
00178
00179 #endif