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