/* TUI data manipulation routines.
- Copyright (C) 1998-2019 Free Software Foundation, Inc.
+ Copyright (C) 1998-2020 Free Software Foundation, Inc.
Contributed by Hewlett-Packard Company.
#include "tui/tui.h"
#include "tui/tui-data.h"
#include "tui/tui-wingeneral.h"
+#include "tui/tui-winsource.h"
#include "gdb_curses.h"
-/****************************
-** GLOBAL DECLARATIONS
-****************************/
struct tui_win_info *tui_win_list[MAX_MAJOR_WINDOWS];
-/***************************
-** Private data
-****************************/
-static enum tui_layout_type current_layout = UNDEFINED_LAYOUT;
static int term_height, term_width;
-static struct tui_locator_window _locator;
-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 */
-};
-static int win_resized = FALSE;
-
-
-/*********************************
-** PUBLIC FUNCTIONS
-**********************************/
-
-int
-tui_win_is_auxiliary (enum tui_win_type win_type)
-{
- return (win_type > MAX_MAJOR_WINDOWS);
-}
-
-/******************************************
-** ACCESSORS & MUTATORS FOR PRIVATE DATA
-******************************************/
+static bool win_resized = false;
/* Answer a whether the terminal window has been resized or not. */
-int
-tui_win_resized (void)
+bool
+tui_win_resized ()
{
return win_resized;
}
/* Set a whether the terminal window has been resized or not. */
void
-tui_set_win_resized_to (int resized)
+tui_set_win_resized_to (bool resized)
{
win_resized = resized;
}
-/* Answer a pointer to the current layout definition. */
-struct tui_layout_def *
-tui_layout_def (void)
-{
- return &layout_def;
-}
-
-
/* Answer the window with the logical focus. */
struct tui_win_info *
tui_win_with_focus (void)
}
-/* 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_source_window_base *> &
-tui_source_windows ()
-{
- return source_windows;
-}
-
-
-/* Clear the list of source windows. Usually there is only one source
- window (either source or disassembly), but both can be displayed at
- the same time. */
-void
-tui_clear_source_windows ()
-{
- source_windows.clear ();
-}
-
-
-/* Clear the pertinent detail in the source windows. */
-void
-tui_clear_source_windows_detail ()
-{
- for (tui_source_window_base *win : tui_source_windows ())
- win->clear_detail ();
-}
-
-
-/* Add a window to the list of source windows. Usually there is only
- one source window (either source or disassembly), but both can be
- displayed at the same time. */
-void
-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_base::clear_detail ()
-{
- gdbarch = NULL;
- start_line_or_addr.loa = LOA_ADDRESS;
- start_line_or_addr.u.addr = 0;
- horizontal_offset = 0;
-}
-
-/* Accessor for the locator win info. Answers a pointer to the static
- locator win info struct. */
-struct tui_locator_window *
-tui_locator_win_info_ptr (void)
-{
- return &_locator;
-}
-
-
/* Accessor for the term_height. */
int
tui_term_height (void)
}
-/* Accessor for the current layout. */
-enum tui_layout_type
-tui_current_layout (void)
-{
- return current_layout;
-}
-
-
-/* Mutator for the current layout. */
-void
-tui_set_current_layout_to (enum tui_layout_type new_layout)
-{
- current_layout = new_layout;
-}
-
-
-/*****************************
-** OTHER PUBLIC FUNCTIONS
-*****************************/
-
-
/* Answer the next window in the list, cycling back to the top if
necessary. */
struct tui_win_info *
while (type != cur_win->type && (next_win == NULL))
{
if (tui_win_list[type]
- && tui_win_list[type]->is_visible)
+ && tui_win_list[type]->is_visible ())
next_win = tui_win_list[type];
else
{
while (type != cur_win->type && (prev == NULL))
{
if (tui_win_list[type]
- && tui_win_list[type]->is_visible)
+ && tui_win_list[type]->is_visible ())
prev = tui_win_list[type];
else
{
}
-/* Answer the window represented by name. */
-struct tui_win_info *
-tui_partial_win_by_name (const char *name)
+/* See tui-data.h. */
+
+void
+tui_delete_invisible_windows ()
{
- if (name != NULL)
+ for (int win_type = SRC_WIN; (win_type < MAX_MAJOR_WINDOWS); win_type++)
{
- for (tui_win_info *item : all_tui_windows ())
+ if (tui_win_list[win_type] != NULL
+ && !tui_win_list[win_type]->is_visible ())
{
- const char *cur_name = item->name ();
+ /* This should always be made visible before a call to this
+ function. */
+ gdb_assert (win_type != CMD_WIN);
+
+ if (win_with_focus == tui_win_list[win_type])
+ win_with_focus = nullptr;
- if (strlen (name) <= strlen (cur_name)
- && startswith (cur_name, name))
- return item;
+ delete tui_win_list[win_type];
+ tui_win_list[win_type] = NULL;
}
}
-
- return NULL;
}
-
-void
-tui_initialize_static_data ()
-{
- tui_gen_win_info *win = tui_locator_win_info_ptr ();
- win->width =
- win->height =
- win->origin.x =
- win->origin.y =
- win->viewport_height =
- win->last_visible_line = 0;
- win->handle = NULL;
- win->is_visible = false;
- win->title = 0;
-}
-
-
tui_win_info::tui_win_info (enum tui_win_type type)
: tui_gen_win_info (type)
{
}
-tui_source_window_base::tui_source_window_base (enum tui_win_type type)
- : tui_win_info (type),
- execution_info (new tui_exec_info_window ())
-{
- gdb_assert (type == SRC_WIN || type == DISASSEM_WIN);
- start_line_or_addr.loa = LOA_ADDRESS;
- start_line_or_addr.u.addr = 0;
-}
-
-tui_gen_win_info::~tui_gen_win_info ()
-{
- tui_delete_win (handle);
- xfree (title);
-}
-
-tui_source_window_base::~tui_source_window_base ()
-{
- xfree (fullname);
- delete execution_info;
-}
-
-/**********************************
-** LOCAL STATIC FUNCTIONS **
-**********************************/
-
-
-tui_data_item_window::~tui_data_item_window ()
+void
+tui_win_info::rerender ()
{
- xfree (value);
- xfree (content);
+ check_and_display_highlight_if_needed ();
}