Add support for a "checkbox" dialog widget (for boolean properties).
This commit is contained in:
parent
ed3ae450ce
commit
dd4890d952
1 changed files with 65 additions and 17 deletions
|
@ -26,6 +26,54 @@ action_callback (puObject * object)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
// 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
// Implementation of GUIInfo.
|
// Implementation of GUIInfo.
|
||||||
|
@ -76,9 +124,10 @@ void
|
||||||
FGDialog::updateValue (const char * objectName)
|
FGDialog::updateValue (const char * objectName)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < _propertyObjects.size(); i++) {
|
for (int i = 0; i < _propertyObjects.size(); i++) {
|
||||||
if (_propertyObjects[i]->name == objectName)
|
const string &name = _propertyObjects[i]->name;
|
||||||
_propertyObjects[i]->object
|
if (name == objectName)
|
||||||
->setValue(_propertyObjects[i]->node->getStringValue());
|
copy_to_pui(_propertyObjects[i]->node,
|
||||||
|
_propertyObjects[i]->object);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,30 +136,24 @@ FGDialog::applyValue (const char * objectName)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < _propertyObjects.size(); i++) {
|
for (int i = 0; i < _propertyObjects.size(); i++) {
|
||||||
if (_propertyObjects[i]->name == objectName)
|
if (_propertyObjects[i]->name == objectName)
|
||||||
_propertyObjects[i]->node
|
copy_from_pui(_propertyObjects[i]->object,
|
||||||
->setStringValue(_propertyObjects[i]
|
_propertyObjects[i]->node);
|
||||||
->object->getStringValue());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
FGDialog::updateValues ()
|
FGDialog::updateValues ()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < _propertyObjects.size(); i++) {
|
for (int i = 0; i < _propertyObjects.size(); i++)
|
||||||
puObject * object = _propertyObjects[i]->object;
|
copy_to_pui(_propertyObjects[i]->node, _propertyObjects[i]->object);
|
||||||
SGPropertyNode_ptr node = _propertyObjects[i]->node;
|
|
||||||
object->setValue(node->getStringValue());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
FGDialog::applyValues ()
|
FGDialog::applyValues ()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < _propertyObjects.size(); i++) {
|
for (int i = 0; i < _propertyObjects.size(); i++)
|
||||||
puObject * object = _propertyObjects[i]->object;
|
copy_from_pui(_propertyObjects[i]->object,
|
||||||
SGPropertyNode_ptr node = _propertyObjects[i]->node;
|
_propertyObjects[i]->node);
|
||||||
node->setStringValue(object->getStringValue());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -169,6 +212,11 @@ FGDialog::makeObject (SGPropertyNode * props, int parentWidth, int parentHeight)
|
||||||
puText * text = new puText(x, y);
|
puText * text = new puText(x, y);
|
||||||
setupObject(text, props);
|
setupObject(text, props);
|
||||||
return text;
|
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") {
|
} else if (type == "button") {
|
||||||
puButton * b;
|
puButton * b;
|
||||||
const char * legend = props->getStringValue("legend", "[none]");
|
const char * legend = props->getStringValue("legend", "[none]");
|
||||||
|
@ -198,7 +246,7 @@ FGDialog::setupObject (puObject * object, SGPropertyNode * props)
|
||||||
name = "";
|
name = "";
|
||||||
const char * propname = props->getStringValue("property");
|
const char * propname = props->getStringValue("property");
|
||||||
SGPropertyNode_ptr node = fgGetNode(propname, true);
|
SGPropertyNode_ptr node = fgGetNode(propname, true);
|
||||||
object->setValue(node->getStringValue());
|
copy_to_pui(node, object);
|
||||||
if (name != 0)
|
if (name != 0)
|
||||||
_propertyObjects.push_back(new PropertyObject(name, object, node));
|
_propertyObjects.push_back(new PropertyObject(name, object, node));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue