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