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