Introduce refresh_window 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. */
27
28/* This is a point definition. */
29struct tui_point
30{
31 int x, y;
32};
2a5127c4 33
63ed8182
PP
34struct tui_win_element;
35
36/* This describes the content of the window. */
37typedef struct tui_win_element **tui_win_content;
38
1cc6d956 39/* Generic window information. */
2a8854a7
AC
40struct tui_gen_win_info
41{
ab313b35
TT
42 explicit tui_gen_win_info (enum tui_win_type t)
43 : type (t)
44 {
45 }
46
cb2ce893 47 virtual ~tui_gen_win_info ()
ab313b35
TT
48 {
49 }
50
5b81daba
TT
51 /* Call to refresh this window. */
52 virtual void refresh_window ();
53
ab313b35
TT
54 /* Window handle. */
55 WINDOW *handle = nullptr;
56 /* Type of window. */
57 enum tui_win_type type;
58 /* Window width. */
59 int width = 0;
60 /* Window height. */
61 int height = 0;
62 /* Origin of window. */
63 struct tui_point origin = {0, 0};
64 /* Content of window. */
65 tui_win_content content = nullptr;
66 /* Size of content (# of elements). */
67 int content_size = 0;
68 /* Can it be used, or is it already used? */
69 int content_in_use = FALSE;
70 /* Viewport height. */
71 int viewport_height = 0;
72 /* Index of last visible line. */
73 int last_visible_line = 0;
74 /* Whether the window is visible or not. */
75 bool is_visible = false;
76 /* Window title to display. */
77 char *title = nullptr;
2a8854a7 78};
2a5127c4 79
1cc6d956 80/* Constant definitions. */
08ef48c5
MS
81#define DEFAULT_TAB_LEN 8
82#define NO_SRC_STRING "[ No Source Available ]"
83#define NO_DISASSEM_STRING "[ No Assembly Available ]"
84#define NO_REGS_STRING "[ Register Values Unavailable ]"
85#define NO_DATA_STRING "[ No Data Values Displayed ]"
86#define MAX_CONTENT_COUNT 100
6dce28e4
AB
87#define SRC_NAME "src"
88#define CMD_NAME "cmd"
89#define DATA_NAME "regs"
90#define DISASSEM_NAME "asm"
08ef48c5
MS
91#define TUI_NULL_STR ""
92#define DEFAULT_HISTORY_COUNT 25
93#define BOX_WINDOW TRUE
94#define DONT_BOX_WINDOW FALSE
95#define HILITE TRUE
96#define NO_HILITE FALSE
97#define WITH_LOCATOR TRUE
98#define NO_LOCATOR FALSE
99#define EMPTY_SOURCE_PROMPT TRUE
100#define NO_EMPTY_SOURCE_PROMPT FALSE
101#define UNDEFINED_ITEM -1
102#define MIN_WIN_HEIGHT 3
103#define MIN_CMD_WIN_HEIGHT 3
c906108c 104
50265402 105/* Strings to display in the TUI status line. */
08ef48c5 106#define PROC_PREFIX "In: "
9f2850ba 107#define LINE_PREFIX "L"
08ef48c5
MS
108#define PC_PREFIX "PC: "
109#define SINGLE_KEY "(SingleKey)"
50265402 110
1cc6d956
MS
111/* Minimum/Maximum length of some fields displayed in the TUI status
112 line. */
113#define MIN_LINE_WIDTH 4 /* Use at least 4 digits for line
114 numbers. */
50265402
SC
115#define MIN_PROC_WIDTH 12
116#define MAX_TARGET_WIDTH 10
9f2850ba 117#define MAX_PID_WIDTH 19
c906108c 118
2a8854a7
AC
119/* Scroll direction enum. */
120enum tui_scroll_direction
121{
122 FORWARD_SCROLL,
123 BACKWARD_SCROLL,
124 LEFT_SCROLL,
125 RIGHT_SCROLL
126};
c906108c
SS
127
128
1cc6d956 129/* The kinds of layouts available. */
2a8854a7
AC
130enum tui_layout_type
131{
132 SRC_COMMAND,
133 DISASSEM_COMMAND,
134 SRC_DISASSEM_COMMAND,
135 SRC_DATA_COMMAND,
136 DISASSEM_DATA_COMMAND,
137 UNDEFINED_LAYOUT
138};
c906108c 139
1cc6d956 140/* Basic data types that can be displayed in the data window. */
2a8854a7
AC
141enum tui_data_type
142{
143 TUI_REGISTER,
144 TUI_SCALAR,
145 TUI_COMPLEX,
146 TUI_STRUCT
147};
c906108c 148
52059ffd
TT
149enum tui_line_or_address_kind
150{
151 LOA_LINE,
152 LOA_ADDRESS
153};
154
1cc6d956 155/* Structure describing source line or line address. */
362c05fe 156struct tui_line_or_address
2a8854a7 157{
52059ffd 158 enum tui_line_or_address_kind loa;
362c05fe
AS
159 union
160 {
161 int line_no;
162 CORE_ADDR addr;
163 } u;
2a8854a7 164};
c906108c 165
1cc6d956 166/* Current Layout definition. */
2a8854a7
AC
167struct tui_layout_def
168{
6d012f14 169 enum tui_win_type display_mode;
2a8854a7 170 int split;
2a8854a7 171};
c906108c 172
1cc6d956 173/* Elements in the Source/Disassembly Window. */
2a8854a7
AC
174struct tui_source_element
175{
176 char *line;
362c05fe 177 struct tui_line_or_address line_or_addr;
6d012f14
AC
178 int is_exec_point;
179 int has_break;
2a8854a7 180};
c906108c
SS
181
182
1cc6d956 183/* Elements in the data display window content. */
2a8854a7
AC
184struct tui_data_element
185{
186 const char *name;
08ef48c5
MS
187 int item_no; /* The register number, or data display
188 number. */
2a8854a7 189 enum tui_data_type type;
22940a24 190 void *value;
2a8854a7 191 int highlight;
10f59415 192 char *content;
2a8854a7 193};
c906108c
SS
194
195
1cc6d956 196/* Elements in the command window content. */
2a8854a7
AC
197struct tui_command_element
198{
199 char *line;
200};
c906108c 201
2d42f9a8
JB
202#ifdef PATH_MAX
203# define MAX_LOCATOR_ELEMENT_LEN PATH_MAX
204#else
205# define MAX_LOCATOR_ELEMENT_LEN 1024
206#endif
c906108c 207
1cc6d956 208/* Elements in the locator window content. */
2a8854a7
AC
209struct tui_locator_element
210{
56d397a3
JK
211 /* Resolved absolute filename as returned by symtab_to_fullname. */
212 char full_name[MAX_LOCATOR_ELEMENT_LEN];
6d012f14
AC
213 char proc_name[MAX_LOCATOR_ELEMENT_LEN];
214 int line_no;
2a8854a7 215 CORE_ADDR addr;
13274fc3
UW
216 /* Architecture associated with code at this location. */
217 struct gdbarch *gdbarch;
2a8854a7 218};
c906108c 219
00b2bad4
SC
220/* Flags to tell what kind of breakpoint is at current line. */
221#define TUI_BP_ENABLED 0x01
222#define TUI_BP_DISABLED 0x02
223#define TUI_BP_HIT 0x04
224#define TUI_BP_CONDITIONAL 0x08
225#define TUI_BP_HARDWARE 0x10
226
227/* Position of breakpoint markers in the exec info string. */
228#define TUI_BP_HIT_POS 0
229#define TUI_BP_BREAK_POS 1
230#define TUI_EXEC_POS 2
231#define TUI_EXECINFO_SIZE 4
232
2a8854a7 233typedef char tui_exec_info_content[TUI_EXECINFO_SIZE];
c906108c 234
1cc6d956 235/* An content element in a window. */
2a8854a7
AC
236union tui_which_element
237{
1cc6d956 238 struct tui_source_element source; /* The source elements. */
dc2c33e4 239 struct tui_gen_win_info *data_window; /* Data display elements. */
1cc6d956
MS
240 struct tui_data_element data; /* Elements of data_window. */
241 struct tui_command_element command; /* Command elements. */
242 struct tui_locator_element locator; /* Locator elements. */
243 tui_exec_info_content simple_string; /* Simple char based elements. */
2a8854a7
AC
244};
245
246struct tui_win_element
247{
6d012f14 248 union tui_which_element which_element;
2a8854a7 249};
c906108c 250
1cc6d956 251/* This defines information about each logical window. */
cb2ce893 252struct tui_win_info : public tui_gen_win_info
2a8854a7 253{
33b906ab 254protected:
e7e11af4 255
33b906ab 256 explicit tui_win_info (enum tui_win_type type);
6792b55e
TT
257 DISABLE_COPY_AND_ASSIGN (tui_win_info);
258
13446e05
TT
259 /* Scroll the contents vertically. This is only called via
260 forward_scroll and backward_scroll. */
261 virtual void do_scroll_vertical (enum tui_scroll_direction,
262 int num_to_scroll) = 0;
263
264 /* Scroll the contents horizontally. This is only called via
265 left_scroll and right_scroll. */
266 virtual void do_scroll_horizontal (enum tui_scroll_direction,
267 int num_to_scroll) = 0;
268
33b906ab
TT
269public:
270
cb2ce893 271 ~tui_win_info () override;
33b906ab 272
8761a91b
TT
273 /* Clear the pertinent detail in the window. */
274 virtual void clear_detail () = 0;
275
44f0e208
TT
276 /* Return true if this window has the locator. */
277 virtual bool has_locator () const
278 {
279 return false;
280 }
281
cda37efb 282 /* Make this window visible or invisible. */
56122977 283 virtual void make_visible (bool visible);
cda37efb 284
2042b506
TT
285 /* Refresh this window and any associated windows. */
286 virtual void refresh ();
287
1825f487
TT
288 /* Called after all the TUI windows are refreshed, to let this
289 window have a chance to update itself further. */
290 virtual void refresh_all ()
291 {
292 }
293
3f02ce1e
TT
294 /* Called after a TUI window is given a new height; this updates any
295 related auxiliary windows. */
296 virtual void set_new_height (int height)
297 {
298 }
299
8903bd8a
TT
300 /* Compute the maximum height of this window. */
301 virtual int max_height () const;
302
214a5cbe
TT
303 /* Set whether this window is highglighted. */
304 void set_highlight (bool highlight)
305 {
306 is_highlighted = highlight;
307 }
308
13446e05
TT
309 /* Methods to scroll the contents of this window. Note that they
310 are named with "_scroll" coming at the end because the more
311 obvious "scroll_forward" is defined as a macro in term.h. */
312 void forward_scroll (int num_to_scroll);
313 void backward_scroll (int num_to_scroll);
314 void left_scroll (int num_to_scroll);
315 void right_scroll (int num_to_scroll);
316
33b906ab 317 /* Can this window ever be highlighted? */
214a5cbe 318 bool can_highlight = false;
33b906ab
TT
319
320 /* Is this window highlighted? */
214a5cbe 321 bool is_highlighted = false;
33b906ab
TT
322};
323
5cf82909
TT
324/* The base class for all source-like windows, namely the source and
325 disassembly windows. */
326
327struct tui_source_window_base : public tui_win_info
33b906ab 328{
5cf82909
TT
329protected:
330 explicit tui_source_window_base (enum tui_win_type type);
331 ~tui_source_window_base () override;
332 DISABLE_COPY_AND_ASSIGN (tui_source_window_base);
333
13446e05
TT
334 void do_scroll_horizontal (enum tui_scroll_direction,
335 int num_to_scroll) override;
336
5cf82909 337public:
8761a91b
TT
338
339 void clear_detail () override;
44f0e208
TT
340
341 /* Return true if this window has the locator. */
e6e41501
TT
342 bool has_locator () const override
343 {
344 return m_has_locator;
345 }
346
56122977 347 void make_visible (bool visible) override;
2042b506 348 void refresh () override;
1825f487 349 void refresh_all () override;
cda37efb 350
ad54d15b
TT
351 /* Refill the source window's source cache and update it. If this
352 is a disassembly window, then just update it. */
353 void refill ();
354
355 /* Set the location of the execution point. */
356 void set_is_exec_point_at (struct tui_line_or_address l);
357
3f02ce1e
TT
358 void set_new_height (int height) override;
359
e6e41501
TT
360 /* Does the locator belong to this window? */
361 bool m_has_locator = false;
362 /* Execution information window. */
363 struct tui_gen_win_info *execution_info = nullptr;
364 /* Used for horizontal scroll. */
365 int horizontal_offset = 0;
366 struct tui_line_or_address start_line_or_addr;
367
368 /* It is the resolved form as returned by symtab_to_fullname. */
369 char *fullname = nullptr;
370
371 /* Architecture associated with code at this location. */
372 struct gdbarch *gdbarch = nullptr;
33b906ab
TT
373};
374
5cf82909
TT
375/* A TUI source window. */
376
377struct tui_source_window : public tui_source_window_base
378{
379 tui_source_window ()
380 : tui_source_window_base (SRC_WIN)
381 {
382 }
383
384 DISABLE_COPY_AND_ASSIGN (tui_source_window);
13446e05
TT
385
386protected:
387
388 void do_scroll_vertical (enum tui_scroll_direction,
389 int num_to_scroll) override;
5cf82909
TT
390};
391
392/* A TUI disassembly window. */
393
394struct tui_disasm_window : public tui_source_window_base
395{
396 tui_disasm_window ()
397 : tui_source_window_base (DISASSEM_WIN)
398 {
399 }
400
401 DISABLE_COPY_AND_ASSIGN (tui_disasm_window);
13446e05
TT
402
403protected:
404
405 void do_scroll_vertical (enum tui_scroll_direction,
406 int num_to_scroll) override;
5cf82909
TT
407};
408
33b906ab
TT
409struct tui_data_window : public tui_win_info
410{
63901aec
TT
411 tui_data_window ()
412 : tui_win_info (DATA_WIN)
413 {
414 }
415
ee1d42d6 416 ~tui_data_window () override;
33b906ab 417 DISABLE_COPY_AND_ASSIGN (tui_data_window);
8761a91b
TT
418
419 void clear_detail () override;
1825f487 420 void refresh_all () override;
13446e05 421
3f02ce1e
TT
422 void set_new_height (int height) override;
423
5b81daba
TT
424 void refresh_window () override;
425
63901aec
TT
426 /* Start of data display content. */
427 tui_win_content data_content = NULL;
428 int data_content_count = 0;
429 /* Start of regs display content. */
430 tui_win_content regs_content = NULL;
431 int regs_content_count = 0;
432 int regs_column_count = 0;
433 /* Should regs be displayed at all? */
434 bool display_regs = false;
435 struct reggroup *current_group = nullptr;
238eb706 436
13446e05
TT
437protected:
438
439 void do_scroll_vertical (enum tui_scroll_direction,
440 int num_to_scroll) override;
441 void do_scroll_horizontal (enum tui_scroll_direction,
442 int num_to_scroll) override
443 {
444 }
33b906ab
TT
445};
446
447struct tui_cmd_window : public tui_win_info
448{
63901aec
TT
449 tui_cmd_window ()
450 : tui_win_info (CMD_WIN)
451 {
452 }
453
33b906ab 454 DISABLE_COPY_AND_ASSIGN (tui_cmd_window);
8761a91b
TT
455
456 void clear_detail () override;
13446e05 457
56122977 458 void make_visible (bool visible) override
cda37efb
TT
459 {
460 }
461
8903bd8a
TT
462 int max_height () const override;
463
5b81daba
TT
464 void refresh_window () override
465 {
466 }
467
63901aec 468 int start_line = 0;
81491aa0 469
13446e05
TT
470protected:
471
472 void do_scroll_vertical (enum tui_scroll_direction,
473 int num_to_scroll) override
474 {
475 }
476
477 void do_scroll_horizontal (enum tui_scroll_direction,
478 int num_to_scroll) override
479 {
480 }
2a8854a7 481};
c906108c 482
6d012f14 483extern int tui_win_is_auxillary (enum tui_win_type win_type);
c906108c
SS
484
485
1cc6d956 486/* Global Data. */
7fa29be9 487extern struct tui_win_info *tui_win_list[MAX_MAJOR_WINDOWS];
c906108c 488
e6e41501
TT
489#define TUI_SRC_WIN ((tui_source_window_base *) tui_win_list[SRC_WIN])
490#define TUI_DISASM_WIN ((tui_source_window_base *) tui_win_list[DISASSEM_WIN])
238eb706 491#define TUI_DATA_WIN ((tui_data_window *) tui_win_list[DATA_WIN])
81491aa0 492#define TUI_CMD_WIN ((tui_cmd_window *) tui_win_list[CMD_WIN])
c906108c 493
1cc6d956 494/* Data Manipulation Functions. */
dd1abb8c 495extern void tui_initialize_static_data (void);
22940a24 496extern struct tui_win_info *tui_alloc_win_info (enum tui_win_type);
dd1abb8c 497extern void tui_init_generic_part (struct tui_gen_win_info *);
2a8854a7 498extern tui_win_content tui_alloc_content (int, enum tui_win_type);
08ef48c5
MS
499extern int tui_add_content_elements (struct tui_gen_win_info *,
500 int);
dd1abb8c 501extern void tui_free_win_content (struct tui_gen_win_info *);
2a8854a7 502extern void tui_free_data_content (tui_win_content, int);
dd1abb8c 503extern void tui_free_all_source_wins_content (void);
a121b7c1 504extern struct tui_win_info *tui_partial_win_by_name (const char *);
f41cbf58 505extern const char *tui_win_name (const struct tui_gen_win_info *);
2a8854a7
AC
506extern enum tui_layout_type tui_current_layout (void);
507extern void tui_set_current_layout_to (enum tui_layout_type);
dd1abb8c
AC
508extern int tui_term_height (void);
509extern void tui_set_term_height_to (int);
510extern int tui_term_width (void);
511extern void tui_set_term_width_to (int);
dd1abb8c
AC
512extern struct tui_gen_win_info *tui_locator_win_info_ptr (void);
513extern struct tui_gen_win_info *tui_source_exec_info_win_ptr (void);
514extern struct tui_gen_win_info *tui_disassem_exec_info_win_ptr (void);
ad54d15b 515extern std::vector<tui_source_window_base *> &tui_source_windows ();
dd1abb8c
AC
516extern void tui_clear_source_windows (void);
517extern void tui_clear_source_windows_detail (void);
ad54d15b 518extern void tui_add_to_source_windows (struct tui_source_window_base *);
dd1abb8c
AC
519extern struct tui_win_info *tui_win_with_focus (void);
520extern void tui_set_win_with_focus (struct tui_win_info *);
5b6fe301 521extern struct tui_layout_def *tui_layout_def (void);
dd1abb8c
AC
522extern int tui_win_resized (void);
523extern void tui_set_win_resized_to (int);
524
525extern struct tui_win_info *tui_next_win (struct tui_win_info *);
526extern struct tui_win_info *tui_prev_win (struct tui_win_info *);
527
7806cea7
TT
528extern unsigned int tui_tab_width;
529
1a5c2598 530#endif /* TUI_TUI_DATA_H */
This page took 2.018617 seconds and 4 git commands to generate.