From: PatR Date: Tue, 22 Dec 2020 19:10:32 +0000 (-0800) Subject: Qt support for changing 'statuslines' dynamically X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=934808be0e28c00e0fcd50a5caf49c5227aea658;p=nethack Qt support for changing 'statuslines' dynamically Turns out it was nearly as simple as I originally thought. I just missed one significant detail the first time around. This leaves DYNAMIC_STATUSLINES as conditionl but now enables it by default. Using 'O' to change 'statuslines' from 2 to 3 or vice versa now works for Qt as well as for curses and tty. --- diff --git a/dat/opthelp b/dat/opthelp index 5ac1e653e..2d82a4e85 100644 --- a/dat/opthelp +++ b/dat/opthelp @@ -246,7 +246,8 @@ statushilites whether to display status highlights (when non-zero) and [0] also how many turns to display temporary highlights (for 'up', 'down', and 'changed' hilite_status rules) statuslines whether to use expanded (3) or condensed (2) status [2] - (for tty and curses; 2 is traditional, 3 is recommended) + (for tty and curses; 2 is traditional, 3 is recommended; + also for Qt, where 3 is traditional and 2 is recommended) suppress_alert disable various version-specific warnings about changes [] in game play or the user interface, such as notification given for the 'Q' command that quitting is now done via #quit @@ -321,9 +322,6 @@ role Your starting role (e.g., role:Barbarian, role:Valk). [random] as possible. You can also still denote your role by appending it to the "name" option (e.g., name:Vic-V), but the "role" option will take precedence. -statuslines whether to use expanded (3) or condensed (2) status [2] - (unlike for tty and curses, for Qt this can only be be set at - startup; also unlike tty and curses, 2 is recommended over 3) windowtype windowing system to be used [depends on operating system and compile-time setup] if more than one choice is available. Some instances of the program support only one window-type; diff --git a/doc/Guidebook.mn b/doc/Guidebook.mn index dab9e06da..451376619 100644 --- a/doc/Guidebook.mn +++ b/doc/Guidebook.mn @@ -1,4 +1,4 @@ -.\" $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.408 $ $NHDT-Date: 1608175317 2020/12/17 03:21:57 $ +.\" $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.410 $ $NHDT-Date: 1608664223 2020/12/22 19:10:23 $ .\" .\" This is an excerpt from the 'roff' man page from the 'groff' package. .\" Guidebook.mn currently does *not* fully adhere to these guidelines. @@ -4387,7 +4387,7 @@ up (default yes). Number of lines for traditional below-the-map status display. Acceptable values are \f(CR2\fP and \f(CR3\fP (default is \f(CR2\fP). .lp "" -For \f(CR3\fP, the \f(CRtty\fP interface moves some fields around and +When set to \f(CR3\fP, the \f(CRtty\fP interface moves some fields around and mainly shows status conditions on their own line. A display capable of showing at least 25 lines is recommended. The value can be toggled back and forth during the game with the \(oqO\(cq @@ -4408,10 +4408,6 @@ original format, with the status window spread out vertically. A value of \f(CR2\fP makes status be slightly condensed, moving some fields to different lines to eliminate one whole line, reducing the height needed. -For \f(CRQt\fP, -.op statuslines -can only be set in the configuration file or via NETHACKOPTIONS, not -with the \(oqO\(cq command. .lp "term_cols\ \ \fIand\fP" .lp term_rows Curses interface only. diff --git a/doc/Guidebook.tex b/doc/Guidebook.tex index b1606a34c..e55152a06 100644 --- a/doc/Guidebook.tex +++ b/doc/Guidebook.tex @@ -4783,7 +4783,7 @@ Number of lines for traditional below-the-map status display. Acceptable values are {\tt 2} and {\tt 3} (default is {\tt 2}). %.lp "" -For {\tt 3}, the {\tt tty} interface moves some fields around and +When set to {\tt 3}, the {\tt tty} interface moves some fields around and mainly shows status conditions on their own line. A display capable of showing at least 25 lines is recommended. The value can be toggled back and forth during the game with the `O' @@ -4806,10 +4806,6 @@ original format, with the status window spread out vertically. A value of {\tt 2} makes status be slightly condensed, moving some fields to different lines to eliminate one whole line, reducing the height needed. -For {\tt Qt}, -{\it statuslines\/} -can only be set in the configuration file or via NETHACKOPTIONS, not -with the `O' command. %.lp \item[\ib{term\verb+_+cols} {\normalfont and}] %.lp diff --git a/win/Qt/qt_bind.cpp b/win/Qt/qt_bind.cpp index f355bcd31..7f4926df5 100644 --- a/win/Qt/qt_bind.cpp +++ b/win/Qt/qt_bind.cpp @@ -834,10 +834,11 @@ void NetHackQtBind::qt_outrip(winid wid, int how, time_t when) void NetHackQtBind::qt_preference_update(const char *optname) { -#ifdef DYNAMIC_STATUSLINES // leave disabled; redoStatus() doesn't work +#ifdef DYNAMIC_STATUSLINES // defined in qt_main.h if (!strcmp(optname, "statuslines")) { // delete and recreate status window - main->redoStatus(); + // to toggle statuslines from 2 to 3 or vice versa + id_to_window[WIN_STATUS] = main->redoStatus(); } #else nhUse(optname); diff --git a/win/Qt/qt_main.cpp b/win/Qt/qt_main.cpp index 4a43f0a43..18759e0d8 100644 --- a/win/Qt/qt_main.cpp +++ b/win/Qt/qt_main.cpp @@ -1180,14 +1180,14 @@ void NetHackQtMainWindow::layout() } } -#ifdef DYNAMIC_STATUSLINES // leave disabled; this doesn't work as intended +#ifdef DYNAMIC_STATUSLINES // called when 'statuslines' changes from 2 to 3 or vice versa; simpler to // destroy and recreate the status window than to adjust existing fields -void NetHackQtMainWindow::redoStatus() +NetHackQtWindow *NetHackQtMainWindow::redoStatus() { NetHackQtStatusWindow *oldstatus = this->status; if (!oldstatus) - return; // not ready yet? + return NULL; // not ready yet? this->status = new NetHackQtStatusWindow; if (!qt_compact_mode) @@ -1195,6 +1195,8 @@ void NetHackQtMainWindow::redoStatus() delete oldstatus; ShowIfReady(); + + return (NetHackQtWindow *) this->status; } #endif diff --git a/win/Qt/qt_main.h b/win/Qt/qt_main.h index d01d09558..1b4441ec9 100644 --- a/win/Qt/qt_main.h +++ b/win/Qt/qt_main.h @@ -14,6 +14,11 @@ #include "qt_kde0.h" #endif +// Allow changing 'statuslines:2' to 'statuslines:3' or vice versa +// while the game is running; deletes and re-creates the status window. +// [Used in qt_bind.cpp and qt_main.cpp, but not referenced in qt_stat.cpp.] +#define DYNAMIC_STATUSLINES + namespace nethack_qt_ { class NetHackQtInvUsageWindow; @@ -54,7 +59,7 @@ public: void resizePaperDoll(bool); // ENHANCED_PAPERDOLL #ifdef DYNAMIC_STATUSLINES // called when 'statuslines' option has been changed - void redoStatus(); + NetHackQtWindow *redoStatus(); #endif public slots: