]> git.mxchange.org Git - simgear.git/blobdiff - simgear/misc/props.hxx
MSVC++ bug work-around from Frederic Bouvier.
[simgear.git] / simgear / misc / props.hxx
index a077faca89b16a6d36be4726fe0df6375425cf87..b4a429974c5b5ea485a10d4ed47b2f474949ccb9 100644 (file)
@@ -529,9 +529,18 @@ private:
 class SGPropertyChangeListener
 {
 public:
+  virtual ~SGPropertyChangeListener ();
+  virtual void valueChanged (SGPropertyNode * node);
+  virtual void childAdded (SGPropertyNode * parent, SGPropertyNode * child);
+  virtual void childRemoved (SGPropertyNode * parent, SGPropertyNode * child);
 
-  virtual void propertyChanged (SGPropertyNode * node) = 0;
+protected:
+  friend class SGPropertyNode;
+  virtual void register_property (SGPropertyNode * node);
+  virtual void unregister_property (SGPropertyNode * node);
 
+private:
+  vector<SGPropertyNode *> _properties;
 };
 
 
@@ -1127,22 +1136,34 @@ public:
 
 
   /**
-   * Fire a property change to all listeners.
+   * Remove a change listener from the property.
    */
-  void firePropertyChange ()
-  {
-    firePropertyChange(this);
-  }
+  void removeChangeListener (SGPropertyChangeListener * listener);
 
 
-protected:
+  /**
+   * Fire a value change event to all listeners.
+   */
+  void fireValueChanged ();
 
 
   /**
-   * Fire a property change with an explicit target node.
+   * Fire a child-added event to all listeners.
    */
-  void firePropertyChange (SGPropertyNode * node);
+  void fireChildAdded (SGPropertyNode * child);
+
+
+  /**
+   * Fire a child-removed event to all listeners.
+   */
+  void fireChildRemoved (SGPropertyNode * child);
+
+
+protected:
 
+  void fireValueChanged (SGPropertyNode * node);
+  void fireChildAdded (SGPropertyNode * parent, SGPropertyNode * child);
+  void fireChildRemoved (SGPropertyNode * parent, SGPropertyNode * child);
 
   /**
    * Protected constructor for making new nodes on demand.