void
tui_display_main ()
{
- if (!tui_source_windows ().empty ())
+ auto adapter = tui_source_windows ();
+ if (adapter.begin () != adapter.end ())
{
struct gdbarch *gdbarch;
CORE_ADDR addr;
tui_update_source_window (struct tui_source_window_base *win_info,
struct gdbarch *gdbarch,
struct symtab *s,
- struct tui_line_or_address line_or_addr,
- int noerror)
+ struct tui_line_or_address line_or_addr)
{
win_info->horizontal_offset = 0;
- tui_update_source_window_as_is (win_info, gdbarch, s, line_or_addr, noerror);
+ tui_update_source_window_as_is (win_info, gdbarch, s, line_or_addr);
}
tui_update_source_window_as_is (struct tui_source_window_base *win_info,
struct gdbarch *gdbarch,
struct symtab *s,
- struct tui_line_or_address line_or_addr,
- int noerror)
+ struct tui_line_or_address line_or_addr)
{
enum tui_status ret;
if (win_info->type == SRC_WIN)
- ret = tui_set_source_content (win_info, s, line_or_addr.u.line_no,
- noerror);
+ ret = tui_set_source_content (win_info, s, line_or_addr.u.line_no);
else
ret = tui_set_disassem_content (win_info, gdbarch, line_or_addr.u.addr);
if (ret == TUI_FAILURE)
- tui_clear_source_content (win_info);
+ win_info->erase_source_content ();
else
{
tui_update_breakpoint_info (win_info, nullptr, false);
sal = find_pc_line (addr, 0);
l.loa = LOA_LINE;
l.u.line_no = sal.line;
- tui_show_symtab_source (TUI_SRC_WIN, gdbarch, sal.symtab, l, FALSE);
+ tui_show_symtab_source (TUI_SRC_WIN, gdbarch, sal.symtab, l);
break;
}
}
else
{
for (struct tui_source_window_base *win_info : tui_source_windows ())
- tui_clear_source_content (win_info);
+ win_info->erase_source_content ();
}
}
default:
l.loa = LOA_LINE;
l.u.line_no = line;
- tui_show_symtab_source (TUI_SRC_WIN, gdbarch, s, l, FALSE);
+ tui_show_symtab_source (TUI_SRC_WIN, gdbarch, s, l);
if (tui_current_layout () == SRC_DISASSEM_COMMAND)
{
find_line_pc (s, line, &pc);
}
void
-tui_clear_source_content (struct tui_source_window_base *win_info)
-{
- if (win_info != NULL)
- {
- int i;
-
- tui_erase_source_content (win_info);
- for (i = 0; i < win_info->content.size (); i++)
- {
- struct tui_source_element *element = &win_info->content[i];
-
- element->break_mode = 0;
- element->is_exec_point = false;
- }
- }
-}
-
-
-void
-tui_erase_source_content (struct tui_source_window_base *win_info)
+tui_source_window_base::do_erase_source_content (const char *str)
{
int x_pos;
- int half_width = (win_info->width - 2) / 2;
+ int half_width = (width - 2) / 2;
- if (win_info->handle != NULL)
+ content.clear ();
+ if (handle != NULL)
{
- werase (win_info->handle);
- win_info->check_and_display_highlight_if_needed ();
-
- const char *no_src_str;
+ werase (handle);
+ check_and_display_highlight_if_needed ();
- if (win_info->type == SRC_WIN)
- no_src_str = NO_SRC_STRING;
- else
- no_src_str = NO_DISASSEM_STRING;
- if (strlen (no_src_str) >= half_width)
+ if (strlen (str) >= half_width)
x_pos = 1;
else
- x_pos = half_width - strlen (no_src_str);
- mvwaddstr (win_info->handle,
- (win_info->height / 2),
+ x_pos = half_width - strlen (str);
+ mvwaddstr (handle,
+ (height / 2),
x_pos,
- (char *) no_src_str);
-
- win_info->content.clear ();
- win_info->refresh_window ();
+ (char *) str);
- struct tui_gen_win_info *exec_info = win_info->execution_info;
+ refresh_window ();
- werase (exec_info->handle);
- exec_info->refresh_window ();
+ werase (execution_info->handle);
+ execution_info->refresh_window ();
}
}
tui_show_source_line (this, lineno);
}
else
- tui_erase_source_content (this);
+ erase_source_content ();
check_and_display_highlight_if_needed ();
refresh_window ();
}
void
-tui_source_window_base::reset (int height, int width,
- int origin_x, int origin_y)
+tui_source_window_base::resize (int height, int width,
+ int origin_x, int origin_y)
{
- tui_gen_win_info::reset (height, width - 3,
- origin_x + 3, origin_y);
- execution_info->reset (height, 3, origin_x, origin_y);
+ tui_gen_win_info::resize (height, width - 3,
+ origin_x + 3, origin_y);
+ execution_info->resize (height, 3, origin_x, origin_y);
}
/* See tui-data.h. */
void
tui_source_window_base::update_tab_width ()
{
- /* We don't really change the height of any windows, but
- calling these 2 functions causes a complete regeneration
- and redisplay of the window's contents, which will take
- the new tab width into account. */
- make_invisible_and_set_new_height (height);
- make_visible_with_new_height ();
+ werase (handle);
+ rerender ();
}
-/* See tui-data.h. */
-
void
-tui_source_window_base::set_new_height (int height)
+tui_source_window_base::rerender ()
{
- execution_info->make_visible (false);
- execution_info->height = height;
- execution_info->origin.y = origin.y;
- if (height > 1)
- execution_info->viewport_height = height - 1;
- else
- execution_info->viewport_height = height;
- execution_info->viewport_height--;
-
- if (m_has_locator)
- {
- tui_locator_window *gen_win_info = tui_locator_win_info_ptr ();
- gen_win_info->make_visible (false);
- gen_win_info->origin.y = origin.y + height;
- }
-}
-
-/* See tui-data.h. */
-
-void
-tui_source_window_base::do_make_visible_with_new_height ()
-{
- execution_info->make_visible (true);
if (!content.empty ())
{
struct tui_line_or_address line_or_addr;
line_or_addr = start_line_or_addr;
tui_update_source_window (this, gdbarch,
- cursal.symtab, line_or_addr, TRUE);
+ cursal.symtab, line_or_addr);
}
else if (deprecated_safe_get_selected_frame () != NULL)
{
line.loa = LOA_ADDRESS;
find_line_pc (s, cursal.line, &line.u.addr);
}
- tui_update_source_window (this, gdbarch, s, line, TRUE);
- }
- if (m_has_locator)
- {
- tui_locator_win_info_ptr ()->make_visible (true);
- tui_show_locator_content ();
+ tui_update_source_window (this, gdbarch, s, line);
}
+ else
+ erase_source_content ();
}
/* See tui-data.h. */
}
tui_update_source_window_as_is (this, gdbarch, s,
- content[0].line_or_addr,
- FALSE);
+ content[0].line_or_addr);
}
/* Scroll the source forward or backward horizontally. */