📄 utilmenu.c
字号:
/*====================================================================*\FILE : UtilMenu.cPURPOSE : Utility functions used when working with menusHISTORY..DATE BUILD AUTHOR MODIFICATIONS10 Oct 96 H-01-14 Igor $$1 Created23-Nov-96 H-01-18 mgs $$2 Added ProUtilMenuKill() removed pd stuff03-Dec-96 H-01-19 Steve $$3 changed utilassign proto02-Feb-98 H-03-38 Pavel $$4 Added ProUtilMenubuttonHighlight, ...Activate14-Jul-98 I-01-14 Pavel $$5 Added ProUtilMenuIntValueSelect,..StringsFree11-Aug-98 I-01-16 Pavel $$6 Added ProUtilMenuStringManySelect28-Aug-98 I-01-17 Alexey $$7 Use PRO_B_TRUE instead of 1 in ProMenuDatamodeSet01-Jun-99 I-03-11 mka $$8 More includes \*====================================================================*/#ifndef lint static char UtilMenu_c [] = "@(#)UtilMenu.c 1.2 11/26/96";#endif /*--------------------------------------------------------------------*\Pro/Toolkit includes -- include this first\*--------------------------------------------------------------------*/#include <ProToolkit.h>#include <ProArray.h>#include <ProMenu.h>/*--------------------------------------------------------------------*\Application macros\*--------------------------------------------------------------------*/#include <TestError.h>#include <UtilMenu.h>/*====================================================================*\FUNCTION : ProUtilAssignPURPOSE : assigns option to a member (being dereferenced & casted to int) Can be used in promenu_on_button. The menu will diappear after the chosen menu button is pushed.\*====================================================================*/int ProUtilAssign(ProAppData p_member, int option){ ProError status; *((int *)p_member) = option; status = ProMenuDelete(); TEST_CALL_REPORT("ProMenuDelete","ProUtilAssign", status, status != PRO_TK_NO_ERROR); return (0);}/*====================================================================*\FUNCTION : ProUtilMenuKillPURPOSE : Deletes the number of menus given.\*====================================================================*/int ProUtilMenuKill(ProAppData p_member, int n_menus){ ProError status; int i; for (i = 0; i < n_menus; i++) { status = ProMenuDelete(); TEST_CALL_REPORT("ProMenuDelete","ProUtilMenuKill", status, status != PRO_TK_NO_ERROR); } return (0);}/*=============================================================*\ FUNCTION: ProUtilMenubuttonActivate PURPOSE: Activate/Deactivate button\*=============================================================*/ProError ProUtilMenubuttonActivate( char *menu, /* In : the menu name */ char *menubutton, /* In : the menubutton name */ int enable) /* In : 0 - dis, 1 - en */{ ProError err; if (enable) { err = ProMenubuttonActivate(menu, menubutton); TEST_CALL_REPORT("ProMenubuttonActivate()", "ProUtilMenubuttonActivate()", err, err != PRO_TK_NO_ERROR); } else { err = ProMenubuttonDeactivate(menu, menubutton); TEST_CALL_REPORT("ProMenubuttonDeactivate()", "ProUtilMenubuttonActivate()", err, err != PRO_TK_NO_ERROR); } return (err);} /*=============================================================*\ FUNCTION: ProUtilMenubuttonHighlight PURPOSE: Highlight / Unhighlight button\*=============================================================*/ProError ProUtilMenubuttonHighlight( char *menu, /* In : the menu name */ char *menubutton, /* In : the menubutton name */ int enable) /* In : 0 - dis, 1 - en */{ ProError err; if (enable) { err = ProMenubuttonHighlight(menu, menubutton); TEST_CALL_REPORT("ProMenubuttonHighlight()", "ProUtilMenubuttonActivate()", err, err != PRO_TK_NO_ERROR); } else { err = ProMenubuttonUnhighlight(menu, menubutton); TEST_CALL_REPORT("ProMenubuttonUnhighlight()", "ProUtilMenubuttonActivate()", err, err != PRO_TK_NO_ERROR); } return (err);} /*=============================================================*\ FUNCTION: ProUtilMenubuttonDeleteWithStatus PURPOSE: Call DeleteWithStatus func\*=============================================================*/int ProUtilMenubuttonDeleteWithStatus( ProAppData appdata, int status){ ProError err; err = ProMenuDeleteWithStatus(status); TEST_CALL_REPORT("ProMenuDeleteWithStatus()", "ProUtilMenubuttonDeleteWithStatus()", err, err != PRO_TK_NO_ERROR); return (0);}/*============================================================================*\ Function: ProUtilMenuIntValueSelect Purpose: Create menu/Select int value/Close menu Return: PRO_TK_NO_ERROR if value selected, or PRO_TK_GENERAL_ERROR \*============================================================================*/ProError ProUtilMenuIntValueSelect( ProUtilMenuButtons *buttons_array, /* In : The menu button array */ int *output_value){ ProError err; int i, n_buttons, menu_id; wchar_t **w_menu_buttons; for (n_buttons = 0; buttons_array[n_buttons].button[0]!='\0'; n_buttons++); if (n_buttons <= 1) return PRO_TK_NO_ERROR; ProUtilMenuStringsAlloc(&w_menu_buttons); for (i=1; i<n_buttons; i++) ProUtilMenuStringsStrAdd(&w_menu_buttons, buttons_array[i].button); ProMenuFromStringsRegister ( buttons_array[0].button, NULL, w_menu_buttons, NULL, NULL, &menu_id); ProUtilMenuStringsFree(&w_menu_buttons); for (i=0; i<n_buttons; i++) { if (buttons_array[i].special_flag & (TEST_CALL_PRO_MENU_DELETE | TEST_CALL_PRO_MENU_HOLD)) ProMenubuttonActionSet(buttons_array[0].button, buttons_array[i].button, (ProMenubuttonAction) (buttons_array[i].special_flag & TEST_CALL_PRO_MENU_DELETE ? ProMenuDelete : ProMenuHold), NULL, 0); else ProMenubuttonActionSet(buttons_array[0].button, buttons_array[i].button, (ProMenubuttonAction) ProUtilMenubuttonDeleteWithStatus, NULL, buttons_array[i].value); } for (i=1; i<n_buttons; i++) { if (buttons_array[i].special_flag & TEST_CALL_PRO_MENUBUTTON_DELETE) ProMenubuttonDelete(buttons_array[0].button, buttons_array[i].button, &menu_id); } err = ProMenuCreate( PROMENUTYPE_MAIN, buttons_array[0].button, &menu_id ); for (i=1; i<n_buttons; i++) { if (buttons_array[i].special_flag & (TEST_CALL_PRO_MENU_ACTIVATE | TEST_CALL_PRO_MENU_DEACTIVATE)) ProUtilMenubuttonActivate(buttons_array[0].button, buttons_array[i].button, buttons_array[i].special_flag & TEST_CALL_PRO_MENU_ACTIVATE); if (buttons_array[i].special_flag & (TEST_CALL_PRO_MENU_HIGHLIGHT | TEST_CALL_PRO_MENU_UNHIGHLIGHT)) ProUtilMenubuttonActivate(buttons_array[0].button, buttons_array[i].button, buttons_array[i].special_flag & TEST_CALL_PRO_MENU_HIGHLIGHT); } err = ProMenuProcess(buttons_array[0].button, output_value); return (err);}/*============================================================================*\ Function: ProUtilMenuStringsAlloc Purpose: Alloc memory for array of wchar_t* used in ProMenu functions\*============================================================================*/ProError ProUtilMenuStringsAlloc( wchar_t ***w_ptr){ ProError err; static wchar_t w_epmty[] = {'\0'}; wchar_t *w_p = w_epmty; err = ProArrayAlloc(0, sizeof(wchar_t*), 1, (ProArray*)w_ptr); if (err == PRO_TK_NO_ERROR) err = ProArrayObjectAdd((ProArray*)w_ptr, 0, 1, &w_p); return (err);}/*============================================================================*\ Function: ProUtilMenuStringsStrAdd Purpose: Alloc memory and add string to MenuStrings array\*============================================================================*/ProError ProUtilMenuStringsStrAdd( wchar_t ***w_ptr, char *str){ ProError err; wchar_t *w_p; int len, n_str; len = strlen(str); w_p = (wchar_t*)calloc(len + 1, sizeof(wchar_t)); if (w_p == NULL)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -