| 65 | //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
| 66 | |
| 67 | void FGPropertyReader::Load(Element* el, FGPropertyManager* PM, bool override_props) |
| 68 | { |
| 69 | Element *property_element = el->FindElement("property"); |
| 70 | if (property_element && FGJSBBase::debug_lvl > 0) { |
| 71 | FGLogging log(LogLevel::DEBUG); |
| 72 | log << "\n "; |
| 73 | if (override_props) |
| 74 | log << "Overriding"; |
| 75 | else |
| 76 | log << "Declared"; |
| 77 | log << " properties\n\n"; |
| 78 | } |
| 79 | |
| 80 | while (property_element) { |
| 81 | SGPropertyNode* node = nullptr; |
| 82 | double value=0.0; |
| 83 | bool has_value_attribute = !property_element->GetAttributeValue("value").empty(); |
| 84 | |
| 85 | if (has_value_attribute) |
| 86 | value = property_element->GetAttributeValueAsNumber("value"); |
| 87 | |
| 88 | string interface_property_string = property_element->GetDataLine(); |
| 89 | if (PM->HasNode(interface_property_string)) { |
| 90 | node = PM->GetNode(interface_property_string); |
| 91 | if (override_props) { |
| 92 | |
| 93 | if (FGJSBBase::debug_lvl > 0) { |
| 94 | FGXMLLogging log(property_element, LogLevel::DEBUG); |
| 95 | if (interface_prop_initial_value.find(node) == interface_prop_initial_value.end()) { |
| 96 | log << " The following property will be overridden but it has not been\n" |
| 97 | << " defined in the current model '" << el->GetName() << "'\n"; |
| 98 | } |
| 99 | |
| 100 | log << " " << "Overriding value for property " << interface_property_string |
| 101 | << "\n (old value: " << node->getDoubleValue() |
| 102 | << " new value: " << value << ")\n\n"; |
| 103 | } |
| 104 | |
| 105 | node->setDoubleValue(value); |
| 106 | } |
| 107 | else { |
| 108 | if (has_value_attribute) { |
| 109 | FGXMLLogging log(property_element, LogLevel::WARN); |
| 110 | log << " Property " << interface_property_string |
| 111 | << " is already defined.\n" |
| 112 | << " Its value (" << node->getDoubleValue() << ") will not" |
| 113 | << " be overridden.\n"; |
| 114 | } |
| 115 | property_element = el->FindNextElement("property"); |
| 116 | continue; |
| 117 | } |
| 118 | } else { |
| 119 | node = PM->GetNode(interface_property_string, true); |
| 120 | if (node) { |
| 121 | node->setDoubleValue(value); |
| 122 | |
| 123 | if (FGJSBBase::debug_lvl > 0) { |
| 124 | FGLogging log(LogLevel::DEBUG); |
nothing calls this directly
no test coverage detected