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