diff options
author | Tom de Vries <tdevries@suse.de> | 2023-11-14 15:45:18 +0100 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2023-11-14 15:45:18 +0100 |
commit | 85a427b26c5cae6af6ed0b4358d44a77b5a3b2c0 (patch) | |
tree | 6004aae7ec6b6b51decc6bd20b5c399c3226dc3c /gdb/tui | |
parent | c7be5fa993b26d7d398755cac4fad6f05dc19910 (diff) | |
download | gdb-85a427b26c5cae6af6ed0b4358d44a77b5a3b2c0.zip gdb-85a427b26c5cae6af6ed0b4358d44a77b5a3b2c0.tar.gz gdb-85a427b26c5cae6af6ed0b4358d44a77b5a3b2c0.tar.bz2 |
[gdb/tui] Factor out tui_noscroll_window et al
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.
Approved-By: Tom Tromey <tom@tromey.com>
Diffstat (limited to 'gdb/tui')
-rw-r--r-- | gdb/tui/tui-command.h | 33 | ||||
-rw-r--r-- | gdb/tui/tui-data.h | 92 | ||||
-rw-r--r-- | gdb/tui/tui-stack.h | 34 |
3 files changed, 93 insertions, 66 deletions
diff --git a/gdb/tui/tui-command.h b/gdb/tui/tui-command.h index f684288..d743dd8 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 5bb5ef9..82340e5 100644 --- a/gdb/tui/tui-data.h +++ b/gdb/tui/tui-data.h @@ -25,6 +25,7 @@ #include "tui/tui.h" #include "gdb_curses.h" #include "observable.h" +#include "gdbsupport/gdb-checked-static-cast.h" /* A deleter that calls delwin. */ struct curses_deleter @@ -194,6 +195,82 @@ private: 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" @@ -204,11 +281,16 @@ private: /* 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 \ + (gdb::checked_static_cast<tui_source_window *> (tui_win_list[SRC_WIN])) +#define TUI_DISASM_WIN \ + (gdb::checked_static_cast<tui_disasm_window *> (tui_win_list[DISASSEM_WIN])) +#define TUI_DATA_WIN \ + (gdb::checked_static_cast<tui_data_window *> (tui_win_list[DATA_WIN])) +#define TUI_CMD_WIN \ + (gdb::checked_static_cast<tui_cmd_window *> (tui_win_list[CMD_WIN])) +#define TUI_STATUS_WIN \ + (gdb::checked_static_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 d542f21..ca95b2b 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 |