/*
Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/
/*--------------------------------------------------------------------*\
Pro/TOOLKIT includes
\*--------------------------------------------------------------------*/
#include <ProToolkit.h>
#include <ProObjects.h>
#include <ProAssembly.h>
#include <ProAsmcomp.h>
#include <ProElemId.h>
#include <ProElement.h>
#include <ProExpldstate.h>
#include <ProFeatType.h>
#include <ProMdl.h>
#include <ProMessage.h>
#include <ProModelitem.h>
#include <ProMenu.h>
#include <ProSelection.h>
#include <ProSolid.h>
#include <ProUtil.h>
#include <ProValue.h>
#include <ProScope.h>
#include "TestError.h"
#include <PTApplsUnicodeUtils.h>
#include <ProTKRunTime.h>
#include <UtilMessage.h>
/*--------------------------------------------------------------------*\
Application macros
\*--------------------------------------------------------------------*/
#define BUTTON_CANCEL 0
#define BUTTON_DONE 1
#define TOTAL_ITEMS( array_name ) \
(sizeof (array_name)/sizeof (MenuButt))
/*--------------------------------------------------------------------*\
Application data types
\*--------------------------------------------------------------------*/
typedef struct tag_menu_but{
char *button;
int action;
} MenuButt;
/*--------------------------------------------------------------------*\
Application global/external data
\*--------------------------------------------------------------------*/
MenuButt butts1[] =
{
{(char *)"All", PRO_REFCTRL_ALLOW_ALL},
{(char *)"Subassembly",PRO_REFCTRL_ALLOW_SUBASSEMBLY },
{(char *)"Skeleton",PRO_REFCTRL_ALLOW_SKELETON },
{(char *)"None", PRO_REFCTRL_ALLOW_NONE },
{(char *)"", -1}
};
MenuButt butts2[] =
{
{(char *)"Create backup",PRO_REFCTRL_BACKUP_REF },
{(char *)"Prohobit out-of-scope",PRO_REFCTRL_PROHIBIT_REF },
{(char *)"", -1}
};
MenuButt butts3[] =
{
{(char *)"Done",BUTTON_DONE },
{(char *)"Cancel",BUTTON_CANCEL },
{(char *)"", -1}
};
ProError ProTestXRControlOptionsGet (ProExtRefScope * xr_scope,
ProInvalidRefBehavior* behavior);
int ProTestRefCtrlSolidSelectSet (ProAppData data, int dummy);
int ProTestRefCtrlEnvirSet (ProAppData data, int dummy);
int ProTestRefCtrlSolidCurrentSet (ProAppData data, int dummy);
int ProTestRefCtrlEnvirGet (ProAppData data, int dummy);
int ProTestRefCtrlSolidSelectGet (ProAppData data, int dummy);
int ProTestRefCtrlSolidAllGet (ProAppData data, int dummy);
int ProTestRefCtrlCheckScope (ProAppData data, int dummy);
/*-------------------------------------------------------------------*\
COPIED REFERENCES MENU
\*-------------------------------------------------------------------*/
int ProTestCopiedRefSolidSelectStateGet (ProAppData data, int dummy);
int ProTestCopiedRefSolidAllGet (ProAppData data, int dummy);
int ProTestCopiedRefDependSet (ProAppData data, int dummy);
int ProTestCopiedRefInDependSet (ProAppData data, int dummy);
/*====================================================================*\
Function : ProTestCopiedRefMenuProcc
Purpose : Menu callback
\*====================================================================*/
int ProTestCopiedRefMenuProcc (ProAppData data, int dummy)
{
int dummyx, i;
char * tk_copiedref_items[] = {
"CRSolidStateGet",
"CRAllStateGet",
"CopiedRefDependSet",
"CRInDependSet",
""
};
wchar_t * wnames1 [sizeof(tk_copiedref_items)/sizeof (char*)];
for (i=0; i<sizeof(tk_copiedref_items)/sizeof (char*); i++)
{
wnames1[i] = (wchar_t*)calloc(PRO_NAME_SIZE, sizeof(wchar_t));
ProStringToWstring(wnames1[i], tk_copiedref_items[i]);
}
ProMenuFromStringsRegister((char *)"-TkCopiedRef", NULL, wnames1, NULL,
NULL, &dummyx);
ProMenubuttonActionSet((char *)"-TkCopiedRef", tk_copiedref_items[0],
(ProMenubuttonAction)ProTestCopiedRefSolidSelectStateGet,
(ProAppData) data , 0);
ProMenubuttonActionSet((char *)"-TkCopiedRef", tk_copiedref_items[1],
(ProMenubuttonAction)ProTestCopiedRefSolidAllGet,
(ProAppData) data ,0);
ProMenubuttonActionSet((char *)"-TkCopiedRef", tk_copiedref_items[2],
(ProMenubuttonAction)ProTestCopiedRefDependSet,
(ProAppData) data , 0);
ProMenubuttonActionSet((char *)"-TkCopiedRef", tk_copiedref_items[3],
(ProMenubuttonAction)ProTestCopiedRefInDependSet,
(ProAppData) data , 0);
ProMenubuttonActionSet((char *)"-TkCopiedRef", tk_copiedref_items[4],
(ProMenubuttonAction)ProMenuDelete,
(ProAppData) data ,0);
ProMenubuttonActionSet((char *)"-TkCopiedRef",(char *)"-TkCopiedRef" ,
(ProMenubuttonAction)ProMenuDelete, (ProAppData) data ,
0);
ProMenuCreate(PROMENUTYPE_MAIN,(char *)"-TkCopiedRef" , NULL);
ProMenuProcess((char *)"-TkCopiedRef", &dummyx);
return (0);
}
/*====================================================================*\
Function :
Purpose :
\*====================================================================*/
char * ProTestScopeToString ( ProExtRefScope scope)
{
switch (scope)
{
case PRO_REFCTRL_ALLOW_ALL:
return (char *)"All";
case PRO_REFCTRL_ALLOW_SUBASSEMBLY:
return (char *)"Subassembly";
case PRO_REFCTRL_ALLOW_SKELETON:
return (char *)"Skeleton";
case PRO_REFCTRL_ALLOW_NONE:
return (char *)"None";
}
return (char *)"";
}
/*====================================================================*\
Function :
Purpose :
\*====================================================================*/
char * ProTestBehToString (ProInvalidRefBehavior bh)
{
switch (bh)
{
case PRO_REFCTRL_BACKUP_REF:
return (char *)"Copy backup";
case PRO_REFCTRL_PROHIBIT_REF:
return (char *)"Prohibit";
}
return (char *)"";
}
/*====================================================================*\
Function : ProTestFileOpen()
Purpose : is used to open qcr file (if it is not open)
in info functions.
\*====================================================================*/
int ProTestFileOpen (FILE ** qcr_ref)
{
if (*qcr_ref != NULL)
return 0;
*qcr_ref = (FILE *)PTApplsUnicodeFopen ("extref.info", "w+t");
/*printf ("trying open <qcr_ref>\n");*/
if (*qcr_ref == NULL)
return 1;
/*printf ("open <qcr_ref> OK\n");*/
return 0;
}
/*====================================================================*\
Function : ProTestContrefHighlight()
Purpose :
\*====================================================================*/
ProError ProTestScopeHighlight(
ProExtRefScope xr_scope)
{
ProError err;
int i;
for (i=0; i<TOTAL_ITEMS(butts1); i++)
{
if (xr_scope != butts1[i].action)
{
err = ProMenubuttonUnhighlight((char *)"RefControl",
butts1[i].button);
TEST_CALL_REPORT ("ProMenubuttonUnhighlight()",
"ProTestScopeHighlight()",
err, err != PRO_TK_NO_ERROR);
}
else
{
err = ProMenubuttonHighlight((char *)"RefControl",
butts1[i].button);
TEST_CALL_REPORT ("ProMenubuttonHighlight()",
"ProTestScopeHighlight()",
err, err != PRO_TK_NO_ERROR);
}
}
return err;
}
/*====================================================================*\
Function : ProTestContrefHighlight()
Purpose :
\*====================================================================*/
ProError ProTestBehaviorHighlight(
ProInvalidRefBehavior behavior)
{
ProError err;
int i;
for (i=0; i<TOTAL_ITEMS(butts2); i++)
{
if (behavior != butts2[i].action)
{
err = ProMenubuttonUnhighlight((char *)"RefScope",
butts2[i].button);
TEST_CALL_REPORT ("ProMenubuttonUnhighlight()",
"ProTestBehaviorHighlight()",
err, err != PRO_TK_NO_ERROR);
}
else
{
err = ProMenubuttonHighlight((char *)"RefScope",
butts2[i].button);
TEST_CALL_REPORT ("ProMenubuttonHighlight()",
"ProTestBehaviorHighlight()",
err, err != PRO_TK_NO_ERROR);
}
}
return err;
}
/*====================================================================*\
Function : ProTestContrefHighlight()
Purpose :
\*====================================================================*/
int ProTestAssign(ProAppData p_member, int option)
{
*((int *)p_member) = option;
return (0);
}
/*====================================================================*\
Function : ProTestContrefHighlight()
Purpose :
\*====================================================================*/
void ProTestBackcopyActivSet (ProExtRefScope scope)
{
ProError status;
if (scope == PRO_REFCTRL_ALLOW_ALL)
{
status = ProMenubuttonDeactivate((char *)"RefScope", butts2[0].button);
TEST_CALL_REPORT ("ProMenubuttonDeactivate()",
"ProTestBackcopyActivSet()",
status, status != PRO_TK_NO_ERROR);
status = ProMenubuttonDeactivate((char *)"RefScope", butts2[1].button);
TEST_CALL_REPORT ("ProMenubuttonDeactivate",
"ProTestBackcopyActivSet",
status, status != PRO_TK_NO_ERROR);
}
else
{
status = ProMenubuttonActivate((char *)"RefScope", butts2[0].button);
TEST_CALL_REPORT ("ProMenubuttonActivate()",
"ProTestBackcopyActivSet()",
status, status != PRO_TK_NO_ERROR);
status = ProMenubuttonActivate((char *)"RefScope", butts2[1].button);
TEST_CALL_REPORT ("ProMenubuttonActivate()",
"ProTestBackcopyActivSet()",
status, status != PRO_TK_NO_ERROR);
}
return;
}
/*====================================================================*\
Function : ProTestContrefHighlight()
Purpose :
\*====================================================================*/
int ProTestScopeAssign(ProAppData p_member, int option)
{
*((int *)p_member) = option;
ProTestBackcopyActivSet ((ProExtRefScope) option );
return (0);
}
/*====================================================================*\
Function : ProTestContrefHighlight()
Purpose :
\*====================================================================*/
int ProTestDoneCancelAssign(ProAppData p_member, int option)
{
ProError status;
*((int *)p_member) = option;
status = ProMenuDelete();
status = ProMenuDelete();
status = ProMenuDelete();
TEST_CALL_REPORT("ProMenuDelete()","ProTestDoneCancelAssign()", status,
status != PRO_TK_NO_ERROR);
return (0);
}
int ProTestExtrefinfoMenuAction (ProAppData data, int dummy);
/*====================================================================*\
Function : ProTestExtrnReferences()
Purpose :
\*====================================================================*/
int ProTestExtrnReferences (ProMdl *model)
{
FILE * qcr_ref = NULL;
int dummy, i;
char * tk_xrefcon_items[] = {
"XRCSolidSet",
"XRCEnvSet",
"XRCCheckScope",
"XRCSolidGet",
"XRCEnvGet",
"XRCAllSolidGet",
"XRRefInfoGet",
"-TkCopiedRef",
"quit",
""
};
wchar_t * wnames1 [sizeof(tk_xrefcon_items)/sizeof (char*)];
for (i=0; i<sizeof(tk_xrefcon_items)/sizeof (char*); i++)
{
wnames1[i] = (wchar_t*)calloc(PRO_NAME_SIZE, sizeof(wchar_t));
ProStringToWstring(wnames1[i], tk_xrefcon_items[i]);
}
ProMenuFromStringsRegister((char *)"-TkXrefCont", NULL, wnames1, NULL,
NULL, &dummy);
ProMenubuttonActionSet((char *)"-TkXrefCont", tk_xrefcon_items[0],
(ProMenubuttonAction)ProTestRefCtrlSolidSelectSet,
(ProAppData) &qcr_ref , 0);
ProMenubuttonActionSet((char *)"-TkXrefCont", tk_xrefcon_items[1],
(ProMenubuttonAction)ProTestRefCtrlEnvirSet,
(ProAppData) &qcr_ref ,0);
ProMenubuttonActionSet((char *)"-TkXrefCont", tk_xrefcon_items[2],
(ProMenubuttonAction)ProTestRefCtrlCheckScope,
(ProAppData) &qcr_ref , 0);
ProMenubuttonActionSet((char *)"-TkXrefCont", tk_xrefcon_items[3],
(ProMenubuttonAction)ProTestRefCtrlSolidSelectGet,
(ProAppData) &qcr_ref , 0);
ProMenubuttonActionSet((char *)"-TkXrefCont", tk_xrefcon_items[4],
(ProMenubuttonAction)ProTestRefCtrlEnvirGet,
(ProAppData) &qcr_ref ,0);
ProMenubuttonActionSet((char *)"-TkXrefCont", tk_xrefcon_items[5],
(ProMenubuttonAction)ProTestRefCtrlSolidAllGet,
(ProAppData) &qcr_ref , 0);
ProMenubuttonActionSet((char *)"-TkXrefCont", tk_xrefcon_items[6],
(ProMenubuttonAction)ProTestExtrefinfoMenuAction,
(ProAppData) &qcr_ref ,
0);
ProMenubuttonActionSet((char *)"-TkXrefCont", tk_xrefcon_items[7],
(ProMenubuttonAction)ProTestCopiedRefMenuProcc,
(ProAppData) &qcr_ref ,
0);
ProMenubuttonActionSet((char *)"-TkXrefCont", tk_xrefcon_items[8],
(ProMenubuttonAction)ProMenuDelete, (ProAppData) &qcr_ref ,
0);
ProMenubuttonActionSet((char *)"-TkXrefCont", tk_xrefcon_items[9],
(ProMenubuttonAction)ProMenuDelete, (ProAppData) &qcr_ref ,
0);
ProMenubuttonActionSet((char *)"-TkXrefCont",(char *)"-TkXrefCont" ,
(ProMenubuttonAction)ProMenuDelete, (ProAppData) &qcr_ref ,
0);
ProMenuCreate(PROMENUTYPE_MAIN,(char *)"-TkXrefCont" , NULL);
ProMenuProcess((char *)"-TkXrefCont", &dummy);
if (qcr_ref != NULL)
fclose (qcr_ref);
return (0);
}
/*====================================================================*\
Function : ProTestXRControlOptionsGet()
Purpose :
\*====================================================================*/
ProError ProTestXRControlOptionsGet (
ProExtRefScope * xr_scope,
ProInvalidRefBehavior* behavior)
{
ProError err;
wchar_t * wnames1 [TOTAL_ITEMS (butts1)];
wchar_t * wnames2 [TOTAL_ITEMS (butts2)];
wchar_t * wnames3 [TOTAL_ITEMS (butts3)];
static char * menus [] = {"RefDone", "RefControl", "RefScope", ""};
int i, dummy;
int done_cancel;
for (i=0; i<TOTAL_ITEMS (butts1); i++)
{
wnames1[i] = (wchar_t*)calloc(PRO_NAME_SIZE, sizeof(wchar_t));
ProStringToWstring(wnames1[i], butts1[i].button);
}
for (i=0; i<TOTAL_ITEMS (butts2); i++)
{
wnames2[i] = (wchar_t*)calloc(PRO_NAME_SIZE, sizeof(wchar_t));
ProStringToWstring(wnames2[i], butts2[i].button);
}
for (i=0; i<TOTAL_ITEMS (butts3); i++)
{
wnames3[i] = (wchar_t*)calloc(PRO_NAME_SIZE, sizeof(wchar_t));
ProStringToWstring(wnames3[i], butts3[i].button);
}
/*----------------------------------------------------------*/
err = ProMenuFromStringsRegister((char *)"RefControl", NULL, wnames1, NULL,
NULL, &dummy);
TEST_CALL_REPORT("ProMenuFromStringsRegister()", "ProTestXRControlOptionsGet()",
err, err != PRO_TK_NO_ERROR);
for (i = 0; i< (TOTAL_ITEMS (butts1)) ; i++)
{
free(wnames1[i]);
}
err = ProMenubuttonActionSet(menus[1],menus[1], (ProMenubuttonAction)ProMenuDelete,
NULL,0);
for (i = 0; i< (TOTAL_ITEMS (butts1) - 1) ; i++)
{
ProMenubuttonActionSet( menus[1], butts1[i].button,
(ProMenubuttonAction)ProTestScopeAssign, (ProAppData) xr_scope,
butts1[i].action);
}
i = (TOTAL_ITEMS (butts1) - 1);
ProMenubuttonActionSet( menus[1], butts1[i].button,
(ProMenubuttonAction)ProMenuDelete, (ProAppData) xr_scope,
butts1[i].action);
/*----------------------------------------------------------*/
err = ProMenuFromStringsRegister((char *)"RefScope", NULL, wnames2, NULL,
NULL, &dummy);
TEST_CALL_REPORT("ProMenuFromStringsRegister()", "ProTestXRControlOptionsGet()",
err, err != PRO_TK_NO_ERROR);
for (i = 0; i< (TOTAL_ITEMS (butts2)) ; i++)
{
free(wnames2[i]);
}
err = ProMenubuttonActionSet(menus[2],menus[2], (ProMenubuttonAction)ProMenuDelete,
NULL,0);
for (i = 0; i< (TOTAL_ITEMS (butts2) - 1) ; i++)
{
ProMenubuttonActionSet( menus[2], butts2[i].button,
(ProMenubuttonAction)ProTestAssign, (ProAppData) behavior,
butts2[i].action);
}
i =(TOTAL_ITEMS (butts2) - 1) ;
ProMenubuttonActionSet( menus[2], butts2[i].button,
(ProMenubuttonAction)ProMenuDelete, (ProAppData) behavior,
butts2[i].action);
/*----------------------------------------------------------*/
err = ProMenuFromStringsRegister((char *)"RefDone", NULL, wnames3, NULL,
NULL, &dummy);
TEST_CALL_REPORT("ProMenuFromStringsRegister()", "ProTestSkelCopyCreate()",
err, err != PRO_TK_NO_ERROR);
for (i = 0; i< (TOTAL_ITEMS (butts3)) ; i++)
{
free(wnames3[i]);
}
err = ProMenubuttonActionSet(menus[0],menus[0], (ProMenubuttonAction)ProMenuDelete,
NULL,0);
for (i = 0; i< (TOTAL_ITEMS (butts3) - 1) ; i++)
{
err = ProMenubuttonActionSet( menus[0], butts3[i].button,
(ProMenubuttonAction)ProTestDoneCancelAssign, (ProAppData) &done_cancel,
butts3[i].action);
}
i = (TOTAL_ITEMS (butts3) - 1);
err = ProMenubuttonActionSet( menus[0], butts3[i].button,
(ProMenubuttonAction)ProMenuDelete, (ProAppData) &done_cancel,
butts3[i].action);
/*----------------------------------------------------------*/
err = ProCompoundmenuCreate(menus, &dummy);
TEST_CALL_REPORT ("ProCompoundmenuCreate()","ProTestXRControlOptionsGet()",
err ,
err != PRO_TK_NO_ERROR);
ProTestBehaviorHighlight(*behavior);
ProTestScopeHighlight (*xr_scope);
ProTestBackcopyActivSet (*xr_scope);
err = ProMenuProcess(menus[0], &dummy);
TEST_CALL_REPORT ("ProMenuProcess()",
"ProTestXRControlOptionsGet()",
err, err != PRO_TK_NO_ERROR);
if (done_cancel == BUTTON_DONE)
return (PRO_TK_NO_ERROR);
return (PRO_TK_E_NOT_FOUND);
}
/*====================================================================*\
Function : ProTestRefCtrlSolidSet()
Purpose :
\*====================================================================*/
ProError ProTestRefCtrlSolidSet (
ProSolid solid)
{
ProError err = PRO_TK_NO_ERROR;
ProExtRefScope scope = (ProExtRefScope)0;
ProInvalidRefBehavior beh = (ProInvalidRefBehavior)0;
err = ProRefCtrlSolidGet (solid, &scope, &beh);
TEST_CALL_REPORT ("ProRefCtrlSolidGet()", "ProTestRefCtrlSolidSet()", err ,
err != PRO_TK_NO_ERROR);
if (err == PRO_TK_E_NOT_FOUND)
{
scope = PRO_REFCTRL_ALLOW_ALL;
beh = PRO_REFCTRL_BACKUP_REF;
}
else
if (err != PRO_TK_NO_ERROR)
return err;
err = ProTestXRControlOptionsGet (&scope, &beh);
if (err==PRO_TK_E_NOT_FOUND)
return (PRO_TK_NO_ERROR);
err = ProRefCtrlSolidSet (solid, scope, beh);
TEST_CALL_REPORT ("ProRefCtrlSolidSet()", "ProTestRefCtrlSolidSet()", err ,
err != PRO_TK_NO_ERROR);
return err;
}
/*====================================================================*\
Function : ProTestRefCtrlEnvirSet()
Purpose : Menu callback
\*====================================================================*/
int ProTestRefCtrlEnvirSet (ProAppData data, int dummy)
{
ProError err = PRO_TK_NO_ERROR;
ProExtRefScope scope = (ProExtRefScope)0;
ProInvalidRefBehavior beh = (ProInvalidRefBehavior)0;
err = ProRefCtrlEnvirGet ( &scope, &beh);
TEST_CALL_REPORT ("ProRefCtrlEnvirGet()", "ProTestRefCtrlEnvirSet()", err ,
err != PRO_TK_NO_ERROR);
if (err != PRO_TK_NO_ERROR)
return 0;
err = ProTestXRControlOptionsGet (&scope, &beh);
if (err==PRO_TK_E_NOT_FOUND)
return (0);
err = ProRefCtrlEnvirSet ( scope, beh);
TEST_CALL_REPORT ("ProRefCtrlEnvirSet()", "ProTestRefCtrlEnvirSet()", err ,
err != PRO_TK_NO_ERROR);
return 0;
}
/*====================================================================*\
Function : ProTestRefCtrlSolidSelectSet()
Purpose : Menu buttun callback
\*====================================================================*/
int ProTestRefCtrlSolidSelectSet (ProAppData data, int dummy)
{
ProError err;
int n_sel;
ProSelection *sel_prt;
ProModelitem mdl;
ProSolid solid_to_RC_set;
err = ProSelect((char *)"prt_or_asm", 1, NULL, NULL, NULL, NULL, &sel_prt, &n_sel);
if (n_sel < 1 || err != PRO_TK_NO_ERROR)
return 0;
TEST_CALL_REPORT("ProSelect()", "ProTestRefCtrlSolidSelectSet()",
err, err != PRO_TK_NO_ERROR && err != PRO_TK_USER_ABORT &&
err != PRO_TK_PICK_ABOVE);
err = ProSelectionModelitemGet (sel_prt[0], (ProModelitem*) &mdl);
TEST_CALL_REPORT("ProSelectionModelitemGet()",
"ProTestRefCtrlSolidSelectSet()",
err, err != PRO_TK_NO_ERROR);
/* ??? */
err = ProModelitemMdlGet ( &mdl, (ProMdl*)&solid_to_RC_set);
TEST_CALL_REPORT("ProModelitemMdlGet()",
"ProTestRefCtrlSolidSelectSet()",
err, err != PRO_TK_NO_ERROR);
err = ProTestRefCtrlSolidSet (solid_to_RC_set);
return (0);
}
/*====================================================================*\
Function : ProTestRefCtrlSolidCurrentSet()
Purpose : Menu buttun callback
\*====================================================================*/
int ProTestRefCtrlSolidCurrentSet (ProAppData data, int dummy)
{
ProError err;
ProSolid solid_to_RC_set;
err = ProMdlCurrentGet ( (ProMdl*)&solid_to_RC_set);
TEST_CALL_REPORT ("ProMdlCurrentGet",
"ProTestRefCtrlSolidCurrentSet",
err, err != PRO_TK_NO_ERROR);
if (err != PRO_TK_NO_ERROR)
return (0);
err = ProTestRefCtrlSolidSet (solid_to_RC_set);
return (0);
}
/*====================================================================*\
Function : ProTestRefCtrlSolidGet()
Purpose :
\*====================================================================*/
ProError ProTestRefCtrlSolidGet (
FILE * qcr_ref,
ProSolid solid)
{
ProError err = PRO_TK_NO_ERROR;
ProExtRefScope scope = (ProExtRefScope)0;
ProInvalidRefBehavior beh = (ProInvalidRefBehavior)0;
ProMdlName mdl_name;
ProCharName cmdl_name;
ProMdlType type;
ProCharLine str;
err = ProMdlMdlnameGet (solid,mdl_name);
TEST_CALL_REPORT ("ProMdlMdlnameGet()", "ProTestRefCtrlSolidGet()", err ,
err != PRO_TK_NO_ERROR);
ProWstringToString (cmdl_name, mdl_name);
err = ProMdlTypeGet (solid, &type);
TEST_CALL_REPORT ("ProMdlTypeGet()", "ProTestRefCtrlSolidGet()", err ,
err != PRO_TK_NO_ERROR);
ProTKSprintf (str,
"Model name : %s\n",
cmdl_name);
ProTKFprintf (qcr_ref,"%s", str);
ProUtilMsgPrint( "gen", "TEST %0s", str);
ProTKSprintf (str,
"Model type : %d\n",
type);
ProTKFprintf (qcr_ref,"%s", str);
ProUtilMsgPrint( "gen", "TEST %0s", str);
err = ProRefCtrlSolidGet (solid, &scope, &beh);
TEST_CALL_REPORT ("ProRefCtrlSolidGet()", "ProTestRefCtrlSolidGet()", err ,
err != PRO_TK_NO_ERROR);
if (err == PRO_TK_E_NOT_FOUND)
{
ProTKSprintf (str,
"No reference control options are set in the model \n");
ProTKFprintf (qcr_ref,"%s", str);
ProUtilMsgPrint( "gen", "TEST %0s", str);
return (PRO_TK_NO_ERROR);
}
else
if (err != PRO_TK_NO_ERROR)
return err;
ProTKSprintf (str,
"External reference scope : %s\n",
ProTestScopeToString (scope));
ProTKFprintf (qcr_ref,"%s", str);
ProUtilMsgPrint( "gen", "TEST %0s", str);
ProTKSprintf (str,
"The system behavior upon scope violation : %s\n",
ProTestBehToString(beh));
ProTKFprintf (qcr_ref,"%s", str);
ProUtilMsgPrint( "gen", "TEST %0s", str);
return (PRO_TK_NO_ERROR);
}
/*====================================================================*\
Function : ProTestRefCtrlEnvirGet()
Purpose : Menu callback
\*====================================================================*/
int ProTestRefCtrlEnvirGet (ProAppData data, int dummy)
{
ProError err = PRO_TK_NO_ERROR;
ProExtRefScope scope = (ProExtRefScope)0;
ProInvalidRefBehavior beh = (ProInvalidRefBehavior)0;
ProCharLine str;
FILE * qcr_ref = *((FILE**) data);
ProTestFileOpen (&qcr_ref);
*((FILE**) data) = qcr_ref;
ProTKFprintf (qcr_ref,
"Run-time enviroment options for external reference control \n\n");
err = ProRefCtrlEnvirGet ( &scope, &beh);
TEST_CALL_REPORT ("ProRefCtrlEnvirGet()", "ProTestRefCtrlEnvirSet()", err ,
err != PRO_TK_NO_ERROR);
if (err != PRO_TK_NO_ERROR)
return 0;
ProTKSprintf (str,
"External reference scope is : %s\n",
ProTestScopeToString(scope));
ProTKFprintf (qcr_ref,"%s", str);
ProUtilMsgPrint( "gen", "TEST %0s", str);
ProTKSprintf (str,
"The system behavior upon scope violation is : %s\n",
ProTestBehToString(beh));
ProTKFprintf (qcr_ref,"%s", str);
ProUtilMsgPrint( "gen", "TEST %0s", str);
ProTKFprintf (qcr_ref,"\nEnd\n\n");
return (0);
}
/*====================================================================*\
Function : ProTestRefCtrlSolidSelectGet()
Purpose : Menu buttun callback
\*====================================================================*/
int ProTestRefCtrlSolidSelectGet (ProAppData data, int dummy)
{
ProError err;
int n_sel;
ProSelection *sel_prt;
ProModelitem mdl;
ProSolid solid_to_RC_set;
FILE * qcr_ref = *((FILE**) data);
ProTestFileOpen (&qcr_ref);
*((FILE**) data) = qcr_ref;
err = ProSelect((char *)"prt_or_asm", 1, NULL, NULL, NULL, NULL,
&sel_prt, &n_sel);
if (n_sel < 1 || err != PRO_TK_NO_ERROR)
return 0;
TEST_CALL_REPORT("ProSelect()", "ProTestRefCtrlSolidSelectGet()",
err, err != PRO_TK_NO_ERROR && err != PRO_TK_USER_ABORT &&
err != PRO_TK_PICK_ABOVE);
err = ProSelectionModelitemGet (sel_prt[0], (ProModelitem*) &mdl);
TEST_CALL_REPORT("ProSelectionModelitemGet()",
"ProTestRefCtrlSolidSelectGet()",
err, err != PRO_TK_NO_ERROR);
err = ProModelitemMdlGet ( &mdl, (ProMdl*) &solid_to_RC_set);
TEST_CALL_REPORT("ProModelitemMdlGet()",
"ProTestRefCtrlSolidSelectGet()",
err, err != PRO_TK_NO_ERROR);
ProTKFprintf (qcr_ref, "Get ext. ref. control for selected solid.\n\n");
err = ProTestRefCtrlSolidGet (qcr_ref, solid_to_RC_set);
ProTKFprintf (qcr_ref, "\nEnd\n\n");
return (0);
}
/*====================================================================*\
Function : ProTestRefCtrlSolidAllGet()
Purpose : Menu buttun callback
\*====================================================================*/
int ProTestRefCtrlSolidAllGet (ProAppData data, int dummy)
{
ProError err;
ProMdl *session_mdls;
FILE * qcr_ref = *((FILE**) data);
int arr_size = 0, i;
ProTestFileOpen (&qcr_ref);
*((FILE**) data) = qcr_ref;
ProTKFprintf (qcr_ref, "Get ext. ref. controls for all models in session.\n\n");
err = ProSessionMdlList (PRO_MDL_PART, & session_mdls, &arr_size);
TEST_CALL_REPORT("ProSessionMdlList()", "ProTestRefCtrlSolidAllGet()",
err, err != PRO_TK_NO_ERROR);
for (i = 0; i<arr_size; i++)
{
err = ProTestRefCtrlSolidGet (qcr_ref, (ProSolid)session_mdls[i]);
}
err = ProArrayFree ((ProArray*)& session_mdls);
TEST_CALL_REPORT("ProArrayFree()", "ProTestRefCtrlSolidAllGet()",
err, err != PRO_TK_NO_ERROR);
err = ProSessionMdlList (PRO_MDL_ASSEMBLY, & session_mdls, &arr_size);
TEST_CALL_REPORT("ProSessionMdlList()", "ProTestRefCtrlSolidAllGet()",
err, err != PRO_TK_NO_ERROR);
for (i = 0; i<arr_size; i++)
{
err = ProTestRefCtrlSolidGet (qcr_ref, (ProSolid)session_mdls[i]);
}
/*
---------------------------------
err = ProArrayFree ((ProArray*)& session_mdls);
TEST_CALL_REPORT("ProArrayFree()", "ProTestRefCtrlSolidAllGet()",
err, err != PRO_TK_NO_ERROR);
----------------------------------
*/
ProTKFprintf (qcr_ref, "\nEnd\n\n");
return (0);
}
/*====================================================================*\
Function : ProTestSolidInfoWrite()
Purpose :
\*====================================================================*/
ProError ProTestSolidInfoWrite (
FILE * qcr_ref,
ProSolid solid)
{
ProError err = PRO_TK_NO_ERROR;
ProMdlName mdl_name;
ProCharName cmdl_name;
ProMdlType type;
if (solid == NULL)
{
ProTKFprintf (qcr_ref,
"solid is NULL.\n");
return PRO_TK_NO_ERROR;
}
err = ProMdlMdlnameGet (solid,mdl_name);
TEST_CALL_REPORT ("ProMdlMdlnameGet()", "ProTestSolidInfoWrite()", err ,
err != PRO_TK_NO_ERROR);
ProWstringToString (cmdl_name, mdl_name);
err = ProMdlTypeGet (solid, &type);
TEST_CALL_REPORT ("ProMdlTypeGet()", "ProTestSolidInfoWrite()", err ,
err != PRO_TK_NO_ERROR);
ProTKFprintf (qcr_ref,
"Model : %s\n",
cmdl_name);
ProTKFprintf (qcr_ref,
"Model type : %d\n",
type);
return err;
}
/*====================================================================*\
Function : ProTestRefCtrlCheckScope()
Purpose : Menu buttun callback
\*====================================================================*/
int ProTestRefCtrlCheckScope (ProAppData data, int dummy)
{
ProError err;
int n_sel;
ProSelection *sel_p;
ProMdl mdl = NULL;
ProModelitem mitem;
ProSolid solid, ref_solid;
ProAsmcomppath own_comp, ref_comp;
FILE * qcr_ref = *((FILE**) data);
ProCharLine str;
ProTestFileOpen (&qcr_ref);
*((FILE**) data) = qcr_ref;
ProUtilMsgPrint( "gen", "Test %0s", "Select a solid being modified");
n_sel = 0;
err = ProSelect((char *)"prt_or_asm", 1, NULL, NULL, NULL, NULL, &sel_p, &n_sel);
TEST_CALL_REPORT("ProSelect()", "ProTestRefCtrlCheckScope()",
err, err != PRO_TK_NO_ERROR && err != PRO_TK_USER_ABORT &&
err != PRO_TK_PICK_ABOVE);
if (err != PRO_TK_NO_ERROR && n_sel<1)
return (0);
err = ProSelectionAsmcomppathGet(sel_p[0], &own_comp);
TEST_CALL_REPORT("ProSelectionAsmcomppathGet()",
"ProTestRefCtrlCheckScope()",
err, err != PRO_TK_NO_ERROR);
err = ProSelectionModelitemGet (sel_p[0], (ProModelitem*) &mitem);
TEST_CALL_REPORT("ProSelectionModelitemGet()",
"ProTestRefCtrlSolidSelectSet()",
err, err != PRO_TK_NO_ERROR);
err = ProModelitemMdlGet ( &mitem, (ProMdl*)&solid);
TEST_CALL_REPORT("ProModelitemMdlGet()",
"ProTestRefCtrlCheckScope()",
err, err != PRO_TK_NO_ERROR);
/*------------------second solid ---------------*/
ProUtilMsgPrint( "gen", "Test %0s", "Select a solid being referenced");
n_sel = 0;
err = ProSelect((char *)"prt_or_asm", 1, NULL, NULL, NULL, NULL, &sel_p, &n_sel);
TEST_CALL_REPORT("ProSelect()", "ProTestRefCtrlCheckScope()",
err, err != PRO_TK_NO_ERROR && err != PRO_TK_USER_ABORT &&
err != PRO_TK_PICK_ABOVE);
if (err != PRO_TK_NO_ERROR && n_sel<1)
return (0);
err = ProSelectionAsmcomppathGet(sel_p[0], &ref_comp);
TEST_CALL_REPORT("ProSelectionAsmcomppathGet()",
"ProTestRefCtrlCheckScope()",
err, err != PRO_TK_NO_ERROR);
err = ProSelectionModelitemGet (sel_p[0], (ProModelitem*) &mitem);
TEST_CALL_REPORT("ProSelectionModelitemGet()",
"ProTestRefCtrlCheckScope()",
err, err != PRO_TK_NO_ERROR);
err = ProModelitemMdlGet ( &mitem, (ProMdl*)&ref_solid);
TEST_CALL_REPORT("ProModelitemMdlGet()",
"ProTestRefCtrlCheckScope()",
err, err != PRO_TK_NO_ERROR);
/*
err = ProRefCtrlCheckScope (solid, &own_comp, ref_solid,
&ref_comp, &mdl);
TEST_CALL_REPORT("ProRefCtrlCheckScope()",
"ProTestRefCtrlCheckScope()",
err, err != PRO_TK_NO_ERROR);
*/
ProTKFprintf (qcr_ref, "Solid being modified :\n" );
ProTestSolidInfoWrite (qcr_ref, solid);
ProTKFprintf (qcr_ref, "Solid being referenced :\n" );
ProTestSolidInfoWrite (qcr_ref, ref_solid);
if (err ==PRO_TK_NO_ERROR)
{
ProTKSprintf (str,
"No scope violation is found\n");
ProTKFprintf (qcr_ref,"%s", str);
ProUtilMsgPrint( "gen", "TEST %0s", str);
return (0);
}
if (err == PRO_TK_E_FOUND)
{
ProTKSprintf (str,
"Scope violation is found\n");
ProTKFprintf (qcr_ref,"%s", str);
ProUtilMsgPrint( "gen", "TEST %0s", str);
if (mdl == NULL)
{
ProTKSprintf (str,
"Enviroment scope setting is violated\n");
ProTKFprintf (qcr_ref,"%s", str);
ProUtilMsgPrint( "gen", "TEST %0s", str);
}
else
{
ProTKSprintf (str,
"Model scope setting is violated\n");
ProTKFprintf (qcr_ref,"%s", str);
ProUtilMsgPrint( "gen", "TEST %0s", str);
ProTestSolidInfoWrite (qcr_ref, (ProSolid)mdl);
}
}
return (0);
}