- if (type == "dialog") {
- puPopup * dialog;
- if (props->getBoolValue("modal", false))
- dialog = new puDialogBox(x, y);
- else
- dialog = new puPopup(x, y);
- setupGroup(dialog, props, width, height, true);
- return dialog;
- } else if (type == "group") {
- puGroup * group = new puGroup(x, y);
- setupGroup(group, props, width, height, false);
- return group;
- } else if (type == "input") {
- puInput * input = new puInput(x, y, x + width, y + height);
- setupObject(input, props);
- return input;
- } else if (type == "text") {
- puText * text = new puText(x, y);
- setupObject(text, props);
- return text;
- } else if (type == "button") {
- puButton * b;
- const char * legend = props->getStringValue("legend", "[none]");
- if (props->getBoolValue("one-shot", true))
- b = new puOneShot(x, y, legend);
- else
- b = new puButton(x, y, legend);
- setupObject(b, props);
- return b;
- } else {
- return 0;
- }
+ // Kill any entries in _active_dialogs... Is there an STL
+ // algorithm to do (delete map entries by value, not key)? I hate
+ // the STL :) -Andy
+ map<string,FGDialog *>::iterator iter = _active_dialogs.begin();
+ for(/**/; iter != _active_dialogs.end(); iter++)
+ if(iter->second == _active_dialog)
+ _active_dialogs.erase(iter);
+
+ delete _active_dialog;
+ _active_dialog = 0;
+ return true;