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