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:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user