Qt4: Put yn queries in message history

When using OPTIONS=popup_dialog, or compiling with USE_POPUPS,
the yes/no -questions weren't put into the message history.
This commit is contained in:
Pasi Kallinen
2017-10-11 09:50:18 +03:00
parent 5d1f77301a
commit 46217bbda2

View File

@@ -497,51 +497,48 @@ int NetHackQtBind::qt_doprev_message()
char NetHackQtBind::qt_yn_function(const char *question_, const char *choices, CHAR_P def) char NetHackQtBind::qt_yn_function(const char *question_, const char *choices, CHAR_P def)
{ {
QString question(QString::fromLatin1(question_)); QString question(QString::fromLatin1(question_));
QString message;
char yn_esc_map='\033';
if (choices) {
// anything beyond <esc> is hidden>
QString choicebuf = choices;
size_t cb = choicebuf.indexOf('\033');
choicebuf = choicebuf.mid(0U, cb);
message = QString("%1 [%2] ").arg(question, choicebuf);
if (def) message += QString("(%1) ").arg(QChar(def));
// escape maps to 'q' or 'n' or default, in that order
yn_esc_map = (index(choices, 'q') ? 'q' :
(index(choices, 'n') ? 'n' : def));
} else {
message = question;
}
if (qt_settings->ynInMessages() && WIN_MESSAGE!=WIN_ERR) { if (qt_settings->ynInMessages() && WIN_MESSAGE!=WIN_ERR) {
// Similar to X11 windowport `slow' feature. // Similar to X11 windowport `slow' feature.
QString message; int result = -1;
char yn_esc_map='\033';
if (choices) {
// anything beyond <esc> is hidden>
QString choicebuf = choices;
size_t cb = choicebuf.indexOf('\033');
choicebuf = choicebuf.mid(0U, cb);
message = QString("%1 [%2] ").arg(question, choicebuf);
if (def) message += QString("(%1) ").arg(QChar(def));
// escape maps to 'q' or 'n' or default, in that order
yn_esc_map = (index(choices, 'q') ? 'q' :
(index(choices, 'n') ? 'n' : def));
} else {
message = question;
}
#ifdef USE_POPUPS #ifdef USE_POPUPS
// Improve some special-cases (DIRKS 08/02/23) if (choices) {
if (strcmp (choices,"ynq") == 0) { if (!strcmp(choices,"ynq"))
switch (QMessageBox::information (NetHackQtBind::mainWidget(),"NetHack",question,"&Yes","&No","&Quit",0,2)) result = QMessageBox::information (NetHackQtBind::mainWidget(),"NetHack",question,"&Yes","&No","&Quit",0,2);
{ else if (!strcmp(choices,"yn"))
case 0: return 'y'; result = QMessageBox::information(NetHackQtBind::mainWidget(),"NetHack",question,"&Yes", "&No",0,1);
case 1: return 'n'; else if (!strcmp(choices, "rl"))
case 2: return 'q'; result = QMessageBox::information(NetHackQtBind::mainWidget(),"NetHack",question,"&Right", "&Left",0,1);
}
}
if (strcmp (choices,"yn") == 0) { if (result >= 0 && result < strlen(choices)) {
switch (QMessageBox::information(NetHackQtBind::mainWidget(),"NetHack",question,"&Yes", "&No",0,1)) char yn_resp = choices[result];
{ message += QString(" %1").arg(yn_resp);
case 0: return 'y'; result = yn_resp;
case 1: return 'n'; }
} }
}
#endif #endif
NetHackQtBind::qt_putstr(WIN_MESSAGE, ATR_BOLD, message); NetHackQtBind::qt_putstr(WIN_MESSAGE, ATR_BOLD, message);
int result=-1; while (result < 0) {
while (result<0) {
char ch=NetHackQtBind::qt_nhgetch(); char ch=NetHackQtBind::qt_nhgetch();
if (ch=='\033') { if (ch=='\033') {
result=yn_esc_map; result=yn_esc_map;
@@ -562,7 +559,12 @@ char NetHackQtBind::qt_yn_function(const char *question_, const char *choices, C
return result; return result;
} else { } else {
NetHackQtYnDialog dialog(mainWidget(),question,choices,def); NetHackQtYnDialog dialog(mainWidget(),question,choices,def);
return dialog.Exec(); char ret = dialog.Exec();
if (!(ret == '\0' || ret == '\033') && choices)
message += QString(" %1").arg(ret);
else if (def)
message += QString(" %1").arg(def);
NetHackQtBind::qt_putstr(WIN_MESSAGE, ATR_BOLD, message);
} }
} }