X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FGUI%2Fproperty_list.cxx;h=6ceba838ca97112bfa107fc7dcdcfcc6dae8a405;hb=6dd47822545bf27f69a18a2d0ccc8abf91daa8d5;hp=759a0786ad81ed819b4bcec7b5f59ed610316533;hpb=b1b08beef8c884e956064359f201ff14e6a940bc;p=flightgear.git diff --git a/src/GUI/property_list.cxx b/src/GUI/property_list.cxx index 759a0786a..6ceba838c 100644 --- a/src/GUI/property_list.cxx +++ b/src/GUI/property_list.cxx @@ -28,9 +28,14 @@ #include #include -#include STL_IOMANIP -#include STL_STRING -SG_USING_STD(string); +#include +#include +#include + +using std::string; +using std::cout; +using std::endl; + typedef string stdString; // puObject has a "string" member #include
// fgGetKeyModifiers() @@ -41,25 +46,30 @@ typedef string stdString; // puObject has a "string" member static string getValueTypeString(const SGPropertyNode *node) { + using namespace simgear; string result; - SGPropertyNode::Type type = node->getType(); - if (type == SGPropertyNode::UNSPECIFIED) + props::Type type = node->getType(); + if (type == props::UNSPECIFIED) result = "unspecified"; - else if (type == SGPropertyNode::NONE) + else if (type == props::NONE) result = "none"; - else if (type == SGPropertyNode::BOOL) + else if (type == props::BOOL) result = "bool"; - else if (type == SGPropertyNode::INT) + else if (type == props::INT) result = "int"; - else if (type == SGPropertyNode::LONG) + else if (type == props::LONG) result = "long"; - else if (type == SGPropertyNode::FLOAT) + else if (type == props::FLOAT) result = "float"; - else if (type == SGPropertyNode::DOUBLE) + else if (type == props::DOUBLE) result = "double"; - else if (type == SGPropertyNode::STRING) + else if (type == props::STRING) result = "string"; + else if (type == props::VEC3D) + result = "vec3d"; + else if (type == props::VEC4D) + result = "vec4d"; return result; } @@ -67,11 +77,12 @@ static string getValueTypeString(const SGPropertyNode *node) static void dumpProperties(const SGPropertyNode *node) { + using namespace simgear; cout << node->getPath() << '/' << endl; for (int i = 0; i < node->nChildren(); i++) { const SGPropertyNode *c = node->getChild(i); - SGPropertyNode::Type type = c->getType(); - if (type == SGPropertyNode::ALIAS || c->nChildren()) + props::Type type = c->getType(); + if (type == props::ALIAS || c->nChildren()) continue; int index = c->getIndex(); @@ -81,21 +92,25 @@ static void dumpProperties(const SGPropertyNode *node) cout << " = "; switch (c->getType()) { - case SGPropertyNode::DOUBLE: - case SGPropertyNode::FLOAT: - cout << std::setprecision(15) << c->getDoubleValue(); - break; - case SGPropertyNode::LONG: - case SGPropertyNode::INT: - cout << c->getLongValue(); + case props::DOUBLE: + case props::FLOAT: + case props::VEC3D: + case props::VEC4D: + { + std::streamsize precision = cout.precision(15); + c->printOn(cout); + cout.precision(precision); + } break; - case SGPropertyNode::BOOL: - cout << (c->getBoolValue() ? "true" : "false"); + case props::LONG: + case props::INT: + case props::BOOL: + c->printOn(cout); break; - case SGPropertyNode::STRING: + case props::STRING: cout << '"' << c->getStringValue() << '"'; break; - case SGPropertyNode::NONE: + case props::NONE: break; default: cout << '\'' << c->getStringValue() << '\''; @@ -143,7 +158,7 @@ static void sanitize(stdString& s) PropertyList::PropertyList(int minx, int miny, int maxx, int maxy, SGPropertyNode *start) : - puList(minx, miny, maxx, maxy, short(0), 20), + puaList(minx, miny, maxx, maxy, short(0), 20), GUI_ID(FGCLASS_PROPERTYLIST), _curr(start), _return(0), @@ -191,8 +206,10 @@ void PropertyList::handle_select(puObject *list_box) const char *src = prop_list->_entries[selected]; if (prop_list->_dot_files && (selected < 2)) { - if (!strcmp(src, ".")) { - if (mod_ctrl) + if (src[0] == '.' && (src[1] == '\0' || src[1] == ' ')) { + if (mod_ctrl && mod_shift) + prop_list->_curr->fireValueChanged(); + else if (mod_ctrl) prop_list->toggleVerbosity(); else if (mod_shift) dumpProperties(prop_list->_curr); @@ -227,7 +244,7 @@ void PropertyList::handle_select(puObject *list_box) } // it is a regular property - if (child->getType() == SGPropertyNode::BOOL && mod_ctrl) { + if (child->getType() == simgear::props::BOOL && mod_ctrl) { child->setBoolValue(!child->getBoolValue()); prop_list->update(true); } else @@ -257,8 +274,8 @@ void PropertyList::update(bool restore_pos) _num_entries += 2; // for . and .. _entries = new char*[_num_entries + 1]; - _entries[0] = new char[2]; - strcpy(_entries[0], "."); + _entries[0] = new char[16]; + strcpy(_entries[0], _verbose ? ". [verbose]" : "."); _entries[1] = new char[3]; strcpy(_entries[1], ".."); @@ -294,6 +311,7 @@ void PropertyList::update(bool restore_pos) void PropertyList::updateTextForEntry(NodeData& data) { + using namespace simgear; SGPropertyNode *node = data.node; stdString name = node->getDisplayName(true); stdString type = getValueTypeString(node); @@ -307,8 +325,8 @@ void PropertyList::updateTextForEntry(NodeData& data) line << '/'; if (!children || (_verbose && node->hasValue())) { - if (node->getType() == SGPropertyNode::STRING - || node->getType() == SGPropertyNode::UNSPECIFIED) + if (node->getType() == props::STRING + || node->getType() == props::UNSPECIFIED) sanitize(value); line << " = '" << value << "' (" << type; @@ -327,6 +345,8 @@ void PropertyList::updateTextForEntry(NodeData& data) ext += 'A'; if (node->getAttribute(SGPropertyNode::USERARCHIVE)) ext += 'U'; + if (node->getAttribute(SGPropertyNode::PRESERVE)) + ext += 'P'; if (node->isTied()) ext += 'T'; @@ -341,6 +361,12 @@ void PropertyList::updateTextForEntry(NodeData& data) } line << ')'; } + else + if ((_verbose)&&(node->getAttribute(SGPropertyNode::PRESERVE))) + { + // only preserve/protection flag matters for nodes without values + line << " (P)"; + } stdString out = line.str(); if (out.size() >= PUSTRING_MAX)