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