]> git.mxchange.org Git - simgear.git/blobdiff - simgear/props/PropertyBasedElement.hxx
Update doxgen config and some comments.
[simgear.git] / simgear / props / PropertyBasedElement.hxx
index f402b959c7e40a47ba9a34454762d6fca4ecca13..dcaceaf028724b92e93973f19aed4552bb4826d4 100644 (file)
 #define SG_PROPERTY_BASED_ELEMENT_HXX_
 
 #include <simgear/props/props.hxx>
-
-#include <boost/call_traits.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/weak_ptr.hpp>
-
+#include <simgear/structure/SGWeakReferenced.hxx>
 
 namespace simgear
 {
 
-  class PropertyBasedElement;
-  typedef boost::shared_ptr<PropertyBasedElement> PropertyBasedElementPtr;
-  typedef boost::weak_ptr<PropertyBasedElement> PropertyBasedElementWeakPtr;
-
   /**
    * Base class for a property controlled element
    */
   class PropertyBasedElement:
-    public SGPropertyChangeListener
+    public SGPropertyChangeListener,
+    public SGWeakReferenced
   {
     public:
       PropertyBasedElement(SGPropertyNode* node);
       virtual ~PropertyBasedElement();
 
+      /**
+       * Remove the property listener of the element.
+       *
+       * You will need to call the appropriate methods (#childAdded,
+       * #childRemoved, #valueChanged) yourself to ensure the element still
+       * receives the needed events.
+       */
+      void removeListener();
+
+      /**
+       * Destroys this element (removes node from property tree)
+       */
+      void destroy();
+
       virtual void update(double delta_time_sec) = 0;
 
       SGConstPropertyNode_ptr getProps() const;
@@ -50,19 +57,36 @@ namespace simgear
 
       template<class T>
       void set( const std::string& name,
-                typename boost::call_traits<T>::param_type val )
+                const T& val )
       {
         setValue(_node->getNode(name, true), val);
       }
 
-      virtual void setSelf(const PropertyBasedElementPtr& self);
+      template<class T>
+      T get( const std::string& name,
+             const T& def = T() )
+      {
+        SGPropertyNode const* child = _node->getNode(name);
+        if( !child )
+          return def;
+
+        return getValue<T>(child);
+      }
+
+      // Unshadow what we have just hidden...
+      using SGWeakReferenced::get;
+
+      virtual void onDestroy() {};
 
     protected:
 
       SGPropertyNode_ptr _node;
-      PropertyBasedElementWeakPtr _self;
+
   };
 
+  typedef SGSharedPtr<PropertyBasedElement> PropertyBasedElementPtr;
+  typedef SGWeakPtr<PropertyBasedElement> PropertyBasedElementWeakPtr;
+
 } // namespace simgear
 
 #endif /* SG_PROPERTY_BASED_ELEMENT_HXX_ */