]> git.mxchange.org Git - simgear.git/blobdiff - simgear/props/props.hxx
canvas::Layout: support for contents margins.
[simgear.git] / simgear / props / props.hxx
index ea722448802d4a05a3723582ec5b3d15299500db..8e17cc49845cdc90db39bf6dfc3344c023fc7073 100644 (file)
@@ -731,6 +731,7 @@ public:
    * whether the property should normally be saved and restored.</p>
    */
   enum Attribute {
+    NO_ATTR = 0,
     READ = 1,
     WRITE = 2,
     ARCHIVE = 4,
@@ -910,36 +911,46 @@ public:
   simgear::PropertyList getChildren (const std::string& name) const
   { return getChildren(name.c_str()); }
 
+  /**
+   * Remove child by pointer (if it is a child of this node).
+   *
+   * @return true, if the node was deleted.
+   */
+  bool removeChild(SGPropertyNode* node);
+
+  // TODO do we need the removeXXX methods to return the deleted nodes?
   /**
    * Remove child by position.
    */
-  SGPropertyNode_ptr removeChild (int pos, bool keep = true);
+  SGPropertyNode_ptr removeChild(int pos);
 
 
   /**
    * Remove a child node
    */
-  SGPropertyNode_ptr removeChild (const char * name, int index = 0,
-                                  bool keep = true);
+  SGPropertyNode_ptr removeChild(const char * name, int index = 0);
 
   /**
    * Remove a child node
    */
-  SGPropertyNode_ptr removeChild (const std::string& name, int index = 0,
-                                  bool keep = true)
-  { return removeChild(name.c_str(), index, keep); }
+  SGPropertyNode_ptr removeChild(const std::string& name, int index = 0)
+  { return removeChild(name.c_str(), index); }
 
   /**
    * Remove all children with the specified name.
    */
-  simgear::PropertyList removeChildren (const char * name, bool keep = true);
+  simgear::PropertyList removeChildren(const char * name);
 
   /**
    * Remove all children with the specified name.
    */
-  simgear::PropertyList removeChildren (const std::string& name,
-                                        bool keep = true)
-  { return removeChildren(name.c_str(), keep); }
+  simgear::PropertyList removeChildren(const std::string& name)
+  { return removeChildren(name.c_str()); }
+
+  /**
+   * Remove all children (does not change the value of the node)
+   */
+  void removeAllChildren();
 
   //
   // Alias support.
@@ -1291,6 +1302,11 @@ public:
    */
   static void setInterpolationMgr(simgear::PropertyInterpolationMgr* mgr);
 
+  /**
+   * Get the interpolation manager
+   */
+  static simgear::PropertyInterpolationMgr* getInterpolationMgr();
+
   /**
    * Print the value of the property to a stream.
    */
@@ -1697,6 +1713,8 @@ protected:
   void fireChildAdded (SGPropertyNode * parent, SGPropertyNode * child);
   void fireChildRemoved (SGPropertyNode * parent, SGPropertyNode * child);
 
+  SGPropertyNode_ptr eraseChild(simgear::PropertyList::iterator child);
+
   /**
    * Protected constructor for making new nodes on demand.
    */
@@ -1747,7 +1765,6 @@ private:
   /// counted pointer
   SGPropertyNode * _parent;
   simgear::PropertyList _children;
-  simgear::PropertyList _removedChildren;
   mutable std::string _buffer;
   simgear::props::Type _type;
   bool _tied;
@@ -1775,7 +1792,7 @@ private:
   SGPropertyNode * getChildImpl (Itr begin, Itr end, int index = 0, bool create = false);
   // very internal method
   template<typename Itr>
-  SGPropertyNode* getExistingChild (Itr begin, Itr end, int index, bool create);
+  SGPropertyNode* getExistingChild (Itr begin, Itr end, int index);
   // very internal path parsing function
   template<typename SplitItr>
   friend SGPropertyNode* find_node_aux(SGPropertyNode * current, SplitItr& itr,