]> git.mxchange.org Git - simgear.git/commitdiff
Added new getDisplayName method that gets the name with its index.
authordavid <david>
Sat, 6 Jul 2002 14:58:38 +0000 (14:58 +0000)
committerdavid <david>
Sat, 6 Jul 2002 14:58:38 +0000 (14:58 +0000)
Suggested by Julian Foad.

simgear/misc/props.cxx
simgear/misc/props.hxx

index 7da884a70e4638d489527b8c18d8cf555c053ead..392b456e74f90be6ca403cd98c859791df7ebf85 100644 (file)
@@ -633,6 +633,7 @@ const int SGPropertyNode::LAST_USED_ATTRIBUTE = TRACE_WRITE;
  */
 SGPropertyNode::SGPropertyNode ()
   : _name(copy_string("")),
+    _display_name(0),
     _index(0),
     _parent(0),
     _path(0),
@@ -652,6 +653,7 @@ SGPropertyNode::SGPropertyNode ()
  */
 SGPropertyNode::SGPropertyNode (const SGPropertyNode &node)
   : _index(node._index),
+    _display_name(0),
     _parent(0),                        // don't copy the parent
     _path(0),
     _path_cache(0),
@@ -735,7 +737,8 @@ SGPropertyNode::SGPropertyNode (const SGPropertyNode &node)
 SGPropertyNode::SGPropertyNode (const char * name,
                                int index,
                                SGPropertyNode * parent)
-  : _index(index),
+  : _display_name(0),
+    _index(index),
     _parent(parent),
     _path(0),
     _path_cache(0),
@@ -931,6 +934,22 @@ SGPropertyNode::removeChild (const char * name, int index, bool keep)
 }
 
 
+const char *
+SGPropertyNode::getDisplayName (bool simplify) const
+{
+  if (_display_name == 0) {
+    string display = _name;
+    if (_index != 0 || !simplify) {
+      char buffer[64];
+      sprintf(buffer, "[%d]", _index);
+      display += buffer;
+    }
+    _display_name = copy_string(display.c_str());
+  }
+  return _display_name;
+}
+
+
 const char *
 SGPropertyNode::getPath (bool simplify) const
 {
@@ -942,12 +961,7 @@ SGPropertyNode::getPath (bool simplify) const
     } else {
       path = _parent->getPath(simplify);
       path += '/';
-      path += _name;
-      if (_index != 0 || !simplify) {
-       char buffer[64];
-       sprintf(buffer, "[%d]", _index);
-       path += buffer;
-      }
+      path += getDisplayName(simplify);
     }
     _path = copy_string(path.c_str());
   }
index ca61a2f2fbad38a18f2a0c732a340a1a87628811..c22d30367d73e52c52de85836f5e220c5f671fc9 100644 (file)
@@ -633,6 +633,12 @@ public:
   const char * getName () const { return _name; }
 
 
+  /**
+   * Get the node's pretty display name, with subscript when needed.
+   */
+  const char * getDisplayName (bool simplify = false) const;
+
+
   /**
    * Get the node's integer index.
    */
@@ -1241,6 +1247,7 @@ private:
   class hash_table;
 
   char * _name;
+  mutable char * _display_name;
   int _index;
   SGPropertyNode * _parent;
   vector<SGPropertyNode_ptr> _children;