#include "AirportList.hxx"
#include "property_list.hxx"
#include "layout.hxx"
-
+#include "WaypointList.hxx"
+#include "MapWidget.hxx"
enum format_type { f_INVALID, f_INT, f_LONG, f_FLOAT, f_DOUBLE, f_STRING };
static const int FORMAT_BUFSIZE = 255;
getFirstChild()->setSize(w, h); // dialog background puFrame
}
} else {
- setPosition(x + _dlgX - _startX, y + _dlgY - _startY);
- }
+ int posX = x + _dlgX - _startX,
+ posY = y + _dlgY - _startY;
+ setPosition(posX, posY);
+
+ GUIInfo *info = (GUIInfo *)getUserData();
+ if (info && info->node) {
+ info->node->setIntValue("x", posX);
+ info->node->setIntValue("y", posY);
+ }
+ } // re-positioning
} else if (_dragging) {
fgSetMouseCursor(_start_cursor);
if (objectName && !objectName[0])
objectName = 0;
- for (unsigned int i = 0; i < _propertyObjects.size(); i++) {
- const string &name = _propertyObjects[i]->name;
- if (objectName && name != objectName)
- continue;
-
- puObject *obj = _propertyObjects[i]->object;
- if ((obj->getType() & PUCLASS_LIST) && (dynamic_cast<GUI_ID *>(obj)->id & FGCLASS_LIST)) {
- fgList *pl = static_cast<fgList *>(obj);
- pl->update();
- } else
- copy_to_pui(_propertyObjects[i]->node, obj);
+ for (unsigned int i = 0; i < _propertyObjects.size(); i++) {
+ const string &name = _propertyObjects[i]->name;
+ if (objectName && name != objectName) {
+ continue;
}
+
+ puObject *widget = _propertyObjects[i]->object;
+ int widgetType = widget->getType();
+ if (widgetType & PUCLASS_LIST) {
+ GUI_ID* gui_id = dynamic_cast<GUI_ID *>(widget);
+ if (gui_id && (gui_id->id & FGCLASS_LIST)) {
+ fgList *pl = static_cast<fgList*>(widget);
+ pl->update();
+ } else {
+ copy_to_pui(_propertyObjects[i]->node, widget);
+ }
+ } else if (widgetType & PUCLASS_COMBOBOX) {
+ fgComboBox* combo = static_cast<fgComboBox*>(widget);
+ combo->update();
+ } else {
+ copy_to_pui(_propertyObjects[i]->node, widget);
+ }
+ } // of property objects iteration
}
void
setupObject(obj, props);
setColor(obj, props);
return obj;
-
+ } else if (type == "map") {
+ MapWidget* mapWidget = new MapWidget(x, y, x + width, y + height);
+ setupObject(mapWidget, props);
+ return mapWidget;
} else if (type == "combo") {
fgComboBox *obj = new fgComboBox(x, y, x + width, y + height, props,
props->getBoolValue("editable", false));
setupObject(obj, props);
setColor(obj, props, EDITFIELD);
return obj;
+ } else if (type == "waypointlist") {
+ ScrolledWaypointList* obj = new ScrolledWaypointList(x, y, width, height);
+ setupObject(obj, props);
+ return obj;
} else {
return 0;
}
name = "";
const char *propname = props->getStringValue("property");
SGPropertyNode_ptr node = fgGetNode(propname, true);
- copy_to_pui(node, object);
+ if (type == "map") {
+ // mapWidget binds to a sub-tree of properties, and
+ // ignroes the puValue mechanism, so special case things here
+ MapWidget* mw = static_cast<MapWidget*>(object);
+ mw->setProperty(node);
+ } else {
+ // normal widget, creating PropertyObject
+ copy_to_pui(node, object);
+ PropertyObject *po = new PropertyObject(name, object, node);
+ _propertyObjects.push_back(po);
+ if (props->getBoolValue("live"))
+ _liveObjects.push_back(po);
+ }
+
- PropertyObject *po = new PropertyObject(name, object, node);
- _propertyObjects.push_back(po);
- if (props->getBoolValue("live"))
- _liveObjects.push_back(po);
}
SGPropertyNode *dest = fgGetNode("/sim/bindings/gui", true);
void
fgValueList::make_list()
{
- vector<SGPropertyNode_ptr> value_nodes = _props->getChildren("value");
- _list = new char *[value_nodes.size() + 1];
- unsigned int i;
- for (i = 0; i < value_nodes.size(); i++)
- _list[i] = strdup((char *)value_nodes[i]->getStringValue());
- _list[i] = 0;
+ SGPropertyNode_ptr values = _props;
+ const char* vname = "value";
+
+ if (_props->hasChild("properties")) {
+ // dynamic values, read from a property's children
+ const char* path = _props->getStringValue("properties");
+ values = fgGetNode(path, true);
+ }
+
+ if (_props->hasChild("property-name")) {
+ vname = _props->getStringValue("property-name");
+ }
+
+ vector<SGPropertyNode_ptr> value_nodes = values->getChildren(vname);
+ _list = new char *[value_nodes.size() + 1];
+ unsigned int i;
+ for (i = 0; i < value_nodes.size(); i++) {
+ _list[i] = strdup((char *)value_nodes[i]->getStringValue());
+ }
+ _list[i] = 0;
}
void
setTopItem(top);
}
+void fgComboBox::update()
+{
+ fgValueList::update();
+ newList(_list);
+}
+
// end of dialog.cxx