{
win_info->horizontal_offset = 0;
tui_update_source_window_as_is (win_info, gdbarch, s, line_or_addr, noerror);
-
- return;
}
else
{
tui_update_breakpoint_info (win_info, nullptr, false);
- tui_show_source_content (win_info);
- tui_update_exec_info (win_info);
+ win_info->show_source_content ();
+ win_info->update_exec_info ();
if (win_info->type == SRC_WIN)
{
symtab_and_line sal;
tui_set_win_focus_to (win_info);
}
}
-
-
- return;
}
}
break;
}
-
- return;
}
void
if (win_info->handle != NULL)
{
werase (win_info->handle);
- tui_check_and_display_highlight_if_needed (win_info);
+ win_info->check_and_display_highlight_if_needed ();
const char *no_src_str;
}
void
-tui_show_source_content (struct tui_source_window_base *win_info)
+tui_source_window_base::show_source_content ()
{
- if (!win_info->content.empty ())
+ if (!content.empty ())
{
int lineno;
- for (lineno = 1; lineno <= win_info->content.size (); lineno++)
- tui_show_source_line (win_info, lineno);
+ for (lineno = 1; lineno <= content.size (); lineno++)
+ tui_show_source_line (this, lineno);
}
else
- tui_erase_source_content (win_info);
+ tui_erase_source_content (this);
+
+ check_and_display_highlight_if_needed ();
+ refresh_window ();
+}
+
+/* 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;
+}
+
+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_source_window_base::~tui_source_window_base ()
+{
+ xfree (fullname);
+ delete execution_info;
+}
+
+void
+tui_source_window_base::reset (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);
+}
+
+/* See tui-data.h. */
+
+void
+tui_source_window_base::refresh_all ()
+{
+ show_source_content ();
+ check_and_display_highlight_if_needed ();
+ tui_erase_exec_info_content (this);
+ update_exec_info ();
+}
+
+/* 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 ();
+}
+
+/* See tui-data.h. */
+
+void
+tui_source_window_base::set_new_height (int height)
+{
+ 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;
+ struct symtab_and_line cursal
+ = get_current_source_symtab_and_line ();
+
+ line_or_addr = start_line_or_addr;
+ tui_update_source_window (this, gdbarch,
+ cursal.symtab, line_or_addr, TRUE);
+ }
+ else if (deprecated_safe_get_selected_frame () != NULL)
+ {
+ struct tui_line_or_address line;
+ struct symtab_and_line cursal
+ = get_current_source_symtab_and_line ();
+ struct frame_info *frame = deprecated_safe_get_selected_frame ();
+ struct gdbarch *gdbarch = get_frame_arch (frame);
+
+ struct symtab *s = find_pc_line_symtab (get_frame_pc (frame));
+ if (type == SRC_WIN)
+ {
+ line.loa = LOA_LINE;
+ line.u.line_no = cursal.line;
+ }
+ else
+ {
+ 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_check_and_display_highlight_if_needed (win_info);
- win_info->refresh_window ();
+/* See tui-data.h. */
+
+void
+tui_source_window_base::make_visible (bool visible)
+{
+ execution_info->make_visible (visible);
+ tui_win_info::make_visible (visible);
+}
+
+/* See tui-data.h. */
+
+void
+tui_source_window_base::refresh_window ()
+{
+ execution_info->refresh_window ();
+ tui_win_info::refresh_window ();
}
/* See tui-data.h. */
{
if (tui_update_breakpoint_info (win, being_deleted, false))
{
- tui_update_exec_info (win);
+ win->update_exec_info ();
}
}
}
based upon the input window which is either the source or
disassembly window. */
void
-tui_set_exec_info_content (struct tui_source_window_base *win_info)
+tui_source_window_base::set_exec_info_content ()
{
- tui_exec_info_content *content
- = win_info->execution_info->maybe_allocate_content (win_info->height);
+ tui_exec_info_content *exec_content
+ = execution_info->maybe_allocate_content (height);
- tui_update_breakpoint_info (win_info, nullptr, true);
- for (int i = 0; i < win_info->content.size (); i++)
+ tui_update_breakpoint_info (this, nullptr, true);
+ for (int i = 0; i < content.size (); i++)
{
- tui_exec_info_content &element = content[i];
+ tui_exec_info_content &element = exec_content[i];
struct tui_source_element *src_element;
tui_bp_flags mode;
- src_element = &win_info->content[i];
+ src_element = &content[i];
memset (element, ' ', sizeof (tui_exec_info_content));
element[TUI_EXECINFO_SIZE - 1] = 0;
void
-tui_show_exec_info_content (struct tui_source_window_base *win_info)
+tui_source_window_base::show_exec_info_content ()
{
- struct tui_exec_info_window *exec_info = win_info->execution_info;
- const tui_exec_info_content *content = exec_info->get_content ();
+ struct tui_exec_info_window *exec_info = execution_info;
+ const tui_exec_info_content *exec_content = exec_info->get_content ();
werase (exec_info->handle);
- for (int cur_line = 1; cur_line <= win_info->content.size (); cur_line++)
+ for (int cur_line = 1; cur_line <= content.size (); cur_line++)
mvwaddstr (exec_info->handle,
cur_line,
0,
- content[cur_line - 1]);
+ exec_content[cur_line - 1]);
exec_info->refresh_window ();
}
/* Function to update the execution info window. */
void
-tui_update_exec_info (struct tui_source_window_base *win_info)
+tui_source_window_base::update_exec_info ()
{
- tui_set_exec_info_content (win_info);
- tui_show_exec_info_content (win_info);
+ set_exec_info_content ();
+ show_exec_info_content ();
}
void
return is_displayed;
}
-
-
-/*****************************************
-** STATIC LOCAL FUNCTIONS **
-******************************************/