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.
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
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;
-.\" $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.
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
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.
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'
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
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);
}
}
-#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)
delete oldstatus;
ShowIfReady();
+
+ return (NetHackQtWindow *) this->status;
}
#endif
#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;
void resizePaperDoll(bool); // ENHANCED_PAPERDOLL
#ifdef DYNAMIC_STATUSLINES
// called when 'statuslines' option has been changed
- void redoStatus();
+ NetHackQtWindow *redoStatus();
#endif
public slots: