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) {
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
102 << " new value: " << value << ")\n\n";
103 }
104
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"
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) {
122
123 if (FGJSBBase::debug_lvl > 0) {
124 FGLogging log(LogLevel::DEBUG);
125 log << " " << interface_property_string << " (initial value: "
126 << value << ")\n\n";
127 }
128 }
129 else {
130 FGXMLLogging log(property_element, LogLevel::ERROR);
131 log << "Could not create property " << interface_property_string << "\n";
132 property_element = el->FindNextElement("property");
133 continue;
134 }
135 }
136 interface_prop_initial_value[node] = value;
137 if (property_element->GetAttributeValue("persistent") == string("true"))
139
140 property_element = el->FindNextElement("property");
141 }
142
143
144}
A node in a property tree.
void setAttribute(Attribute attr, bool state)
Set a single mode attribute for the property node.
double getDoubleValue() const
Get a double value for this node.
bool setDoubleValue(double value)
Set a double value for this node.