-
- pan->above = (PANEL *)0;
- pan->below = (PANEL *)0;
- if(__bottom_panel)
- { /* the stdscr pseudo panel always stays real bottom;
- so we insert after bottom panel*/
- pan->below = __bottom_panel;
- pan->above = __bottom_panel->above;
- if (pan->above)
- pan->above->below = pan;
- __bottom_panel->above = pan;
- }
- else
- __bottom_panel = pan;
- if(!__top_panel)
- __top_panel = pan;
- assert(__bottom_panel == &__stdscr_pseudo_panel);
- __calculate_obscure();
- dStack("<lb%d>",9,pan);
-} /* end of __panel_link_bottom */
-
-/*+-------------------------------------------------------------------------
- __panel_unlink(pan) - unlink panel from stack
---------------------------------------------------------------------------*/
-static void
-__panel_unlink(PANEL *pan)
-{
- PANEL *prev;
- PANEL *next;
-
-#ifdef TRACE
- dStack("<u%d>",1,pan);
- if(!__panel_is_linked(pan))
- return;
-#endif
-
- __override(pan,P_TOUCH);
- __free_obscure(pan);
-
- prev = pan->below;
- next = pan->above;
-
- if(prev)
- { /* if non-zero, we will not update the list head */
- prev->above = next;
- if(next)
- next->below = prev;
- }
- else if(next)
- next->below = prev;
- if(pan == __bottom_panel)
- __bottom_panel = next;
- if(pan == __top_panel)
- __top_panel = prev;
-
- __calculate_obscure();
-
- pan->above = (PANEL *)0;
- pan->below = (PANEL *)0;
- dStack("<u%d>",9,pan);
-} /* end of __panel_unlink */
-
-/*+-------------------------------------------------------------------------
- panel_window(pan) - get window associated with panel
---------------------------------------------------------------------------*/
-WINDOW *
-panel_window(const PANEL *pan)
-{
- return(pan ? pan->win : (WINDOW *)0);
-} /* end of panel_window */
-
-/*+-------------------------------------------------------------------------
- update_panels() - wnoutrefresh windows in an orderly fashion
---------------------------------------------------------------------------*/
-void
-update_panels(void)
-{
- PANEL *pan;
-
- dBug(("--> update_panels"));
- pan = __bottom_panel;
- while(pan)
- {
- __override(pan,P_UPDATE);
- pan = pan->above;
- }
-
- pan = __bottom_panel;
- while (pan)
- {
- if(is_wintouched(pan->win))
- Wnoutrefresh(pan);
- pan = pan->above;
- }
-} /* end of update_panels */
-
-/*+-------------------------------------------------------------------------
- hide_panel(pan) - remove a panel from stack
---------------------------------------------------------------------------*/
-int
-hide_panel(register PANEL *pan)
-{
- if(!pan)
- return(ERR);
-
- dBug(("--> hide_panel %s", USER_PTR(pan->user)));
-
- if(!__panel_is_linked(pan))
- {
- pan->above = (PANEL *)0;
- pan->below = (PANEL *)0;
- return(ERR);
- }
-
- __panel_unlink(pan);
- return(OK);
-} /* end of hide_panel */
-
-/*+-------------------------------------------------------------------------
- show_panel(pan) - place a panel on top of stack
-may already be in stack
---------------------------------------------------------------------------*/
-int
-show_panel(register PANEL *pan)
-{
- if(!pan)
- return(ERR);
- if(pan == __top_panel)
- return(OK);
- dBug(("--> show_panel %s", USER_PTR(pan->user)));
- if(__panel_is_linked(pan))
- (void)hide_panel(pan);
- __panel_link_top(pan);
- return(OK);
-} /* end of show_panel */
-
-/*+-------------------------------------------------------------------------
- top_panel(pan) - place a panel on top of stack
---------------------------------------------------------------------------*/
-int
-top_panel(register PANEL *pan)
-{
- return(show_panel(pan));
-} /* end of top_panel */
-
-/*+-------------------------------------------------------------------------
- del_panel(pan) - remove a panel from stack, if in it, and free struct
---------------------------------------------------------------------------*/
-int
-del_panel(register PANEL *pan)
-{
- if(pan)
- {
- dBug(("--> del_panel %s", USER_PTR(pan->user)));
- if(__panel_is_linked(pan))
- (void)hide_panel(pan);
- free((void *)pan);
- return(OK);
- }
- return(ERR);
-} /* end of del_panel */
-
-/*+-------------------------------------------------------------------------
- bottom_panel(pan) - place a panel on bottom of stack
-may already be in stack
---------------------------------------------------------------------------*/
-int
-bottom_panel(register PANEL *pan)
-{
- if(!pan)
- return(ERR);
- if(pan == __bottom_panel)
- return(OK);
- dBug(("--> bottom_panel %s", USER_PTR(pan->user)));
- if(__panel_is_linked(pan))
- (void)hide_panel(pan);
- __panel_link_bottom(pan);
- return(OK);
-} /* end of bottom_panel */
-
-/*+-------------------------------------------------------------------------
- new_panel(win) - create a panel and place on top of stack
---------------------------------------------------------------------------*/
-PANEL *
-new_panel(WINDOW *win)
-{
- PANEL *pan = (PANEL *)malloc(sizeof(PANEL));
-
- (void)__root_panel();
-
- if(pan)
- {
- pan->win = win;
- pan->above = (PANEL *)0;
- pan->below = (PANEL *)0;
- getbegyx(win, pan->wstarty, pan->wstartx);
- pan->wendy = pan->wstarty + getmaxy(win);
- pan->wendx = pan->wstartx + getmaxx(win);
-#ifdef TRACE
- pan->user = "new";
-#else
- pan->user = (char *)0;
-#endif
- pan->obscure = (PANELCONS *)0;
- (void)show_panel(pan);
- }
- return(pan);
-} /* end of new_panel */
-
-/*+-------------------------------------------------------------------------
- panel_above(pan)
---------------------------------------------------------------------------*/
-PANEL *
-panel_above(const PANEL *pan)
-{
- if(!pan)
- {
- /* if top and bottom are equal, we have no or only the pseudo panel;
- if not, we return the panel above the pseudo panel */
- return(__bottom_panel==__top_panel ? (PANEL*)0 : __bottom_panel->above);
- }
- else
- return(pan->above);
-} /* end of panel_above */
-
-/*+-------------------------------------------------------------------------
- panel_below(pan)
---------------------------------------------------------------------------*/
-PANEL *
-panel_below(const PANEL *pan)
-{
- if(!pan)
- {
- /* if top and bottom are equal, we have no or only the pseudo panel */
- return(__top_panel==__bottom_panel ? (PANEL*)0 : __top_panel);
- }
- else
- {
- /* we must not return the pseudo panel */
- return(pan->below==__bottom_panel ? (PANEL*) 0 : pan->below);
- }
-} /* end of panel_below */
-
-/*+-------------------------------------------------------------------------
- set_panel_userptr(pan,uptr)
---------------------------------------------------------------------------*/
-int
-set_panel_userptr(PANEL *pan, const void *uptr)
-{
- if(!pan)
- return(ERR);
- pan->user = uptr;
- return(OK);
-} /* end of set_panel_userptr */
-
-/*+-------------------------------------------------------------------------
- panel_userptr(pan)
---------------------------------------------------------------------------*/
-const void*
-panel_userptr(const PANEL *pan)
-{
- return(pan ? pan->user : (void *)0);
-} /* end of panel_userptr */
-
-/*+-------------------------------------------------------------------------
- move_panel(pan,starty,startx)
---------------------------------------------------------------------------*/
-int
-move_panel(PANEL *pan, int starty, int startx)
-{
- WINDOW *win;
-
- if(!pan)
- return(ERR);
- if(__panel_is_linked(pan))
- __override(pan,P_TOUCH);
- win = pan->win;
- if(mvwin(win,starty,startx))
- return(ERR);
- getbegyx(win, pan->wstarty, pan->wstartx);
- pan->wendy = pan->wstarty + getmaxy(win);
- pan->wendx = pan->wstartx + getmaxx(win);
- if(__panel_is_linked(pan))
- __calculate_obscure();
- return(OK);
-} /* end of move_panel */
-
-/*+-------------------------------------------------------------------------
- replace_panel(pan,win)
---------------------------------------------------------------------------*/
-int
-replace_panel(PANEL *pan, WINDOW *win)
-{
- if(!pan)
- return(ERR);
- if(__panel_is_linked(pan))
- __override(pan,P_TOUCH);
- pan->win = win;
- if(__panel_is_linked(pan))
- __calculate_obscure();
- return(OK);
-} /* end of replace_panel */
-
-/*+-------------------------------------------------------------------------
- panel_hidden(pan)
---------------------------------------------------------------------------*/
-int
-panel_hidden(const PANEL *pan)
-{
- if(!pan)
- return(ERR);
- return(__panel_is_linked(pan) ? TRUE : FALSE);
-} /* end of panel_hidden */
-
-/* end of panel.c */