- limit max number of messages displayed at the same time to 5 (Ideally,
it should be just one, but we don't want to block everything and don't want to miss messages either.) - prevent message duplicates
This commit is contained in:
parent
d40678628f
commit
beef8cd1ed
1 changed files with 15 additions and 2 deletions
|
@ -131,7 +131,10 @@ const __fg_gui_fn_t __fg_gui_fn[] = {
|
||||||
|
|
||||||
/* ================ General Purpose Functions ================ */
|
/* ================ General Purpose Functions ================ */
|
||||||
|
|
||||||
// General Purpose Message Box
|
// General Purpose Message Box. Makes sure no more than 5 different
|
||||||
|
// messages are displayed at the same time, and none of them are
|
||||||
|
// duplicates. (5 is a *lot*, but this will hardly ever be reached
|
||||||
|
// and we don't want to miss any, either.)
|
||||||
void mkDialog (const char *txt)
|
void mkDialog (const char *txt)
|
||||||
{
|
{
|
||||||
NewGUI *gui = (NewGUI *)globals->get_subsystem("gui");
|
NewGUI *gui = (NewGUI *)globals->get_subsystem("gui");
|
||||||
|
@ -141,15 +144,25 @@ void mkDialog (const char *txt)
|
||||||
if (!master)
|
if (!master)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
const int maxdialogs = 5;
|
||||||
string name;
|
string name;
|
||||||
SGPropertyNode *msg = fgGetNode("/sim/gui/dialogs", true);
|
SGPropertyNode *msg = fgGetNode("/sim/gui/dialogs", true);
|
||||||
for (unsigned int i = 1;; i++) {
|
int i;
|
||||||
|
for (i = 0; i < maxdialogs; i++) {
|
||||||
std::ostringstream s;
|
std::ostringstream s;
|
||||||
s << "message-" << i;
|
s << "message-" << i;
|
||||||
name = s.str();
|
name = s.str();
|
||||||
|
|
||||||
if (!msg->getNode(name.c_str(), false))
|
if (!msg->getNode(name.c_str(), false))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
if (!strcmp(txt, msg->getNode(name.c_str())->getStringValue("message"))) {
|
||||||
|
SG_LOG(SG_GENERAL, SG_WARN, "mkDialog(): duplicate of message " << txt);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (i == maxdialogs)
|
||||||
|
return;
|
||||||
msg = msg->getNode(name.c_str(), true);
|
msg = msg->getNode(name.c_str(), true);
|
||||||
msg->setStringValue("message", txt);
|
msg->setStringValue("message", txt);
|
||||||
msg = msg->getNode("dialog", true);
|
msg = msg->getNode("dialog", true);
|
||||||
|
|
Loading…
Add table
Reference in a new issue