[10/11] Remove tui_gen_win_info

Message ID 20200618021523.10681-11-tom@tromey.com
State New
Headers show
Series
  • TUI cleanups
Related show

Commit Message

Tom Tromey June 18, 2020, 2:15 a.m.
This merges the tui_gen_win_info base class with tui_win_info;
renaming the resulting class to tui_win_info.

gdb/ChangeLog
2020-06-17  Tom Tromey  <tom@tromey.com>

	* 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) <m_window>: Change
	type.
	<window_factory>: 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(-)

-- 
2.17.2

Patch

diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h
index 10dd0aedcff..3c14b2654ee 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 @@  struct tui_gen_win_info
   }
 
   /* 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 @@  struct tui_gen_win_info
   /* 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 @@  struct tui_gen_win_info
       wnoutrefresh (handle.get ());
   }
 
-  /* Window handle.  */
-  std::unique_ptr<WINDOW, curses_deleter> 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 @@  struct tui_win_info : public tui_gen_win_info
     return true;
   }
 
-  bool can_box () const override
-  {
-    return true;
-  }
-
   void check_and_display_highlight_if_needed ();
 
+  /* Window handle.  */
+  std::unique_ptr<WINDOW, curses_deleter> 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 8164b346370..a568fa6c116 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<enum tui_win_type V, class T>
-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<std::string, window_factory> *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<tui_win_info *> (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 90618377e17..ee4caf89cb4 100644
--- a/gdb/tui/tui-layout.h
+++ b/gdb/tui/tui-layout.h
@@ -152,7 +152,7 @@  class tui_layout_window : public tui_layout_base
 
   /* 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<tui_gen_win_info * (const char *name)> window_factory;
+typedef std::function<tui_win_info * (const char *name)> 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 5f56eca3b2f..336571f158e 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 35468d43abc..504f9159abb 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;