daily update
[deliverable/binutils-gdb.git] / gdb / tui / tui-wingeneral.c
CommitLineData
f377b406 1/* General window behavior.
f33c6cbf 2
0fb0cc75 3 Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2007, 2008, 2009
6aba47ca 4 Free Software Foundation, Inc.
f33c6cbf 5
f377b406
SC
6 Contributed by Hewlett-Packard Company.
7
8 This file is part of GDB.
9
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
a9762ec7 12 the Free Software Foundation; either version 3 of the License, or
f377b406
SC
13 (at your option) any later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
a9762ec7 21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c 22
96ec9981 23#include "defs.h"
d7b2e967
AC
24#include "tui/tui.h"
25#include "tui/tui-data.h"
26#include "tui/tui-wingeneral.h"
27#include "tui/tui-win.h"
f33c6cbf 28
6a83354a 29#include "gdb_curses.h"
4e8f7a8b 30
c906108c
SS
31/***********************
32** PUBLIC FUNCTIONS
33***********************/
ec7d9e56 34
1cc6d956 35/* Refresh the window. */
c906108c 36void
5b6fe301 37tui_refresh_win (struct tui_gen_win_info *win_info)
c906108c 38{
6d012f14 39 if (win_info->type == DATA_WIN && win_info->content_size > 0)
c906108c
SS
40 {
41 int i;
42
6d012f14 43 for (i = 0; (i < win_info->content_size); i++)
c906108c 44 {
5b6fe301 45 struct tui_gen_win_info *data_item_win_ptr;
c906108c 46
6ba8e26f 47 data_item_win_ptr = &((tui_win_content)
08ef48c5 48 win_info->content)[i]->which_element.data_window;
6ba8e26f
AC
49 if (data_item_win_ptr != NULL
50 && data_item_win_ptr->handle != (WINDOW *) NULL)
51 wrefresh (data_item_win_ptr->handle);
c906108c
SS
52 }
53 }
6d012f14 54 else if (win_info->type == CMD_WIN)
c906108c 55 {
1cc6d956 56 /* Do nothing. */
c906108c
SS
57 }
58 else
59 {
6d012f14
AC
60 if (win_info->handle != (WINDOW *) NULL)
61 wrefresh (win_info->handle);
c906108c
SS
62 }
63
64 return;
ec7d9e56 65}
c906108c
SS
66
67
1cc6d956 68/* Function to delete the curses window, checking for NULL. */
c906108c 69void
5b6fe301 70tui_delete_win (WINDOW *window)
c906108c
SS
71{
72 if (window != (WINDOW *) NULL)
73 delwin (window);
74
75 return;
ec7d9e56 76}
c906108c
SS
77
78
af101512 79/* Draw a border arround the window. */
c906108c 80void
08ef48c5
MS
81box_win (struct tui_gen_win_info *win_info,
82 int highlight_flag)
c906108c 83{
6d012f14 84 if (win_info && win_info->handle)
c906108c 85 {
af101512
SC
86 WINDOW *win;
87 int attrs;
88
6d012f14 89 win = win_info->handle;
6ba8e26f 90 if (highlight_flag == HILITE)
af101512 91 attrs = tui_active_border_attrs;
c906108c 92 else
af101512
SC
93 attrs = tui_border_attrs;
94
95 wattron (win, attrs);
8b9cf735 96#ifdef HAVE_WBORDER
af101512
SC
97 wborder (win, tui_border_vline, tui_border_vline,
98 tui_border_hline, tui_border_hline,
99 tui_border_ulcorner, tui_border_urcorner,
100 tui_border_llcorner, tui_border_lrcorner);
8b9cf735
MK
101#else
102 box (win, tui_border_vline, tui_border_hline);
103#endif
6d012f14
AC
104 if (win_info->title)
105 mvwaddstr (win, 0, 3, win_info->title);
af101512 106 wattroff (win, attrs);
c906108c 107 }
af101512 108}
c906108c
SS
109
110
c906108c 111void
5b6fe301 112tui_unhighlight_win (struct tui_win_info *win_info)
c906108c 113{
e5908723
MS
114 if (win_info != NULL
115 && win_info->generic.handle != (WINDOW *) NULL)
c906108c 116 {
6ba8e26f 117 box_win ((struct tui_gen_win_info *) win_info, NO_HILITE);
6d012f14
AC
118 wrefresh (win_info->generic.handle);
119 tui_set_win_highlight (win_info, 0);
c906108c 120 }
ec7d9e56 121}
c906108c
SS
122
123
c906108c 124void
5b6fe301 125tui_highlight_win (struct tui_win_info *win_info)
c906108c 126{
6d012f14
AC
127 if (win_info != NULL
128 && win_info->can_highlight
129 && win_info->generic.handle != (WINDOW *) NULL)
c906108c 130 {
6ba8e26f 131 box_win ((struct tui_gen_win_info *) win_info, HILITE);
6d012f14
AC
132 wrefresh (win_info->generic.handle);
133 tui_set_win_highlight (win_info, 1);
c906108c 134 }
ec7d9e56 135}
c906108c 136
c906108c 137void
5b6fe301 138tui_check_and_display_highlight_if_needed (struct tui_win_info *win_info)
c906108c 139{
6d012f14 140 if (win_info != NULL && win_info->generic.type != CMD_WIN)
c906108c 141 {
6d012f14
AC
142 if (win_info->is_highlighted)
143 tui_highlight_win (win_info);
c906108c 144 else
6d012f14 145 tui_unhighlight_win (win_info);
c906108c
SS
146
147 }
148 return;
ec7d9e56 149}
c906108c
SS
150
151
c906108c 152void
5b6fe301 153tui_make_window (struct tui_gen_win_info *win_info, int box_it)
c906108c
SS
154{
155 WINDOW *handle;
156
6d012f14
AC
157 handle = newwin (win_info->height,
158 win_info->width,
159 win_info->origin.y,
160 win_info->origin.x);
161 win_info->handle = handle;
c906108c
SS
162 if (handle != (WINDOW *) NULL)
163 {
6ba8e26f
AC
164 if (box_it == BOX_WINDOW)
165 box_win (win_info, NO_HILITE);
6d012f14 166 win_info->is_visible = TRUE;
c906108c 167 scrollok (handle, TRUE);
c906108c 168 }
bc712bbf 169}
c906108c
SS
170
171
ec7d9e56
AC
172/* We can't really make windows visible, or invisible. So we have to
173 delete the entire window when making it visible, and create it
174 again when making it visible. */
175static void
176make_visible (struct tui_gen_win_info *win_info, int visible)
c906108c 177{
1cc6d956 178 /* Don't tear down/recreate command window. */
ec7d9e56 179 if (win_info->type == CMD_WIN)
c906108c
SS
180 return;
181
182 if (visible)
183 {
6d012f14 184 if (!win_info->is_visible)
c906108c 185 {
ec7d9e56
AC
186 tui_make_window (win_info,
187 (win_info->type != CMD_WIN
6d012f14
AC
188 && !tui_win_is_auxillary (win_info->type)));
189 win_info->is_visible = TRUE;
c906108c 190 }
c906108c 191 }
e5908723
MS
192 else if (!visible
193 && win_info->is_visible
194 && win_info->handle != (WINDOW *) NULL)
c906108c 195 {
6d012f14 196 win_info->is_visible = FALSE;
ec7d9e56
AC
197 tui_delete_win (win_info->handle);
198 win_info->handle = (WINDOW *) NULL;
c906108c
SS
199 }
200
201 return;
ec7d9e56 202}
c906108c 203
ec7d9e56
AC
204void
205tui_make_visible (struct tui_gen_win_info *win_info)
206{
207 make_visible (win_info, 1);
208}
c906108c 209
c906108c 210void
ec7d9e56
AC
211tui_make_invisible (struct tui_gen_win_info *win_info)
212{
213 make_visible (win_info, 0);
214}
215
216
1cc6d956
MS
217/* Makes all windows invisible (except the command and locator
218 windows). */
ec7d9e56
AC
219static void
220make_all_visible (int visible)
c906108c
SS
221{
222 int i;
223
224 for (i = 0; i < MAX_MAJOR_WINDOWS; i++)
225 {
6d012f14
AC
226 if (tui_win_list[i] != NULL
227 && ((tui_win_list[i])->generic.type) != CMD_WIN)
c906108c 228 {
6d012f14
AC
229 if (tui_win_is_source_type ((tui_win_list[i])->generic.type))
230 make_visible ((tui_win_list[i])->detail.source_info.execution_info,
ec7d9e56 231 visible);
6d012f14 232 make_visible ((struct tui_gen_win_info *) tui_win_list[i], visible);
c906108c
SS
233 }
234 }
235
236 return;
ec7d9e56
AC
237}
238
239void
240tui_make_all_visible (void)
241{
242 make_all_visible (1);
243}
244
245void
246tui_make_all_invisible (void)
247{
248 make_all_visible (0);
249}
250
251/* Function to refresh all the windows currently displayed. */
c906108c 252
c906108c 253void
5b6fe301 254tui_refresh_all (struct tui_win_info **list)
c906108c 255{
22940a24 256 enum tui_win_type type;
5b6fe301 257 struct tui_gen_win_info *locator = tui_locator_win_info_ptr ();
c906108c
SS
258
259 for (type = SRC_WIN; (type < MAX_MAJOR_WINDOWS); type++)
260 {
6d012f14 261 if (list[type] && list[type]->generic.is_visible)
c906108c
SS
262 {
263 if (type == SRC_WIN || type == DISASSEM_WIN)
264 {
6d012f14
AC
265 touchwin (list[type]->detail.source_info.execution_info->handle);
266 tui_refresh_win (list[type]->detail.source_info.execution_info);
c906108c
SS
267 }
268 touchwin (list[type]->generic.handle);
ec7d9e56 269 tui_refresh_win (&list[type]->generic);
c906108c
SS
270 }
271 }
6d012f14 272 if (locator->is_visible)
c906108c
SS
273 {
274 touchwin (locator->handle);
ec7d9e56 275 tui_refresh_win (locator);
c906108c 276 }
6ba8e26f 277}
c906108c
SS
278
279
280/*********************************
281** Local Static Functions
282*********************************/
This page took 1.248933 seconds and 4 git commands to generate.