}
+\f
+////////////////////////////////////////////////////////////////////////
+// Static helper functions.
+////////////////////////////////////////////////////////////////////////
+
+/**
+ * Copy a property value to a PUI object.
+ */
+static void
+copy_to_pui (SGPropertyNode * node, puObject * object)
+{
+ switch (node->getType()) {
+ case SGPropertyNode::BOOL:
+ case SGPropertyNode::INT:
+ case SGPropertyNode::LONG:
+ object->setValue(node->getIntValue());
+ break;
+ case SGPropertyNode::FLOAT:
+ case SGPropertyNode::DOUBLE:
+ object->setValue(node->getFloatValue());
+ break;
+ default:
+ object->setValue(node->getStringValue());
+ break;
+ }
+}
+
+
+static void
+copy_from_pui (puObject * object, SGPropertyNode * node)
+{
+ switch (node->getType()) {
+ case SGPropertyNode::BOOL:
+ case SGPropertyNode::INT:
+ case SGPropertyNode::LONG:
+ node->setIntValue(object->getIntegerValue());
+ break;
+ case SGPropertyNode::FLOAT:
+ case SGPropertyNode::DOUBLE:
+ node->setFloatValue(object->getFloatValue());
+ break;
+ default:
+ node->setStringValue(object->getStringValue());
+ break;
+ }
+}
+
+
\f
////////////////////////////////////////////////////////////////////////
// Implementation of GUIInfo.
FGDialog::updateValue (const char * objectName)
{
for (int i = 0; i < _propertyObjects.size(); i++) {
- if (_propertyObjects[i]->name == objectName)
- _propertyObjects[i]->object
- ->setValue(_propertyObjects[i]->node->getStringValue());
+ const string &name = _propertyObjects[i]->name;
+ if (name == objectName)
+ copy_to_pui(_propertyObjects[i]->node,
+ _propertyObjects[i]->object);
}
}
{
for (int i = 0; i < _propertyObjects.size(); i++) {
if (_propertyObjects[i]->name == objectName)
- _propertyObjects[i]->node
- ->setStringValue(_propertyObjects[i]
- ->object->getStringValue());
+ copy_from_pui(_propertyObjects[i]->object,
+ _propertyObjects[i]->node);
}
}
void
FGDialog::updateValues ()
{
- for (int i = 0; i < _propertyObjects.size(); i++) {
- puObject * object = _propertyObjects[i]->object;
- SGPropertyNode_ptr node = _propertyObjects[i]->node;
- object->setValue(node->getStringValue());
- }
+ for (int i = 0; i < _propertyObjects.size(); i++)
+ copy_to_pui(_propertyObjects[i]->node, _propertyObjects[i]->object);
}
void
FGDialog::applyValues ()
{
- for (int i = 0; i < _propertyObjects.size(); i++) {
- puObject * object = _propertyObjects[i]->object;
- SGPropertyNode_ptr node = _propertyObjects[i]->node;
- node->setStringValue(object->getStringValue());
- }
+ for (int i = 0; i < _propertyObjects.size(); i++)
+ copy_from_pui(_propertyObjects[i]->object,
+ _propertyObjects[i]->node);
}
void
puText * text = new puText(x, y);
setupObject(text, props);
return text;
+ } else if (type == "checkbox") {
+ puButton * b;
+ b = new puButton(x, y, x + width, y + height, PUBUTTON_CIRCLE);
+ setupObject(b, props);
+ return b;
} else if (type == "button") {
puButton * b;
const char * legend = props->getStringValue("legend", "[none]");
name = "";
const char * propname = props->getStringValue("property");
SGPropertyNode_ptr node = fgGetNode(propname, true);
- object->setValue(node->getStringValue());
+ copy_to_pui(node, object);
if (name != 0)
_propertyObjects.push_back(new PropertyObject(name, object, node));
}