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
);
122 mvwaddstr (win
, 0, 3, winInfo
->title
);
123 wattroff (win
, attrs
);
132 unhighlightWin (TuiWinInfoPtr winInfo
)
134 if (m_winPtrNotNull (winInfo
) && winInfo
->generic
.handle
!= (WINDOW
*) NULL
)
136 boxWin ((TuiGenWinInfoPtr
) winInfo
, NO_HILITE
);
137 wrefresh (winInfo
->generic
.handle
);
138 m_setWinHighlightOff (winInfo
);
140 } /* unhighlightWin */
147 highlightWin (TuiWinInfoPtr winInfo
)
149 if (m_winPtrNotNull (winInfo
) &&
150 winInfo
->canHighlight
&& winInfo
->generic
.handle
!= (WINDOW
*) NULL
)
152 boxWin ((TuiGenWinInfoPtr
) winInfo
, HILITE
);
153 wrefresh (winInfo
->generic
.handle
);
154 m_setWinHighlightOn (winInfo
);
160 ** checkAndDisplayHighlightIfNecessay
163 checkAndDisplayHighlightIfNeeded (TuiWinInfoPtr winInfo
)
165 if (m_winPtrNotNull (winInfo
) && winInfo
->generic
.type
!= CMD_WIN
)
167 if (winInfo
->isHighlighted
)
168 highlightWin (winInfo
);
170 unhighlightWin (winInfo
);
174 } /* checkAndDisplayHighlightIfNeeded */
181 makeWindow (TuiGenWinInfoPtr winInfo
, int boxIt
)
185 handle
= newwin (winInfo
->height
,
189 winInfo
->handle
= handle
;
190 if (handle
!= (WINDOW
*) NULL
)
192 if (boxIt
== BOX_WINDOW
)
193 boxWin (winInfo
, NO_HILITE
);
194 winInfo
->isVisible
= TRUE
;
195 scrollok (handle
, TRUE
);
202 ** We can't really make windows visible, or invisible. So we
203 ** have to delete the entire window when making it visible,
204 ** and create it again when making it visible.
207 makeVisible (TuiGenWinInfoPtr winInfo
, int visible
)
209 /* Don't tear down/recreate command window */
210 if (winInfo
->type
== CMD_WIN
)
215 if (!winInfo
->isVisible
)
219 (winInfo
->type
!= CMD_WIN
&& !m_winIsAuxillary (winInfo
->type
)));
220 winInfo
->isVisible
= TRUE
;
224 winInfo
->isVisible
&& winInfo
->handle
!= (WINDOW
*) NULL
)
226 winInfo
->isVisible
= FALSE
;
227 tuiDelwin (winInfo
->handle
);
228 winInfo
->handle
= (WINDOW
*) NULL
;
237 ** Makes all windows invisible (except the command and locator windows)
240 makeAllVisible (int visible
)
244 for (i
= 0; i
< MAX_MAJOR_WINDOWS
; i
++)
246 if (m_winPtrNotNull (winList
[i
]) &&
247 ((winList
[i
])->generic
.type
) != CMD_WIN
)
249 if (m_winIsSourceType ((winList
[i
])->generic
.type
))
250 makeVisible ((winList
[i
])->detail
.sourceInfo
.executionInfo
,
252 makeVisible ((TuiGenWinInfoPtr
) winList
[i
], visible
);
257 } /* makeAllVisible */
261 ** Function to refresh all the windows currently displayed
264 refreshAll (TuiWinInfoPtr
* list
)
267 TuiGenWinInfoPtr locator
= locatorWinInfoPtr ();
269 for (type
= SRC_WIN
; (type
< MAX_MAJOR_WINDOWS
); type
++)
271 if (list
[type
] && list
[type
]->generic
.isVisible
)
273 if (type
== SRC_WIN
|| type
== DISASSEM_WIN
)
275 touchwin (list
[type
]->detail
.sourceInfo
.executionInfo
->handle
);
276 tuiRefreshWin (list
[type
]->detail
.sourceInfo
.executionInfo
);
278 touchwin (list
[type
]->generic
.handle
);
279 tuiRefreshWin (&list
[type
]->generic
);
282 if (locator
->isVisible
)
284 touchwin (locator
->handle
);
285 tuiRefreshWin (locator
);
292 /*********************************
293 ** Local Static Functions
294 *********************************/