Truncate long TUI window titles
[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 57public:
c07aae6e 58 tui_gen_win_info (tui_gen_win_info &&) = default;
fb54fa76 59
f936bca2 60 virtual ~tui_gen_win_info ();
ab313b35 61
5b81daba
TT
62 /* Call to refresh this window. */
63 virtual void refresh_window ();
64
48a3bd16
TT
65 /* Make this window visible or invisible. */
66 virtual void make_visible (bool visible);
67
152f3f4b
TT
68 /* Return the name of this type of window. */
69 virtual const char *name () const
70 {
71 return "";
72 }
73
ee556432 74 /* Resize this window. The parameters are used to set the window's
1e0c09ba 75 size and position. */
ee556432
TT
76 virtual void resize (int height, int width,
77 int origin_x, int origin_y);
d6ba6a11 78
2d83e710
TT
79 /* Return true if this window is visible. */
80 bool is_visible () const
81 {
82 return handle != nullptr;
83 }
84
ab313b35
TT
85 /* Window handle. */
86 WINDOW *handle = nullptr;
87 /* Type of window. */
88 enum tui_win_type type;
89 /* Window width. */
90 int width = 0;
91 /* Window height. */
92 int height = 0;
93 /* Origin of window. */
94 struct tui_point origin = {0, 0};
ab313b35
TT
95 /* Viewport height. */
96 int viewport_height = 0;
2a8854a7 97};
2a5127c4 98
1cc6d956 99/* Constant definitions. */
08ef48c5 100#define DEFAULT_TAB_LEN 8
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
8903bd8a
TT
165 /* Compute the maximum height of this window. */
166 virtual int max_height () const;
167
d83f1fe6
TT
168 /* Called after the tab width has been changed. */
169 virtual void update_tab_width ()
170 {
171 }
172
214a5cbe
TT
173 /* Set whether this window is highglighted. */
174 void set_highlight (bool highlight)
175 {
176 is_highlighted = highlight;
177 }
178
13446e05
TT
179 /* Methods to scroll the contents of this window. Note that they
180 are named with "_scroll" coming at the end because the more
181 obvious "scroll_forward" is defined as a macro in term.h. */
182 void forward_scroll (int num_to_scroll);
183 void backward_scroll (int num_to_scroll);
184 void left_scroll (int num_to_scroll);
185 void right_scroll (int num_to_scroll);
186
06210ce4
TT
187 /* Return true if this window can be scrolled, false otherwise. */
188 virtual bool can_scroll () const
189 {
190 return true;
191 }
192
ab0e1f1a 193 virtual bool can_box () const
65962b20
TT
194 {
195 return true;
196 }
197
b4ef5aeb
TT
198 void check_and_display_highlight_if_needed ();
199
ab0e1f1a
TT
200 /* Window title to display. */
201 std::string title;
202
33b906ab 203 /* Can this window ever be highlighted? */
d6ba6a11 204 bool can_highlight = true;
33b906ab
TT
205
206 /* Is this window highlighted? */
214a5cbe 207 bool is_highlighted = false;
33b906ab
TT
208};
209
6658b1bf 210extern int tui_win_is_auxiliary (enum tui_win_type win_type);
c906108c
SS
211
212
1cc6d956 213/* Global Data. */
7fa29be9 214extern struct tui_win_info *tui_win_list[MAX_MAJOR_WINDOWS];
c906108c 215
a38da35d 216#define TUI_SRC_WIN ((tui_source_window *) tui_win_list[SRC_WIN])
e6e41501 217#define TUI_DISASM_WIN ((tui_source_window_base *) tui_win_list[DISASSEM_WIN])
238eb706 218#define TUI_DATA_WIN ((tui_data_window *) tui_win_list[DATA_WIN])
81491aa0 219#define TUI_CMD_WIN ((tui_cmd_window *) tui_win_list[CMD_WIN])
c906108c 220
1ce3e844
TT
221/* An iterator that iterates over all windows. */
222
223class tui_window_iterator
224{
225public:
226
227 typedef tui_window_iterator self_type;
228 typedef struct tui_win_info *value_type;
229 typedef struct tui_win_info *&reference;
230 typedef struct tui_win_info **pointer;
231 typedef std::forward_iterator_tag iterator_category;
232 typedef int difference_type;
233
234 explicit tui_window_iterator (enum tui_win_type type)
235 : m_type (type)
236 {
237 advance ();
238 }
239
240 tui_window_iterator ()
241 : m_type (MAX_MAJOR_WINDOWS)
242 {
243 }
244
245 bool operator!= (const self_type &other) const
246 {
247 return m_type != other.m_type;
248 }
249
250 value_type operator* () const
251 {
252 gdb_assert (m_type < MAX_MAJOR_WINDOWS);
253 return tui_win_list[m_type];
254 }
255
256 self_type &operator++ ()
257 {
258 ++m_type;
259 advance ();
260 return *this;
261 }
262
263private:
264
265 void advance ()
266 {
267 while (m_type < MAX_MAJOR_WINDOWS && tui_win_list[m_type] == nullptr)
268 ++m_type;
269 }
270
271 int m_type;
272};
273
274/* A range adapter for iterating over TUI windows. */
275
276struct all_tui_windows
277{
278 tui_window_iterator begin () const
279 {
280 return tui_window_iterator (SRC_WIN);
281 }
282
283 tui_window_iterator end () const
284 {
285 return tui_window_iterator ();
286 }
287};
288
289
1cc6d956 290/* Data Manipulation Functions. */
a121b7c1 291extern struct tui_win_info *tui_partial_win_by_name (const char *);
2a8854a7 292extern enum tui_layout_type tui_current_layout (void);
dd1abb8c
AC
293extern int tui_term_height (void);
294extern void tui_set_term_height_to (int);
295extern int tui_term_width (void);
296extern void tui_set_term_width_to (int);
3add462f 297extern struct tui_locator_window *tui_locator_win_info_ptr (void);
dd1abb8c 298extern void tui_clear_source_windows_detail (void);
dd1abb8c
AC
299extern struct tui_win_info *tui_win_with_focus (void);
300extern void tui_set_win_with_focus (struct tui_win_info *);
dd1abb8c
AC
301extern int tui_win_resized (void);
302extern void tui_set_win_resized_to (int);
303
304extern struct tui_win_info *tui_next_win (struct tui_win_info *);
305extern struct tui_win_info *tui_prev_win (struct tui_win_info *);
306
fede5273
TT
307/* Delete all the invisible windows. Note that it is an error to call
308 this when the command window is invisible -- we don't allow the
309 command window to be removed from the layout. */
310extern void tui_delete_invisible_windows ();
311
7806cea7
TT
312extern unsigned int tui_tab_width;
313
1a5c2598 314#endif /* TUI_TUI_DATA_H */
This page took 2.002005 seconds and 4 git commands to generate.