]> granicus.if.org Git - nethack/commitdiff
Qt support for changing 'statuslines' dynamically
authorPatR <rankin@nethack.org>
Tue, 22 Dec 2020 19:10:32 +0000 (11:10 -0800)
committerPatR <rankin@nethack.org>
Tue, 22 Dec 2020 19:10:32 +0000 (11:10 -0800)
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.

dat/opthelp
doc/Guidebook.mn
doc/Guidebook.tex
win/Qt/qt_bind.cpp
win/Qt/qt_main.cpp
win/Qt/qt_main.h

index 5ac1e653e73649f1f6a562e905bf799441d42e3d..2d82a4e855973142f39e1c48a37ed316d4c31005 100644 (file)
@@ -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;
index dab9e06daeca9dc687274899ef58f831e18ef016..45137661996e48fc8c7c3df195f9065f6f5236fd 100644 (file)
@@ -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.
index b1606a34cf046f1591246a943e58fe4de1a869fb..e55152a065bba97ea532120e0fdd51b6c834c572 100644 (file)
@@ -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
index f355bcd31872ade57f05cd94822fa3ddeeda3805..7f4926df52cb48f72beeb446e77f7681988f6db1 100644 (file)
@@ -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);
index 4a43f0a4350dd596389f52446c96d093c278642e..18759e0d83607093e30a01c24b41ae920bef2ea6 100644 (file)
@@ -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
 
index d01d0955825fab73071a601442548e3899633989..1b4441ec9a3794a43b9c7750476c1fb214ec995b 100644 (file)
 #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: