Change tui_make_window to be a method

I combined several small changes into one patch here.  I believe I
started by noticing that the "title" is not needed by tui_gen_win_info
and could be self-managing (i.e. std::string).  Moving this revealed
that "can_box" is also a property of tui_win_info and not
tui_gen_win_info; and this in turn caused the changes to
tui_make_window and box_win.

2019-08-20  Tom Tromey  <tom@tromey.com>

	* tui/tui-wingeneral.h (tui_make_window): Don't declare.
	* tui/tui-wingeneral.c (box_win): Change type of win_info.
	(box_win): Update.
	(tui_gen_win_info::make_window): Rename from tui_make_window.
	(tui_win_info::make_window): New method.
	(tui_gen_win_info::make_visible): Update.
	* tui/tui-source.c (tui_source_window::set_contents): Update.
	* tui/tui-regs.c (tui_data_window::show_register_group): Update.
	(tui_data_window::display_registers_from): Update.
	* tui/tui-layout.c (tui_gen_win_info::resize): Update.
	* tui/tui-data.h (struct tui_gen_win_info) <make_window>:
	Declare.
	<can_box>: Remove.
	<title>: Remove.
	(struct tui_win_info) <make_window>: Declare.
	<can_box>: Now virtual.
	<title>: New member.
	* tui/tui-data.c (~tui_gen_win_info): Don't free title.
	* tui/tui-command.c (tui_cmd_window::resize): Update.
This commit is contained in:
Tom Tromey 2019-07-13 16:47:31 -06:00
parent 100c2bf31f
commit ab0e1f1a45
9 changed files with 49 additions and 35 deletions

View File

@ -1,3 +1,25 @@
2019-08-20 Tom Tromey <tom@tromey.com>
* tui/tui-wingeneral.h (tui_make_window): Don't declare.
* tui/tui-wingeneral.c (box_win): Change type of win_info.
(box_win): Update.
(tui_gen_win_info::make_window): Rename from tui_make_window.
(tui_win_info::make_window): New method.
(tui_gen_win_info::make_visible): Update.
* tui/tui-source.c (tui_source_window::set_contents): Update.
* tui/tui-regs.c (tui_data_window::show_register_group): Update.
(tui_data_window::display_registers_from): Update.
* tui/tui-layout.c (tui_gen_win_info::resize): Update.
* tui/tui-data.h (struct tui_gen_win_info) <make_window>:
Declare.
<can_box>: Remove.
<title>: Remove.
(struct tui_win_info) <make_window>: Declare.
<can_box>: Now virtual.
<title>: New member.
* tui/tui-data.c (~tui_gen_win_info): Don't free title.
* tui/tui-command.c (tui_cmd_window::resize): Update.
2019-08-20 Tom Tromey <tom@tromey.com>
* tui/tui-regs.h (struct tui_data_window) <display_regs>: Remove.

View File

@ -54,7 +54,7 @@ tui_cmd_window::resize (int height_, int width_, int origin_x, int origin_y)
origin.y = origin_y;
if (handle == nullptr)
tui_make_window (this);
make_window ();
else
{
/* Another reason we don't call the base class method here is

View File

@ -243,7 +243,6 @@ tui_win_info::tui_win_info (enum tui_win_type type)
tui_gen_win_info::~tui_gen_win_info ()
{
tui_delete_win (handle);
xfree (title);
}
void

View File

@ -52,6 +52,8 @@ protected:
{
}
virtual void make_window ();
public:
virtual ~tui_gen_win_info ();
@ -73,12 +75,6 @@ public:
virtual void resize (int height, int width,
int origin_x, int origin_y);
/* Return true if this can be boxed. */
virtual bool can_box () const
{
return false;
}
/* Return true if this window is visible. */
bool is_visible () const
{
@ -97,8 +93,6 @@ public:
struct tui_point origin = {0, 0};
/* Viewport height. */
int viewport_height = 0;
/* Window title to display. */
char *title = nullptr;
};
/* Constant definitions. */
@ -173,6 +167,8 @@ protected:
void rerender () override;
void make_window () override;
public:
~tui_win_info () override
@ -213,13 +209,16 @@ public:
return true;
}
bool can_box () const override
virtual bool can_box () const
{
return true;
}
void check_and_display_highlight_if_needed ();
/* Window title to display. */
std::string title;
/* Can this window ever be highlighted? */
bool can_highlight = true;

View File

@ -602,7 +602,7 @@ tui_gen_win_info::resize (int height_, int width_,
}
if (handle == nullptr)
tui_make_window (this);
make_window ();
rerender ();
}

View File

@ -185,8 +185,7 @@ tui_data_window::show_register_group (struct reggroup *group,
int regnum, pos;
/* Make a new title showing which group we display. */
xfree (title);
title = xstrprintf ("Register group: %s", reggroup_name (group));
title = string_printf ("Register group: %s", reggroup_name (group));
/* See how many registers must be displayed. */
nr_regs = 0;
@ -302,7 +301,7 @@ tui_data_window::display_registers_from (int start_element_no)
data_item_win->width = item_win_width;
data_item_win->origin.x = (item_win_width * j) + 1;
data_item_win->origin.y = cur_y;
tui_make_window (data_item_win);
data_item_win->make_visible (true);
scrollok (data_item_win->handle, FALSE);
}
touchwin (data_item_win->handle);

View File

@ -153,8 +153,7 @@ tui_source_window::set_contents (struct gdbarch *arch,
= tui_locator_win_info_ptr ();
const char *s_filename = symtab_to_filename_for_display (s);
xfree (title);
title = xstrdup (s_filename);
title = s_filename;
xfree (fullname);
fullname = xstrdup (symtab_to_fullname (s));

View File

@ -55,7 +55,7 @@ tui_delete_win (WINDOW *window)
/* Draw a border arround the window. */
static void
box_win (struct tui_gen_win_info *win_info,
box_win (struct tui_win_info *win_info,
int highlight_flag)
{
if (win_info && win_info->handle)
@ -78,8 +78,8 @@ box_win (struct tui_gen_win_info *win_info,
#else
box (win, tui_border_vline, tui_border_hline);
#endif
if (win_info->title)
mvwaddstr (win, 0, 3, win_info->title);
if (!win_info->title.empty ())
mvwaddstr (win, 0, 3, win_info->title.c_str ());
wattroff (win, attrs);
}
}
@ -126,23 +126,20 @@ tui_win_info::check_and_display_highlight_if_needed ()
void
tui_make_window (struct tui_gen_win_info *win_info)
tui_gen_win_info::make_window ()
{
WINDOW *handle;
handle = newwin (win_info->height,
win_info->width,
win_info->origin.y,
win_info->origin.x);
win_info->handle = handle;
handle = newwin (height, width, origin.y, origin.x);
if (handle != NULL)
{
if (win_info->can_box ())
box_win (win_info, NO_HILITE);
scrollok (handle, TRUE);
}
scrollok (handle, TRUE);
}
void
tui_win_info::make_window ()
{
tui_gen_win_info::make_window ();
if (handle != NULL && can_box ())
box_win (this, NO_HILITE);
}
/* We can't really make windows visible, or invisible. So we have to
delete the entire window when making it visible, and create it
@ -154,7 +151,7 @@ tui_gen_win_info::make_visible (bool visible)
return;
if (visible)
tui_make_window (this);
make_window ();
else
{
tui_delete_win (handle);

View File

@ -31,7 +31,6 @@ struct tui_gen_win_info;
extern void tui_make_all_invisible (void);
extern void tui_unhighlight_win (struct tui_win_info *);
extern void tui_make_window (struct tui_gen_win_info *);
extern void tui_highlight_win (struct tui_win_info *);
extern void tui_refresh_all ();
extern void tui_delete_win (WINDOW *window);