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