union tui_which_element which_element;
};
-/* This struct defines the specific information about a data display
- window. */
-struct tui_data_info
-{
- tui_win_content data_content; /* Start of data display content. */
- int data_content_count;
- tui_win_content regs_content; /* Start of regs display content. */
- int regs_content_count;
- int regs_column_count;
- int display_regs; /* Should regs be displayed at all? */
- struct reggroup *current_group;
-};
-
-
-struct tui_source_info
-{
- int has_locator; /* Does locator belongs to this window? */
- /* Execution information window. */
- struct tui_gen_win_info *execution_info;
- int horizontal_offset; /* Used for horizontal scroll. */
- struct tui_line_or_address start_line_or_addr;
-
- /* It is the resolved form as returned by symtab_to_fullname. */
- char *fullname;
-
- /* Architecture associated with code at this location. */
- struct gdbarch *gdbarch;
-};
-
-
-struct tui_command_info
-{
- int start_line;
-};
-
-
/* This defines information about each logical window. */
struct tui_win_info
{
explicit tui_win_info (enum tui_win_type type);
DISABLE_COPY_AND_ASSIGN (tui_win_info);
+ /* Scroll the contents vertically. This is only called via
+ forward_scroll and backward_scroll. */
+ virtual void do_scroll_vertical (enum tui_scroll_direction,
+ int num_to_scroll) = 0;
+
+ /* Scroll the contents horizontally. This is only called via
+ left_scroll and right_scroll. */
+ virtual void do_scroll_horizontal (enum tui_scroll_direction,
+ int num_to_scroll) = 0;
+
public:
virtual ~tui_win_info ();
/* Clear the pertinent detail in the window. */
virtual void clear_detail () = 0;
- struct tui_gen_win_info generic; /* General window information. */
- union
+ /* Return true if this window has the locator. */
+ virtual bool has_locator () const
{
- struct tui_source_info source_info;
- struct tui_data_info data_display_info;
- struct tui_command_info command_info;
+ return false;
}
- detail;
+
+ /* Make this window visible or invisible. */
+ virtual void make_visible (int visible);
+
+ /* Methods to scroll the contents of this window. Note that they
+ are named with "_scroll" coming at the end because the more
+ obvious "scroll_forward" is defined as a macro in term.h. */
+ void forward_scroll (int num_to_scroll);
+ void backward_scroll (int num_to_scroll);
+ void left_scroll (int num_to_scroll);
+ void right_scroll (int num_to_scroll);
+
+ struct tui_gen_win_info generic; /* General window information. */
/* Can this window ever be highlighted? */
int can_highlight = 0;
int is_highlighted = 0;
};
-struct tui_source_window : public tui_win_info
+/* The base class for all source-like windows, namely the source and
+ disassembly windows. */
+
+struct tui_source_window_base : public tui_win_info
{
- explicit tui_source_window (enum tui_win_type type);
- DISABLE_COPY_AND_ASSIGN (tui_source_window);
+protected:
+ explicit tui_source_window_base (enum tui_win_type type);
+ ~tui_source_window_base () override;
+ DISABLE_COPY_AND_ASSIGN (tui_source_window_base);
+
+ void do_scroll_horizontal (enum tui_scroll_direction,
+ int num_to_scroll) override;
+
+public:
void clear_detail () override;
+
+ /* Return true if this window has the locator. */
+ bool has_locator () const override
+ {
+ return m_has_locator;
+ }
+
+ void make_visible (int visible) override;
+
+ /* Does the locator belong to this window? */
+ bool m_has_locator = false;
+ /* Execution information window. */
+ struct tui_gen_win_info *execution_info = nullptr;
+ /* Used for horizontal scroll. */
+ int horizontal_offset = 0;
+ struct tui_line_or_address start_line_or_addr;
+
+ /* It is the resolved form as returned by symtab_to_fullname. */
+ char *fullname = nullptr;
+
+ /* Architecture associated with code at this location. */
+ struct gdbarch *gdbarch = nullptr;
+};
+
+/* A TUI source window. */
+
+struct tui_source_window : public tui_source_window_base
+{
+ tui_source_window ()
+ : tui_source_window_base (SRC_WIN)
+ {
+ }
+
+ DISABLE_COPY_AND_ASSIGN (tui_source_window);
+
+protected:
+
+ void do_scroll_vertical (enum tui_scroll_direction,
+ int num_to_scroll) override;
+};
+
+/* A TUI disassembly window. */
+
+struct tui_disasm_window : public tui_source_window_base
+{
+ tui_disasm_window ()
+ : tui_source_window_base (DISASSEM_WIN)
+ {
+ }
+
+ DISABLE_COPY_AND_ASSIGN (tui_disasm_window);
+
+protected:
+
+ void do_scroll_vertical (enum tui_scroll_direction,
+ int num_to_scroll) override;
};
struct tui_data_window : public tui_win_info
{
- tui_data_window ();
+ tui_data_window ()
+ : tui_win_info (DATA_WIN)
+ {
+ }
+
+ ~tui_data_window () override;
DISABLE_COPY_AND_ASSIGN (tui_data_window);
void clear_detail () override;
+
+ /* Start of data display content. */
+ tui_win_content data_content = NULL;
+ int data_content_count = 0;
+ /* Start of regs display content. */
+ tui_win_content regs_content = NULL;
+ int regs_content_count = 0;
+ int regs_column_count = 0;
+ /* Should regs be displayed at all? */
+ bool display_regs = false;
+ struct reggroup *current_group = nullptr;
+
+protected:
+
+ void do_scroll_vertical (enum tui_scroll_direction,
+ int num_to_scroll) override;
+ void do_scroll_horizontal (enum tui_scroll_direction,
+ int num_to_scroll) override
+ {
+ }
};
struct tui_cmd_window : public tui_win_info
{
- tui_cmd_window ();
+ tui_cmd_window ()
+ : tui_win_info (CMD_WIN)
+ {
+ }
+
DISABLE_COPY_AND_ASSIGN (tui_cmd_window);
void clear_detail () override;
+
+ void make_visible (int visible) override
+ {
+ }
+
+ int start_line = 0;
+
+protected:
+
+ void do_scroll_vertical (enum tui_scroll_direction,
+ int num_to_scroll) override
+ {
+ }
+
+ void do_scroll_horizontal (enum tui_scroll_direction,
+ int num_to_scroll) override
+ {
+ }
};
-extern int tui_win_is_source_type (enum tui_win_type win_type);
extern int tui_win_is_auxillary (enum tui_win_type win_type);
-extern int tui_win_has_locator (struct tui_win_info *win_info);
extern void tui_set_win_highlight (struct tui_win_info *win_info,
int highlight);
/* Global Data. */
extern struct tui_win_info *tui_win_list[MAX_MAJOR_WINDOWS];
-#define TUI_SRC_WIN tui_win_list[SRC_WIN]
-#define TUI_DISASM_WIN tui_win_list[DISASSEM_WIN]
-#define TUI_DATA_WIN tui_win_list[DATA_WIN]
-#define TUI_CMD_WIN tui_win_list[CMD_WIN]
+#define TUI_SRC_WIN ((tui_source_window_base *) tui_win_list[SRC_WIN])
+#define TUI_DISASM_WIN ((tui_source_window_base *) tui_win_list[DISASSEM_WIN])
+#define TUI_DATA_WIN ((tui_data_window *) tui_win_list[DATA_WIN])
+#define TUI_CMD_WIN ((tui_cmd_window *) tui_win_list[CMD_WIN])
/* Data Manipulation Functions. */
extern void tui_initialize_static_data (void);
extern std::vector<tui_win_info *> &tui_source_windows ();
extern void tui_clear_source_windows (void);
extern void tui_clear_source_windows_detail (void);
-extern void tui_clear_win_detail (struct tui_win_info *);
extern void tui_add_to_source_windows (struct tui_win_info *);
extern struct tui_win_info *tui_win_with_focus (void);
extern void tui_set_win_with_focus (struct tui_win_info *);