]> git.mxchange.org Git - flightgear.git/commitdiff
setAttribute("archive", 1) sets this attribute to "true", and
authormfranz <mfranz>
Wed, 4 Apr 2007 14:42:38 +0000 (14:42 +0000)
committermfranz <mfranz>
Wed, 4 Apr 2007 14:42:38 +0000 (14:42 +0000)
getAttribute("archive") returns 1 if the attribute is set, and 0 otherwise.

Allow to query and to set all properties by not specifying an attribute
string:  getAttribute() returns all attributes bit coded in an integer,
and setAttribute(attr) sets all attributes. No assumptions may be made
about the meaning of the bits -- they can be changed in future fgfs releases.
The only valid use is to compare or set attribute numbers obtained in the
same fgfs run. This is meant for allowing full copies of property branches.
Also add getAttribute query strings "children" for the number of children,
and "alias".

src/Scripting/nasal-props.cxx

index ea6548ade3f38d42c89458c57b3cfb110d87027e..77c74a830b3b2042c77981cd943c2ee4f526f8a1 100644 (file)
@@ -77,19 +77,21 @@ static naRef f_getType(naContext c, naRef me, int argc, naRef* args)
 static naRef f_getAttribute(naContext c, naRef me, int argc, naRef* args)
 {
     NODEARG();
+    if(naVec_size(argv) == 0) return naNum((*node)->getAttributes());
     naRef val = naVec_get(argv, 0);
     char *a = naStr_data(val);
     SGPropertyNode::Attribute attr;
     if(!a) a = "";
-    if(!strcmp(a, "read"))             attr = SGPropertyNode::READ;
+    if(!strcmp(a, "children"))         return naNum((*node)->nChildren());
+    else if(!strcmp(a, "tied"))        return naNum((*node)->isTied());
+    else if(!strcmp(a, "alias"))       return naNum((*node)->isAlias());
+    else if(!strcmp(a, "read"))        attr = SGPropertyNode::READ;
     else if(!strcmp(a, "write"))       attr = SGPropertyNode::WRITE;
     else if(!strcmp(a, "archive"))     attr = SGPropertyNode::ARCHIVE;
     else if(!strcmp(a, "trace-read"))  attr = SGPropertyNode::TRACE_READ;
     else if(!strcmp(a, "trace-write")) attr = SGPropertyNode::TRACE_WRITE;
     else if(!strcmp(a, "userarchive")) attr = SGPropertyNode::USERARCHIVE;
-    else if(!strcmp(a, "tied")) {
-        return naNum((*node)->isTied());
-    } else {
+    else {
         naRuntimeError(c, "props.getAttribute() with invalid attribute");
         return naNil();
     }
@@ -100,8 +102,13 @@ static naRef f_setAttribute(naContext c, naRef me, int argc, naRef* args)
 {
     NODEARG();
     naRef val = naVec_get(argv, 0);
-    char *a = naStr_data(val);
+    if(naVec_size(argv) == 1 && naIsNum(val)) {
+        naRef ret = naNum((*node)->getAttributes());
+        (*node)->setAttributes((int)val.num);
+        return ret;
+    }
     SGPropertyNode::Attribute attr;
+    char *a = naStr_data(val);
     if(!a) a = "";
     if(!strcmp(a, "read"))             attr = SGPropertyNode::READ;
     else if(!strcmp(a, "write"))       attr = SGPropertyNode::WRITE;