1 /* General window behavior.
3 Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation,
6 Contributed by Hewlett-Packard Company.
8 This file is part of GDB.
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
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
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.
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 59 Temple Place - Suite 330,
23 Boston, MA 02111-1307, USA. */
25 /* FIXME: cagney/2002-02-28: The GDB coding standard indicates that
26 "defs.h" should be included first. Unfortunatly some systems
27 (currently Debian GNU/Linux) include the <stdbool.h> via <curses.h>
28 and they clash with "bfd.h"'s definiton of true/false. The correct
29 fix is to remove true/false from "bfd.h", however, until that
30 happens, hack around it by including "config.h" and <curses.h>
45 #include "tuiGeneralWin.h"
48 /***********************
50 ***********************/
56 tuiRefreshWin (TuiGenWinInfoPtr winInfo
)
58 if (winInfo
->type
== DATA_WIN
&& winInfo
->contentSize
> 0)
62 for (i
= 0; (i
< winInfo
->contentSize
); i
++)
64 TuiGenWinInfoPtr dataItemWinPtr
;
66 dataItemWinPtr
= &((TuiWinContent
)
67 winInfo
->content
)[i
]->whichElement
.dataWindow
;
68 if (m_genWinPtrNotNull (dataItemWinPtr
) &&
69 dataItemWinPtr
->handle
!= (WINDOW
*) NULL
)
70 wrefresh (dataItemWinPtr
->handle
);
73 else if (winInfo
->type
== CMD_WIN
)
79 if (winInfo
->handle
!= (WINDOW
*) NULL
)
80 wrefresh (winInfo
->handle
);
89 ** Function to delete the curses window, checking for null
92 tuiDelwin (WINDOW
* window
)
94 if (window
!= (WINDOW
*) NULL
)
101 /* Draw a border arround the window. */
103 boxWin (TuiGenWinInfoPtr winInfo
, int highlightFlag
)
105 if (winInfo
&& winInfo
->handle
)
110 win
= winInfo
->handle
;
111 if (highlightFlag
== HILITE
)
112 attrs
= tui_active_border_attrs
;
114 attrs
= tui_border_attrs
;
116 wattron (win
, attrs
);
117 wborder (win
, tui_border_vline
, tui_border_vline
,
118 tui_border_hline
, tui_border_hline
,
119 tui_border_ulcorner
, tui_border_urcorner
,
120 tui_border_llcorner
, tui_border_lrcorner
);
121 wattroff (win
, attrs
);
130 unhighlightWin (TuiWinInfoPtr winInfo
)
132 if (m_winPtrNotNull (winInfo
) && winInfo
->generic
.handle
!= (WINDOW
*) NULL
)
134 boxWin ((TuiGenWinInfoPtr
) winInfo
, NO_HILITE
);
135 wrefresh (winInfo
->generic
.handle
);
136 m_setWinHighlightOff (winInfo
);
138 } /* unhighlightWin */
145 highlightWin (TuiWinInfoPtr winInfo
)
147 if (m_winPtrNotNull (winInfo
) &&
148 winInfo
->canHighlight
&& winInfo
->generic
.handle
!= (WINDOW
*) NULL
)
150 boxWin ((TuiGenWinInfoPtr
) winInfo
, HILITE
);
151 wrefresh (winInfo
->generic
.handle
);
152 m_setWinHighlightOn (winInfo
);
158 ** checkAndDisplayHighlightIfNecessay
161 checkAndDisplayHighlightIfNeeded (TuiWinInfoPtr winInfo
)
163 if (m_winPtrNotNull (winInfo
) && winInfo
->generic
.type
!= CMD_WIN
)
165 if (winInfo
->isHighlighted
)
166 highlightWin (winInfo
);
168 unhighlightWin (winInfo
);
172 } /* checkAndDisplayHighlightIfNeeded */
179 makeWindow (TuiGenWinInfoPtr winInfo
, int boxIt
)
183 handle
= newwin (winInfo
->height
,
187 winInfo
->handle
= handle
;
188 if (handle
!= (WINDOW
*) NULL
)
190 if (boxIt
== BOX_WINDOW
)
191 boxWin (winInfo
, NO_HILITE
);
192 winInfo
->isVisible
= TRUE
;
193 scrollok (handle
, TRUE
);
200 ** We can't really make windows visible, or invisible. So we
201 ** have to delete the entire window when making it visible,
202 ** and create it again when making it visible.
205 makeVisible (TuiGenWinInfoPtr winInfo
, int visible
)
207 /* Don't tear down/recreate command window */
208 if (winInfo
->type
== CMD_WIN
)
213 if (!winInfo
->isVisible
)
217 (winInfo
->type
!= CMD_WIN
&& !m_winIsAuxillary (winInfo
->type
)));
218 winInfo
->isVisible
= TRUE
;
222 winInfo
->isVisible
&& winInfo
->handle
!= (WINDOW
*) NULL
)
224 winInfo
->isVisible
= FALSE
;
225 tuiDelwin (winInfo
->handle
);
226 winInfo
->handle
= (WINDOW
*) NULL
;
235 ** Makes all windows invisible (except the command and locator windows)
238 makeAllVisible (int visible
)
242 for (i
= 0; i
< MAX_MAJOR_WINDOWS
; i
++)
244 if (m_winPtrNotNull (winList
[i
]) &&
245 ((winList
[i
])->generic
.type
) != CMD_WIN
)
247 if (m_winIsSourceType ((winList
[i
])->generic
.type
))
248 makeVisible ((winList
[i
])->detail
.sourceInfo
.executionInfo
,
250 makeVisible ((TuiGenWinInfoPtr
) winList
[i
], visible
);
255 } /* makeAllVisible */
259 ** Function to refresh all the windows currently displayed
262 refreshAll (TuiWinInfoPtr
* list
)
265 TuiGenWinInfoPtr locator
= locatorWinInfoPtr ();
267 for (type
= SRC_WIN
; (type
< MAX_MAJOR_WINDOWS
); type
++)
269 if (list
[type
] && list
[type
]->generic
.isVisible
)
271 if (type
== SRC_WIN
|| type
== DISASSEM_WIN
)
273 touchwin (list
[type
]->detail
.sourceInfo
.executionInfo
->handle
);
274 tuiRefreshWin (list
[type
]->detail
.sourceInfo
.executionInfo
);
276 touchwin (list
[type
]->generic
.handle
);
277 tuiRefreshWin (&list
[type
]->generic
);
280 if (locator
->isVisible
)
282 touchwin (locator
->handle
);
283 tuiRefreshWin (locator
);
290 /*********************************
291 ** Local Static Functions
292 *********************************/