#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;
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));
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 fgComboBox::update()
{
+ if (_inHit) {
+ return;
+ }
+
+ std::string curValue(getStringValue());
fgValueList::update();
newList(_list);
+ int currentItem = puaComboBox::getCurrentItem();
+
+
+// look for the previous value, in the new list
+ for (int i = 0; _list[i] != 0; i++) {
+ if (_list[i] == curValue) {
+ // don't set the current item again; this is important to avoid
+ // recursion here if the combo callback ultimately causes another dialog-update
+ if (i != currentItem) {
+ puaComboBox::setCurrentItem(i);
+ }
+
+ return;
+ }
+ } // of list values iteration
+
+// cound't find current item, default to first
+ if (currentItem != 0) {
+ puaComboBox::setCurrentItem(0);
+ }
+}
+
+int fgComboBox::checkHit(int b, int up, int x, int y)
+{
+ _inHit = true;
+ int r = puaComboBox::checkHit(b, up, x, y);
+ _inHit = false;
+ return r;
}
// end of dialog.cxx