/*================================================================*\ FILE: TestSpool.c PURPOSE: Functions to manage cabling HISTORY: 18-AUG-98 I-01-17 Pavel $$1 Created. 14-Sep-98 I-01-19 Pavel $$2 Fixed 29-Dec-98 I-01-28 Alexey $$3 Add -4 as valid return value to TEST_CALL_REPORT for some ProCbl funcs \*=================================================================*/ #include "UtilCable.h" #include "UtilString.h" #include "TestError.h" /*--------------------------------------------------------------------*\ Pro/TOOLKIT includes \*--------------------------------------------------------------------*/ #include "ProToolkit.h" #include "ProMessage.h" #include "ProMenu.h" #include "ProMessage.h" #include "ProModelitem.h" #include "ProSelection.h" #include "ProUtil.h" /*--------------------------------------------------------------------*\ Pro/DEVELOP includes \*--------------------------------------------------------------------*/ #include "profiles.h" #include "TestError.h" #include "TestCable.h" #include "UtilCable.h" #include "UtilMenu.h" #include "UtilMessage.h" #include "UtilMath.h" #include "UtilString.h" /*--------------------------------------------------------------------*\ C System includes \*--------------------------------------------------------------------*/ #include /*--------------------------------------------------------------------*\ Application macros \*--------------------------------------------------------------------*/ #define MSGFIL _msgfil /*--------------------------------------------------------------------*\ Application data types \*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*\ Application global/external data \*--------------------------------------------------------------------*/ /*============================================================================*\ Function: ProTestConnector Purpose: Connector menu \*============================================================================*/ int ProTestConnector( ProAssembly *p_assy) { int action, menu_id; ProError err; ProMdl mdl; err = ProMenuFileRegister( "TkCable Component", "tkcablecomp.mnu", &menu_id ); ProMenubuttonActionSet( "TkCable Component", "Modify", (ProMenubuttonAction)ProTestConnectorAction, p_assy, TEST_CONN_MODIFY ); ProMenubuttonActionSet( "TkCable Component", "Designate", (ProMenubuttonAction)ProTestConnectorAction, p_assy, TEST_CONN_DESIGNATE ); ProMenubuttonActionSet( "TkCable Component", "Undesignate", (ProMenubuttonAction)ProTestConnectorAction, p_assy, TEST_CONN_UNDESIGNATE ); ProMenubuttonActionSet( "TkCable Component", "Done/Return", (ProMenubuttonAction)ProMenuDelete, &mdl, 0 ); ProMenubuttonActionSet( "TkCable Component", "TkCable Component", (ProMenubuttonAction)ProMenuDelete, &mdl, 0 ); err = ProMenuCreate( PROMENUTYPE_MAIN, "TkCable Component", &menu_id ); err = ProMenuProcess( "TkCable Component", &action ); TEST_CALL_REPORT( "ProMenuProcess()", "ProTestConnector()", err, err != PRO_TK_NO_ERROR ); return (0); } /*============================================================================*\ Function: ProTestConnectorAction Purpose: Connectors actions function \*============================================================================*/ int ProTestConnectorAction( ProAssembly *p_assy, int action) { int n_sel, n_param, i, menu_id, n_conns, from_logical; wchar_t **w_menus; ProError err, err2; ProSelection *p_sel; ProAsmcomppath path; ProCblConnector connector; ProCblParameterInfo *p_param = NULL; ProName w_name, w_ref_des, *wp_names; ProLine w_file; ProCharLine file; ProMdl mdl; TestParamOwner param_owner; static ProUtilMenuButtons create_type[] = { {"TKDES CONN", 0, TEST_CALL_PRO_MENU_DELETE}, {"From Logical", 1, 0 }, {"Enter Name", 0, 0 }, {"",0,0} }; if (action == TEST_CONN_DESIGNATE) { ProMessageDisplay(MSGFIL, "TEST Select assembly component for connector definition."); } else { ProMessageDisplay(MSGFIL, "TEST Select assembly member representing connector."); } do { err = ProSelect("prt_or_asm", 1, NULL, NULL, NULL, NULL, &p_sel, &n_sel); if (err != PRO_TK_NO_ERROR || n_sel != 1) return (0); err = ProSelectionAsmcomppathGet(p_sel[0], &path); TEST_CALL_REPORT( "ProSelectionAsmcomppathGet()", "ProTestConnectorAction()", err, err != PRO_TK_NO_ERROR ); err2 = ProCblConnectorInit(&path, &connector); TEST_CALL_REPORT( "ProCblConnectorInit()", "ProTestConnectorAction()", err2, err2 != PRO_TK_NO_ERROR && err2 != PRO_TK_E_NOT_FOUND ); if (action != TEST_CONN_DESIGNATE && err2 != PRO_TK_NO_ERROR) { ProMessageDisplay(MSGFIL, "TEST Selected " "component is not designated as a connector. Select again."); continue; } break; } while (1); err = ProAsmcomppathMdlGet(&path, &mdl); TEST_CALL_REPORT( "ProAsmcomppathMdlGet()", "ProTestConnectorAction()", err, err != PRO_TK_NO_ERROR ); err = ProMdlNameGet(mdl, w_name); if (action == TEST_CONN_DESIGNATE) { if (err2 == PRO_TK_NO_ERROR) { /* Connector already designated */ ProMessageDisplay(MSGFIL, "TEST Redefine connector %0w? [No]", w_name); if (ProUtilYesnoGet("No") == 0) return (0); /* edit connector */ goto test_conn_modify; } else { err = ProCblConnectorFromLogical(*p_assy, &wp_names, &n_conns); TEST_CALL_REPORT( "ProCblConnectorFromLogical()", "ProTestConnectorAction()", err, err != PRO_TK_NO_ERROR && err != PRO_TK_E_NOT_FOUND ); if (err == PRO_TK_NO_ERROR && n_conns>0) { err = ProUtilMenuIntValueSelect(create_type, &from_logical); if (err != PRO_TK_NO_ERROR) return (0); if (from_logical) { /* From Logical */ err = ProUtilMenuStringsAlloc(&w_menus); for (i=0; itable_num ) || (path.owner != p_connector->owner)) return (PRO_TK_BAD_INPUTS); for (i=0; icomp_id_table[i]) return (PRO_TK_BAD_INPUTS); return (PRO_TK_NO_ERROR); } /*============================================================================*\ Function: ProUtilEntryPortMenuSet Purpose: Enable/Disable entry port menu \*============================================================================*/ void ProUtilEntryPortMenuSet( ProCblConnector *p_connector) { ProError err; int *p_csys_ids, n_csys; err = ProCblConnectorEntryPortsGet(p_connector, &p_csys_ids, &n_csys); TEST_CALL_REPORT( "ProCblConnectorEntryPortsGet()", "ProUtilEntryPortMenuSet()", err, err != PRO_TK_NO_ERROR ); if (err == PRO_TK_NO_ERROR) ProArrayFree((ProArray)&p_csys_ids); ProUtilMenubuttonActivate("TkEntry Port", "Delete", err == PRO_TK_NO_ERROR && n_csys > 0); } /*============================================================================*\ Function: ProTestConnectorPorts Purpose: Connector entry ports menu \*============================================================================*/ int ProTestConnectorPorts( ProCblConnector *p_connector) { ProError err; int menu_id, action; err = ProMenuFileRegister( "TkEntry Port", "tkentryport.mnu", &menu_id ); ProMenubuttonActionSet( "TkEntry Port", "Add/Modify", (ProMenubuttonAction)ProTestConnPortsAction, p_connector, TEST_PORT_MODIFY); ProMenubuttonActionSet( "TkEntry Port", "Delete", (ProMenubuttonAction)ProTestConnPortsAction, p_connector, TEST_PORT_DELETE); ProMenubuttonActionSet( "TkEntry Port", "TkEntry Port", (ProMenubuttonAction)ProMenuDelete, NULL, 0); err = ProMenuCreate( PROMENUTYPE_MAIN, "TkEntry Port", &menu_id ); err = ProMenuCommandPush("Add/Modify"); ProUtilEntryPortMenuSet(p_connector); err = ProMenuProcess( "TkEntry Port", &action ); TEST_CALL_REPORT( "ProMenuProcess()", "ProTestConnectorAction()", err, err != PRO_TK_NO_ERROR ); return (0); } /*============================================================================*\ Function: ProTestConnectorPorts Purpose: Add/Delete connector entry ports \*============================================================================*/ int ProTestConnPortsAction( ProCblConnector *p_connector, int action) { ProError err; ProSelection *p_sel; ProSelFunctions sel_funcs; ProCblParameterInfo *p_param, *p_param2, param, param2; int n_param, n_param2 =0, i, j, n_sel, i_port_type, nc, stop = 0; int *p_selected; ProModelitem modelitem; ProName w_name; wchar_t **w_menus; double d; static ProUtilMenuButtons port_type[] = { {"TkPort Type", 0, TEST_CALL_PRO_MENU_DELETE}, {"Wire", 0, 0 }, {"Round", 1, 0 }, {"Flat", 2,0 }, {"",0,0}}; static char* port_strings[]= {"WIRE", "ROUND", "FLAT"}; err = ProCblConnectorParametersGet(p_connector, &p_param, &n_param); TEST_CALL_REPORT( "ProCblConnectorParametersGet()", "ProTestConnPortsAction()", err, err != PRO_TK_NO_ERROR ); if (err != PRO_TK_NO_ERROR) return (err); ProArrayAlloc(0, sizeof(ProCblParameterInfo), 1, (ProArray*)&p_param2); /* Copy entry port to second list */ for (i=0; i=param.value.multval.ncells) continue; if (!ProUtilWstrcmp(w_name, param.value.multval.cells[j].value.strval)) break; } /* Csys already defined */ if (i=param.value.multval.ncells) continue; ProUtilMenuStringsWstrAdd(&w_menus, param.value.multval.cells[j].value.strval); } ProStringToWstring(w_name, "Entry Port"); err = ProUtilMenuStringManySelect("TkRef Cable", w_menus, &p_selected, &n_sel); if (err == PRO_TK_NO_ERROR && n_sel > 0) { ProStringToWstring(w_name, "ENTRY_PORT"); err = ProCblConnectorParameterDelete(p_connector, w_name); TEST_CALL_REPORT("ProCblConnectorParameterDelete()", "ProTestConnPortsAction()", err, err != PRO_TK_NO_ERROR); err = ProMessageDisplay(MSGFIL, "TEST Entry port(s) removed."); for (i=n_param2-1; i>=0; i--) { param = p_param2[i]; for (j=0; j=param.value.multval.ncells) continue; nc = j; for (j=0; j= n_sel) continue; /* Csys deleted */ ProArrayFree((ProArray*)¶m.value.multval.cells); ProArrayObjectRemove((ProArray*)&p_param2, i, 1); n_param2--; } /* Set new entry port parameters */ err = ProCblConnectorParametersSet (p_connector, p_param2, n_param2); TEST_CALL_REPORT("ProCblConnectorParametersSet()", "ProTestConnPortsAction()", err, err != PRO_TK_NO_ERROR); ProArrayFree((ProArray*)&p_selected); ProUtilEntryPortMenuSet(p_connector); } ProUtilMenuStringsFree(&w_menus); } ProUtilParametersFree(&p_param2, n_param2); return (0); }