Introduce tui_win_info::make_visible_with_new_height
[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
cb2ce893 111 && win_info->handle != NULL)
c906108c 112 {
cb2ce893
TT
113 box_win (win_info, NO_HILITE);
114 wrefresh (win_info->handle);
214a5cbe 115 win_info->set_highlight (false);
c906108c 116 }
ec7d9e56 117}
c906108c
SS
118
119
c906108c 120void
5b6fe301 121tui_highlight_win (struct tui_win_info *win_info)
c906108c 122{
6d012f14
AC
123 if (win_info != NULL
124 && win_info->can_highlight
cb2ce893 125 && win_info->handle != NULL)
c906108c 126 {
cb2ce893
TT
127 box_win (win_info, HILITE);
128 wrefresh (win_info->handle);
214a5cbe 129 win_info->set_highlight (true);
c906108c 130 }
ec7d9e56 131}
c906108c 132
c906108c 133void
5b6fe301 134tui_check_and_display_highlight_if_needed (struct tui_win_info *win_info)
c906108c 135{
cb2ce893 136 if (win_info != NULL && win_info->type != CMD_WIN)
c906108c 137 {
6d012f14
AC
138 if (win_info->is_highlighted)
139 tui_highlight_win (win_info);
c906108c 140 else
6d012f14 141 tui_unhighlight_win (win_info);
c906108c
SS
142
143 }
144 return;
ec7d9e56 145}
c906108c
SS
146
147
c906108c 148void
17374de4 149tui_make_window (struct tui_gen_win_info *win_info, enum tui_box box_it)
c906108c
SS
150{
151 WINDOW *handle;
152
6d012f14
AC
153 handle = newwin (win_info->height,
154 win_info->width,
155 win_info->origin.y,
156 win_info->origin.x);
157 win_info->handle = handle;
cafb3438 158 if (handle != NULL)
c906108c 159 {
6ba8e26f
AC
160 if (box_it == BOX_WINDOW)
161 box_win (win_info, NO_HILITE);
56122977 162 win_info->is_visible = true;
c906108c 163 scrollok (handle, TRUE);
c906108c 164 }
bc712bbf 165}
c906108c
SS
166
167
ec7d9e56
AC
168/* We can't really make windows visible, or invisible. So we have to
169 delete the entire window when making it visible, and create it
170 again when making it visible. */
48a3bd16
TT
171void
172tui_gen_win_info::make_visible (bool visible)
c906108c 173{
c906108c
SS
174 if (visible)
175 {
48a3bd16 176 if (!is_visible)
c906108c 177 {
17374de4
TT
178 tui_make_window (this, (tui_win_is_auxillary (type)
179 ? DONT_BOX_WINDOW : BOX_WINDOW));
48a3bd16 180 is_visible = true;
c906108c 181 }
c906108c 182 }
e5908723 183 else if (!visible
48a3bd16
TT
184 && is_visible
185 && handle != NULL)
c906108c 186 {
48a3bd16
TT
187 is_visible = false;
188 tui_delete_win (handle);
189 handle = NULL;
c906108c 190 }
ec7d9e56 191}
c906108c 192
ec7d9e56
AC
193void
194tui_make_visible (struct tui_gen_win_info *win_info)
195{
48a3bd16 196 win_info->make_visible (true);
ec7d9e56 197}
c906108c 198
c906108c 199void
ec7d9e56
AC
200tui_make_invisible (struct tui_gen_win_info *win_info)
201{
48a3bd16 202 win_info->make_visible (false);
cda37efb
TT
203}
204
205/* See tui-data.h. */
206
207void
56122977 208tui_source_window_base::make_visible (bool visible)
cda37efb 209{
48a3bd16
TT
210 if (execution_info != nullptr)
211 execution_info->make_visible (visible);
cda37efb
TT
212 tui_win_info::make_visible (visible);
213}
ec7d9e56 214
1cc6d956
MS
215/* Makes all windows invisible (except the command and locator
216 windows). */
ec7d9e56 217static void
56122977 218make_all_visible (bool visible)
c906108c
SS
219{
220 int i;
221
222 for (i = 0; i < MAX_MAJOR_WINDOWS; i++)
223 {
cda37efb
TT
224 if (tui_win_list[i] != NULL)
225 tui_win_list[i]->make_visible (visible);
c906108c
SS
226 }
227
228 return;
ec7d9e56
AC
229}
230
231void
232tui_make_all_visible (void)
233{
56122977 234 make_all_visible (true);
ec7d9e56
AC
235}
236
237void
238tui_make_all_invisible (void)
239{
56122977 240 make_all_visible (false);
ec7d9e56
AC
241}
242
2042b506
TT
243/* See tui-data.h. */
244
245void
246tui_win_info::refresh ()
247{
cb2ce893 248 touchwin (handle);
5b81daba 249 refresh_window ();
2042b506
TT
250}
251
252/* See tui-data.h. */
253
254void
255tui_source_window_base::refresh ()
256{
257 touchwin (execution_info->handle);
5b81daba 258 execution_info->refresh_window ();
2042b506
TT
259 tui_win_info::refresh ();
260}
261
ec7d9e56 262/* Function to refresh all the windows currently displayed. */
c906108c 263
c906108c 264void
5b6fe301 265tui_refresh_all (struct tui_win_info **list)
c906108c 266{
570dc176 267 int type;
5b6fe301 268 struct tui_gen_win_info *locator = tui_locator_win_info_ptr ();
c906108c
SS
269
270 for (type = SRC_WIN; (type < MAX_MAJOR_WINDOWS); type++)
271 {
cb2ce893 272 if (list[type] && list[type]->is_visible)
2042b506 273 list[type]->refresh ();
c906108c 274 }
6d012f14 275 if (locator->is_visible)
c906108c
SS
276 {
277 touchwin (locator->handle);
5b81daba 278 locator->refresh_window ();
c906108c 279 }
6ba8e26f 280}
c906108c
SS
281
282
283/*********************************
284** Local Static Functions
285*********************************/
This page took 2.035121 seconds and 4 git commands to generate.