From: Tom de Vries <tdevries@suse.de>
To: gdb-patches@sourceware.org
Subject: [PATCH] [gdb/tui] Factor out tui_noscroll_window et al
Date: Sun, 12 Nov 2023 16:06:01 +0100 [thread overview]
Message-ID: <20231112150601.25484-1-tdevries@suse.de> (raw)
I noticed that tui_locator_window has an empty do_scroll_vertical and
do_scroll_horizontal, like tui_cmd_window, but unlike tui_cmd_window doesn't
have:
...
bool can_scroll () const override
{
return false;
}
...
I suspect that it probably doesn't matter, but regardless it's good to have
the same implementations of basic properties in all windows.
Ensure this by adding a class tui_noscroll_window, that has:
- an empty do_scroll_vertical and do_scroll_horizontal, and
- a can_scroll returning false
which both tui_locator_window and tui_cmd_window inherit.
Make all methods final to ensure no accidental overrides are left in the
inheriting classes.
Likewise add new classes representing basic window properties:
- tui_nofocus_window,
- tui_oneline_window,
- tui_nobox_window,
- tui_norefresh_window, and
- tui_always_visible_window.
The changes are only a refactoring, apart from adding the "final", which does
limit the range of behaviours for subclasses.
Tested on x86_64-linux.
---
gdb/tui/tui-command.h | 33 ++---------------
gdb/tui/tui-data.h | 85 ++++++++++++++++++++++++++++++++++++++++---
gdb/tui/tui-stack.h | 34 ++---------------
3 files changed, 86 insertions(+), 66 deletions(-)
diff --git a/gdb/tui/tui-command.h b/gdb/tui/tui-command.h
index f6842880bb2..d743dd87a1b 100644
--- a/gdb/tui/tui-command.h
+++ b/gdb/tui/tui-command.h
@@ -25,49 +25,22 @@
#include "tui/tui-data.h"
/* The TUI command window. */
-struct tui_cmd_window : public tui_win_info
+struct tui_cmd_window
+ : public tui_noscroll_window, tui_nobox_window, tui_norefresh_window,
+ tui_always_visible_window
{
tui_cmd_window () = default;
DISABLE_COPY_AND_ASSIGN (tui_cmd_window);
- void refresh_window () override
- {
- }
-
const char *name () const override
{
return CMD_NAME;
}
- bool can_scroll () const override
- {
- return false;
- }
-
- bool can_box () const override
- {
- return false;
- }
-
void resize (int height, int width, int origin_x, int origin_y) override;
- void make_visible (bool visible) override
- {
- /* The command window can't be made invisible. */
- }
-
int start_line = 0;
-
-protected:
-
- void do_scroll_vertical (int num_to_scroll) override
- {
- }
-
- void do_scroll_horizontal (int num_to_scroll) override
- {
- }
};
/* Refresh the command window. */
diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h
index a1e44f77cc1..37d566c0186 100644
--- a/gdb/tui/tui-data.h
+++ b/gdb/tui/tui-data.h
@@ -182,6 +182,76 @@ struct tui_win_info
std::string m_title;
};
+/* A TUI window that doesn't scroll. */
+
+struct tui_noscroll_window : public virtual tui_win_info {
+public:
+ virtual bool can_scroll () const final override
+ {
+ return false;
+ }
+
+protected:
+ virtual void do_scroll_vertical (int num_to_scroll) final override
+ {
+ }
+
+ /* Scroll the contents horizontally. This is only called via
+ left_scroll and right_scroll. */
+ virtual void do_scroll_horizontal (int num_to_scroll) final override
+ {
+ }
+};
+
+/* A TUI window that cannot have focus. */
+
+struct tui_nofocus_window : public virtual tui_win_info {
+public:
+ virtual bool can_focus () const final override
+ {
+ return false;
+ }
+};
+
+/* A TUI window that occupies a single line. */
+
+struct tui_oneline_window : public virtual tui_win_info {
+ int max_height () const final override
+ {
+ return 1;
+ }
+
+ int min_height () const final override
+ {
+ return 1;
+ }
+};
+
+/* A TUI window that has no border. */
+
+struct tui_nobox_window : public virtual tui_win_info {
+ bool can_box () const final override
+ {
+ return false;
+ }
+};
+
+/* A TUI window that is not refreshed. */
+
+struct tui_norefresh_window : public virtual tui_win_info {
+ virtual void refresh_window () final override
+ {
+ }
+};
+
+/* A TUI window that is always visible. */
+
+struct tui_always_visible_window : public virtual tui_win_info {
+ virtual void make_visible (bool visible) final override
+ {
+ }
+};
+
/* Constant definitions. */
#define SRC_NAME "src"
#define CMD_NAME "cmd"
@@ -192,11 +262,16 @@ struct tui_win_info
/* Global Data. */
extern struct tui_win_info *tui_win_list[MAX_MAJOR_WINDOWS];
-#define TUI_SRC_WIN ((tui_source_window *) tui_win_list[SRC_WIN])
-#define TUI_DISASM_WIN ((tui_disasm_window *) tui_win_list[DISASSEM_WIN])
-#define TUI_DATA_WIN ((tui_data_window *) tui_win_list[DATA_WIN])
-#define TUI_CMD_WIN ((tui_cmd_window *) tui_win_list[CMD_WIN])
-#define TUI_STATUS_WIN ((tui_locator_window *) tui_win_list[STATUS_WIN])
+#define TUI_SRC_WIN \
+ (dynamic_cast<tui_source_window *> (tui_win_list[SRC_WIN]))
+#define TUI_DISASM_WIN \
+ (dynamic_cast<tui_disasm_window *> (tui_win_list[DISASSEM_WIN]))
+#define TUI_DATA_WIN \
+ (dynamic_cast<tui_data_window *> (tui_win_list[DATA_WIN]))
+#define TUI_CMD_WIN \
+ (dynamic_cast<tui_cmd_window *> (tui_win_list[CMD_WIN]))
+#define TUI_STATUS_WIN \
+ (dynamic_cast<tui_locator_window *> (tui_win_list[STATUS_WIN]))
/* All the windows that are currently instantiated, in layout
order. */
diff --git a/gdb/tui/tui-stack.h b/gdb/tui/tui-stack.h
index d542f215771..ca95b2bf78a 100644
--- a/gdb/tui/tui-stack.h
+++ b/gdb/tui/tui-stack.h
@@ -28,7 +28,9 @@ class frame_info_ptr;
/* Locator window class. */
-struct tui_locator_window : public tui_win_info
+struct tui_locator_window
+ : public tui_nofocus_window, tui_noscroll_window, tui_oneline_window,
+ tui_nobox_window
{
tui_locator_window () = default;
@@ -37,38 +39,8 @@ struct tui_locator_window : public tui_win_info
return STATUS_NAME;
}
- int max_height () const override
- {
- return 1;
- }
-
- int min_height () const override
- {
- return 1;
- }
-
- bool can_box () const override
- {
- return false;
- }
-
- bool can_focus () const override
- {
- return false;
- }
-
void rerender () override;
-protected:
-
- void do_scroll_vertical (int n) override
- {
- }
-
- void do_scroll_horizontal (int n) override
- {
- }
-
private:
/* Create the status line to display as much information as we can
base-commit: 328e01595436e937a0cc00cc8451f17beda26799
--
2.35.3
next reply other threads:[~2023-11-12 15:04 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-12 15:06 Tom de Vries [this message]
2023-11-13 9:37 ` Tom de Vries
2023-11-13 17:09 ` Tom Tromey
2023-11-14 15:02 ` Tom de Vries
2023-11-13 17:08 ` Tom Tromey
2023-11-13 21:03 ` Tom de Vries
2023-11-14 14:13 ` Tom Tromey
2024-02-21 17:32 ` Simon Marchi
2024-02-22 12:07 ` Tom de Vries
2024-02-22 13:13 ` Tom de Vries
2024-02-22 15:07 ` Tom Tromey
2024-02-22 15:26 ` Tom de Vries
2024-02-23 1:39 ` Tom Tromey
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231112150601.25484-1-tdevries@suse.de \
--to=tdevries@suse.de \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).