X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Ftui%2Ftui-regs.h;h=df8c27305cd19c2183e2c8a9bc21a8518813e2d0;hb=359157df2087894563a900e5f63299b42f460be2;hp=a86a84829af27284f03c9a9ab7f101d813de59a2;hpb=0fb0cc7590113e9b459dfcc48dc71c9d419d9580;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/tui/tui-regs.h b/gdb/tui/tui-regs.h index a86a84829a..df8c27305c 100644 --- a/gdb/tui/tui-regs.h +++ b/gdb/tui/tui-regs.h @@ -1,7 +1,6 @@ /* TUI display registers in window. - Copyright (C) 1998, 1999, 2000, 2001, 2004, 2007, 2008, 2009 - Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -20,18 +19,126 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef TUI_REGS_H -#define TUI_REGS_H +#ifndef TUI_TUI_REGS_H +#define TUI_TUI_REGS_H -#include "tui/tui-data.h" /* For struct tui_register_display_type. */ +#include "tui/tui-data.h" -extern void tui_check_register_values (struct frame_info *); -extern void tui_show_registers (struct reggroup *group); -extern void tui_display_registers_from (int); -extern int tui_display_registers_from_line (int, int); -extern int tui_last_regs_line_no (void); -extern int tui_first_reg_element_inline (int); -extern int tui_line_from_reg_element_no (int); -extern int tui_first_reg_element_no_inline (int lineno); +/* A data item window. */ -#endif +struct tui_data_item_window : public tui_gen_win_info +{ + tui_data_item_window () = default; + + DISABLE_COPY_AND_ASSIGN (tui_data_item_window); + + tui_data_item_window (tui_data_item_window &&) = default; + + void rerender () override; + + void refresh_window () override; + + int max_height () const override + { + return 1; + } + + int min_height () const override + { + return 1; + } + + const char *name = nullptr; + /* The register number, or data display number. */ + int item_no = -1; + bool highlight = false; + gdb::unique_xmalloc_ptr content; +}; + +/* The TUI registers window. */ +struct tui_data_window : public tui_win_info +{ + tui_data_window () = default; + + DISABLE_COPY_AND_ASSIGN (tui_data_window); + + void refresh_window () override; + + void no_refresh () override; + + const char *name () const override + { + return DATA_NAME; + } + + void check_register_values (struct frame_info *frame); + + void show_registers (struct reggroup *group); + + struct reggroup *get_current_group () const + { + return m_current_group; + } + +protected: + + void do_scroll_vertical (int num_to_scroll) override; + void do_scroll_horizontal (int num_to_scroll) override + { + } + + void rerender () override; + +private: + + /* Display the registers in the content from 'start_element_no' + until the end of the register content or the end of the display + height. No checking for displaying past the end of the registers + is done here. */ + void display_registers_from (int start_element_no); + + /* Display the registers starting at line line_no in the data + window. Answers the line number that the display actually + started from. If nothing is displayed (-1) is returned. */ + int display_registers_from_line (int line_no); + + /* Return the index of the first element displayed. If none are + displayed, then return -1. */ + int first_data_item_displayed (); + + /* Display the registers in the content from 'start_element_no' on + 'start_line_no' until the end of the register content or the end + of the display height. This function checks that we won't + display off the end of the register display. */ + void display_reg_element_at_line (int start_element_no, int start_line_no); + + void show_register_group (struct reggroup *group, + struct frame_info *frame, + bool refresh_values_only); + + /* Answer the number of the last line in the regs display. If there + are no registers (-1) is returned. */ + int last_regs_line_no () const; + + /* Answer the line number that the register element at element_no is + on. If element_no is greater than the number of register + elements there are, -1 is returned. */ + int line_from_reg_element_no (int element_no) const; + + /* Answer the index of the first element in line_no. If line_no is + past the register area (-1) is returned. */ + int first_reg_element_no_inline (int line_no) const; + + /* Delete all the item windows in the data window. This is usually + done when the data window is scrolled. */ + void delete_data_content_windows (); + + void erase_data_content (const char *prompt); + + /* Windows that are used to display registers. */ + std::vector m_regs_content; + int m_regs_column_count = 0; + struct reggroup *m_current_group = nullptr; +}; + +#endif /* TUI_TUI_REGS_H */