⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utilmenu.c

📁 Pro.TOOLKIT.Wildfire插件设计.配套光盘-141M.zip
💻 C
📖 第 1 页 / 共 2 页
字号:
	return (PRO_TK_GENERAL_ERROR);    ProStringToWstring(w_p, str);     err = ProArraySizeGet((ProArray)*w_ptr, &n_str);    err = ProArrayObjectAdd((ProArray*)w_ptr, n_str-1, 1, &w_p);    return (err);}/*============================================================================*\ Function:	ProUtilMenuStringsWstrAdd Purpose:       Alloc memory and add string to MenuStrings array\*============================================================================*/ProError ProUtilMenuStringsWstrAdd(    wchar_t ***w_ptr,    wchar_t *w_str){    ProError err;    wchar_t *w_p;    int len, n_str;    len = ProUtilWstrLen(w_str);    w_p = (wchar_t*)calloc(len + 1, sizeof(wchar_t));    if (w_p == NULL)	return (PRO_TK_GENERAL_ERROR);    ProUtilWstrcpy(w_p, w_str);     err = ProArraySizeGet((ProArray)*w_ptr, &n_str);    err = ProArrayObjectAdd((ProArray*)w_ptr, n_str-1, 1, &w_p);    return (err);}/*============================================================================*\ Function:	ProUtilMenuStringsIntValueSelect Purpose:       Select a string from menu and return it's number\*============================================================================*/ProError ProUtilMenuStringsIntValueSelect(    char    *menu_name,    wchar_t **w_ptr,    int	    *output_value){    ProUtilMenuButtons *buttons_array;    int i, n_buttons;    ProError err;    for(n_buttons=1; w_ptr[n_buttons-1][0] != '\0'; n_buttons++);    buttons_array = (ProUtilMenuButtons *)calloc(n_buttons+1, 	sizeof(ProUtilMenuButtons));        strcpy(buttons_array[0].button, menu_name);    buttons_array[0].special_flag = TEST_CALL_PRO_MENU_DELETE;    for(i=1; i<=n_buttons; i++)    {	ProWstringToString(buttons_array[i].button, w_ptr[i-1]);	buttons_array[i].value = i - 1;    }    err = ProUtilMenuIntValueSelect(buttons_array, output_value);    free(buttons_array);    return (err);}/*============================================================================*\ Function:	ProUtilMenuStringsFree Purpose:       Free memory allocated by ..Alloc, ..StrAdd, ..WstrAdd\*============================================================================*/ProError ProUtilMenuStringsFree(    wchar_t ***w_ptr){    ProError err;    int i, n_str;    wchar_t **w_p = *w_ptr;    err = ProArraySizeGet((ProArray)w_p, &n_str);    for (i=n_str-2; i>0; i--)	free(w_p[i]);    err = ProArrayFree((ProArray*)w_ptr);    return (err);}typedef struct menu_toggle_info{    char *menu_name;    wchar_t **w_menu_buttons;    int *button_status;    int n_buttons;} MenuToggleInfo;#define SELECT_ALL  0#define UNSEL_ALL   1#define DONE_SEL    2#define QUIT_SEL    3/*============================================================================*\ Function:	ProUtilMenuToggleOne Purpose:       Used from ProUtilMenuStringManySelect\*============================================================================*/int ProUtilMenuToggleOne(    MenuToggleInfo *p_toggle_info,    int n_str){    p_toggle_info->button_status[n_str] = !p_toggle_info->button_status[n_str];    return (0);}/*============================================================================*\ Function:	ProUtilMenuToggleDone Purpose:       Used from ProUtilMenuStringManySelect\*============================================================================*/int ProUtilMenuToggleDone(    MenuToggleInfo *p_toggle_info,    int action){    int i, sel;    ProError err;    ProCharName name;    switch (action)    {    case SELECT_ALL:    case UNSEL_ALL:	sel = (action == SELECT_ALL);	for (i=0; i<p_toggle_info->n_buttons; i++)	    if (p_toggle_info->button_status[i] != sel)	    {		ProWstringToString(name, p_toggle_info->w_menu_buttons[i]);		err = ProUtilMenubuttonHighlight(p_toggle_info->menu_name,		    name,  sel);		p_toggle_info->button_status[i] = sel;	    }	break;    case DONE_SEL:    case QUIT_SEL:	err = ProMenuDeleteWithStatus(action);	err = ProMenuDeleteWithStatus(action);	break;    }    return (0);}/*============================================================================*\ Function:	ProUtilMenuStringManySelect Purpose:       Select many string from menu with submenu Select All/Unsell All\*============================================================================*/ProError ProUtilMenuStringManySelect(    char    *menu_name,		   /* In : Menu name */    wchar_t **w_menu_buttons,	   /* In : Menu buttons */    int	    **output_array,	   /* Out: ProArray of numbers of selected 					   strings, use ProArrayFree to free					   memory */    int *p_n_sel)		   /* Out: Number of selected components */{    int i, n_but, n_sel, menu_id, action;    ProError err, ret_status = PRO_TK_USER_ABORT;    int *toggle_array;    MenuToggleInfo toggle_info;    ProCharName name;    wchar_t **w_menus;    for(n_but=0; w_menu_buttons[n_but][0] != '\0'; n_but++);    err = ProArrayAlloc(n_but, sizeof(int), 1, (ProArray*)&toggle_array);        toggle_info.w_menu_buttons = w_menu_buttons;    toggle_info.button_status = toggle_array;    toggle_info.n_buttons = n_but;    toggle_info.menu_name = menu_name;    err = ProMenuFromStringsRegister ( menu_name, NULL, 	w_menu_buttons, NULL, NULL, &menu_id);    for (i=0; i<n_but; i++)    {	toggle_array[i] = 0;	ProWstringToString(name, w_menu_buttons[i]);	err = ProMenubuttonActionSet(menu_name, name,	    (ProMenubuttonAction)ProUtilMenuToggleOne, &toggle_info, i);    }       err = ProMenubuttonActionSet(menu_name, menu_name,	(ProMenubuttonAction)ProMenuDelete, NULL, 0);    err = ProMenuModeSet(menu_name, PROMENUMODE_DATA);    err = ProMenuDatamodeSet(menu_name, PRO_B_TRUE );    err = ProMenuCreate(PROMENUTYPE_MAIN, menu_name, &menu_id);    err = ProUtilMenuStringsAlloc(&w_menus);    err = ProUtilMenuStringsStrAdd(&w_menus, "Select All");    err = ProUtilMenuStringsStrAdd(&w_menus, "Unsel All");    err = ProUtilMenuStringsStrAdd(&w_menus, "Done Sel");    err = ProUtilMenuStringsStrAdd(&w_menus, "Quit Sel");        ProMenuFromStringsRegister ( "TkMenuUtilSelect", NULL, w_menus,	NULL, NULL, &menu_id);    err = ProMenubuttonActionSet("TkMenuUtilSelect", "Select All",	(ProMenubuttonAction)ProUtilMenuToggleDone, &toggle_info, SELECT_ALL);    err = ProMenubuttonActionSet("TkMenuUtilSelect", "Unsel All", 	(ProMenubuttonAction)ProUtilMenuToggleDone, &toggle_info, UNSEL_ALL);    err = ProMenubuttonActionSet("TkMenuUtilSelect", "Done Sel", 	(ProMenubuttonAction)ProUtilMenuToggleDone, &toggle_info, DONE_SEL);    err = ProMenubuttonActionSet("TkMenuUtilSelect", "Quit Sel",	(ProMenubuttonAction)ProUtilMenuToggleDone, &toggle_info, QUIT_SEL);    err = ProMenubuttonActionSet("TkMenuUtilSelect", "TkMenuUtilSelect", 	(ProMenubuttonAction)ProUtilMenuToggleDone, &toggle_info, QUIT_SEL);    err = ProMenuCreate(PROMENUTYPE_SUB, "TkMenuUtilSelect", &menu_id);    err = ProMenuProcess("TkMenuUtilSelect", &action);    if(err == PRO_TK_NO_ERROR && action == DONE_SEL)    {        err = ProArrayAlloc(0, sizeof(int), 1, (ProArray*)output_array);	n_sel = 0;	for (i=0; i<n_but; i++)	    if (toggle_array[i])	    {		ProArrayObjectAdd((ProArray*)output_array, PRO_VALUE_UNUSED,		    1, &i);		n_sel++;	    }	if (n_sel>0)	{	    *p_n_sel = n_sel;	    ret_status = PRO_TK_NO_ERROR;	}	else	    err = ProArrayFree((ProArray*)output_array);    }    err = ProArrayFree((ProArray*)&toggle_array);    return (ret_status);}#undef SELECT_ALL#undef UNSEL_ALL#undef DONE_SEL#undef QUIT_SEL

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -