]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/tui/tui-data.h
Initial TUI mouse support
[thirdparty/binutils-gdb.git] / gdb / tui / tui-data.h
CommitLineData
f377b406 1/* TUI data manipulation routines.
55fb0713 2
3666a048 3 Copyright (C) 1998-2021 Free Software Foundation, Inc.
55fb0713 4
f377b406
SC
5 Contributed by Hewlett-Packard Company.
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
f377b406
SC
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
f377b406 21
1a5c2598
TT
22#ifndef TUI_TUI_DATA_H
23#define TUI_TUI_DATA_H
c906108c 24
fdb01f0c 25#include "tui/tui.h"
6a83354a 26#include "gdb_curses.h" /* For WINDOW. */
b73dd877 27#include "observable.h"
6a83354a 28
7523da63
TT
29/* A deleter that calls delwin. */
30struct curses_deleter
31{
32 void operator() (WINDOW *win) const
33 {
34 delwin (win);
35 }
36};
37
32c1e210
TT
38#define MIN_WIN_HEIGHT 3
39
1cc6d956 40/* Generic window information. */
32c1e210 41struct tui_win_info
2a8854a7 42{
fb54fa76
TT
43protected:
44
32c1e210
TT
45 tui_win_info () = default;
46 DISABLE_COPY_AND_ASSIGN (tui_win_info);
ab313b35 47
3df505f6
TT
48 /* This is called after the window is resized, and should update the
49 window's contents. */
32c1e210 50 virtual void rerender ();
3df505f6 51
ab0e1f1a
TT
52 virtual void make_window ();
53
fb54fa76 54public:
32c1e210
TT
55 tui_win_info (tui_win_info &&) = default;
56 virtual ~tui_win_info () = default;
ab313b35 57
5b81daba
TT
58 /* Call to refresh this window. */
59 virtual void refresh_window ();
60
48a3bd16
TT
61 /* Make this window visible or invisible. */
62 virtual void make_visible (bool visible);
63
152f3f4b 64 /* Return the name of this type of window. */
1cdf9e33 65 virtual const char *name () const = 0;
152f3f4b 66
c8ec2f43 67 /* Compute the maximum height of this window. */
32c1e210 68 virtual int max_height () const;
c8ec2f43 69
dc7ff8a6 70 /* Compute the minimum height of this window. */
32c1e210
TT
71 virtual int min_height () const
72 {
73 return MIN_WIN_HEIGHT;
74 }
dc7ff8a6 75
7c043ba6
TT
76 /* Compute the maximum width of this window. */
77 int max_width () const;
78
79 /* Compute the minimum width of this window. */
80 int min_width () const
81 {
82 return 3;
83 }
84
1431937b
TT
85 /* Return true if this window can be boxed. */
86 virtual bool can_box () const
87 {
32c1e210 88 return true;
1431937b
TT
89 }
90
ee556432 91 /* Resize this window. The parameters are used to set the window's
1e0c09ba 92 size and position. */
ee556432
TT
93 virtual void resize (int height, int width,
94 int origin_x, int origin_y);
d6ba6a11 95
2d83e710
TT
96 /* Return true if this window is visible. */
97 bool is_visible () const
98 {
29db1eb3 99 return handle != nullptr && tui_active;
2d83e710
TT
100 }
101
b551a89f
TT
102 /* Return true if this window can accept the focus. */
103 virtual bool can_focus () const
104 {
105 return true;
106 }
107
45bbae5c 108 /* Disable output until the next call to doupdate. */
7134f2eb 109 void no_refresh ()
45bbae5c
TT
110 {
111 if (handle != nullptr)
112 wnoutrefresh (handle.get ());
113 }
114
d83f1fe6
TT
115 /* Called after the tab width has been changed. */
116 virtual void update_tab_width ()
117 {
118 }
119
30baf67b 120 /* Set whether this window is highlighted. */
214a5cbe
TT
121 void set_highlight (bool highlight)
122 {
123 is_highlighted = highlight;
124 }
125
13446e05
TT
126 /* Methods to scroll the contents of this window. Note that they
127 are named with "_scroll" coming at the end because the more
128 obvious "scroll_forward" is defined as a macro in term.h. */
129 void forward_scroll (int num_to_scroll);
130 void backward_scroll (int num_to_scroll);
131 void left_scroll (int num_to_scroll);
132 void right_scroll (int num_to_scroll);
133
06210ce4
TT
134 /* Return true if this window can be scrolled, false otherwise. */
135 virtual bool can_scroll () const
136 {
137 return true;
138 }
139
1bace02a
HD
140 /* Called for each mouse click inside this window. Coordinates MOUSE_X
141 and MOUSE_Y are 0-based relative to the window, and MOUSE_BUTTON can
142 be 1 (left), 2 (middle), or 3 (right). */
143 virtual void click (int mouse_x, int mouse_y, int mouse_button)
144 {
145 }
146
b4ef5aeb
TT
147 void check_and_display_highlight_if_needed ();
148
32c1e210
TT
149 /* Window handle. */
150 std::unique_ptr<WINDOW, curses_deleter> handle;
151 /* Window width. */
152 int width = 0;
153 /* Window height. */
154 int height = 0;
155 /* Origin of window. */
156 int x = 0;
157 int y = 0;
158
ab0e1f1a
TT
159 /* Window title to display. */
160 std::string title;
161
33b906ab 162 /* Is this window highlighted? */
214a5cbe 163 bool is_highlighted = false;
32c1e210
TT
164
165protected:
166
167 /* Scroll the contents vertically. This is only called via
168 forward_scroll and backward_scroll. */
169 virtual void do_scroll_vertical (int num_to_scroll) = 0;
170
171 /* Scroll the contents horizontally. This is only called via
172 left_scroll and right_scroll. */
173 virtual void do_scroll_horizontal (int num_to_scroll) = 0;
33b906ab
TT
174};
175
32c1e210
TT
176/* Constant definitions. */
177#define SRC_NAME "src"
178#define CMD_NAME "cmd"
179#define DATA_NAME "regs"
180#define DISASSEM_NAME "asm"
181#define STATUS_NAME "status"
c906108c 182
1cc6d956 183/* Global Data. */
7fa29be9 184extern struct tui_win_info *tui_win_list[MAX_MAJOR_WINDOWS];
c906108c 185
a38da35d 186#define TUI_SRC_WIN ((tui_source_window *) tui_win_list[SRC_WIN])
3b0fb49e 187#define TUI_DISASM_WIN ((tui_disasm_window *) tui_win_list[DISASSEM_WIN])
238eb706 188#define TUI_DATA_WIN ((tui_data_window *) tui_win_list[DATA_WIN])
81491aa0 189#define TUI_CMD_WIN ((tui_cmd_window *) tui_win_list[CMD_WIN])
f237f998 190#define TUI_STATUS_WIN ((tui_locator_window *) tui_win_list[STATUS_WIN])
c906108c 191
7eed1a8e
TT
192/* All the windows that are currently instantiated, in layout
193 order. */
194extern std::vector<tui_win_info *> tui_windows;
1ce3e844 195
7eed1a8e
TT
196/* Return a range adapter for iterating over TUI windows. */
197static inline std::vector<tui_win_info *> &
198all_tui_windows ()
1ce3e844 199{
7eed1a8e
TT
200 return tui_windows;
201}
1ce3e844 202
1cc6d956 203/* Data Manipulation Functions. */
dd1abb8c
AC
204extern int tui_term_height (void);
205extern void tui_set_term_height_to (int);
206extern int tui_term_width (void);
207extern void tui_set_term_width_to (int);
dd1abb8c 208extern struct tui_win_info *tui_win_with_focus (void);
9abd8a65
TT
209extern bool tui_win_resized ();
210extern void tui_set_win_resized_to (bool);
dd1abb8c
AC
211
212extern struct tui_win_info *tui_next_win (struct tui_win_info *);
213extern struct tui_win_info *tui_prev_win (struct tui_win_info *);
214
7806cea7
TT
215extern unsigned int tui_tab_width;
216
1a5c2598 217#endif /* TUI_TUI_DATA_H */