From 32c1e2100975c073b3c1d9e2041de9f74b6e2049 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 1 Jul 2020 21:21:12 -0600 Subject: [PATCH] Remove tui_gen_win_info This merges the tui_gen_win_info base class with tui_win_info; renaming the resulting class to tui_win_info. gdb/ChangeLog 2020-07-01 Tom Tromey * tui/tui-wingeneral.c (tui_win_info::refresh_window): Move from tui_gen_win_info. (tui_win_info::make_window): Merge with tui_gen_win_info::make_window. (tui_win_info::make_visible): Move from tui_gen_win_info. * tui/tui-win.c (tui_win_info::max_width): Move from tui_gen_win_info. * tui/tui-layout.h (class tui_layout_window) : Change type. : Likewise. * tui/tui-layout.c (tui_win_info::resize): Move from tui_gen_win_info. (make_standard_window): Change return type. (get_locator_window, tui_get_window_by_name): Likewise. (tui_layout_window::apply): Remove a cast. * tui/tui-data.h (MIN_WIN_HEIGHT): Move earlier. (struct tui_win_info): Merge with tui_gen_win_info. (struct tui_gen_win_info): Remove. --- gdb/ChangeLog | 21 ++++++++ gdb/tui/tui-data.h | 110 ++++++++++++++------------------------- gdb/tui/tui-layout.c | 15 +++--- gdb/tui/tui-layout.h | 4 +- gdb/tui/tui-win.c | 2 +- gdb/tui/tui-wingeneral.c | 17 ++---- 6 files changed, 76 insertions(+), 93 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 52eae109ee..ec87edf13f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,24 @@ +2020-07-01 Tom Tromey + + * tui/tui-wingeneral.c (tui_win_info::refresh_window): Move from + tui_gen_win_info. + (tui_win_info::make_window): Merge with + tui_gen_win_info::make_window. + (tui_win_info::make_visible): Move from tui_gen_win_info. + * tui/tui-win.c (tui_win_info::max_width): Move from + tui_gen_win_info. + * tui/tui-layout.h (class tui_layout_window) : Change + type. + : Likewise. + * tui/tui-layout.c (tui_win_info::resize): Move from + tui_gen_win_info. + (make_standard_window): Change return type. + (get_locator_window, tui_get_window_by_name): Likewise. + (tui_layout_window::apply): Remove a cast. + * tui/tui-data.h (MIN_WIN_HEIGHT): Move earlier. + (struct tui_win_info): Merge with tui_gen_win_info. + (struct tui_gen_win_info): Remove. + 2020-07-01 Tom Tromey * tui/tui-stack.h (struct tui_locator_window): Derive from diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h index 10dd0aedcf..3c14b2654e 100644 --- a/gdb/tui/tui-data.h +++ b/gdb/tui/tui-data.h @@ -35,27 +35,25 @@ struct curses_deleter } }; +#define MIN_WIN_HEIGHT 3 + /* Generic window information. */ -struct tui_gen_win_info +struct tui_win_info { protected: - tui_gen_win_info () = default; + tui_win_info () = default; + DISABLE_COPY_AND_ASSIGN (tui_win_info); /* This is called after the window is resized, and should update the window's contents. */ - virtual void rerender () - { - } + virtual void rerender (); virtual void make_window (); public: - tui_gen_win_info (tui_gen_win_info &&) = default; - - virtual ~tui_gen_win_info () - { - } + tui_win_info (tui_win_info &&) = default; + virtual ~tui_win_info () = default; /* Call to refresh this window. */ virtual void refresh_window (); @@ -70,10 +68,13 @@ public: } /* Compute the maximum height of this window. */ - virtual int max_height () const = 0; + virtual int max_height () const; /* Compute the minimum height of this window. */ - virtual int min_height () const = 0; + virtual int min_height () const + { + return MIN_WIN_HEIGHT; + } /* Compute the maximum width of this window. */ int max_width () const; @@ -87,7 +88,7 @@ public: /* Return true if this window can be boxed. */ virtual bool can_box () const { - return false; + return true; } /* Resize this window. The parameters are used to set the window's @@ -108,58 +109,6 @@ public: wnoutrefresh (handle.get ()); } - /* Window handle. */ - std::unique_ptr handle; - /* Window width. */ - int width = 0; - /* Window height. */ - int height = 0; - /* Origin of window. */ - int x = 0; - int y = 0; -}; - -/* Constant definitions. */ -#define SRC_NAME "src" -#define CMD_NAME "cmd" -#define DATA_NAME "regs" -#define DISASSEM_NAME "asm" -#define STATUS_NAME "status" -#define MIN_WIN_HEIGHT 3 - -/* This defines information about each logical window. */ -struct tui_win_info : public tui_gen_win_info -{ -protected: - - tui_win_info () = default; - DISABLE_COPY_AND_ASSIGN (tui_win_info); - - /* Scroll the contents vertically. This is only called via - forward_scroll and backward_scroll. */ - virtual void do_scroll_vertical (int num_to_scroll) = 0; - - /* Scroll the contents horizontally. This is only called via - left_scroll and right_scroll. */ - virtual void do_scroll_horizontal (int num_to_scroll) = 0; - - void rerender () override; - - void make_window () override; - -public: - - ~tui_win_info () override - { - } - - int max_height () const override; - - int min_height () const override - { - return MIN_WIN_HEIGHT; - } - /* Called after the tab width has been changed. */ virtual void update_tab_width () { @@ -185,20 +134,41 @@ public: return true; } - bool can_box () const override - { - return true; - } - void check_and_display_highlight_if_needed (); + /* Window handle. */ + std::unique_ptr handle; + /* Window width. */ + int width = 0; + /* Window height. */ + int height = 0; + /* Origin of window. */ + int x = 0; + int y = 0; + /* Window title to display. */ std::string title; /* Is this window highlighted? */ bool is_highlighted = false; + +protected: + + /* Scroll the contents vertically. This is only called via + forward_scroll and backward_scroll. */ + virtual void do_scroll_vertical (int num_to_scroll) = 0; + + /* Scroll the contents horizontally. This is only called via + left_scroll and right_scroll. */ + virtual void do_scroll_horizontal (int num_to_scroll) = 0; }; +/* Constant definitions. */ +#define SRC_NAME "src" +#define CMD_NAME "cmd" +#define DATA_NAME "regs" +#define DISASSEM_NAME "asm" +#define STATUS_NAME "status" /* Global Data. */ extern struct tui_win_info *tui_win_list[MAX_MAJOR_WINDOWS]; diff --git a/gdb/tui/tui-layout.c b/gdb/tui/tui-layout.c index 8164b34637..a568fa6c11 100644 --- a/gdb/tui/tui-layout.c +++ b/gdb/tui/tui-layout.c @@ -285,8 +285,8 @@ extract_display_start_addr (struct gdbarch **gdbarch_p, CORE_ADDR *addr_p) } void -tui_gen_win_info::resize (int height_, int width_, - int origin_x_, int origin_y_) +tui_win_info::resize (int height_, int width_, + int origin_x_, int origin_y_) { if (width == width_ && height == height_ && x == origin_x_ && y == origin_y_ @@ -321,7 +321,7 @@ tui_gen_win_info::resize (int height_, int width_, windows. */ template -static tui_gen_win_info * +static tui_win_info * make_standard_window (const char *) { if (tui_win_list[V] == nullptr) @@ -332,7 +332,7 @@ make_standard_window (const char *) /* Helper function to wrap tui_locator_win_info_ptr for tui_get_window_by_name. */ -static tui_gen_win_info * +static tui_win_info * get_locator_window (const char *) { return tui_locator_win_info_ptr (); @@ -349,7 +349,7 @@ static std::unordered_map *known_window_types; /* Helper function that returns a TUI window, given its name. */ -static tui_gen_win_info * +static tui_win_info * tui_get_window_by_name (const std::string &name) { for (tui_win_info *window : saved_tui_windows) @@ -360,7 +360,7 @@ tui_get_window_by_name (const std::string &name) if (iter == known_window_types->end ()) error (_("Unknown window type \"%s\""), name.c_str ()); - tui_gen_win_info *result = iter->second (name.c_str ()); + tui_win_info *result = iter->second (name.c_str ()); if (result == nullptr) error (_("Could not create window \"%s\""), name.c_str ()); return result; @@ -422,8 +422,7 @@ tui_layout_window::apply (int x_, int y_, int width_, int height_) height = height_; gdb_assert (m_window != nullptr); m_window->resize (height, width, x, y); - if (dynamic_cast (m_window) != nullptr) - tui_windows.push_back ((tui_win_info *) m_window); + tui_windows.push_back (m_window); } /* See tui-layout.h. */ diff --git a/gdb/tui/tui-layout.h b/gdb/tui/tui-layout.h index 90618377e1..ee4caf89cb 100644 --- a/gdb/tui/tui-layout.h +++ b/gdb/tui/tui-layout.h @@ -152,7 +152,7 @@ private: /* When a layout is applied, this is updated to point to the window object. */ - tui_gen_win_info *m_window = nullptr; + tui_win_info *m_window = nullptr; }; /* A TUI layout that holds other layouts. */ @@ -251,7 +251,7 @@ extern void tui_adjust_window_height (struct tui_win_info *win, /* The type of a function that is used to create a TUI window. */ -typedef std::function window_factory; +typedef std::function window_factory; /* Register a new TUI window type. NAME is the name of the window type. FACTORY is a function that can be called to instantiate the diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c index 5f56eca3b2..336571f158 100644 --- a/gdb/tui/tui-win.c +++ b/gdb/tui/tui-win.c @@ -921,7 +921,7 @@ tui_win_info::max_height () const /* See tui-data.h. */ int -tui_gen_win_info::max_width () const +tui_win_info::max_width () const { return tui_term_width () - 2; } diff --git a/gdb/tui/tui-wingeneral.c b/gdb/tui/tui-wingeneral.c index 35468d43ab..504f9159ab 100644 --- a/gdb/tui/tui-wingeneral.c +++ b/gdb/tui/tui-wingeneral.c @@ -71,7 +71,7 @@ tui_wrefresh (WINDOW *win) /* See tui-data.h. */ void -tui_gen_win_info::refresh_window () +tui_win_info::refresh_window () { if (handle != NULL) tui_wrefresh (handle.get ()); @@ -166,9 +166,8 @@ tui_win_info::check_and_display_highlight_if_needed () } } - void -tui_gen_win_info::make_window () +tui_win_info::make_window () { handle.reset (newwin (height, width, y, x)); if (handle != NULL) @@ -176,22 +175,16 @@ tui_gen_win_info::make_window () if (suppress_output) wnoutrefresh (handle.get ()); scrollok (handle.get (), TRUE); + if (can_box ()) + box_win (this, false); } } -void -tui_win_info::make_window () -{ - tui_gen_win_info::make_window (); - if (handle != NULL && can_box ()) - box_win (this, false); -} - /* We can't really make windows visible, or invisible. So we have to delete the entire window when making it visible, and create it again when making it visible. */ void -tui_gen_win_info::make_visible (bool visible) +tui_win_info::make_visible (bool visible) { if (is_visible () == visible) return; -- 2.34.1