Move current_layout to tui-layout.c
[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
fb54fa76
TT
49public:
50
f936bca2 51 virtual ~tui_gen_win_info ();
ab313b35 52
5b81daba
TT
53 /* Call to refresh this window. */
54 virtual void refresh_window ();
55
48a3bd16
TT
56 /* Make this window visible or invisible. */
57 virtual void make_visible (bool visible);
58
152f3f4b
TT
59 /* Return the name of this type of window. */
60 virtual const char *name () const
61 {
62 return "";
63 }
64
1e0c09ba
TT
65 /* Reset this window. The parameters are used to set the window's
66 size and position. */
67 virtual void reset (int height, int width,
098f9ed4 68 int origin_x, int origin_y);
d6ba6a11 69
ab313b35
TT
70 /* Window handle. */
71 WINDOW *handle = nullptr;
72 /* Type of window. */
73 enum tui_win_type type;
74 /* Window width. */
75 int width = 0;
76 /* Window height. */
77 int height = 0;
78 /* Origin of window. */
79 struct tui_point origin = {0, 0};
ab313b35
TT
80 /* Viewport height. */
81 int viewport_height = 0;
82 /* Index of last visible line. */
83 int last_visible_line = 0;
84 /* Whether the window is visible or not. */
85 bool is_visible = false;
86 /* Window title to display. */
87 char *title = nullptr;
2a8854a7 88};
2a5127c4 89
17374de4
TT
90/* Whether or not a window should be drawn with a box. */
91enum tui_box
92{
93 DONT_BOX_WINDOW = 0,
94 BOX_WINDOW
95};
96
1cc6d956 97/* Constant definitions. */
08ef48c5
MS
98#define DEFAULT_TAB_LEN 8
99#define NO_SRC_STRING "[ No Source Available ]"
100#define NO_DISASSEM_STRING "[ No Assembly Available ]"
101#define NO_REGS_STRING "[ Register Values Unavailable ]"
102#define NO_DATA_STRING "[ No Data Values Displayed ]"
6dce28e4
AB
103#define SRC_NAME "src"
104#define CMD_NAME "cmd"
105#define DATA_NAME "regs"
106#define DISASSEM_NAME "asm"
08ef48c5
MS
107#define HILITE TRUE
108#define NO_HILITE FALSE
08ef48c5
MS
109#define MIN_WIN_HEIGHT 3
110#define MIN_CMD_WIN_HEIGHT 3
c906108c 111
50265402 112/* Strings to display in the TUI status line. */
08ef48c5 113#define PROC_PREFIX "In: "
9f2850ba 114#define LINE_PREFIX "L"
08ef48c5
MS
115#define PC_PREFIX "PC: "
116#define SINGLE_KEY "(SingleKey)"
50265402 117
1cc6d956
MS
118/* Minimum/Maximum length of some fields displayed in the TUI status
119 line. */
120#define MIN_LINE_WIDTH 4 /* Use at least 4 digits for line
121 numbers. */
50265402
SC
122#define MIN_PROC_WIDTH 12
123#define MAX_TARGET_WIDTH 10
9f2850ba 124#define MAX_PID_WIDTH 19
c906108c 125
1cc6d956 126/* The kinds of layouts available. */
2a8854a7
AC
127enum tui_layout_type
128{
129 SRC_COMMAND,
130 DISASSEM_COMMAND,
131 SRC_DISASSEM_COMMAND,
132 SRC_DATA_COMMAND,
133 DISASSEM_DATA_COMMAND,
134 UNDEFINED_LAYOUT
135};
c906108c 136
52059ffd
TT
137enum tui_line_or_address_kind
138{
139 LOA_LINE,
140 LOA_ADDRESS
141};
142
1cc6d956 143/* Structure describing source line or line address. */
362c05fe 144struct tui_line_or_address
2a8854a7 145{
52059ffd 146 enum tui_line_or_address_kind loa;
362c05fe
AS
147 union
148 {
149 int line_no;
150 CORE_ADDR addr;
151 } u;
2a8854a7 152};
c906108c 153
0598af48
TT
154/* Flags to tell what kind of breakpoint is at current line. */
155enum tui_bp_flag
156{
157 TUI_BP_ENABLED = 0x01,
158 TUI_BP_DISABLED = 0x02,
159 TUI_BP_HIT = 0x04,
160 TUI_BP_CONDITIONAL = 0x08,
161 TUI_BP_HARDWARE = 0x10
162};
163
164DEF_ENUM_FLAGS_TYPE (enum tui_bp_flag, tui_bp_flags);
165
1cc6d956 166/* Elements in the Source/Disassembly Window. */
2a8854a7
AC
167struct tui_source_element
168{
53e7cdba
TT
169 tui_source_element ()
170 {
171 line_or_addr.loa = LOA_LINE;
172 line_or_addr.u.line_no = 0;
173 }
174
175 ~tui_source_element ()
176 {
177 xfree (line);
178 }
179
180 char *line = nullptr;
362c05fe 181 struct tui_line_or_address line_or_addr;
53e7cdba 182 bool is_exec_point = false;
0598af48 183 tui_bp_flags break_mode = 0;
2a8854a7 184};
c906108c
SS
185
186
2d42f9a8
JB
187#ifdef PATH_MAX
188# define MAX_LOCATOR_ELEMENT_LEN PATH_MAX
189#else
190# define MAX_LOCATOR_ELEMENT_LEN 1024
191#endif
c906108c 192
00b2bad4
SC
193/* Position of breakpoint markers in the exec info string. */
194#define TUI_BP_HIT_POS 0
195#define TUI_BP_BREAK_POS 1
196#define TUI_EXEC_POS 2
197#define TUI_EXECINFO_SIZE 4
198
2a8854a7 199typedef char tui_exec_info_content[TUI_EXECINFO_SIZE];
c906108c 200
3add462f
TT
201/* Locator window class. */
202
203struct tui_locator_window : public tui_gen_win_info
204{
205 tui_locator_window ()
206 : tui_gen_win_info (LOCATOR_WIN)
207 {
208 full_name[0] = 0;
209 proc_name[0] = 0;
210 }
211
212 char full_name[MAX_LOCATOR_ELEMENT_LEN];
213 char proc_name[MAX_LOCATOR_ELEMENT_LEN];
214 int line_no = 0;
215 CORE_ADDR addr = 0;
216 /* Architecture associated with code at this location. */
217 struct gdbarch *gdbarch = nullptr;
218};
219
1cc6d956 220/* This defines information about each logical window. */
cb2ce893 221struct tui_win_info : public tui_gen_win_info
2a8854a7 222{
33b906ab 223protected:
e7e11af4 224
33b906ab 225 explicit tui_win_info (enum tui_win_type type);
6792b55e
TT
226 DISABLE_COPY_AND_ASSIGN (tui_win_info);
227
13446e05
TT
228 /* Scroll the contents vertically. This is only called via
229 forward_scroll and backward_scroll. */
c3bd716f 230 virtual void do_scroll_vertical (int num_to_scroll) = 0;
13446e05
TT
231
232 /* Scroll the contents horizontally. This is only called via
233 left_scroll and right_scroll. */
c3bd716f 234 virtual void do_scroll_horizontal (int num_to_scroll) = 0;
13446e05 235
5fcee43a
TT
236 /* Called after make_visible_with_new_height sets the new height.
237 Should update the window. */
238 virtual void do_make_visible_with_new_height () = 0;
239
33b906ab
TT
240public:
241
f936bca2
TT
242 ~tui_win_info () override
243 {
244 }
33b906ab 245
1825f487
TT
246 /* Called after all the TUI windows are refreshed, to let this
247 window have a chance to update itself further. */
248 virtual void refresh_all ()
249 {
250 }
251
3f02ce1e
TT
252 /* Called after a TUI window is given a new height; this updates any
253 related auxiliary windows. */
254 virtual void set_new_height (int height)
255 {
256 }
257
8903bd8a
TT
258 /* Compute the maximum height of this window. */
259 virtual int max_height () const;
260
d83f1fe6
TT
261 /* Called after the tab width has been changed. */
262 virtual void update_tab_width ()
263 {
264 }
265
daa15dde
TT
266 /* Function make the target window (and auxiliary windows associated
267 with the target) invisible, and set the new height and
268 location. */
269 void make_invisible_and_set_new_height (int height);
270
5fcee43a
TT
271 /* Make the window visible after the height has been changed. */
272 void make_visible_with_new_height ();
273
214a5cbe
TT
274 /* Set whether this window is highglighted. */
275 void set_highlight (bool highlight)
276 {
277 is_highlighted = highlight;
278 }
279
13446e05
TT
280 /* Methods to scroll the contents of this window. Note that they
281 are named with "_scroll" coming at the end because the more
282 obvious "scroll_forward" is defined as a macro in term.h. */
283 void forward_scroll (int num_to_scroll);
284 void backward_scroll (int num_to_scroll);
285 void left_scroll (int num_to_scroll);
286 void right_scroll (int num_to_scroll);
287
06210ce4
TT
288 /* Return true if this window can be scrolled, false otherwise. */
289 virtual bool can_scroll () const
290 {
291 return true;
292 }
293
33b906ab 294 /* Can this window ever be highlighted? */
d6ba6a11 295 bool can_highlight = true;
33b906ab
TT
296
297 /* Is this window highlighted? */
214a5cbe 298 bool is_highlighted = false;
33b906ab
TT
299};
300
6658b1bf 301extern int tui_win_is_auxiliary (enum tui_win_type win_type);
c906108c
SS
302
303
1cc6d956 304/* Global Data. */
7fa29be9 305extern struct tui_win_info *tui_win_list[MAX_MAJOR_WINDOWS];
c906108c 306
a38da35d 307#define TUI_SRC_WIN ((tui_source_window *) tui_win_list[SRC_WIN])
e6e41501 308#define TUI_DISASM_WIN ((tui_source_window_base *) tui_win_list[DISASSEM_WIN])
238eb706 309#define TUI_DATA_WIN ((tui_data_window *) tui_win_list[DATA_WIN])
81491aa0 310#define TUI_CMD_WIN ((tui_cmd_window *) tui_win_list[CMD_WIN])
c906108c 311
1ce3e844
TT
312/* An iterator that iterates over all windows. */
313
314class tui_window_iterator
315{
316public:
317
318 typedef tui_window_iterator self_type;
319 typedef struct tui_win_info *value_type;
320 typedef struct tui_win_info *&reference;
321 typedef struct tui_win_info **pointer;
322 typedef std::forward_iterator_tag iterator_category;
323 typedef int difference_type;
324
325 explicit tui_window_iterator (enum tui_win_type type)
326 : m_type (type)
327 {
328 advance ();
329 }
330
331 tui_window_iterator ()
332 : m_type (MAX_MAJOR_WINDOWS)
333 {
334 }
335
336 bool operator!= (const self_type &other) const
337 {
338 return m_type != other.m_type;
339 }
340
341 value_type operator* () const
342 {
343 gdb_assert (m_type < MAX_MAJOR_WINDOWS);
344 return tui_win_list[m_type];
345 }
346
347 self_type &operator++ ()
348 {
349 ++m_type;
350 advance ();
351 return *this;
352 }
353
354private:
355
356 void advance ()
357 {
358 while (m_type < MAX_MAJOR_WINDOWS && tui_win_list[m_type] == nullptr)
359 ++m_type;
360 }
361
362 int m_type;
363};
364
365/* A range adapter for iterating over TUI windows. */
366
367struct all_tui_windows
368{
369 tui_window_iterator begin () const
370 {
371 return tui_window_iterator (SRC_WIN);
372 }
373
374 tui_window_iterator end () const
375 {
376 return tui_window_iterator ();
377 }
378};
379
380
1cc6d956 381/* Data Manipulation Functions. */
dd1abb8c 382extern void tui_initialize_static_data (void);
a121b7c1 383extern struct tui_win_info *tui_partial_win_by_name (const char *);
2a8854a7 384extern enum tui_layout_type tui_current_layout (void);
dd1abb8c
AC
385extern int tui_term_height (void);
386extern void tui_set_term_height_to (int);
387extern int tui_term_width (void);
388extern void tui_set_term_width_to (int);
3add462f 389extern struct tui_locator_window *tui_locator_win_info_ptr (void);
ad54d15b 390extern std::vector<tui_source_window_base *> &tui_source_windows ();
dd1abb8c
AC
391extern void tui_clear_source_windows (void);
392extern void tui_clear_source_windows_detail (void);
ad54d15b 393extern void tui_add_to_source_windows (struct tui_source_window_base *);
dd1abb8c
AC
394extern struct tui_win_info *tui_win_with_focus (void);
395extern void tui_set_win_with_focus (struct tui_win_info *);
dd1abb8c
AC
396extern int tui_win_resized (void);
397extern void tui_set_win_resized_to (int);
398
399extern struct tui_win_info *tui_next_win (struct tui_win_info *);
400extern struct tui_win_info *tui_prev_win (struct tui_win_info *);
401
7806cea7
TT
402extern unsigned int tui_tab_width;
403
1a5c2598 404#endif /* TUI_TUI_DATA_H */
This page took 1.997201 seconds and 4 git commands to generate.