post_form (FORM * form) { WINDOW *formwin; int err; int page; if (!form) RETURN(E_BAD_ARGUMENT); if (form->status & _POSTED) RETURN(E_POSTED); if (!(form->field)) RETURN(E_NOT_CONNECTED); formwin = Get_Form_Window(form); if ((form->cols > getmaxx(formwin)) || (form->rows > getmaxy(formwin))) RETURN(E_NO_ROOM); /* reset form->curpage to an invald value. This forces Set_Form_Page to do the page initialization which is required by post_form. */ page = form->curpage; form->curpage = -1; if ((err = _nc_Set_Form_Page(form,page,form->current))!=E_OK) RETURN(err); form->status |= _POSTED; Call_Hook(form,forminit); Call_Hook(form,fieldinit); _nc_Refresh_Current_Field(form); RETURN(E_OK); }
unpost_menu(MENU * menu) { WINDOW *win; T((T_CALLED("unpost_menu(%p)"), (void *)menu)); if (!menu) RETURN(E_BAD_ARGUMENT); if (menu->status & _IN_DRIVER) RETURN(E_BAD_STATE); if (!(menu->status & _POSTED)) RETURN(E_NOT_POSTED); Call_Hook(menu, itemterm); Call_Hook(menu, menuterm); win = Get_Menu_Window(menu); werase(win); wsyncup(win); assert(menu->sub); delwin(menu->sub); menu->sub = (WINDOW *)0; assert(menu->win); delwin(menu->win); menu->win = (WINDOW *)0; menu->status &= ~_POSTED; RETURN(E_OK); }
post_menu(MENU * menu) { T((T_CALLED("post_menu(%p)"), (void *)menu)); if (!menu) RETURN(E_BAD_ARGUMENT); if (menu->status & _IN_DRIVER) RETURN(E_BAD_STATE); if (menu->status & _POSTED) RETURN(E_POSTED); if (menu->items && *(menu->items)) { int y; int h = 1 + menu->spc_rows * (menu->rows - 1); WINDOW *win = Get_Menu_Window(menu); int maxy = getmaxy(win); if ((menu->win = newpad(h, menu->width))) { y = (maxy >= h) ? h : maxy; if (y >= menu->height) y = menu->height; if (!(menu->sub = subpad(menu->win, y, menu->width, 0, 0))) RETURN(E_SYSTEM_ERROR); } else RETURN(E_SYSTEM_ERROR); if (menu->status & _LINK_NEEDED) _nc_Link_Items(menu); } else RETURN(E_NOT_CONNECTED); menu->status |= _POSTED; if (!(menu->opt & O_ONEVALUE)) { ITEM **items; for (items = menu->items; *items; items++) { (*items)->value = FALSE; } } _nc_Draw_Menu(menu); Call_Hook(menu, menuinit); Call_Hook(menu, iteminit); _nc_Show_Menu(menu); RETURN(E_OK); }
/*--------------------------------------------------------------------------- | Facility : libnmenu | Function : void _nc_New_TopRow_and_CurrentItem( | MENU *menu, | int new_toprow, | ITEM *new_current_item) | | Description : Redisplay the menu so that the given row becomes the | top row and the given item becomes the new current | item. | | Return Values : - +--------------------------------------------------------------------------*/ void _nc_New_TopRow_and_CurrentItem(MENU *menu, int new_toprow, ITEM *new_current_item) { ITEM *cur_item; bool mterm_called = FALSE; bool iterm_called = FALSE; assert(menu); if (menu->status & _POSTED) { if (new_current_item != menu->curitem) { Call_Hook(menu,itemterm); iterm_called = TRUE; } if (new_toprow != menu->toprow) { Call_Hook(menu,menuterm); mterm_called = TRUE; } cur_item = menu->curitem; assert(cur_item); menu->toprow = new_toprow; menu->curitem = new_current_item; if (mterm_called) { Call_Hook(menu,menuinit); } if (iterm_called) { /* this means, move from the old current_item to the new one... */ Move_To_Current_Item( menu, cur_item ); Call_Hook(menu,iteminit); } if (mterm_called || iterm_called) { _nc_Show_Menu(menu); } else pos_menu_cursor(menu); } else { /* if we are not posted, this is quite simple */ menu->toprow = new_toprow; menu->curitem = new_current_item; } }
/*--------------------------------------------------------------------------- | Facility : libnform | Function : int set_current_field(FORM * form,FIELD * field) | | Description : Set the current field of the form to the specified one. | | Return Values : E_OK - success | E_BAD_ARGUMENT - invalid form or field pointer | E_REQUEST_DENIED - field not selectable | E_BAD_STATE - called from a hook routine | E_INVALID_FIELD - current field can't be left | E_SYSTEM_ERROR - system error +--------------------------------------------------------------------------*/ int set_current_field(FORM * form, FIELD * field) { int err = E_OK; if ( !form || !field ) RETURN(E_BAD_ARGUMENT); if ( (form != field->form) || Field_Is_Not_Selectable(field) ) RETURN(E_REQUEST_DENIED); if (!(form->status & _POSTED)) { form->current = field; form->curpage = field->page; } else { if (form->status & _IN_DRIVER) err = E_BAD_STATE; else { if (form->current != field) { if (!_nc_Internal_Validation(form)) err = E_INVALID_FIELD; else { Call_Hook(form,fieldterm); if (field->page != form->curpage) { Call_Hook(form,formterm); err = _nc_Set_Form_Page(form,field->page,field); Call_Hook(form,forminit); } else { err = _nc_Set_Current_Field(form,field); } Call_Hook(form,fieldinit); _nc_Refresh_Current_Field(form); } } } } RETURN(err); }
unpost_form (FORM * form) { if (!form) RETURN(E_BAD_ARGUMENT); if (!(form->status & _POSTED)) RETURN(E_NOT_POSTED); if (form->status & _IN_DRIVER) RETURN(E_BAD_STATE); Call_Hook(form,fieldterm); Call_Hook(form,formterm); werase(Get_Form_Window(form)); delwin(form->w); form->w = (WINDOW *)0; form->status &= ~_POSTED; RETURN(E_OK); }
set_form_page(FORM *form, int page) { int err = E_OK; T((T_CALLED("set_form_page(%p,%d)"), form, page)); if (!form || (page < 0) || (page >= form->maxpage)) RETURN(E_BAD_ARGUMENT); if (!(form->status & _POSTED)) { form->curpage = page; form->current = _nc_First_Active_Field(form); } else { if (form->status & _IN_DRIVER) err = E_BAD_STATE; else { if (form->curpage != page) { if (!_nc_Internal_Validation(form)) err = E_INVALID_FIELD; else { Call_Hook(form, fieldterm); Call_Hook(form, formterm); err = _nc_Set_Form_Page(form, page, (FIELD *)0); Call_Hook(form, forminit); Call_Hook(form, fieldinit); _nc_Refresh_Current_Field(form); } } } } RETURN(err); }