]>
Commit | Line | Data |
---|---|---|
f377b406 | 1 | /* TUI data manipulation routines. |
55fb0713 | 2 | |
3666a048 | 3 | Copyright (C) 1998-2021 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 | |
fdb01f0c | 25 | #include "tui/tui.h" |
6a83354a | 26 | #include "gdb_curses.h" /* For WINDOW. */ |
b73dd877 | 27 | #include "observable.h" |
6a83354a | 28 | |
7523da63 TT |
29 | /* A deleter that calls delwin. */ |
30 | struct curses_deleter | |
31 | { | |
32 | void operator() (WINDOW *win) const | |
33 | { | |
34 | delwin (win); | |
35 | } | |
36 | }; | |
37 | ||
32c1e210 TT |
38 | #define MIN_WIN_HEIGHT 3 |
39 | ||
1cc6d956 | 40 | /* Generic window information. */ |
32c1e210 | 41 | struct tui_win_info |
2a8854a7 | 42 | { |
fb54fa76 TT |
43 | protected: |
44 | ||
32c1e210 TT |
45 | tui_win_info () = default; |
46 | DISABLE_COPY_AND_ASSIGN (tui_win_info); | |
ab313b35 | 47 | |
3df505f6 TT |
48 | /* This is called after the window is resized, and should update the |
49 | window's contents. */ | |
32c1e210 | 50 | virtual void rerender (); |
3df505f6 | 51 | |
ab0e1f1a TT |
52 | virtual void make_window (); |
53 | ||
fb54fa76 | 54 | public: |
32c1e210 TT |
55 | tui_win_info (tui_win_info &&) = default; |
56 | virtual ~tui_win_info () = default; | |
ab313b35 | 57 | |
5b81daba TT |
58 | /* Call to refresh this window. */ |
59 | virtual void refresh_window (); | |
60 | ||
48a3bd16 TT |
61 | /* Make this window visible or invisible. */ |
62 | virtual void make_visible (bool visible); | |
63 | ||
152f3f4b | 64 | /* Return the name of this type of window. */ |
1cdf9e33 | 65 | virtual const char *name () const = 0; |
152f3f4b | 66 | |
c8ec2f43 | 67 | /* Compute the maximum height of this window. */ |
32c1e210 | 68 | virtual int max_height () const; |
c8ec2f43 | 69 | |
dc7ff8a6 | 70 | /* Compute the minimum height of this window. */ |
32c1e210 TT |
71 | virtual int min_height () const |
72 | { | |
73 | return MIN_WIN_HEIGHT; | |
74 | } | |
dc7ff8a6 | 75 | |
7c043ba6 TT |
76 | /* Compute the maximum width of this window. */ |
77 | int max_width () const; | |
78 | ||
79 | /* Compute the minimum width of this window. */ | |
80 | int min_width () const | |
81 | { | |
82 | return 3; | |
83 | } | |
84 | ||
1431937b TT |
85 | /* Return true if this window can be boxed. */ |
86 | virtual bool can_box () const | |
87 | { | |
32c1e210 | 88 | return true; |
1431937b TT |
89 | } |
90 | ||
ee556432 | 91 | /* Resize this window. The parameters are used to set the window's |
1e0c09ba | 92 | size and position. */ |
ee556432 TT |
93 | virtual void resize (int height, int width, |
94 | int origin_x, int origin_y); | |
d6ba6a11 | 95 | |
2d83e710 TT |
96 | /* Return true if this window is visible. */ |
97 | bool is_visible () const | |
98 | { | |
29db1eb3 | 99 | return handle != nullptr && tui_active; |
2d83e710 TT |
100 | } |
101 | ||
b551a89f TT |
102 | /* Return true if this window can accept the focus. */ |
103 | virtual bool can_focus () const | |
104 | { | |
105 | return true; | |
106 | } | |
107 | ||
45bbae5c | 108 | /* Disable output until the next call to doupdate. */ |
7134f2eb | 109 | void no_refresh () |
45bbae5c TT |
110 | { |
111 | if (handle != nullptr) | |
112 | wnoutrefresh (handle.get ()); | |
113 | } | |
114 | ||
d83f1fe6 TT |
115 | /* Called after the tab width has been changed. */ |
116 | virtual void update_tab_width () | |
117 | { | |
118 | } | |
119 | ||
30baf67b | 120 | /* Set whether this window is highlighted. */ |
214a5cbe TT |
121 | void set_highlight (bool highlight) |
122 | { | |
123 | is_highlighted = highlight; | |
124 | } | |
125 | ||
13446e05 TT |
126 | /* Methods to scroll the contents of this window. Note that they |
127 | are named with "_scroll" coming at the end because the more | |
128 | obvious "scroll_forward" is defined as a macro in term.h. */ | |
129 | void forward_scroll (int num_to_scroll); | |
130 | void backward_scroll (int num_to_scroll); | |
131 | void left_scroll (int num_to_scroll); | |
132 | void right_scroll (int num_to_scroll); | |
133 | ||
06210ce4 TT |
134 | /* Return true if this window can be scrolled, false otherwise. */ |
135 | virtual bool can_scroll () const | |
136 | { | |
137 | return true; | |
138 | } | |
139 | ||
1bace02a HD |
140 | /* Called for each mouse click inside this window. Coordinates MOUSE_X |
141 | and MOUSE_Y are 0-based relative to the window, and MOUSE_BUTTON can | |
142 | be 1 (left), 2 (middle), or 3 (right). */ | |
143 | virtual void click (int mouse_x, int mouse_y, int mouse_button) | |
144 | { | |
145 | } | |
146 | ||
b4ef5aeb TT |
147 | void check_and_display_highlight_if_needed (); |
148 | ||
32c1e210 TT |
149 | /* Window handle. */ |
150 | std::unique_ptr<WINDOW, curses_deleter> handle; | |
151 | /* Window width. */ | |
152 | int width = 0; | |
153 | /* Window height. */ | |
154 | int height = 0; | |
155 | /* Origin of window. */ | |
156 | int x = 0; | |
157 | int y = 0; | |
158 | ||
ab0e1f1a TT |
159 | /* Window title to display. */ |
160 | std::string title; | |
161 | ||
33b906ab | 162 | /* Is this window highlighted? */ |
214a5cbe | 163 | bool is_highlighted = false; |
32c1e210 TT |
164 | |
165 | protected: | |
166 | ||
167 | /* Scroll the contents vertically. This is only called via | |
168 | forward_scroll and backward_scroll. */ | |
169 | virtual void do_scroll_vertical (int num_to_scroll) = 0; | |
170 | ||
171 | /* Scroll the contents horizontally. This is only called via | |
172 | left_scroll and right_scroll. */ | |
173 | virtual void do_scroll_horizontal (int num_to_scroll) = 0; | |
33b906ab TT |
174 | }; |
175 | ||
32c1e210 TT |
176 | /* Constant definitions. */ |
177 | #define SRC_NAME "src" | |
178 | #define CMD_NAME "cmd" | |
179 | #define DATA_NAME "regs" | |
180 | #define DISASSEM_NAME "asm" | |
181 | #define STATUS_NAME "status" | |
c906108c | 182 | |
1cc6d956 | 183 | /* Global Data. */ |
7fa29be9 | 184 | extern struct tui_win_info *tui_win_list[MAX_MAJOR_WINDOWS]; |
c906108c | 185 | |
a38da35d | 186 | #define TUI_SRC_WIN ((tui_source_window *) tui_win_list[SRC_WIN]) |
3b0fb49e | 187 | #define TUI_DISASM_WIN ((tui_disasm_window *) tui_win_list[DISASSEM_WIN]) |
238eb706 | 188 | #define TUI_DATA_WIN ((tui_data_window *) tui_win_list[DATA_WIN]) |
81491aa0 | 189 | #define TUI_CMD_WIN ((tui_cmd_window *) tui_win_list[CMD_WIN]) |
f237f998 | 190 | #define TUI_STATUS_WIN ((tui_locator_window *) tui_win_list[STATUS_WIN]) |
c906108c | 191 | |
7eed1a8e TT |
192 | /* All the windows that are currently instantiated, in layout |
193 | order. */ | |
194 | extern std::vector<tui_win_info *> tui_windows; | |
1ce3e844 | 195 | |
7eed1a8e TT |
196 | /* Return a range adapter for iterating over TUI windows. */ |
197 | static inline std::vector<tui_win_info *> & | |
198 | all_tui_windows () | |
1ce3e844 | 199 | { |
7eed1a8e TT |
200 | return tui_windows; |
201 | } | |
1ce3e844 | 202 | |
1cc6d956 | 203 | /* Data Manipulation Functions. */ |
dd1abb8c AC |
204 | extern int tui_term_height (void); |
205 | extern void tui_set_term_height_to (int); | |
206 | extern int tui_term_width (void); | |
207 | extern void tui_set_term_width_to (int); | |
dd1abb8c | 208 | extern struct tui_win_info *tui_win_with_focus (void); |
9abd8a65 TT |
209 | extern bool tui_win_resized (); |
210 | extern void tui_set_win_resized_to (bool); | |
dd1abb8c AC |
211 | |
212 | extern struct tui_win_info *tui_next_win (struct tui_win_info *); | |
213 | extern struct tui_win_info *tui_prev_win (struct tui_win_info *); | |
214 | ||
7806cea7 TT |
215 | extern unsigned int tui_tab_width; |
216 | ||
1a5c2598 | 217 | #endif /* TUI_TUI_DATA_H */ |