Turn tui_show_exec_info_content into a method
[deliverable/binutils-gdb.git] / gdb / tui / tui-winsource.c
index d9f642510909654e03f1a2329d2179ec00a1cf88..c99e207b01123cedcc47289cc87312cdb6f9efef 100644 (file)
@@ -77,8 +77,6 @@ tui_update_source_window (struct tui_source_window_base *win_info,
 {
   win_info->horizontal_offset = 0;
   tui_update_source_window_as_is (win_info, gdbarch, s, line_or_addr, noerror);
-
-  return;
 }
 
 
@@ -107,8 +105,8 @@ tui_update_source_window_as_is (struct tui_source_window_base *win_info,
   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;
@@ -125,9 +123,6 @@ tui_update_source_window_as_is (struct tui_source_window_base *win_info,
            tui_set_win_focus_to (win_info);
        }
     }
-
-
-  return;
 }
 
 
@@ -200,8 +195,6 @@ tui_update_source_windows_with_line (struct symtab *s, int line)
        }
       break;
     }
-
-  return;
 }
 
 void
@@ -232,7 +225,7 @@ tui_erase_source_content (struct tui_source_window_base *win_info)
   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;
 
@@ -282,20 +275,164 @@ tui_show_source_line (struct tui_source_window_base *win_info, int lineno)
 }
 
 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.  */
@@ -380,7 +517,7 @@ tui_update_all_breakpoint_info (struct breakpoint *being_deleted)
     {
       if (tui_update_breakpoint_info (win, being_deleted, false))
         {
-          tui_update_exec_info (win);
+          win->update_exec_info ();
         }
     }
 }
@@ -467,19 +604,19 @@ tui_exec_info_window::maybe_allocate_content (int n_elements)
    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;
@@ -504,17 +641,17 @@ tui_set_exec_info_content (struct tui_source_window_base *win_info)
 
 
 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 ();
 }
 
@@ -536,10 +673,10 @@ tui_clear_exec_info_content (struct tui_source_window_base *win_info)
 
 /* 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
@@ -616,8 +753,3 @@ tui_addr_is_displayed (CORE_ADDR addr,
 
   return is_displayed;
 }
-
-
-/*****************************************
-** STATIC LOCAL FUNCTIONS               **
-******************************************/
This page took 0.027442 seconds and 4 git commands to generate.