static int term_height, term_width;
static struct tui_gen_win_info _locator;
static struct tui_gen_win_info exec_info[2];
-static std::vector<tui_win_info *> source_windows;
+static std::vector<tui_source_window_base *> source_windows;
static struct tui_win_info *win_with_focus = NULL;
static struct tui_layout_def layout_def = {
SRC_WIN, /* DISPLAY_MODE */
** PUBLIC FUNCTIONS
**********************************/
-int
-tui_win_is_source_type (enum tui_win_type win_type)
-{
- return (win_type == SRC_WIN || win_type == DISASSEM_WIN);
-}
-
int
tui_win_is_auxillary (enum tui_win_type win_type)
{
return (win_type > MAX_MAJOR_WINDOWS);
}
-int
-tui_win_has_locator (struct tui_win_info *win_info)
-{
- return (win_info != NULL
- && win_info->detail.source_info.has_locator);
-}
-
void
tui_set_win_highlight (struct tui_win_info *win_info,
int highlight)
/* Accessor for the current source window. Usually there is only one
source window (either source or disassembly), but both can be
displayed at the same time. */
-std::vector<tui_win_info *> &
+std::vector<tui_source_window_base *> &
tui_source_windows ()
{
return source_windows;
void
tui_clear_source_windows_detail ()
{
- for (tui_win_info *win : tui_source_windows ())
- tui_clear_win_detail (win);
+ for (tui_source_window_base *win : tui_source_windows ())
+ win->clear_detail ();
}
one source window (either source or disassembly), but both can be
displayed at the same time. */
void
-tui_add_to_source_windows (struct tui_win_info *win_info)
+tui_add_to_source_windows (struct tui_source_window_base *win_info)
{
if (source_windows.size () < 2)
source_windows.push_back (win_info);
/* See tui-data.h. */
void
-tui_source_window::clear_detail ()
+tui_source_window_base::clear_detail ()
{
- detail.source_info.gdbarch = NULL;
- detail.source_info.start_line_or_addr.loa = LOA_ADDRESS;
- detail.source_info.start_line_or_addr.u.addr = 0;
- detail.source_info.horizontal_offset = 0;
+ gdbarch = NULL;
+ start_line_or_addr.loa = LOA_ADDRESS;
+ start_line_or_addr.u.addr = 0;
+ horizontal_offset = 0;
}
/* See tui-data.h. */
void
tui_data_window::clear_detail ()
{
- detail.data_display_info.data_content = NULL;
- detail.data_display_info.data_content_count = 0;
- detail.data_display_info.regs_content = NULL;
- detail.data_display_info.regs_content_count = 0;
- detail.data_display_info.regs_column_count = 1;
- detail.data_display_info.display_regs = FALSE;
-}
-
-/* Clear the pertinant detail in the windows. */
-void
-tui_clear_win_detail (struct tui_win_info *win_info)
-{
- if (win_info != NULL)
- win_info->clear_detail ();
+ data_content = NULL;
+ data_content_count = 0;
+ regs_content = NULL;
+ regs_content_count = 0;
+ regs_column_count = 1;
+ display_regs = false;
}
-
/* Accessor for the source execution info ptr. */
struct tui_gen_win_info *
tui_source_exec_info_win_ptr (void)
win->last_visible_line = 0;
win->handle = NULL;
win->content = NULL;
- win->content_in_use =
- win->is_visible = FALSE;
+ win->content_in_use = FALSE;
+ win->is_visible = false;
win->title = 0;
}
tui_init_generic_part (&generic);
}
-tui_source_window::tui_source_window (enum tui_win_type type)
+tui_source_window_base::tui_source_window_base (enum tui_win_type type)
: tui_win_info (type)
{
gdb_assert (type == SRC_WIN || type == DISASSEM_WIN);
- detail.source_info.execution_info = NULL;
- detail.source_info.has_locator = FALSE;
- detail.source_info.horizontal_offset = 0;
- detail.source_info.gdbarch = NULL;
- detail.source_info.start_line_or_addr.loa = LOA_ADDRESS;
- detail.source_info.start_line_or_addr.u.addr = 0;
- detail.source_info.fullname = NULL;
-}
-
-tui_data_window::tui_data_window ()
- : tui_win_info (DATA_WIN)
-{
- detail.data_display_info.data_content = (tui_win_content) NULL;
- detail.data_display_info.data_content_count = 0;
- detail.data_display_info.regs_content = (tui_win_content) NULL;
- detail.data_display_info.regs_content_count = 0;
- detail.data_display_info.regs_column_count = 1;
- detail.data_display_info.display_regs = FALSE;
- detail.data_display_info.current_group = 0;
-}
-
-tui_cmd_window::tui_cmd_window ()
- : tui_win_info (CMD_WIN)
-{
+ start_line_or_addr.loa = LOA_ADDRESS;
+ start_line_or_addr.u.addr = 0;
}
struct tui_win_info *
switch (type)
{
case SRC_WIN:
+ return new tui_source_window ();
+
case DISASSEM_WIN:
- return new tui_source_window (type);
+ return new tui_disasm_window ();
case DATA_WIN:
return new tui_data_window ();
return index_start;
}
-tui_win_info::~tui_win_info ()
+tui_source_window_base::~tui_source_window_base ()
{
- struct tui_gen_win_info *generic_win;
+ xfree (fullname);
+ struct tui_gen_win_info *generic_win = execution_info;
+ if (generic_win != NULL)
+ {
+ tui_delete_win (generic_win->handle);
+ generic_win->handle = NULL;
+ tui_free_win_content (generic_win);
+ }
+}
- switch (generic.type)
+tui_data_window::~tui_data_window ()
+{
+ if (generic.content != NULL)
{
- case SRC_WIN:
- case DISASSEM_WIN:
- if (detail.source_info.fullname)
- {
- xfree (detail.source_info.fullname);
- detail.source_info.fullname = NULL;
- }
- generic_win = detail.source_info.execution_info;
- if (generic_win != NULL)
- {
- tui_delete_win (generic_win->handle);
- generic_win->handle = NULL;
- tui_free_win_content (generic_win);
- }
- break;
- case DATA_WIN:
- if (generic.content != NULL)
- {
- tui_free_data_content (detail.data_display_info.regs_content,
- detail.data_display_info.regs_content_count);
- detail.data_display_info.regs_content = NULL;
- detail.data_display_info.regs_content_count = 0;
- tui_free_data_content (detail.data_display_info.data_content,
- detail.data_display_info.data_content_count);
- detail.data_display_info.data_content = NULL;
- detail.data_display_info.data_content_count = 0;
- detail.data_display_info.regs_column_count = 1;
- detail.data_display_info.display_regs = FALSE;
- generic.content = NULL;
- generic.content_size = 0;
- }
- break;
- default:
- break;
+ tui_free_data_content (regs_content, regs_content_count);
+ regs_content = NULL;
+ regs_content_count = 0;
+ tui_free_data_content (data_content, data_content_count);
+ data_content = NULL;
+ data_content_count = 0;
+ regs_column_count = 1;
+ display_regs = false;
+ generic.content = NULL;
+ generic.content_size = 0;
}
+}
+
+tui_win_info::~tui_win_info ()
+{
if (generic.handle != NULL)
{
tui_delete_win (generic.handle);
void
tui_free_all_source_wins_content ()
{
- for (tui_win_info *win_info : tui_source_windows ())
+ for (tui_source_window_base *win_info : tui_source_windows ())
{
tui_free_win_content (&(win_info->generic));
- tui_free_win_content (win_info->detail.source_info.execution_info);
+ tui_free_win_content (win_info->execution_info);
}
}