Exemplo n.º 1
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);
}
Exemplo n.º 2
0
// 初始化菜单
BOOL CMenuHandler::Init()
{
	ProFileName Msg = L"Msg_Smart3DCoating.txt";

	char szSmart3DCoatingMenuName[] = "Smart3DCoatingMenuName";
	ProMenubarMenuAdd(szSmart3DCoatingMenuName, "Smart3DCoating", "Utilities", PRO_B_TRUE, Msg);

	AddMenuItem(szSmart3DCoatingMenuName, "CD_LoadSolid", OnLoadSolidActFn, MainAccessAvailable, Msg);
	AddMenuItem(szSmart3DCoatingMenuName, "CD_Clean", OnCleanActFn, UserAccessDefault, Msg);

	char szCreateChildMenuName[] = "Smart3DCoatingCreateMenuName";
	ProMenubarmenuMenuAdd(szSmart3DCoatingMenuName, szCreateChildMenuName, "CD_Create", NULL, PRO_B_TRUE, Msg);
	{
		AddMenuItem(szCreateChildMenuName, "CD_RapidCreate", OnRapidCreatActFn, UserAccessDefault, Msg, "CD_RapidCreate.gif");
		AddMenuItem(szCreateChildMenuName, "CD_CreateByEdge", OnCreateByEdgeActFn, UserAccessDefault, Msg, "CD_CreateByEdge.gif");
		AddMenuItem(szCreateChildMenuName, "CD_CreateByChain", OnCreateByChainActFn, UserAccessDefault, Msg, "CD_CreateByChain.gif");
		AddMenuItem(szCreateChildMenuName, "CD_CreateBySketch", OnCreateBySketchActFn, UserAccessDefault, Msg, "CD_CreateBySketch.gif");
	}
	char szTrimChildMenuName[] = "Smart3DCoatingTrimMenuName";
	ProMenubarmenuMenuAdd(szSmart3DCoatingMenuName, szTrimChildMenuName, "CD_Trim", NULL, PRO_B_TRUE, Msg);
	{
		AddMenuItem(szTrimChildMenuName, "CD_TrimByEdge", OnTrimByEdgeActFn, UserAccessDefault, Msg, "CD_TrimByEdge.gif");
		AddMenuItem(szTrimChildMenuName, "CD_TrimBySketch", OnTrimBySketchActFn, UserAccessDefault, Msg, "CD_TrimBySketch.gif");
	}

	char szMergeChildMenuName[] = "Smart3DCoatingMergeMenuName";
	ProMenubarmenuMenuAdd(szSmart3DCoatingMenuName, szMergeChildMenuName, "CD_Merge", NULL, PRO_B_TRUE, Msg);
	{
		AddMenuItem(szMergeChildMenuName, "CD_Merge_Manual", OnMergeManualActFn, UserAccessDefault, Msg, "CD_Merge_Manual.gif");
		AddMenuItem(szMergeChildMenuName, "CD_Merge_Auto", OnMergeAutoActFn, UserAccessDefault, Msg, "CD_Merge_Auto.gif");
	}

	char szOffsetChildMenuName[] = "Smart3DCoatingOffsetMenuName";
	ProMenubarmenuMenuAdd(szSmart3DCoatingMenuName, szOffsetChildMenuName, "CD_Offset", NULL, PRO_B_TRUE, Msg);
	{
		AddMenuItem(szOffsetChildMenuName, "CD_OffsetGeneral", OnOffsetGeneralActFn, UserAccessDefault, Msg, "CD_OffsetGeneral.gif");
		AddMenuItem(szOffsetChildMenuName, "CD_OffsetSingle", OnOffsetSingleActFn, UserAccessDefault, Msg, "CD_OffsetSingle.gif");
	}

	char szBottomChildMenuName[] = "Smart3DCoatingBottomMenuName";
	ProMenubarmenuMenuAdd(szSmart3DCoatingMenuName, szBottomChildMenuName, "CD_Bottom", NULL, PRO_B_TRUE, Msg);
	{
		AddMenuItem(szBottomChildMenuName, "CD_BottomCut", OnBottomCutActFn, UserAccessDefault, Msg, "CD_BottomCut.gif");
		AddMenuItem(szBottomChildMenuName, "CD_BottomExpand", OnBottomExpandActFn, UserAccessDefault, Msg, "CD_BottomExpand.gif");
	}
	AddMenuItem(szSmart3DCoatingMenuName, "CD_Create_Body", OnCreateBodyActFn, UserAccessDefault, Msg, "CD_Create_Body.gif");

	char szExportChildMenuName[] = "Smart3DCoatingExportMenuName";
	ProMenubarmenuMenuAdd(szSmart3DCoatingMenuName, szExportChildMenuName, "CD_Export", NULL, PRO_B_TRUE, Msg);
	{
		AddMenuItem(szExportChildMenuName, "CD_Export_STL", OnExportSTLActFn, UserAccessDefault, Msg, "CD_Export_STL.gif");
		//AddMenuItem(szExportChildMenuName, "CD_Export_STP", OnExportSTPActFn, UserAccessDefault, Msg);
	}

	AddMenuItem(szSmart3DCoatingMenuName, "CD_ShortCutMenu", ShowShortCutMenu, UserAccessDefault, Msg);

	// 许可证服务器
	char szLicenseServerChildMenuName[] = "CD_LicServerMenuName";
	ProMenubarmenuMenuAdd(szSmart3DCoatingMenuName, szLicenseServerChildMenuName, "CD_LicenseServer", NULL, PRO_B_TRUE, Msg);
	{
		// 连接
		AddMenuItem(szLicenseServerChildMenuName, "CD_ConnectServer", ConServerActFn, ConServerAccessDefault, Msg);
		// 断开
		AddMenuItem(szLicenseServerChildMenuName, "CD_DisconnectServer", DisConServerActFn, DisConServerAccessDefault, Msg);
	}

	// 帮助
	AddMenuItem(szSmart3DCoatingMenuName, "CD_Help", OnHelp, MainAccessAvailable, Msg);
	// 关于
	AddMenuItem(szSmart3DCoatingMenuName, "CD_About", OnAbout, MainAccessAvailable, Msg);

	// 初始化快捷菜单
	int menuid, menuid_create, menuid_edit, menuid_export;
	ProMenufileName Mnu = "ShortCut.mnu";
	ProMenufileName MnuCreate = "ShortCut_Create.mnu";
	ProMenufileName MnuEdit = "ShortCut_Edit.mnu";
	ProMenufileName MnuExport = "ShortCut_Export.mnu";

	// 注册菜单文件
	char szMnuName[] = "Smart3DCoating_ShortCut";
	char szMnuNameCreate[] = "ShortCut_Create";
	char szMnuNameEdit[] = "ShortCut_Edit";
	char szMnuNameExport[] = "ShortCut_Export";

	ProMenuFileRegister(szMnuName, Mnu, &menuid);
	ProMenuFileRegister(szMnuNameCreate, MnuCreate, &menuid_create);
	ProMenuFileRegister(szMnuNameEdit, MnuEdit, &menuid_edit);
	ProMenuFileRegister(szMnuNameExport, MnuExport, &menuid_export);

	// 设置菜单动作函数
	ProMenubuttonActionSet(szMnuName, "CD_Clean", (ProMenubuttonAction)OnCleanActFn, NULL, 0);
	ProMenubuttonActionSet(szMnuNameCreate, "CD_RapidCreate", (ProMenubuttonAction)OnRapidCreatActFn, NULL, 0);
	ProMenubuttonActionSet(szMnuNameCreate, "CD_CreateByEdge", (ProMenubuttonAction)OnCreateByEdgeActFn, NULL, 0);
	ProMenubuttonActionSet(szMnuNameCreate, "CD_CreateByChain", (ProMenubuttonAction)OnCreateByChainActFn, NULL, 0);
	ProMenubuttonActionSet(szMnuNameCreate, "CD_CreateBySketch", (ProMenubuttonAction)OnCreateBySketchActFn, NULL, 0);
	ProMenubuttonActionSet(szMnuNameEdit, "CD_TrimByEdge", (ProMenubuttonAction)OnTrimByEdgeActFn, NULL, 0);
	ProMenubuttonActionSet(szMnuNameEdit, "CD_TrimBySketch", (ProMenubuttonAction)OnTrimBySketchActFn, NULL, 0);
	ProMenubuttonActionSet(szMnuNameEdit, "CD_Merge_Manual", (ProMenubuttonAction)OnMergeManualActFn, NULL, 0);
	ProMenubuttonActionSet(szMnuNameEdit, "CD_Merge_Auto", (ProMenubuttonAction)OnMergeAutoActFn, NULL, 0);
	ProMenubuttonActionSet(szMnuNameEdit, "CD_OffsetGeneral", (ProMenubuttonAction)OnOffsetGeneralActFn, NULL, 0);
	ProMenubuttonActionSet(szMnuNameEdit, "CD_OffsetSingle", (ProMenubuttonAction)OnOffsetSingleActFn, NULL, 0);
	ProMenubuttonActionSet(szMnuNameEdit, "CD_BottomCut", (ProMenubuttonAction)OnBottomCutActFn, NULL, 0);
	ProMenubuttonActionSet(szMnuNameEdit, "CD_BottomExpand", (ProMenubuttonAction)OnBottomExpandActFn, NULL, 0);
	ProMenubuttonActionSet(szMnuNameEdit, "CD_Create_Body", (ProMenubuttonAction)OnCreateBodyActFn, NULL, 0);
	ProMenubuttonActionSet(szMnuNameExport, "CD_Export_STL", (ProMenubuttonAction)OnExportSTLActFn, NULL, 0);
	//ProMenubuttonActionSet(szMnuNameExport, "CD_Export_STP", (ProMenubuttonAction)OnExportSTPActFn, NULL, 0);
	ProMenubuttonActionSet(szMnuNameExport, "CD_Close", (ProMenubuttonAction)OnMenuQuit, NULL, 0);
	ProMenubuttonActionSet(szMnuName, szMnuName, (ProMenubuttonAction)ProMenuDelete, NULL, 0);
	ProMenubuttonActionSet(szMnuNameCreate, szMnuNameCreate, (ProMenubuttonAction)ProMenuDelete, NULL, 0);
	ProMenubuttonActionSet(szMnuNameEdit, szMnuNameEdit, (ProMenubuttonAction)ProMenuDelete, NULL, 0);
	ProMenubuttonActionSet(szMnuNameExport, szMnuNameExport, (ProMenubuttonAction)ProMenuDelete, NULL, 0);

	return TRUE;
}
Exemplo n.º 3
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, (char *)"Select All");
    err = ProUtilMenuStringsStrAdd(&w_menus, (char *)"Unsel All");
    err = ProUtilMenuStringsStrAdd(&w_menus, (char *)"Done Sel");
    err = ProUtilMenuStringsStrAdd(&w_menus, (char *)"Quit Sel");
    
    ProMenuFromStringsRegister ( (char *)"TkMenuUtilSelect", NULL, w_menus,
	NULL, NULL, &menu_id);
    err = ProMenubuttonActionSet((char *)"TkMenuUtilSelect", (char *)"Select All",
	(ProMenubuttonAction)ProUtilMenuToggleDone, &toggle_info, SELECT_ALL);
    err = ProMenubuttonActionSet((char *)"TkMenuUtilSelect", (char *)"Unsel All", 
	(ProMenubuttonAction)ProUtilMenuToggleDone, &toggle_info, UNSEL_ALL);
    err = ProMenubuttonActionSet((char *)"TkMenuUtilSelect", (char *)"Done Sel", 
	(ProMenubuttonAction)ProUtilMenuToggleDone, &toggle_info, DONE_SEL);
    err = ProMenubuttonActionSet((char *)"TkMenuUtilSelect", (char *)"Quit Sel",
	(ProMenubuttonAction)ProUtilMenuToggleDone, &toggle_info, QUIT_SEL);
    err = ProMenubuttonActionSet((char *)"TkMenuUtilSelect", (char *)"TkMenuUtilSelect", 
	(ProMenubuttonAction)ProUtilMenuToggleDone, &toggle_info, QUIT_SEL);

    err = ProMenuCreate(PROMENUTYPE_SUB, (char *)"TkMenuUtilSelect", &menu_id);
    err = ProMenuProcess((char *)"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);
}