Remove "data_content" and "data_content_count" from TUI data window
[deliverable/binutils-gdb.git] / gdb / tui / tui-wingeneral.c
CommitLineData
f377b406 1/* General window behavior.
f33c6cbf 2
42a4f53d 3 Copyright (C) 1998-2019 Free Software Foundation, Inc.
f33c6cbf 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/>. */
c906108c 21
96ec9981 22#include "defs.h"
d7b2e967
AC
23#include "tui/tui.h"
24#include "tui/tui-data.h"
25#include "tui/tui-wingeneral.h"
26#include "tui/tui-win.h"
f33c6cbf 27
6a83354a 28#include "gdb_curses.h"
4e8f7a8b 29
c906108c
SS
30/***********************
31** PUBLIC FUNCTIONS
32***********************/
ec7d9e56 33
5b81daba
TT
34/* See tui-data.h. */
35
c906108c 36void
5b81daba 37tui_gen_win_info::refresh_window ()
c906108c 38{
5b81daba
TT
39 if (handle != NULL)
40 wrefresh (handle);
41}
c906108c 42
5b81daba
TT
43/* See tui-data.h. */
44
45void
46tui_data_window::refresh_window ()
47{
48 if (content_size > 0)
49 {
50 for (int i = 0; i < content_size; i++)
c906108c 51 {
5b6fe301 52 struct tui_gen_win_info *data_item_win_ptr;
c906108c 53
5b81daba 54 data_item_win_ptr = content[i]->which_element.data_window;
6ba8e26f 55 if (data_item_win_ptr != NULL
cafb3438 56 && data_item_win_ptr->handle != NULL)
6ba8e26f 57 wrefresh (data_item_win_ptr->handle);
c906108c
SS
58 }
59 }
c906108c 60 else
5b81daba 61 tui_gen_win_info::refresh_window ();
ec7d9e56 62}
c906108c 63
1cc6d956 64/* Function to delete the curses window, checking for NULL. */
c906108c 65void
5b6fe301 66tui_delete_win (WINDOW *window)
c906108c 67{
cafb3438 68 if (window != NULL)
c906108c
SS
69 delwin (window);
70
71 return;
ec7d9e56 72}
c906108c
SS
73
74
af101512 75/* Draw a border arround the window. */
2c0b251b 76static void
08ef48c5
MS
77box_win (struct tui_gen_win_info *win_info,
78 int highlight_flag)
c906108c 79{
6d012f14 80 if (win_info && win_info->handle)
c906108c 81 {
af101512
SC
82 WINDOW *win;
83 int attrs;
84
6d012f14 85 win = win_info->handle;
6ba8e26f 86 if (highlight_flag == HILITE)
af101512 87 attrs = tui_active_border_attrs;
c906108c 88 else
af101512
SC
89 attrs = tui_border_attrs;
90
91 wattron (win, attrs);
8b9cf735 92#ifdef HAVE_WBORDER
af101512
SC
93 wborder (win, tui_border_vline, tui_border_vline,
94 tui_border_hline, tui_border_hline,
95 tui_border_ulcorner, tui_border_urcorner,
96 tui_border_llcorner, tui_border_lrcorner);
8b9cf735
MK
97#else
98 box (win, tui_border_vline, tui_border_hline);
99#endif
6d012f14 100 if (win_info->title)
63a33118 101 mvwaddstr (win, 0, 3, win_info->title);
af101512 102 wattroff (win, attrs);
c906108c 103 }
af101512 104}
c906108c
SS
105
106
c906108c 107void
5b6fe301 108tui_unhighlight_win (struct tui_win_info *win_info)
c906108c 109{
e5908723 110 if (win_info != NULL
bbc228ee 111 && win_info->can_highlight
cb2ce893 112 && win_info->handle != NULL)
c906108c 113 {
cb2ce893
TT
114 box_win (win_info, NO_HILITE);
115 wrefresh (win_info->handle);
214a5cbe 116 win_info->set_highlight (false);
c906108c 117 }
ec7d9e56 118}
c906108c
SS
119
120
c906108c 121void
5b6fe301 122tui_highlight_win (struct tui_win_info *win_info)
c906108c 123{
6d012f14
AC
124 if (win_info != NULL
125 && win_info->can_highlight
cb2ce893 126 && win_info->handle != NULL)
c906108c 127 {
cb2ce893
TT
128 box_win (win_info, HILITE);
129 wrefresh (win_info->handle);
214a5cbe 130 win_info->set_highlight (true);
c906108c 131 }
ec7d9e56 132}
c906108c 133
c906108c 134void
5b6fe301 135tui_check_and_display_highlight_if_needed (struct tui_win_info *win_info)
c906108c 136{
cb2ce893 137 if (win_info != NULL && win_info->type != CMD_WIN)
c906108c 138 {
6d012f14
AC
139 if (win_info->is_highlighted)
140 tui_highlight_win (win_info);
c906108c 141 else
6d012f14 142 tui_unhighlight_win (win_info);
c906108c
SS
143
144 }
145 return;
ec7d9e56 146}
c906108c
SS
147
148
c906108c 149void
17374de4 150tui_make_window (struct tui_gen_win_info *win_info, enum tui_box box_it)
c906108c
SS
151{
152 WINDOW *handle;
153
6d012f14
AC
154 handle = newwin (win_info->height,
155 win_info->width,
156 win_info->origin.y,
157 win_info->origin.x);
158 win_info->handle = handle;
cafb3438 159 if (handle != NULL)
c906108c 160 {
6ba8e26f
AC
161 if (box_it == BOX_WINDOW)
162 box_win (win_info, NO_HILITE);
56122977 163 win_info->is_visible = true;
c906108c 164 scrollok (handle, TRUE);
c906108c 165 }
bc712bbf 166}
c906108c
SS
167
168
ec7d9e56
AC
169/* We can't really make windows visible, or invisible. So we have to
170 delete the entire window when making it visible, and create it
171 again when making it visible. */
48a3bd16
TT
172void
173tui_gen_win_info::make_visible (bool visible)
c906108c 174{
c906108c
SS
175 if (visible)
176 {
48a3bd16 177 if (!is_visible)
c906108c 178 {
17374de4
TT
179 tui_make_window (this, (tui_win_is_auxillary (type)
180 ? DONT_BOX_WINDOW : BOX_WINDOW));
48a3bd16 181 is_visible = true;
c906108c 182 }
c906108c 183 }
e5908723 184 else if (!visible
48a3bd16
TT
185 && is_visible
186 && handle != NULL)
c906108c 187 {
48a3bd16
TT
188 is_visible = false;
189 tui_delete_win (handle);
190 handle = NULL;
c906108c 191 }
ec7d9e56 192}
c906108c 193
ec7d9e56
AC
194void
195tui_make_visible (struct tui_gen_win_info *win_info)
196{
48a3bd16 197 win_info->make_visible (true);
ec7d9e56 198}
c906108c 199
c906108c 200void
ec7d9e56
AC
201tui_make_invisible (struct tui_gen_win_info *win_info)
202{
48a3bd16 203 win_info->make_visible (false);
cda37efb
TT
204}
205
206/* See tui-data.h. */
207
208void
56122977 209tui_source_window_base::make_visible (bool visible)
cda37efb 210{
48a3bd16
TT
211 if (execution_info != nullptr)
212 execution_info->make_visible (visible);
cda37efb
TT
213 tui_win_info::make_visible (visible);
214}
ec7d9e56 215
1cc6d956
MS
216/* Makes all windows invisible (except the command and locator
217 windows). */
ec7d9e56 218static void
56122977 219make_all_visible (bool visible)
c906108c
SS
220{
221 int i;
222
223 for (i = 0; i < MAX_MAJOR_WINDOWS; i++)
224 {
cda37efb
TT
225 if (tui_win_list[i] != NULL)
226 tui_win_list[i]->make_visible (visible);
c906108c
SS
227 }
228
229 return;
ec7d9e56
AC
230}
231
232void
233tui_make_all_visible (void)
234{
56122977 235 make_all_visible (true);
ec7d9e56
AC
236}
237
238void
239tui_make_all_invisible (void)
240{
56122977 241 make_all_visible (false);
ec7d9e56
AC
242}
243
2042b506
TT
244/* See tui-data.h. */
245
246void
247tui_win_info::refresh ()
248{
cb2ce893 249 touchwin (handle);
5b81daba 250 refresh_window ();
2042b506
TT
251}
252
253/* See tui-data.h. */
254
255void
256tui_source_window_base::refresh ()
257{
258 touchwin (execution_info->handle);
5b81daba 259 execution_info->refresh_window ();
2042b506
TT
260 tui_win_info::refresh ();
261}
262
ec7d9e56 263/* Function to refresh all the windows currently displayed. */
c906108c 264
c906108c 265void
5b6fe301 266tui_refresh_all (struct tui_win_info **list)
c906108c 267{
570dc176 268 int type;
3add462f 269 struct tui_locator_window *locator = tui_locator_win_info_ptr ();
c906108c
SS
270
271 for (type = SRC_WIN; (type < MAX_MAJOR_WINDOWS); type++)
272 {
cb2ce893 273 if (list[type] && list[type]->is_visible)
2042b506 274 list[type]->refresh ();
c906108c 275 }
6d012f14 276 if (locator->is_visible)
c906108c
SS
277 {
278 touchwin (locator->handle);
5b81daba 279 locator->refresh_window ();
c906108c 280 }
6ba8e26f 281}
c906108c
SS
282
283
284/*********************************
285** Local Static Functions
286*********************************/
This page took 2.52178 seconds and 4 git commands to generate.