gdb/djgpp: Add Hygon Dhyana processor support
[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 MIN_WIN_HEIGHT 3
106#define MIN_CMD_WIN_HEIGHT 3
c906108c 107
50265402 108/* Strings to display in the TUI status line. */
08ef48c5 109#define SINGLE_KEY "(SingleKey)"
50265402 110
1cc6d956 111/* The kinds of layouts available. */
2a8854a7
AC
112enum tui_layout_type
113{
114 SRC_COMMAND,
115 DISASSEM_COMMAND,
116 SRC_DISASSEM_COMMAND,
117 SRC_DATA_COMMAND,
118 DISASSEM_DATA_COMMAND,
119 UNDEFINED_LAYOUT
120};
c906108c 121
52059ffd
TT
122enum tui_line_or_address_kind
123{
124 LOA_LINE,
125 LOA_ADDRESS
126};
127
1cc6d956 128/* Structure describing source line or line address. */
362c05fe 129struct tui_line_or_address
2a8854a7 130{
52059ffd 131 enum tui_line_or_address_kind loa;
362c05fe
AS
132 union
133 {
134 int line_no;
135 CORE_ADDR addr;
136 } u;
2a8854a7 137};
c906108c 138
1cc6d956 139/* This defines information about each logical window. */
cb2ce893 140struct tui_win_info : public tui_gen_win_info
2a8854a7 141{
33b906ab 142protected:
e7e11af4 143
33b906ab 144 explicit tui_win_info (enum tui_win_type type);
6792b55e
TT
145 DISABLE_COPY_AND_ASSIGN (tui_win_info);
146
13446e05
TT
147 /* Scroll the contents vertically. This is only called via
148 forward_scroll and backward_scroll. */
c3bd716f 149 virtual void do_scroll_vertical (int num_to_scroll) = 0;
13446e05
TT
150
151 /* Scroll the contents horizontally. This is only called via
152 left_scroll and right_scroll. */
c3bd716f 153 virtual void do_scroll_horizontal (int num_to_scroll) = 0;
13446e05 154
3df505f6 155 void rerender () override;
5fcee43a 156
ab0e1f1a
TT
157 void make_window () override;
158
33b906ab
TT
159public:
160
f936bca2
TT
161 ~tui_win_info () override
162 {
163 }
33b906ab 164
1825f487
TT
165 /* Called after all the TUI windows are refreshed, to let this
166 window have a chance to update itself further. */
167 virtual void refresh_all ()
168 {
169 }
170
8903bd8a
TT
171 /* Compute the maximum height of this window. */
172 virtual int max_height () const;
173
d83f1fe6
TT
174 /* Called after the tab width has been changed. */
175 virtual void update_tab_width ()
176 {
177 }
178
214a5cbe
TT
179 /* Set whether this window is highglighted. */
180 void set_highlight (bool highlight)
181 {
182 is_highlighted = highlight;
183 }
184
13446e05
TT
185 /* Methods to scroll the contents of this window. Note that they
186 are named with "_scroll" coming at the end because the more
187 obvious "scroll_forward" is defined as a macro in term.h. */
188 void forward_scroll (int num_to_scroll);
189 void backward_scroll (int num_to_scroll);
190 void left_scroll (int num_to_scroll);
191 void right_scroll (int num_to_scroll);
192
06210ce4
TT
193 /* Return true if this window can be scrolled, false otherwise. */
194 virtual bool can_scroll () const
195 {
196 return true;
197 }
198
ab0e1f1a 199 virtual bool can_box () const
65962b20
TT
200 {
201 return true;
202 }
203
b4ef5aeb
TT
204 void check_and_display_highlight_if_needed ();
205
ab0e1f1a
TT
206 /* Window title to display. */
207 std::string title;
208
33b906ab 209 /* Can this window ever be highlighted? */
d6ba6a11 210 bool can_highlight = true;
33b906ab
TT
211
212 /* Is this window highlighted? */
214a5cbe 213 bool is_highlighted = false;
33b906ab
TT
214};
215
6658b1bf 216extern int tui_win_is_auxiliary (enum tui_win_type win_type);
c906108c
SS
217
218
1cc6d956 219/* Global Data. */
7fa29be9 220extern struct tui_win_info *tui_win_list[MAX_MAJOR_WINDOWS];
c906108c 221
a38da35d 222#define TUI_SRC_WIN ((tui_source_window *) tui_win_list[SRC_WIN])
e6e41501 223#define TUI_DISASM_WIN ((tui_source_window_base *) tui_win_list[DISASSEM_WIN])
238eb706 224#define TUI_DATA_WIN ((tui_data_window *) tui_win_list[DATA_WIN])
81491aa0 225#define TUI_CMD_WIN ((tui_cmd_window *) tui_win_list[CMD_WIN])
c906108c 226
1ce3e844
TT
227/* An iterator that iterates over all windows. */
228
229class tui_window_iterator
230{
231public:
232
233 typedef tui_window_iterator self_type;
234 typedef struct tui_win_info *value_type;
235 typedef struct tui_win_info *&reference;
236 typedef struct tui_win_info **pointer;
237 typedef std::forward_iterator_tag iterator_category;
238 typedef int difference_type;
239
240 explicit tui_window_iterator (enum tui_win_type type)
241 : m_type (type)
242 {
243 advance ();
244 }
245
246 tui_window_iterator ()
247 : m_type (MAX_MAJOR_WINDOWS)
248 {
249 }
250
251 bool operator!= (const self_type &other) const
252 {
253 return m_type != other.m_type;
254 }
255
256 value_type operator* () const
257 {
258 gdb_assert (m_type < MAX_MAJOR_WINDOWS);
259 return tui_win_list[m_type];
260 }
261
262 self_type &operator++ ()
263 {
264 ++m_type;
265 advance ();
266 return *this;
267 }
268
269private:
270
271 void advance ()
272 {
273 while (m_type < MAX_MAJOR_WINDOWS && tui_win_list[m_type] == nullptr)
274 ++m_type;
275 }
276
277 int m_type;
278};
279
280/* A range adapter for iterating over TUI windows. */
281
282struct all_tui_windows
283{
284 tui_window_iterator begin () const
285 {
286 return tui_window_iterator (SRC_WIN);
287 }
288
289 tui_window_iterator end () const
290 {
291 return tui_window_iterator ();
292 }
293};
294
295
1cc6d956 296/* Data Manipulation Functions. */
a121b7c1 297extern struct tui_win_info *tui_partial_win_by_name (const char *);
2a8854a7 298extern enum tui_layout_type tui_current_layout (void);
dd1abb8c
AC
299extern int tui_term_height (void);
300extern void tui_set_term_height_to (int);
301extern int tui_term_width (void);
302extern void tui_set_term_width_to (int);
3add462f 303extern struct tui_locator_window *tui_locator_win_info_ptr (void);
dd1abb8c 304extern void tui_clear_source_windows_detail (void);
dd1abb8c
AC
305extern struct tui_win_info *tui_win_with_focus (void);
306extern void tui_set_win_with_focus (struct tui_win_info *);
dd1abb8c
AC
307extern int tui_win_resized (void);
308extern void tui_set_win_resized_to (int);
309
310extern struct tui_win_info *tui_next_win (struct tui_win_info *);
311extern struct tui_win_info *tui_prev_win (struct tui_win_info *);
312
fede5273
TT
313/* Delete all the invisible windows. Note that it is an error to call
314 this when the command window is invisible -- we don't allow the
315 command window to be removed from the layout. */
316extern void tui_delete_invisible_windows ();
317
7806cea7
TT
318extern unsigned int tui_tab_width;
319
1a5c2598 320#endif /* TUI_TUI_DATA_H */
This page took 2.277018 seconds and 4 git commands to generate.