Move source window common to code to tui-winsource.[ch]
[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
1cc6d956 154/* Current Layout definition. */
2a8854a7
AC
155struct tui_layout_def
156{
6d012f14 157 enum tui_win_type display_mode;
2a8854a7 158};
c906108c 159
0598af48
TT
160/* Flags to tell what kind of breakpoint is at current line. */
161enum tui_bp_flag
162{
163 TUI_BP_ENABLED = 0x01,
164 TUI_BP_DISABLED = 0x02,
165 TUI_BP_HIT = 0x04,
166 TUI_BP_CONDITIONAL = 0x08,
167 TUI_BP_HARDWARE = 0x10
168};
169
170DEF_ENUM_FLAGS_TYPE (enum tui_bp_flag, tui_bp_flags);
171
1cc6d956 172/* Elements in the Source/Disassembly Window. */
2a8854a7
AC
173struct tui_source_element
174{
53e7cdba
TT
175 tui_source_element ()
176 {
177 line_or_addr.loa = LOA_LINE;
178 line_or_addr.u.line_no = 0;
179 }
180
181 ~tui_source_element ()
182 {
183 xfree (line);
184 }
185
186 char *line = nullptr;
362c05fe 187 struct tui_line_or_address line_or_addr;
53e7cdba 188 bool is_exec_point = false;
0598af48 189 tui_bp_flags break_mode = 0;
2a8854a7 190};
c906108c
SS
191
192
2d42f9a8
JB
193#ifdef PATH_MAX
194# define MAX_LOCATOR_ELEMENT_LEN PATH_MAX
195#else
196# define MAX_LOCATOR_ELEMENT_LEN 1024
197#endif
c906108c 198
00b2bad4
SC
199/* Position of breakpoint markers in the exec info string. */
200#define TUI_BP_HIT_POS 0
201#define TUI_BP_BREAK_POS 1
202#define TUI_EXEC_POS 2
203#define TUI_EXECINFO_SIZE 4
204
2a8854a7 205typedef char tui_exec_info_content[TUI_EXECINFO_SIZE];
c906108c 206
3add462f
TT
207/* Locator window class. */
208
209struct tui_locator_window : public tui_gen_win_info
210{
211 tui_locator_window ()
212 : tui_gen_win_info (LOCATOR_WIN)
213 {
214 full_name[0] = 0;
215 proc_name[0] = 0;
216 }
217
218 char full_name[MAX_LOCATOR_ELEMENT_LEN];
219 char proc_name[MAX_LOCATOR_ELEMENT_LEN];
220 int line_no = 0;
221 CORE_ADDR addr = 0;
222 /* Architecture associated with code at this location. */
223 struct gdbarch *gdbarch = nullptr;
224};
225
1cc6d956 226/* This defines information about each logical window. */
cb2ce893 227struct tui_win_info : public tui_gen_win_info
2a8854a7 228{
33b906ab 229protected:
e7e11af4 230
33b906ab 231 explicit tui_win_info (enum tui_win_type type);
6792b55e
TT
232 DISABLE_COPY_AND_ASSIGN (tui_win_info);
233
13446e05
TT
234 /* Scroll the contents vertically. This is only called via
235 forward_scroll and backward_scroll. */
c3bd716f 236 virtual void do_scroll_vertical (int num_to_scroll) = 0;
13446e05
TT
237
238 /* Scroll the contents horizontally. This is only called via
239 left_scroll and right_scroll. */
c3bd716f 240 virtual void do_scroll_horizontal (int num_to_scroll) = 0;
13446e05 241
5fcee43a
TT
242 /* Called after make_visible_with_new_height sets the new height.
243 Should update the window. */
244 virtual void do_make_visible_with_new_height () = 0;
245
33b906ab
TT
246public:
247
f936bca2
TT
248 ~tui_win_info () override
249 {
250 }
33b906ab 251
8761a91b
TT
252 /* Clear the pertinent detail in the window. */
253 virtual void clear_detail () = 0;
254
1825f487
TT
255 /* Called after all the TUI windows are refreshed, to let this
256 window have a chance to update itself further. */
257 virtual void refresh_all ()
258 {
259 }
260
3f02ce1e
TT
261 /* Called after a TUI window is given a new height; this updates any
262 related auxiliary windows. */
263 virtual void set_new_height (int height)
264 {
265 }
266
8903bd8a
TT
267 /* Compute the maximum height of this window. */
268 virtual int max_height () const;
269
d83f1fe6
TT
270 /* Called after the tab width has been changed. */
271 virtual void update_tab_width ()
272 {
273 }
274
daa15dde
TT
275 /* Function make the target window (and auxiliary windows associated
276 with the target) invisible, and set the new height and
277 location. */
278 void make_invisible_and_set_new_height (int height);
279
5fcee43a
TT
280 /* Make the window visible after the height has been changed. */
281 void make_visible_with_new_height ();
282
214a5cbe
TT
283 /* Set whether this window is highglighted. */
284 void set_highlight (bool highlight)
285 {
286 is_highlighted = highlight;
287 }
288
13446e05
TT
289 /* Methods to scroll the contents of this window. Note that they
290 are named with "_scroll" coming at the end because the more
291 obvious "scroll_forward" is defined as a macro in term.h. */
292 void forward_scroll (int num_to_scroll);
293 void backward_scroll (int num_to_scroll);
294 void left_scroll (int num_to_scroll);
295 void right_scroll (int num_to_scroll);
296
06210ce4
TT
297 /* Return true if this window can be scrolled, false otherwise. */
298 virtual bool can_scroll () const
299 {
300 return true;
301 }
302
33b906ab 303 /* Can this window ever be highlighted? */
d6ba6a11 304 bool can_highlight = true;
33b906ab
TT
305
306 /* Is this window highlighted? */
214a5cbe 307 bool is_highlighted = false;
33b906ab
TT
308};
309
6658b1bf 310extern int tui_win_is_auxiliary (enum tui_win_type win_type);
c906108c
SS
311
312
1cc6d956 313/* Global Data. */
7fa29be9 314extern struct tui_win_info *tui_win_list[MAX_MAJOR_WINDOWS];
c906108c 315
a38da35d 316#define TUI_SRC_WIN ((tui_source_window *) tui_win_list[SRC_WIN])
e6e41501 317#define TUI_DISASM_WIN ((tui_source_window_base *) tui_win_list[DISASSEM_WIN])
238eb706 318#define TUI_DATA_WIN ((tui_data_window *) tui_win_list[DATA_WIN])
81491aa0 319#define TUI_CMD_WIN ((tui_cmd_window *) tui_win_list[CMD_WIN])
c906108c 320
1ce3e844
TT
321/* An iterator that iterates over all windows. */
322
323class tui_window_iterator
324{
325public:
326
327 typedef tui_window_iterator self_type;
328 typedef struct tui_win_info *value_type;
329 typedef struct tui_win_info *&reference;
330 typedef struct tui_win_info **pointer;
331 typedef std::forward_iterator_tag iterator_category;
332 typedef int difference_type;
333
334 explicit tui_window_iterator (enum tui_win_type type)
335 : m_type (type)
336 {
337 advance ();
338 }
339
340 tui_window_iterator ()
341 : m_type (MAX_MAJOR_WINDOWS)
342 {
343 }
344
345 bool operator!= (const self_type &other) const
346 {
347 return m_type != other.m_type;
348 }
349
350 value_type operator* () const
351 {
352 gdb_assert (m_type < MAX_MAJOR_WINDOWS);
353 return tui_win_list[m_type];
354 }
355
356 self_type &operator++ ()
357 {
358 ++m_type;
359 advance ();
360 return *this;
361 }
362
363private:
364
365 void advance ()
366 {
367 while (m_type < MAX_MAJOR_WINDOWS && tui_win_list[m_type] == nullptr)
368 ++m_type;
369 }
370
371 int m_type;
372};
373
374/* A range adapter for iterating over TUI windows. */
375
376struct all_tui_windows
377{
378 tui_window_iterator begin () const
379 {
380 return tui_window_iterator (SRC_WIN);
381 }
382
383 tui_window_iterator end () const
384 {
385 return tui_window_iterator ();
386 }
387};
388
389
1cc6d956 390/* Data Manipulation Functions. */
dd1abb8c 391extern void tui_initialize_static_data (void);
a121b7c1 392extern struct tui_win_info *tui_partial_win_by_name (const char *);
2a8854a7
AC
393extern enum tui_layout_type tui_current_layout (void);
394extern void tui_set_current_layout_to (enum tui_layout_type);
dd1abb8c
AC
395extern int tui_term_height (void);
396extern void tui_set_term_height_to (int);
397extern int tui_term_width (void);
398extern void tui_set_term_width_to (int);
3add462f 399extern struct tui_locator_window *tui_locator_win_info_ptr (void);
ad54d15b 400extern std::vector<tui_source_window_base *> &tui_source_windows ();
dd1abb8c
AC
401extern void tui_clear_source_windows (void);
402extern void tui_clear_source_windows_detail (void);
ad54d15b 403extern void tui_add_to_source_windows (struct tui_source_window_base *);
dd1abb8c
AC
404extern struct tui_win_info *tui_win_with_focus (void);
405extern void tui_set_win_with_focus (struct tui_win_info *);
5b6fe301 406extern struct tui_layout_def *tui_layout_def (void);
dd1abb8c
AC
407extern int tui_win_resized (void);
408extern void tui_set_win_resized_to (int);
409
410extern struct tui_win_info *tui_next_win (struct tui_win_info *);
411extern struct tui_win_info *tui_prev_win (struct tui_win_info *);
412
7806cea7
TT
413extern unsigned int tui_tab_width;
414
1a5c2598 415#endif /* TUI_TUI_DATA_H */
This page took 2.603954 seconds and 4 git commands to generate.