Change tui_make_window to be a method
[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
ab0e1f1a
TT
55 virtual void make_window ();
56
fb54fa76
TT
57public:
58
f936bca2 59 virtual ~tui_gen_win_info ();
ab313b35 60
5b81daba
TT
61 /* Call to refresh this window. */
62 virtual void refresh_window ();
63
48a3bd16
TT
64 /* Make this window visible or invisible. */
65 virtual void make_visible (bool visible);
66
152f3f4b
TT
67 /* Return the name of this type of window. */
68 virtual const char *name () const
69 {
70 return "";
71 }
72
ee556432 73 /* Resize this window. The parameters are used to set the window's
1e0c09ba 74 size and position. */
ee556432
TT
75 virtual void resize (int height, int width,
76 int origin_x, int origin_y);
d6ba6a11 77
2d83e710
TT
78 /* Return true if this window is visible. */
79 bool is_visible () const
80 {
81 return handle != nullptr;
82 }
83
ab313b35
TT
84 /* Window handle. */
85 WINDOW *handle = nullptr;
86 /* Type of window. */
87 enum tui_win_type type;
88 /* Window width. */
89 int width = 0;
90 /* Window height. */
91 int height = 0;
92 /* Origin of window. */
93 struct tui_point origin = {0, 0};
ab313b35
TT
94 /* Viewport height. */
95 int viewport_height = 0;
2a8854a7 96};
2a5127c4 97
1cc6d956 98/* Constant definitions. */
08ef48c5 99#define DEFAULT_TAB_LEN 8
08ef48c5 100#define NO_DATA_STRING "[ No Data Values Displayed ]"
6dce28e4
AB
101#define SRC_NAME "src"
102#define CMD_NAME "cmd"
103#define DATA_NAME "regs"
104#define DISASSEM_NAME "asm"
08ef48c5
MS
105#define HILITE TRUE
106#define NO_HILITE FALSE
08ef48c5
MS
107#define MIN_WIN_HEIGHT 3
108#define MIN_CMD_WIN_HEIGHT 3
c906108c 109
50265402 110/* Strings to display in the TUI status line. */
08ef48c5 111#define PROC_PREFIX "In: "
9f2850ba 112#define LINE_PREFIX "L"
08ef48c5
MS
113#define PC_PREFIX "PC: "
114#define SINGLE_KEY "(SingleKey)"
50265402 115
1cc6d956
MS
116/* Minimum/Maximum length of some fields displayed in the TUI status
117 line. */
118#define MIN_LINE_WIDTH 4 /* Use at least 4 digits for line
119 numbers. */
50265402
SC
120#define MIN_PROC_WIDTH 12
121#define MAX_TARGET_WIDTH 10
9f2850ba 122#define MAX_PID_WIDTH 19
c906108c 123
1cc6d956 124/* The kinds of layouts available. */
2a8854a7
AC
125enum tui_layout_type
126{
127 SRC_COMMAND,
128 DISASSEM_COMMAND,
129 SRC_DISASSEM_COMMAND,
130 SRC_DATA_COMMAND,
131 DISASSEM_DATA_COMMAND,
132 UNDEFINED_LAYOUT
133};
c906108c 134
52059ffd
TT
135enum tui_line_or_address_kind
136{
137 LOA_LINE,
138 LOA_ADDRESS
139};
140
1cc6d956 141/* Structure describing source line or line address. */
362c05fe 142struct tui_line_or_address
2a8854a7 143{
52059ffd 144 enum tui_line_or_address_kind loa;
362c05fe
AS
145 union
146 {
147 int line_no;
148 CORE_ADDR addr;
149 } u;
2a8854a7 150};
c906108c 151
1cc6d956 152/* This defines information about each logical window. */
cb2ce893 153struct tui_win_info : public tui_gen_win_info
2a8854a7 154{
33b906ab 155protected:
e7e11af4 156
33b906ab 157 explicit tui_win_info (enum tui_win_type type);
6792b55e
TT
158 DISABLE_COPY_AND_ASSIGN (tui_win_info);
159
13446e05
TT
160 /* Scroll the contents vertically. This is only called via
161 forward_scroll and backward_scroll. */
c3bd716f 162 virtual void do_scroll_vertical (int num_to_scroll) = 0;
13446e05
TT
163
164 /* Scroll the contents horizontally. This is only called via
165 left_scroll and right_scroll. */
c3bd716f 166 virtual void do_scroll_horizontal (int num_to_scroll) = 0;
13446e05 167
3df505f6 168 void rerender () override;
5fcee43a 169
ab0e1f1a
TT
170 void make_window () override;
171
33b906ab
TT
172public:
173
f936bca2
TT
174 ~tui_win_info () override
175 {
176 }
33b906ab 177
1825f487
TT
178 /* Called after all the TUI windows are refreshed, to let this
179 window have a chance to update itself further. */
180 virtual void refresh_all ()
181 {
182 }
183
8903bd8a
TT
184 /* Compute the maximum height of this window. */
185 virtual int max_height () const;
186
d83f1fe6
TT
187 /* Called after the tab width has been changed. */
188 virtual void update_tab_width ()
189 {
190 }
191
214a5cbe
TT
192 /* Set whether this window is highglighted. */
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
ab0e1f1a 212 virtual bool can_box () const
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 /* 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.230476 seconds and 4 git commands to generate.