node-property.h
Go to the documentation of this file.
1 // Copyright (c) 2017, LAAS-CNRS
2 // Authors: Joseph Mirabel (joseph.mirabel@laas.fr)
3 //
4 // This file is part of hpp-core.
5 // hpp-core is free software: you can redistribute it
6 // and/or modify it under the terms of the GNU Lesser General Public
7 // License as published by the Free Software Foundation, either version
8 // 3 of the License, or (at your option) any later version.
9 //
10 // hpp-core is distributed in the hope that it will be
11 // useful, but WITHOUT ANY WARRANTY; without even the implied warranty
12 // of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 // General Lesser Public License for more details. You should have
14 // received a copy of the GNU Lesser General Public License along with
15 // hpp-core. If not, see <http://www.gnu.org/licenses/>.
16 
17 #ifndef GEPETTO_VIEWER_NODE_PROPERTY_HH
18 #define GEPETTO_VIEWER_NODE_PROPERTY_HH
19 
20 #include <map>
21 #include <iostream>
22 
23 #ifndef Q_MOC_RUN
24 #include <boost/bind.hpp>
25 #include <boost/function.hpp>
26 #include <boost/mpl/if.hpp>
27 #endif
28 
29 #include <QObject>
30 
31 #include <gepetto/viewer/fwd.h>
33 
34 class QWidget;
35 
36 namespace gepetto {
37 namespace viewer {
38 
39  class Property;
40  template <typename T> class PropertyTpl;
41  template <typename T, typename RangeT = T> class RangedPropertyTpl;
42 
44  namespace details {
45  template <typename T> struct property_type {};
46  template <typename T> struct property_type <const T > : property_type<T> {};
47  template <typename T> struct property_type < T& > : property_type<T> {};
48  template <> struct property_type<void > { static inline std::string to_string () { return "void" ; } };
49  template <> struct property_type<bool > { static inline std::string to_string () { return "bool" ; } };
50  template <> struct property_type<int > { static inline std::string to_string () { return "int" ; } };
51  template <> struct property_type<float > { static inline std::string to_string () { return "float" ; } };
52  template <> struct property_type<std::string > { static inline std::string to_string () { return "string" ; } };
53  template <> struct property_type<osgVector2 > { static inline std::string to_string () { return "osgVector2" ; } };
54  template <> struct property_type<osgVector3 > { static inline std::string to_string () { return "osgVector3" ; } };
55  template <> struct property_type<osgVector4 > { static inline std::string to_string () { return "osgVector4" ; } };
56  template <> struct property_type<Configuration> { static inline std::string to_string () { return "Configuration"; } };
57 
58  template <typename T> QWidget* buildEditor (Property* property) { return NULL; }
59  template <> QWidget* buildEditor<bool > (Property* property);
60  template <> QWidget* buildEditor<int > (Property* property);
61  template <> QWidget* buildEditor<float > (Property* property);
62  template <> QWidget* buildEditor<std::string > (Property* property);
63  template <> QWidget* buildEditor<osgVector2 > (Property* property);
64  template <> QWidget* buildEditor<osgVector3 > (Property* property);
65  template <> QWidget* buildEditor<osgVector4 > (Property* property);
66  template <> QWidget* buildEditor<Configuration> (Property* property);
67  }
69 
71  class Property : public QObject {
72  Q_OBJECT
73 
74  public slots:
75  bool set( void );
76  bool set(const bool & v);
77  bool set(const int & v);
78  bool set(const float & v);
79  bool set(const std::string & v);
80  bool set(const osgVector2 & v);
81  bool set(const osgVector3 & v);
82  bool set(const osgVector4 & v);
83  bool set(const Configuration & v);
84 
85  // Provide slots to convert from double to float.
86  bool set(const double& v);
87 
88  // Provide slots to convert from QString to std::string.
89  bool set(const QString& v);
90 
91  // Provide slots to convert from QColor to osgVector4.
92  bool set(const QColor& v);
93 
94  public:
95  bool get(void );
96  bool get(bool & v);
97  bool get(int & v);
98  bool get(float & v);
99  bool get(std::string & v);
100  bool get(osgVector2 & v);
101  bool get(osgVector3 & v);
102  bool get(osgVector4 & v);
103  bool get(Configuration & v);
104 
105  // Provide slots to convert from double to float.
106  bool get(double & v);
107  // Provide slots to convert from QString to std::string.
108  bool get(QString & v);
109  // Provide slots to convert from QColor to osgVector4.
110  bool get(QColor & v);
111 
112  signals:
113  void valueChanged( void );
114  void valueChanged(const bool & v);
115  void valueChanged(const int & v);
116  void valueChanged(const float & v);
117  void valueChanged(const std::string & v);
118  void valueChanged(const osgVector2 & v);
119  void valueChanged(const osgVector3 & v);
120  void valueChanged(const osgVector4 & v);
121  void valueChanged(const Configuration & v);
122 
123  // Provide slots to convert from double to float.
124  void valueChanged(const double& v);
125  // Provide slots to convert from QString to std::string
126  void valueChanged(const QString& v);
127  // Provide slots to convert from QColor to osgVector4
128  void valueChanged(const QColor& v);
129 
130  public:
131  virtual bool hasReadAccess () const = 0;
132  virtual bool hasWriteAccess() const = 0;
133 
134  virtual std::string type() = 0;
135 
136  const std::string& name () const { return name_; }
137 
140  virtual QWidget* guiEditor ()
141  {
142  return NULL;
143  }
144 
145  protected:
146  virtual bool impl_set( void );
147  virtual bool impl_set(const bool & v);
148  virtual bool impl_set(const int & v);
149  virtual bool impl_set(const float & v);
150  virtual bool impl_set(const std::string & v);
151  virtual bool impl_set(const osgVector2 & v);
152  virtual bool impl_set(const osgVector3 & v);
153  virtual bool impl_set(const osgVector4 & v);
154  virtual bool impl_set(const Configuration & v);
155 
156  virtual bool impl_get(void );
157  virtual bool impl_get(bool & v);
158  virtual bool impl_get(int & v);
159  virtual bool impl_get(float & v);
160  virtual bool impl_get(std::string & v);
161  virtual bool impl_get(osgVector2 & v);
162  virtual bool impl_get(osgVector3 & v);
163  virtual bool impl_get(osgVector4 & v);
164  virtual bool impl_get(Configuration & v);
165 
166  protected:
167  Property(const std::string& name);
168 
169  virtual ~Property() {}
170 
171  const std::string name_;
172 
173  inline void invalidGet() const { throw std::logic_error ("Cannot read property " + name_ + "."); }
174  inline void invalidSet() const { throw std::logic_error ("Cannot write property " + name_ + "."); }
175  };
176 
177  class VoidProperty : public Property {
178  public:
179  typedef boost::function<void (void)> Function_t;
180  typedef shared_ptr<VoidProperty> Ptr_t;
181 
182  static Ptr_t create (const std::string& name, const Function_t& f) { return Ptr_t(new VoidProperty(name, f)); }
183  virtual std::string type() { return details::property_type<void>::to_string(); }
184 
185  template <typename Obj, typename ReturnType>
186  static inline Function_t memberFunction(Obj* obj, ReturnType (Obj::*mem_func)() ) { return boost::bind(mem_func, obj); }
187  template <typename Obj, typename ReturnType>
188  static inline Function_t memberFunction(Obj* obj, ReturnType (Obj::*mem_func)() const) { return boost::bind(mem_func, obj); }
189 
190  VoidProperty(const std::string& name, const Function_t& f)
191  : Property(name), function_(f) {}
192 
193  virtual ~VoidProperty() {}
194 
195  bool hasReadAccess () const { return (bool)function_; }
196  bool hasWriteAccess () const { return hasReadAccess(); }
197 
198  const Function_t& function () const { return function_; }
199  void function (const Function_t& f) { function_ = f; }
200 
201  QWidget* guiEditor ();
202 
203  protected:
204  bool impl_get(void) { if (!hasReadAccess ()) { invalidGet(); return false; } function_(); return true; }
205  bool impl_set(void) { return get(); }
206 
207  private:
208  Function_t function_;
209  };
210 
211  template <typename T>
212  class PropertyTpl : public Property {
213  public:
214  typedef boost::function<void(const T&)> Setter_t;
215  typedef boost::function< T (void)> Getter_t;
216  typedef shared_ptr<PropertyTpl> Ptr_t;
217 
218  static Ptr_t create (const std::string& name, const Getter_t& g, const Setter_t& s) { return Ptr_t(new PropertyTpl(name, g, s)); }
219  static Ptr_t create (const std::string& name, const Getter_t& g) { return Ptr_t(new PropertyTpl(name, g, Setter_t())); }
220  static Ptr_t create (const std::string& name, const Setter_t& s) { return Ptr_t(new PropertyTpl(name, Getter_t(), s)); }
221 
222  virtual std::string type() { return details::property_type<T>::to_string(); }
223 
224  template <typename Obj>
225  static inline Getter_t getterFromMemberFunction(Obj* obj, const T& (Obj::*mem_func)() const) { return boost::bind(mem_func, obj); }
226  template <typename Obj>
227  static inline Getter_t getterFromMemberFunction(Obj* obj, T (Obj::*mem_func)() const) { return boost::bind(mem_func, obj); }
228  template <typename Obj>
229  static inline Setter_t setterFromMemberFunction(Obj* obj, void (Obj::*mem_func)(const T&)) { return boost::bind(mem_func, obj, _1); }
230  template <typename Obj>
231  static inline Setter_t setterFromMemberFunction(Obj* obj, void (Obj::*mem_func)(T)) { return boost::bind(mem_func, obj, _1); }
232 
233  template <typename Obj, typename RetType>
234  static Ptr_t create (const std::string& name, Obj* obj,
235  RetType (Obj::*mem_get)() const,
236  void (Obj::*mem_set)(const T&))
237  {
238  return create (name, Getter_t(boost::bind(mem_get, obj)),
239  Setter_t(boost::bind(mem_set, obj, _1)));
240  }
241  template <typename Obj, typename RetType>
242  static Ptr_t create (const std::string& name, Obj* obj,
243  RetType (Obj::*mem_get)() const,
244  void (Obj::*mem_set)(T))
245  {
246  return create (name, Getter_t(boost::bind(mem_get, obj)),
247  Setter_t(boost::bind(mem_set, obj, _1)));
248  }
249  template <typename Obj, typename RetType>
250  static Ptr_t createRO (const std::string& name, Obj* obj,
251  RetType (Obj::*mem_get)() const)
252  {
253  return create (name, Getter_t(boost::bind(mem_get, obj)));
254  }
255  template <typename Obj>
256  static Ptr_t createWO (const std::string& name, Obj* obj,
257  void (Obj::*mem_set)(const T&))
258  {
259  return create (name, Setter_t(boost::bind(mem_set, obj, _1)));
260  }
261  template <typename Obj, typename RetType>
262  static Ptr_t createWO (const std::string& name, Obj* obj,
263  void (Obj::*mem_set)(T))
264  {
265  return create (name, Setter_t(boost::bind(mem_set, obj, _1)));
266  }
267 
268 
269  PropertyTpl(const std::string& name, const Getter_t& g, const Setter_t& s)
270  : Property(name), getter_(g), setter_(s) {}
271 
272  virtual ~PropertyTpl() {}
273 
274  bool hasReadAccess () const { return (bool)getter_; }
275  bool hasWriteAccess () const { return (bool)setter_; }
276 
277  const Getter_t& getter () const { return getter_; }
278  void getter (const Getter_t& g) { getter_ = g; }
279 
280  const Setter_t& setter () const { return setter_; }
281  void setter (const Setter_t& s) { setter_ = s; }
282 
283  virtual QWidget* guiEditor ()
284  {
285  return details::buildEditor<T>(this);
286  }
287 
288  protected:
289  virtual bool impl_set(const T& value) { if (!hasWriteAccess()) { invalidSet(); return false; } setter_(value) ; return true; }
290  virtual bool impl_get( T& value) { if (!hasReadAccess ()) { invalidGet(); return false; } value = getter_(); return true; }
291 
292  private:
293  Getter_t getter_;
294  Setter_t setter_;
295  };
296 
297  template<typename Scalar>
298  struct Range {
299  Scalar min, max, step;
301 
302  Range () :
303 #if __cplusplus >= 201103L
304  min(std::numeric_limits<Scalar>::lowest()),
305 #else
306  min(std::numeric_limits<Scalar>::quiet_NaN()),
307 #endif
308  max(std::numeric_limits<Scalar>::max()),
309  step (static_cast<Scalar>(1)),
310  adaptiveDecimal (false)
311  {}
312 
313 #if __cplusplus >= 201103L
314  inline bool hasMin () const { return min > std::numeric_limits<Scalar>::lowest(); }
315 #else
316  inline bool hasMin () const { return min == min; }
317 #endif
318  inline bool hasMax () const { return max < std::numeric_limits<Scalar>::max(); }
319  inline bool hasRange() const { return hasMin() && hasMax(); }
320 
321  void setRange(const Scalar& minimum, const Scalar& maximum)
322  { min = minimum; max = maximum; }
323  void setRange(const Scalar& minimum, const Scalar& maximum, const Scalar& _step)
324  { min = minimum; max = maximum; step = _step;}
325  };
326 
327  template <typename T, typename RangeT>
328  class RangedPropertyTpl : public PropertyTpl<T>, public Range<RangeT> {
329  public:
330  typedef boost::function<void(const T&)> Setter_t;
331  typedef boost::function< T (void)> Getter_t;
332  typedef shared_ptr<RangedPropertyTpl> Ptr_t;
333 
334  static Ptr_t create (const std::string& name, const Getter_t& g, const Setter_t& s) { return Ptr_t(new RangedPropertyTpl(name, g, s)); }
335  static Ptr_t create (const std::string& name, const Getter_t& g) { return Ptr_t(new RangedPropertyTpl(name, g, Setter_t())); }
336  static Ptr_t create (const std::string& name, const Setter_t& s) { return Ptr_t(new RangedPropertyTpl(name, Getter_t(), s)); }
337 
338  template <typename Obj, typename RetType>
339  static Ptr_t create (const std::string& name, Obj* obj,
340  RetType (Obj::*mem_get)() const,
341  void (Obj::*mem_set)(const T&))
342  {
343  return create (name, Getter_t(boost::bind(mem_get, obj)),
344  Setter_t(boost::bind(mem_set, obj, _1)));
345  }
346  template <typename Obj, typename RetType>
347  static Ptr_t create (const std::string& name, Obj* obj,
348  RetType (Obj::*mem_get)() const,
349  void (Obj::*mem_set)(T))
350  {
351  return create (name, Getter_t(boost::bind(mem_get, obj)),
352  Setter_t(boost::bind(mem_set, obj, _1)));
353  }
354  template <typename Obj, typename RetType>
355  static Ptr_t createRO (const std::string& name, Obj* obj,
356  RetType (Obj::*mem_get)() const)
357  {
358  return create (name, Getter_t(boost::bind(mem_get, obj)));
359  }
360  template <typename Obj>
361  static Ptr_t createWO (const std::string& name, Obj* obj,
362  void (Obj::*mem_set)(const T&))
363  {
364  return create (name, Setter_t(boost::bind(mem_set, obj, _1)));
365  }
366  template <typename Obj, typename RetType>
367  static Ptr_t createWO (const std::string& name, Obj* obj,
368  void (Obj::*mem_set)(T))
369  {
370  return create (name, Setter_t(boost::bind(mem_set, obj, _1)));
371  }
372 
373 
374  RangedPropertyTpl(const std::string& name, const Getter_t& g, const Setter_t& s)
375  : PropertyTpl<T>(name, g, s) {}
376 
377  virtual ~RangedPropertyTpl() {}
378  };
379 
380  template <typename T>
381  class StoredPropertyTpl : public Property {
382  public:
383  typedef boost::function<void()> Callback_t;
384  typedef shared_ptr<StoredPropertyTpl> Ptr_t;
385 
386  static Ptr_t create (const std::string& name) { return Ptr_t(new StoredPropertyTpl(name)); }
387 
388  virtual std::string type() { return details::property_type<T>::to_string(); }
389 
390  StoredPropertyTpl(const std::string& name) : Property(name) {}
391 
392  virtual ~StoredPropertyTpl() {}
393 
394  bool hasReadAccess () const { return true; }
395  bool hasWriteAccess () const { return true; }
396 
397  virtual QWidget* guiEditor ()
398  {
399  return details::buildEditor<T>(this);
400  }
401 
402  const Callback_t& callback () const { return callback_; }
403  void callback (const Callback_t& s) { callback_ = s; }
404 
405  T value;
406 
407  protected:
408  bool impl_set(const T& v) { bool c (callback_ && value != v); value = v; if (c) callback_(); return true; }
409  bool impl_get( T& v) { v = value; return true; }
410 
411  Callback_t callback_;
412  };
413 
414  template <typename T, typename RangeT>
415  class RangedStoredPropertyTpl : public StoredPropertyTpl<T>, public Range<RangeT> {
416  public:
417  typedef shared_ptr<RangedStoredPropertyTpl> Ptr_t;
418 
419  static Ptr_t create (const std::string& name) { return Ptr_t(new RangedStoredPropertyTpl(name)); }
420 
421  RangedStoredPropertyTpl(const std::string& name)
422  : StoredPropertyTpl<T>(name) {}
423 
425  };
426 
435 
442 
444  struct MetaEnum {
445  std::string type;
446  std::vector<std::string> names;
447  std::vector< int> values;
448 
449  int from_string (const std::string& s);
450  std::string to_string (const int& v);
451  };
452 
457 
458  class EnumProperty : public IntProperty {
459  public:
460  using IntProperty::Getter_t;
461  using IntProperty::Setter_t;
462  typedef shared_ptr<EnumProperty> Ptr_t;
463 
464  static Ptr_t create (const std::string& name, const MetaEnum* type, const Getter_t& g, const Setter_t& s) { return Ptr_t(new EnumProperty(name, type, g, s)); }
465  virtual std::string type() { return "enum"; }
466  const MetaEnum* metaEnum () const { return metaEnum_; }
467 
468  EnumProperty(const std::string& name, const MetaEnum* type, const Getter_t& g, const Setter_t& s)
469  : IntProperty(name, g, s), metaEnum_ (type) {}
470 
471  virtual QWidget* guiEditor ();
472 
473  protected:
476  bool impl_set(const int& value);
477 
480  bool impl_set(const std::string& value);
481 
483  bool impl_get(int & v);
484 
486  bool impl_get(std::string & v);
487 
488  private:
489  const MetaEnum* metaEnum_;
490  };
491 
493  {
494  public:
495  struct Wrapper
496  {
498  PropertyPtr_t lock;
499  Wrapper (Property* p) : p(p) {}
500  Wrapper (PropertyPtr_t p) : p(p.get()), lock(p) {}
501  Property* operator->() const { return p; }
502  };
503  typedef std::map<std::string, Wrapper> PropertyMap_t;
504 
505  protected:
506  PropertyMap_t properties_;
507 
509  virtual void setDirty (bool dirty=true) = 0;
510 
511  public:
515  Property* property(const std::string& name) const;
516 
517  bool callVoidProperty(const std::string& name) const
518  {
519  return property(name)->get();
520  }
521 
522  template <typename T>
523  bool getProperty(const std::string& name, T& value) const
524  {
525  return property(name)->get(value);
526  }
527 
529  template <typename T>
530  bool setProperty(const std::string& name, const T& value)
531  {
532  bool res = property(name)->set(value);
533  if (res) this->setDirty();
534  return res;
535  }
536 
537  bool hasProperty(const std::string& name) const;
538 
539  const PropertyMap_t& properties () const
540  {
541  return properties_;
542  }
543 
545  void addProperty(const PropertyPtr_t& prop);
546 
548  void addProperty(const std::string& name, const PropertyPtr_t& prop);
549 
551  void addProperty(Property* prop);
552 
554  void addProperty(const std::string& name, Property* prop);
555 
556  QWidget* guiEditor ();
557  };
558 
559 } /* namespace viewer */
560 } /* namespace gepetto */
561 
562 #endif /* GEPETTO_VIEWER_NODE_PROPERTY_HH */
RangedPropertyTpl< Configuration, float > RangedConfigurationProperty
Definition: node-property.h:441
shared_ptr< StoredPropertyTpl > Ptr_t
Definition: node-property.h:384
boost::function< void(void)> Function_t
Definition: node-property.h:179
static Ptr_t create(const std::string &name, const Getter_t &g)
Definition: node-property.h:335
T value
Definition: node-property.h:405
Range()
Definition: node-property.h:302
const std::string name_
Definition: node-property.h:171
StoredPropertyTpl(const std::string &name)
Definition: node-property.h:390
bool hasReadAccess() const
Definition: node-property.h:195
RangedPropertyTpl< osgVector2, float > RangedVector2Property
Definition: node-property.h:438
static Getter_t getterFromMemberFunction(Obj *obj, T(Obj::*mem_func)() const)
Definition: node-property.h:227
const Getter_t & getter() const
Definition: node-property.h:277
std::string type
Definition: node-property.h:445
MetaEnum * wireFrameModeEnum()
bool impl_set(void)
Definition: node-property.h:205
static Ptr_t create(const std::string &name)
Definition: node-property.h:386
virtual QWidget * guiEditor()
Definition: node-property.h:397
virtual ~VoidProperty()
Definition: node-property.h:193
bool getProperty(const std::string &name, T &value) const
Definition: node-property.h:523
EnumProperty(const std::string &name, const MetaEnum *type, const Getter_t &g, const Setter_t &s)
Definition: node-property.h:468
shared_ptr< PropertyTpl > Ptr_t
Definition: node-property.h:216
static Function_t memberFunction(Obj *obj, ReturnType(Obj::*mem_func)())
Definition: node-property.h:186
::osg::Vec3f osgVector3
Definition: config-osg.h:109
RangedPropertyTpl< osgVector3, float > RangedVector3Property
Definition: node-property.h:439
static Setter_t setterFromMemberFunction(Obj *obj, void(Obj::*mem_func)(const T &))
Definition: node-property.h:229
static Ptr_t create(const std::string &name, const Getter_t &g, const Setter_t &s)
Definition: node-property.h:334
const std::string & name() const
Definition: node-property.h:136
MetaEnum * glImmediateModeEnum()
bool impl_set(const T &v)
Definition: node-property.h:408
MetaEnum * visibilityModeEnum()
static Ptr_t create(const std::string &name, Obj *obj, RetType(Obj::*mem_get)() const, void(Obj::*mem_set)(T))
Definition: node-property.h:347
Definition: node-property.h:492
Callback_t callback_
Definition: node-property.h:411
void callback(const Callback_t &s)
Definition: node-property.h:403
bool hasWriteAccess() const
Definition: node-property.h:395
RangedPropertyTpl< int > RangedIntProperty
Definition: node-property.h:436
static Ptr_t create(const std::string &name, Obj *obj, RetType(Obj::*mem_get)() const, void(Obj::*mem_set)(T))
Definition: node-property.h:242
void setter(const Setter_t &s)
Definition: node-property.h:281
Definition: node-property.h:415
virtual std::string type()
Definition: node-property.h:465
virtual ~RangedStoredPropertyTpl()
Definition: node-property.h:424
static Ptr_t create(const std::string &name)
Definition: node-property.h:419
Definition: node-property.h:298
::osg::Vec2f osgVector2
Definition: config-osg.h:108
PropertyMap_t properties_
Definition: node-property.h:506
static Ptr_t create(const std::string &name, Obj *obj, RetType(Obj::*mem_get)() const, void(Obj::*mem_set)(const T &))
Definition: node-property.h:234
RangedPropertyTpl< osgVector4, float > RangedVector4Property
Definition: node-property.h:440
static Function_t memberFunction(Obj *obj, ReturnType(Obj::*mem_func)() const)
Definition: node-property.h:188
::osg::Vec4f osgVector4
Definition: config-osg.h:110
shared_ptr< VoidProperty > Ptr_t
Definition: node-property.h:180
static Ptr_t createWO(const std::string &name, Obj *obj, void(Obj::*mem_set)(T))
Definition: node-property.h:367
static Setter_t setterFromMemberFunction(Obj *obj, void(Obj::*mem_func)(T))
Definition: node-property.h:231
Property * p
Definition: node-property.h:497
shared_ptr< EnumProperty > Ptr_t
Definition: node-property.h:462
Definition: node-property.h:41
Definition: node-property.h:495
virtual ~PropertyTpl()
Definition: node-property.h:272
bool hasReadAccess() const
Definition: node-property.h:274
bool hasMax() const
Definition: node-property.h:318
Definition: node-property.h:177
PropertyTpl< osgVector2 > Vector2Property
Definition: node-property.h:431
PropertyTpl< float > FloatProperty
Definition: node-property.h:429
virtual ~StoredPropertyTpl()
Definition: node-property.h:392
static Ptr_t create(const std::string &name, Obj *obj, RetType(Obj::*mem_get)() const, void(Obj::*mem_set)(const T &))
Definition: node-property.h:339
virtual bool impl_get(T &value)
Definition: node-property.h:290
PropertyTpl< std::string > StringProperty
Definition: node-property.h:430
static Ptr_t create(const std::string &name, const MetaEnum *type, const Getter_t &g, const Setter_t &s)
Definition: node-property.h:464
static Ptr_t create(const std::string &name, const Getter_t &g)
Definition: node-property.h:219
Definition: action-search-bar.hh:27
RangedPropertyTpl< float > RangedFloatProperty
Definition: node-property.h:437
virtual QWidget * guiEditor()
Definition: node-property.h:140
shared_ptr< RangedPropertyTpl > Ptr_t
Definition: node-property.h:332
PropertyTpl< int > IntProperty
Definition: node-property.h:428
boost::function< void(const T &)> Setter_t
Definition: node-property.h:330
static Ptr_t create(const std::string &name, const Setter_t &s)
Definition: node-property.h:220
virtual bool impl_set(const T &value)
Definition: node-property.h:289
bool hasWriteAccess() const
Definition: node-property.h:196
bool hasReadAccess() const
Definition: node-property.h:394
Definition: node-property.h:381
shared_ptr< RangedStoredPropertyTpl > Ptr_t
Definition: node-property.h:417
void setRange(const Scalar &minimum, const Scalar &maximum, const Scalar &_step)
Definition: node-property.h:323
Definition: node-property.h:40
virtual QWidget * guiEditor()
Definition: node-property.h:283
RangedPropertyTpl(const std::string &name, const Getter_t &g, const Setter_t &s)
Definition: node-property.h:374
Conversion between integer and enum name at runtime.
Definition: node-property.h:444
PropertyTpl(const std::string &name, const Getter_t &g, const Setter_t &s)
Definition: node-property.h:269
bool hasMin() const
Definition: node-property.h:316
Scalar step
Definition: node-property.h:299
void getter(const Getter_t &g)
Definition: node-property.h:278
PropertyTpl< bool > BoolProperty
Definition: node-property.h:427
bool impl_get(T &v)
Definition: node-property.h:409
const MetaEnum * metaEnum() const
Definition: node-property.h:466
bool setProperty(const std::string &name, const T &value)
Set a property and set this object as dirty.
Definition: node-property.h:530
const PropertyMap_t & properties() const
Definition: node-property.h:539
bool callVoidProperty(const std::string &name) const
Definition: node-property.h:517
virtual std::string type()
Definition: node-property.h:222
MetaEnum * lightingModeEnum()
PropertyTpl< osgVector3 > Vector3Property
Definition: node-property.h:432
boost::function< T(void)> Getter_t
Definition: node-property.h:215
const Callback_t & callback() const
Definition: node-property.h:402
Definition: config-osg.h:144
boost::function< void()> Callback_t
Definition: node-property.h:383
void setRange(const Scalar &minimum, const Scalar &maximum)
Definition: node-property.h:321
static Ptr_t create(const std::string &name, const Setter_t &s)
Definition: node-property.h:336
Abstract base class for runtime properties of Node.
Definition: node-property.h:71
virtual ~Property()
Definition: node-property.h:169
bool hasWriteAccess() const
Definition: node-property.h:275
VoidProperty(const std::string &name, const Function_t &f)
Definition: node-property.h:190
PropertyTpl< osgVector4 > Vector4Property
Definition: node-property.h:433
const Setter_t & setter() const
Definition: node-property.h:280
std::vector< int > values
Definition: node-property.h:447
static Ptr_t create(const std::string &name, const Function_t &f)
Definition: node-property.h:182
bool hasRange() const
Definition: node-property.h:319
static Ptr_t createWO(const std::string &name, Obj *obj, void(Obj::*mem_set)(const T &))
Definition: node-property.h:256
Property * operator->() const
Definition: node-property.h:501
static Getter_t getterFromMemberFunction(Obj *obj, const T &(Obj::*mem_func)() const)
Definition: node-property.h:225
std::map< std::string, Wrapper > PropertyMap_t
Definition: node-property.h:503
PropertyPtr_t lock
Definition: node-property.h:498
static Ptr_t createRO(const std::string &name, Obj *obj, RetType(Obj::*mem_get)() const)
Definition: node-property.h:250
static Ptr_t createRO(const std::string &name, Obj *obj, RetType(Obj::*mem_get)() const)
Definition: node-property.h:355
static Ptr_t createWO(const std::string &name, Obj *obj, void(Obj::*mem_set)(T))
Definition: node-property.h:262
void invalidSet() const
Definition: node-property.h:174
Definition: node-property.h:458
PropertyTpl< Configuration > ConfigurationProperty
Definition: node-property.h:434
virtual ~RangedPropertyTpl()
Definition: node-property.h:377
static Ptr_t create(const std::string &name, const Getter_t &g, const Setter_t &s)
Definition: node-property.h:218
std::vector< std::string > names
Definition: node-property.h:446
bool adaptiveDecimal
Definition: node-property.h:300
Wrapper(PropertyPtr_t p)
Definition: node-property.h:500
bool impl_get(void)
Definition: node-property.h:204
void invalidGet() const
Definition: node-property.h:173
boost::function< void(const T &)> Setter_t
Definition: node-property.h:214
Wrapper(Property *p)
Definition: node-property.h:499
boost::function< T(void)> Getter_t
Definition: node-property.h:331
static Ptr_t createWO(const std::string &name, Obj *obj, void(Obj::*mem_set)(const T &))
Definition: node-property.h:361
virtual std::string type()
Definition: node-property.h:183
virtual std::string type()
Definition: node-property.h:388
RangedStoredPropertyTpl(const std::string &name)
Definition: node-property.h:421