continue;
puObject *obj = _propertyObjects[i]->object;
- copy_to_pui(_propertyObjects[i]->node, obj);
+ SGPropertyNode *values = _propertyObjects[i]->values;
+ if (obj->getType() & PUCLASS_LIST && values)
+ ((puList *)obj)->newList(value_list(values));
+ else
+ copy_to_pui(_propertyObjects[i]->node, obj);
}
}
const char * propname = props->getStringValue("property");
SGPropertyNode_ptr node = fgGetNode(propname, true);
copy_to_pui(node, object);
- PropertyObject* po = new PropertyObject(name, object, node);
+
+ SGPropertyNode * values = type == "list" ? props : 0;
+ PropertyObject* po = new PropertyObject(name, object, node, values);
_propertyObjects.push_back(po);
if(props->getBoolValue("live"))
_liveObjects.push_back(po);
FGDialog::PropertyObject::PropertyObject (const char * n,
puObject * o,
- SGPropertyNode_ptr p)
+ SGPropertyNode_ptr p,
+ SGPropertyNode_ptr v)
: name(n),
object(o),
- node(p)
+ node(p),
+ values(v)
{
}
// PUI provides no way for userdata to be deleted automatically
// with a GUI object, so we have to keep track of all the special
// data we allocated and then free it manually when the dialog
- // closes.
+ // closes. "values" is a node with "value" children and only used
+ // by the <list> widget.
vector<void *> _info;
struct PropertyObject {
PropertyObject (const char * name,
puObject * object,
- SGPropertyNode_ptr node);
+ SGPropertyNode_ptr node,
+ SGPropertyNode_ptr values = 0);
string name;
puObject * object;
SGPropertyNode_ptr node;
+ SGPropertyNode_ptr values;
};
vector<PropertyObject *> _propertyObjects;
vector<PropertyObject *> _liveObjects;