39 #include "FGPropertyReader.h"
40 #include "FGPropertyManager.h"
41 #include "FGXMLElement.h"
42 #include "FGJSBBase.h"
54 bool FGPropertyReader::ResetToIC(
void)
56 for (
auto v: interface_prop_initial_value) {
57 SGPropertyNode* node = v.first;
58 if (!node->getAttribute(SGPropertyNode::PRESERVE))
59 node->setDoubleValue(v.second);
67 void FGPropertyReader::Load(Element* el, FGPropertyManager* PM,
bool override)
69 Element *property_element = el->FindElement(
"property");
70 if (property_element && FGJSBBase::debug_lvl > 0) {
76 cout <<
" properties" << endl << endl;
79 while (property_element) {
80 SGPropertyNode* node =
nullptr;
82 if ( ! property_element->GetAttributeValue(
"value").empty())
83 value = property_element->GetAttributeValueAsNumber(
"value");
85 string interface_property_string = property_element->GetDataLine();
86 if (PM->HasNode(interface_property_string)) {
88 node = PM->GetNode(interface_property_string);
90 if (FGJSBBase::debug_lvl > 0) {
91 if (interface_prop_initial_value.find(node) == interface_prop_initial_value.end()) {
92 cout << property_element->ReadFrom()
93 <<
" The following property will be overridden but it has not been" << endl
94 <<
" defined in the current model '" << el->GetName() <<
"'" << endl;
97 cout <<
" " <<
"Overriding value for property " << interface_property_string << endl
98 <<
" (old value: " << node->getDoubleValue() <<
" new value: " << value <<
")"
102 node->setDoubleValue(value);
105 cerr << property_element->ReadFrom()
106 <<
" Property " << interface_property_string
107 <<
" is already defined." << endl;
108 property_element = el->FindNextElement(
"property");
112 node = PM->GetNode(interface_property_string,
true);
114 node->setDoubleValue(value);
116 if (FGJSBBase::debug_lvl > 0)
117 cout <<
" " << interface_property_string <<
" (initial value: "
118 << value <<
")" << endl << endl;
121 cerr <<
"Could not create property " << interface_property_string
123 property_element = el->FindNextElement(
"property");
127 interface_prop_initial_value[node] = value;
128 if (property_element->GetAttributeValue(
"persistent") ==
string(
"true"))
129 node->setAttribute(SGPropertyNode::PRESERVE,
true);
131 property_element = el->FindNextElement(
"property");