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