Fix g++ 9.1 build breakage
[deliverable/binutils-gdb.git] / gdb / tui / tui-data.h
CommitLineData
f377b406 1/* TUI data manipulation routines.
55fb0713 2
42a4f53d 3 Copyright (C) 1998-2019 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
6a83354a
AC
25#include "tui/tui.h" /* For enum tui_win_type. */
26#include "gdb_curses.h" /* For WINDOW. */
b73dd877 27#include "observable.h"
6a83354a 28
ce38393b 29struct tui_cmd_window;
5104fe36 30struct tui_source_window_base;
bfad4537 31struct tui_source_window;
ce38393b 32
6a83354a
AC
33/* This is a point definition. */
34struct tui_point
35{
36 int x, y;
37};
2a5127c4 38
1cc6d956 39/* Generic window information. */
2a8854a7
AC
40struct tui_gen_win_info
41{
fb54fa76
TT
42protected:
43
ab313b35
TT
44 explicit tui_gen_win_info (enum tui_win_type t)
45 : type (t)
46 {
47 }
48
3df505f6
TT
49 /* This is called after the window is resized, and should update the
50 window's contents. */
51 virtual void rerender ()
52 {
53 }
54
ab0e1f1a
TT
55 virtual void make_window ();
56
fb54fa76 57public:
c07aae6e 58 tui_gen_win_info (tui_gen_win_info &&) = default;
fb54fa76 59
f936bca2 60 virtual ~tui_gen_win_info ();
ab313b35 61
5b81daba
TT
62 /* Call to refresh this window. */
63 virtual void refresh_window ();
64
48a3bd16
TT
65 /* Make this window visible or invisible. */
66 virtual void make_visible (bool visible);
67
152f3f4b
TT
68 /* Return the name of this type of window. */
69 virtual const char *name () const
70 {
71 return "";
72 }
73
ee556432 74 /* Resize this window. The parameters are used to set the window's
1e0c09ba 75 size and position. */
ee556432
TT
76 virtual void resize (int height, int width,
77 int origin_x, int origin_y);
d6ba6a11 78
2d83e710
TT
79 /* Return true if this window is visible. */
80 bool is_visible () const
81 {
82 return handle != nullptr;
83 }
84
ab313b35
TT
85 /* Window handle. */
86 WINDOW *handle = nullptr;
87 /* Type of window. */
88 enum tui_win_type type;
89 /* Window width. */
90 int width = 0;
91 /* Window height. */
92 int height = 0;
93 /* Origin of window. */
94 struct tui_point origin = {0, 0};
ab313b35
TT
95 /* Viewport height. */
96 int viewport_height = 0;
2a8854a7 97};
2a5127c4 98
1cc6d956 99/* Constant definitions. */
08ef48c5 100#define DEFAULT_TAB_LEN 8
08ef48c5 101#define NO_DATA_STRING "[ No Data Values Displayed ]"
6dce28e4
AB
102#define SRC_NAME "src"
103#define CMD_NAME "cmd"
104#define DATA_NAME "regs"
105#define DISASSEM_NAME "asm"
08ef48c5
MS
106#define MIN_WIN_HEIGHT 3
107#define MIN_CMD_WIN_HEIGHT 3
c906108c 108
50265402 109/* Strings to display in the TUI status line. */
08ef48c5 110#define SINGLE_KEY "(SingleKey)"
50265402 111
1cc6d956 112/* The kinds of layouts available. */
2a8854a7
AC
113enum tui_layout_type
114{
115 SRC_COMMAND,
116 DISASSEM_COMMAND,
117 SRC_DISASSEM_COMMAND,
118 SRC_DATA_COMMAND,
119 DISASSEM_DATA_COMMAND,
120 UNDEFINED_LAYOUT
121};
c906108c 122
52059ffd
TT
123enum tui_line_or_address_kind
124{
125 LOA_LINE,
126 LOA_ADDRESS
127};
128
1cc6d956 129/* Structure describing source line or line address. */
362c05fe 130struct tui_line_or_address
2a8854a7 131{
52059ffd 132 enum tui_line_or_address_kind loa;
362c05fe
AS
133 union
134 {
135 int line_no;
136 CORE_ADDR addr;
137 } u;
2a8854a7 138};
c906108c 139
1cc6d956 140/* This defines information about each logical window. */
cb2ce893 141struct tui_win_info : public tui_gen_win_info
2a8854a7 142{
33b906ab 143protected:
e7e11af4 144
33b906ab 145 explicit tui_win_info (enum tui_win_type type);
6792b55e
TT
146 DISABLE_COPY_AND_ASSIGN (tui_win_info);
147
13446e05
TT
148 /* Scroll the contents vertically. This is only called via
149 forward_scroll and backward_scroll. */
c3bd716f 150 virtual void do_scroll_vertical (int num_to_scroll) = 0;
13446e05
TT
151
152 /* Scroll the contents horizontally. This is only called via
153 left_scroll and right_scroll. */
c3bd716f 154 virtual void do_scroll_horizontal (int num_to_scroll) = 0;
13446e05 155
3df505f6 156 void rerender () override;
5fcee43a 157
ab0e1f1a
TT
158 void make_window () override;
159
33b906ab
TT
160public:
161
f936bca2
TT
162 ~tui_win_info () override
163 {
164 }
33b906ab 165
1825f487
TT
166 /* Called after all the TUI windows are refreshed, to let this
167 window have a chance to update itself further. */
168 virtual void refresh_all ()
169 {
170 }
171
8903bd8a
TT
172 /* Compute the maximum height of this window. */
173 virtual int max_height () const;
174
d83f1fe6
TT
175 /* Called after the tab width has been changed. */
176 virtual void update_tab_width ()
177 {
178 }
179
214a5cbe
TT
180 /* Set whether this window is highglighted. */
181 void set_highlight (bool highlight)
182 {
183 is_highlighted = highlight;
184 }
185
13446e05
TT
186 /* Methods to scroll the contents of this window. Note that they
187 are named with "_scroll" coming at the end because the more
188 obvious "scroll_forward" is defined as a macro in term.h. */
189 void forward_scroll (int num_to_scroll);
190 void backward_scroll (int num_to_scroll);
191 void left_scroll (int num_to_scroll);
192 void right_scroll (int num_to_scroll);
193
06210ce4
TT
194 /* Return true if this window can be scrolled, false otherwise. */
195 virtual bool can_scroll () const
196 {
197 return true;
198 }
199
ab0e1f1a 200 virtual bool can_box () const
65962b20
TT
201 {
202 return true;
203 }
204
b4ef5aeb
TT
205 void check_and_display_highlight_if_needed ();
206
ab0e1f1a
TT
207 /* Window title to display. */
208 std::string title;
209
33b906ab 210 /* Can this window ever be highlighted? */
d6ba6a11 211 bool can_highlight = true;
33b906ab
TT
212
213 /* Is this window highlighted? */
214a5cbe 214 bool is_highlighted = false;
33b906ab
TT
215};
216
6658b1bf 217extern int tui_win_is_auxiliary (enum tui_win_type win_type);
c906108c
SS
218
219
1cc6d956 220/* Global Data. */
7fa29be9 221extern struct tui_win_info *tui_win_list[MAX_MAJOR_WINDOWS];
c906108c 222
a38da35d 223#define TUI_SRC_WIN ((tui_source_window *) tui_win_list[SRC_WIN])
e6e41501 224#define TUI_DISASM_WIN ((tui_source_window_base *) tui_win_list[DISASSEM_WIN])
238eb706 225#define TUI_DATA_WIN ((tui_data_window *) tui_win_list[DATA_WIN])
81491aa0 226#define TUI_CMD_WIN ((tui_cmd_window *) tui_win_list[CMD_WIN])
c906108c 227
1ce3e844
TT
228/* An iterator that iterates over all windows. */
229
230class tui_window_iterator
231{
232public:
233
234 typedef tui_window_iterator self_type;
235 typedef struct tui_win_info *value_type;
236 typedef struct tui_win_info *&reference;
237 typedef struct tui_win_info **pointer;
238 typedef std::forward_iterator_tag iterator_category;
239 typedef int difference_type;
240
241 explicit tui_window_iterator (enum tui_win_type type)
242 : m_type (type)
243 {
244 advance ();
245 }
246
247 tui_window_iterator ()
248 : m_type (MAX_MAJOR_WINDOWS)
249 {
250 }
251
252 bool operator!= (const self_type &other) const
253 {
254 return m_type != other.m_type;
255 }
256
257 value_type operator* () const
258 {
259 gdb_assert (m_type < MAX_MAJOR_WINDOWS);
260 return tui_win_list[m_type];
261 }
262
263 self_type &operator++ ()
264 {
265 ++m_type;
266 advance ();
267 return *this;
268 }
269
270private:
271
272 void advance ()
273 {
274 while (m_type < MAX_MAJOR_WINDOWS && tui_win_list[m_type] == nullptr)
275 ++m_type;
276 }
277
278 int m_type;
279};
280
281/* A range adapter for iterating over TUI windows. */
282
283struct all_tui_windows
284{
285 tui_window_iterator begin () const
286 {
287 return tui_window_iterator (SRC_WIN);
288 }
289
290 tui_window_iterator end () const
291 {
292 return tui_window_iterator ();
293 }
294};
295
296
1cc6d956 297/* Data Manipulation Functions. */
a121b7c1 298extern struct tui_win_info *tui_partial_win_by_name (const char *);
2a8854a7 299extern enum tui_layout_type tui_current_layout (void);
dd1abb8c
AC
300extern int tui_term_height (void);
301extern void tui_set_term_height_to (int);
302extern int tui_term_width (void);
303extern void tui_set_term_width_to (int);
3add462f 304extern struct tui_locator_window *tui_locator_win_info_ptr (void);
dd1abb8c 305extern void tui_clear_source_windows_detail (void);
dd1abb8c
AC
306extern struct tui_win_info *tui_win_with_focus (void);
307extern void tui_set_win_with_focus (struct tui_win_info *);
dd1abb8c
AC
308extern int tui_win_resized (void);
309extern void tui_set_win_resized_to (int);
310
311extern struct tui_win_info *tui_next_win (struct tui_win_info *);
312extern struct tui_win_info *tui_prev_win (struct tui_win_info *);
313
fede5273
TT
314/* Delete all the invisible windows. Note that it is an error to call
315 this when the command window is invisible -- we don't allow the
316 command window to be removed from the layout. */
317extern void tui_delete_invisible_windows ();
318
7806cea7
TT
319extern unsigned int tui_tab_width;
320
1a5c2598 321#endif /* TUI_TUI_DATA_H */
This page took 2.244077 seconds and 4 git commands to generate.