/* Copyright (c) 2024 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved. */ /*---------------------------------------------------------------------------*\ Pro/TOOLKIT includes \*---------------------------------------------------------------------------*/ #include "ProSelection.h" #include "ProModelitem.h" #include "ProColor.h" #include "ProMessage.h" #include "ProMenu.h" #include "ProMdl.h" #include "ProDrawing.h" #include "ProGraphic.h" #include "ProUtil.h" #include "ProDtlsyminst.h" #include "ProDtlsymdef.h" #include "ProDtlnote.h" #include "ProDtlattach.h" /*---------------------------------------------------------------------------*\ Application includes \*---------------------------------------------------------------------------*/ #include "UtilMessage.h" #include "UtilMenu.h" #include "UtilFiles.h" #include <UtilString.h> #include <ProTKRunTime.h> /*---------------------------------------------------------------------------*\ Application macros \*---------------------------------------------------------------------------*/ /* modify options */ #define SYM_INST_COLOR 0 #define SYM_INST_LENTH 1 #define SYM_INST_ANGLE 2 #define SYM_INST_LEADER 3 #define SYM_INST_HEIGHT 4 #define SYM_INST_ATTACH 5 #define SYM_INST_VARTEXT 6 /* display options */ #define SYM_INST_DRAW 0 #define SYM_INST_REMOVE 1 #define SYM_INST_ERASE 2 #define SYM_INST_DELETE 3 #define DTL_SYM_INST_FILE ".inf" ProError ProTestSymInstGet (ProDrawing , ProDtlsyminst * ); ProError ProTestAttachGet(ProDrawing, ProDtlsymdefdata, ProDtlsymdefattachType*, ProDtlattach* ); ProError ProTestDtlsymdefNameGet (ProDtlsymdef *, ProName ); /*===========================================================================*\ Function : ProTestSymInst Purpose : \*===========================================================================*/ int ProTestSymInst(void *app_data) { ProError err; int menu_id; ProDrawing draw = (ProDrawing)app_data; int ProTestSumInstAdd (ProDrawing drw); int ProTestSymInstModify (ProDrawing drw); int ProTestSymInstDisplay (ProDrawing drw); int ProTestSymInstInfo (ProDrawing drw); err = ProMenuFileRegister((char*)"Syminst",(char*)"tksyminst.mnu", &menu_id); err = ProMenubuttonActionSet((char*)"Syminst",(char*)"Syminst", (ProMenubuttonAction)ProMenuDelete, NULL, 0); err = ProMenubuttonActionSet((char*)"Syminst",(char*)"Create", (ProMenubuttonAction)ProTestSumInstAdd, draw, 0); err = ProMenubuttonActionSet((char*)"Syminst",(char*)"Redefine", (ProMenubuttonAction)ProTestSymInstModify, draw, 0); err = ProMenubuttonActionSet((char*)"Syminst",(char*)"Display", (ProMenubuttonAction)ProTestSymInstDisplay, draw, 0); err = ProMenubuttonActionSet((char*)"Syminst",(char*)"Info", (ProMenubuttonAction)ProTestSymInstInfo, draw, 0); err = ProMenuCreate(PROMENUTYPE_MAIN, (char*)"Syminst",&menu_id); err = ProMenuProcess((char*)"", &menu_id); return (0); } /*===========================================================================*\ Function : ProTestSumInstAdd Purpose : \*===========================================================================*/ int ProTestSumInstAdd(ProDrawing drw) { ProError err; ProDtlsymdef sym_def; ProDtlsyminst sym_inst; ProDtlsymdefdata def_data; ProDtlsyminstdata sym_data; ProDtlattach attach, *p_leaders = NULL; ProDtlsymdefattachType def_attach_type; int i, n_leaders; ProError ProTestVarTextSet(ProDrawing drw, ProDtlsymdef symbol, ProDtlsyminstdata inst_data); ProError ProTestSymDefGet (ProDrawing drw, ProDtlsymdef *sym_def); ProError ProTestLeadersGet (); err = ProDtlsyminstdataAlloc (drw, &sym_data); TEST_CALL_REPORT("ProDtlsyminstdataAlloc()", "ProTestSumInstAdd()", err, err != PRO_TK_NO_ERROR); err = ProTestSymDefGet (drw, &sym_def); if (err != PRO_TK_NO_ERROR) return (0); err = ProDtlsymdefDataGet (&sym_def, &def_data); TEST_CALL_REPORT("ProDtlsymdefDataGet()", "ProTestSumInstAdd()", err, err != PRO_TK_NO_ERROR); err = ProTestAttachGet (drw, def_data, &def_attach_type, &attach); if (err != PRO_TK_NO_ERROR) return (-1); err = ProDtlsyminstdataDefSet (sym_data, &sym_def); TEST_CALL_REPORT("ProDtlsyminstdataDefSet()", "ProTestSumInstAdd()", err, err != PRO_TK_NO_ERROR); err = ProDtlsyminstdataAttachtypeSet (sym_data, def_attach_type); TEST_CALL_REPORT("ProDtlsyminstdataAttachtypeSet()", "ProTestSumInstAdd()", err, err != PRO_TK_NO_ERROR); err = ProDtlsyminstdataAttachmentSet (sym_data, attach); TEST_CALL_REPORT("ProDtlsyminstdataAttachmentSet()", "ProTestSumInstAdd()", err, err != PRO_TK_NO_ERROR); err = ProDtlattachFree (attach); TEST_CALL_REPORT("ProDtlattachFree()", "ProTestSumInstAdd()", err, err != PRO_TK_NO_ERROR); err = ProTestVarTextSet (drw, sym_def, sym_data); err = ProTestLeadersGet (&p_leaders); if (err == PRO_TK_NO_ERROR && p_leaders != NULL) { err = ProArraySizeGet ((ProArray)p_leaders, &n_leaders); err = ProDtlsyminstdataLeadersSet (sym_data, p_leaders); TEST_CALL_REPORT("ProDtlsyminstdataLeadersSet()", "ProTestSymInstModify()", err, err != PRO_TK_NO_ERROR); err = ProArraySizeGet ((ProArray)p_leaders, &n_leaders); for (i = 0; i < n_leaders; i++) err = ProDtlattachFree (p_leaders[i]); err = ProArrayFree ((ProArray*)&p_leaders); } err = ProDtlsyminstCreate (drw, sym_data, &sym_inst); TEST_CALL_REPORT("ProDtlsyminstCreate()", "ProTestSumInstAdd()", err, err != PRO_TK_NO_ERROR); err = ProDtlsyminstShow (&sym_inst); TEST_CALL_REPORT("ProDtlsyminstShow()", "ProTestSumInstAdd()", err, err != PRO_TK_NO_ERROR); err = ProDtlsyminstdataFree (sym_data); TEST_CALL_REPORT("ProDtlsyminstdataFree()", "ProTestSumInstAdd()", err, err != PRO_TK_NO_ERROR); return 0; } /*===========================================================================*\ Function : ProTestSymDefGet Purpose : \*===========================================================================*/ ProError ProTestSymDefGet (ProDrawing drw, ProDtlsymdef *sym_def) { ProError err; ProDtlsymdef *p_symdefs; int size = 0, i, n_sel = 0; ProName title, name; wchar_t **selected, **names; err = ProDrawingDtlsymdefsCollect (drw, &p_symdefs); TEST_CALL_REPORT("ProDrawingDtlsymdefsCollect()", "ProTestSymDefGet()", err, err != PRO_TK_NO_ERROR && err != PRO_TK_E_NOT_FOUND); if (err != PRO_TK_NO_ERROR) return (err); err = ProUtilMenuStringsAlloc (&names); err = ProArraySizeGet ((ProArray)p_symdefs, &size); TEST_CALL_REPORT("ProArraySizeGet()", "ProTestSymDefGet()", err, err != PRO_TK_NO_ERROR); for (i = 0; i < size; i++) { err = ProTestDtlsymdefNameGet (&p_symdefs[i], name); if (err != PRO_TK_NO_ERROR) ProStringToWstring (name, (char*)"ERROR"); err = ProUtilMenuStringsWstrAdd(&names, name); } ProStringToWstring(title, (char*)"Symbol defs"); err = ProMenuStringsSelect(title, names, 1, NULL, &selected, &n_sel); if (err != PRO_TK_NO_ERROR || n_sel != 1) return (PRO_TK_E_NOT_FOUND); for (i = 0; i < size; i++) if (ProUtilWstrcmp (names[i], selected[0]) == 0) { *sym_def = p_symdefs[i]; break; } err = ProUtilMenuStringsFree(&names); err = ProArrayFree ((ProArray*)&p_symdefs); return PRO_TK_NO_ERROR; } /*===========================================================================*\ Function : ProTestAttachGet Purpose : \*===========================================================================*/ ProError ProTestAttachGet (ProDrawing drw, ProDtlsymdefdata def_data, ProDtlsymdefattachType *def_attach_type, ProDtlattach *attach) { ProError err; int size = 0, n_sel, sheet = 0, menu_id, i; ProDtlsymdefattach *p_attaches; ProDtlsymdefattachType def_at_type; ProDtlattachType attach_type; ProMouseButton btn; ProSelection *sel; ProPoint3d sel_pnt; ProView over_view; err = ProDtlsymdefdataAttachGet (def_data, &p_attaches); TEST_CALL_REPORT("ProDtlsymdefdataAttachGet()", "ProTestAttachGet()", err, err != PRO_TK_NO_ERROR); if (err != PRO_TK_NO_ERROR) return (err); err = ProMenuFileRegister((char*)"AttachType",(char*)"tkattachtype.mnu", &menu_id); err = ProMenubuttonActionSet((char*)"AttachType",(char*)"AttachType", (ProMenubuttonAction)ProMenuDelete, NULL, 0); err = ProMenubuttonActionSet((char*)"AttachType",(char*)"Free", (ProMenubuttonAction)ProUtilAssign, def_attach_type, PROSYMDEFATTACHTYPE_FREE); err = ProMenubuttonActionSet((char*)"AttachType",(char*)"Leader", (ProMenubuttonAction)ProUtilAssign, def_attach_type, PROSYMDEFATTACHTYPE_LEFT_LEADER); err = ProMenubuttonActionSet((char*)"AttachType",(char*)"On item", (ProMenubuttonAction)ProUtilAssign, def_attach_type, PROSYMDEFATTACHTYPE_ON_ITEM); err = ProMenubuttonActionSet((char*)"AttachType",(char*)"Normal", (ProMenubuttonAction)ProUtilAssign, def_attach_type, PROSYMDEFATTACHTYPE_NORM_ITEM); ProMenuCreate(PROMENUTYPE_MAIN,(char*)"AttachType" ,&menu_id ); err = ProMenubuttonDeactivate ((char*)"AttachType",(char*)"Free"); err = ProMenubuttonDeactivate ((char*)"AttachType",(char*)"Leader"); err = ProMenubuttonDeactivate ((char*)"AttachType",(char*)"On item"); err = ProMenubuttonDeactivate ((char*)"AttachType",(char*)"Normal"); /* Get type */ err = ProArraySizeGet ((ProArray)p_attaches, &size); for (i = 0; i < size; i++) { err = ProDtlsymdefattachGet (p_attaches[i], &def_at_type, NULL, NULL, NULL); switch (def_at_type) { case PROSYMDEFATTACHTYPE_FREE : err = ProMenubuttonActivate ((char*)"AttachType",(char*)"Free"); break; case PROSYMDEFATTACHTYPE_LEFT_LEADER : err = ProMenubuttonActivate ((char*)"AttachType",(char*)"Leader"); break; case PROSYMDEFATTACHTYPE_RIGHT_LEADER : err = ProMenubuttonActivate ((char*)"AttachType",(char*)"Leader"); break; case PROSYMDEFATTACHTYPE_RADIAL_LEADER : err = ProMenubuttonActivate ((char*)"AttachType",(char*)"Leader"); break; case PROSYMDEFATTACHTYPE_ON_ITEM : err = ProMenubuttonActivate ((char*)"AttachType",(char*)"On item"); break; case PROSYMDEFATTACHTYPE_NORM_ITEM : err = ProMenubuttonActivate ((char*)"AttachType",(char*)"Normal"); break; default : break; } } err = ProMenuProcess((char*)"AttachType", &menu_id); /* setup attach */ switch (*def_attach_type) { case PROSYMDEFATTACHTYPE_FREE : case PROSYMDEFATTACHTYPE_LEFT_LEADER : case PROSYMDEFATTACHTYPE_RIGHT_LEADER : case PROSYMDEFATTACHTYPE_RADIAL_LEADER : attach_type = PRO_DTLATTACHTYPE_FREE; err = ProDrawingCurrentSheetGet (drw, &sheet); err = ProDrawingBackgroundViewGet (drw, sheet, &over_view); TEST_CALL_REPORT("ProDrawingBackgroundViewGet()", "ProTestAttachGet()", err, err != PRO_TK_NO_ERROR); ProUtilMsgPrint("gen", "TEST %0s", "Enter position"); if (ProMousePickGet(PRO_ANY_BUTTON, &btn, sel_pnt) != PRO_TK_NO_ERROR) break; ProGraphicsCircleDraw (sel_pnt, 0.5); err = ProDtlattachAlloc (attach_type, over_view, sel_pnt, NULL, attach); TEST_CALL_REPORT("ProDtlattachAlloc()", "ProTestAttachGet()", err, err != PRO_TK_NO_ERROR); break; case PROSYMDEFATTACHTYPE_ON_ITEM : case PROSYMDEFATTACHTYPE_NORM_ITEM : attach_type = PRO_DTLATTACHTYPE_PARAMETRIC; ProUtilMsgPrint("gen", "TEST %0s", "Select attachment point"); err = ProSelect ((char*)"edge,curve,point,axis", 1, NULL, NULL, NULL, NULL, &sel, &n_sel); if (err != PRO_TK_NO_ERROR || n_sel != 1) break; err = ProDtlattachAlloc (attach_type, NULL, NULL, sel[0], attach); TEST_CALL_REPORT("ProDtlattachAlloc()", "ProTestAttachGet()", err, err != PRO_TK_NO_ERROR); break; default: return PRO_TK_GENERAL_ERROR; } ProArrayFree ((ProArray*)&p_attaches); return err; } /*===========================================================================*\ Function : ProTestVarTextSet Purpose : \*===========================================================================*/ ProError ProTestVarTextSet (ProDrawing drw, ProDtlsymdef symbol, ProDtlsyminstdata inst_data) { ProError err; ProDtlnote *p_notes; ProDtlnoteline *p_lines ; ProDtlnotetext *p_texts ; ProLine line, value; ProCharLine string, text; ProDtlnotedata note_data; ProDtlvartext var_text, *p_var_texts; int n_notes = 0, n_lines = 0, n_texts = 0, n_var_texts = 0, i, j, k; err = ProDrawingDtlnotesCollect (drw, &symbol, PRO_VALUE_UNUSED, &p_notes); TEST_CALL_REPORT("ProDrawingDtlnotesCollect()", "ProTestVarTextSet()", err, err != PRO_TK_NO_ERROR && err != PRO_TK_E_NOT_FOUND); if (err != PRO_TK_NO_ERROR) return (err); err = ProArrayAlloc (0, sizeof (ProDtlvartext), 1, (ProArray*)&p_var_texts); err = ProArraySizeGet ((ProArray)p_notes, &n_notes); for (i = 0; i < n_notes; i++) { err = ProDtlnoteDataGet (&p_notes[i], &symbol, PRODISPMODE_NUMERIC, ¬e_data); TEST_CALL_REPORT("ProDtlnoteDataGet()", "ProTestVarTextSet()", err, err != PRO_TK_NO_ERROR); if (err != PRO_TK_NO_ERROR) return (err); err = ProDtlnotedataLinesCollect (note_data, &p_lines); TEST_CALL_REPORT("ProDtlnotedataLinesCollect()", "ProTestVarTextSet()", err, err != PRO_TK_NO_ERROR && err != PRO_TK_E_NOT_FOUND); if (err == PRO_TK_NO_ERROR) { err = ProArraySizeGet ((ProArray)p_lines, &n_lines); for (j = 0; j < n_lines; j++) { err = ProDtlnotelineTextsCollect (p_lines[j], &p_texts); TEST_CALL_REPORT("ProDtlnotelineTextsCollect()", "ProTestVarTextSet()", err, err != PRO_TK_NO_ERROR && err != PRO_TK_E_NOT_FOUND); if (err == PRO_TK_NO_ERROR) { err = ProArraySizeGet ((ProArray)p_texts, &n_texts); for (k = 0; k < n_texts; k++) { err = ProDtlnotetextStringGet (p_texts[k], line); TEST_CALL_REPORT("ProDtlnotetextStringGet()", "ProTestVarTextSet()", err, err != PRO_TK_NO_ERROR); ProWstringToString (string, line); if(string[3]=='\\' && string[strlen(string)-2]=='\\') { ProTKSprintf (text,"Enter instance text for %s",string); ProUtilMsgPrint("gen", "TEST %0s", text); ProStringToWstring (line, text); memset (text, '\0', sizeof (ProCharLine)); ProStringToWstring (line, strncpy (text, &string[4], strlen(&string[4])-2)); if (ProMessageStringRead (PRO_LINE_SIZE, value) != PRO_TK_NO_ERROR) break; err = ProDtlvartextAlloc (line, value, &var_text); TEST_CALL_REPORT("ProDtlvartextAlloc()", "ProTestVarTextSet()", err, err != PRO_TK_NO_ERROR); err = ProArrayObjectAdd( (ProArray*)&p_var_texts, PRO_VALUE_UNUSED, 1, &var_text); } } for (k = 0; k < n_texts; k++) { err = ProDtlnotetextFree (p_texts[k]); TEST_CALL_REPORT("ProDtlnotetextFree()", "ProTestVarTextSet()", err, err != PRO_TK_NO_ERROR); } err = ProArrayFree ((ProArray*)&p_texts); } } for (j = 0; j < n_lines; j++) { err = ProDtlnotelineFree (p_lines[j]); TEST_CALL_REPORT("ProDtlnotelineFree()", "ProTestVarTextSet()", err, err != PRO_TK_NO_ERROR); } err = ProArrayFree ((ProArray*)&p_lines); } } err = ProArrayFree ((ProArray*)&p_notes); err = ProArraySizeGet ((ProArray)p_var_texts, &n_var_texts); if (err == PRO_TK_NO_ERROR && n_var_texts != 0) { err = ProDtlsyminstdataVartextsSet (inst_data, p_var_texts); TEST_CALL_REPORT("ProDtlsyminstdataVartextsSet()", "ProTestVarTextSet()", err, err != PRO_TK_NO_ERROR); err = ProArrayFree ((ProArray*)&p_var_texts); } else return (PRO_TK_NO_CHANGE); return PRO_TK_NO_ERROR; } /*===========================================================================*\ Function : ProTestSymInstModify Purpose : \*===========================================================================*/ int ProTestSymInstModify (ProDrawing drw) { ProError err; ProDtlsyminst sym_inst; ProDtlsyminstdata sym_data; ProColor color; int opt, n_leaders, i; ProCharLine line; ProBoolean flag; double param = 0.0; ProDtlsymdef sym_def; ProDtlsymdefdata def_data; ProDtlsymdefdataHeighttype height_type; ProDtlattach attach, *p_leaders = NULL; ProDtlsymdefattachType def_at_type; ProError ProTestLeadersGet (); static ProUtilMenuButtons inst_opt[] = { {"Redefine", 0, TEST_CALL_PRO_MENU_DELETE}, {"Color", SYM_INST_COLOR, 0}, {"Elbow", SYM_INST_LENTH, 0}, {"Angle", SYM_INST_ANGLE, 0}, {"Leader", SYM_INST_LEADER, 0}, {"Height", SYM_INST_HEIGHT, 0}, {"Attach", SYM_INST_ATTACH, 0}, {"VarText", SYM_INST_VARTEXT, 0}, {"",0,0} }; err = ProUtilMenuIntValueSelect(inst_opt, &opt); err = ProTestSymInstGet (drw, &sym_inst); if (err != PRO_TK_NO_ERROR) return (0); err = ProDtlsyminstDataGet (&sym_inst, PRODISPMODE_NUMERIC, &sym_data); TEST_CALL_REPORT("ProDtlsyminstDataGet()", "ProTestSymInstModify()", err, err != PRO_TK_NO_ERROR); err = ProDtlsyminstdataDefGet (sym_data, &sym_def); TEST_CALL_REPORT("ProDtlsyminstdataDefGet()", "ProTestSymInstModify()", err, err != PRO_TK_NO_ERROR); err = ProDtlsymdefDataGet (&sym_def, &def_data); TEST_CALL_REPORT("ProDtlsymdefDataGet()", "ProTestSymInstModify()", err, err != PRO_TK_NO_ERROR); switch (opt) { case SYM_INST_COLOR : ProTestColorGet (&color); err = ProDtlsyminstdataColorSet (sym_data, &color); TEST_CALL_REPORT("ProDtlsyminstdataColorSet()", "ProTestSymInstModify()", err, err != PRO_TK_NO_ERROR); break; case SYM_INST_LENTH : ProDtlsyminstdataElbowlengthGet (sym_data, &flag, ¶m); TEST_CALL_REPORT("ProDtlsyminstdataElbowlengthGet()", "ProTestSymInstModify()", err, err != PRO_TK_NO_ERROR); if (flag == PRO_B_TRUE) { ProUtilMsgPrint("gen", "TEST %0s", "Unable modify elblow lenth."); return (0); } ProTKSprintf (line, "Enter elblow lenth [%6.2f]: ", param); ProUtilMsgPrint("gen", "TEST %0s", line); if (ProMessageDoubleRead (NULL, ¶m) != PRO_TK_NO_ERROR) return (0); err = ProDtlsyminstdataElbowlengthSet (sym_data, PRO_B_FALSE, param); TEST_CALL_REPORT("ProDtlsyminstdataElbowlengthSet()", "ProTestSymInstModify()", err, err != PRO_TK_NO_ERROR); break; case SYM_INST_ANGLE : err = ProDtlsyminstdataAngleGet (sym_data, ¶m); TEST_CALL_REPORT("ProDtlsyminstdataAngleGet()", "ProTestSymInstModify()", err, err != PRO_TK_NO_ERROR); ProTKSprintf (line, "Enter angle [%6.2f]: ", param); ProUtilMsgPrint("gen", "TEST %0s", line); if (ProMessageDoubleRead (NULL, ¶m) != PRO_TK_NO_ERROR) return (0); err = ProDtlsyminstdataAngleSet (sym_data, param); TEST_CALL_REPORT("ProDtlsyminstdataAngleSet()", "ProTestSymInstModify()", err, err != PRO_TK_NO_ERROR); break; case SYM_INST_HEIGHT : err = ProDtlsymdefdataHeighttypeGet (def_data, &height_type); TEST_CALL_REPORT("ProDtlsymdefdataHeighttypeGet()", "ProTestSymInstModify()", err, err != PRO_TK_NO_ERROR); if (height_type == PRODTLSYMDEFHGHTTYPE_VARIABLE) { err = ProDtlsyminstdataScaledheightGet (sym_data, ¶m); TEST_CALL_REPORT("ProDtlsyminstdataScaledheightGet()", "ProTestSymInstModify()", err, err != PRO_TK_NO_ERROR); ProTKSprintf (line, "Enter height [%6.2f]: ", param); ProUtilMsgPrint("gen", "TEST %0s", line); if (ProMessageDoubleRead (NULL, ¶m) != PRO_TK_NO_ERROR) return (0); err = ProDtlsyminstdataScaledheightSet (sym_data, param); TEST_CALL_REPORT("ProDtlsyminstdataScaledheightSet()", "ProTestSymInstModify()", err, err != PRO_TK_NO_ERROR); } else ProUtilMsgPrint("gen", "TEST %0s", "Unable modify height: "); break; case SYM_INST_LEADER : err = ProTestLeadersGet (&p_leaders); if (err == PRO_TK_NO_ERROR && p_leaders != NULL) { err = ProDtlsyminstdataLeadersSet (sym_data, p_leaders); TEST_CALL_REPORT("ProDtlsyminstdataLeadersSet()", "ProTestSymInstModify()", err, err != PRO_TK_NO_ERROR); err = ProArraySizeGet ((ProArray)p_leaders, &n_leaders); for (i = 0; i < n_leaders; i++) err = ProDtlattachFree (p_leaders[i]); err = ProArrayFree ((ProArray*)&p_leaders); } break; case SYM_INST_ATTACH : err = ProTestAttachGet (drw, def_data, &def_at_type, &attach); err = ProDtlsyminstdataAttachtypeSet (sym_data, def_at_type); TEST_CALL_REPORT("ProDtlsyminstdataAttachtypeSet()", "ProTestSymInstModify()", err, err != PRO_TK_NO_ERROR); err = ProDtlsyminstdataAttachmentSet (sym_data, attach); TEST_CALL_REPORT("ProDtlsyminstdataAttachmentSet()", "ProTestSymInstModify()", err, err != PRO_TK_NO_ERROR); err = ProDtlattachFree (attach); TEST_CALL_REPORT("ProDtlattachFree()", "ProDtlattachFree()", err, err != PRO_TK_NO_ERROR); break; case SYM_INST_VARTEXT : err = ProTestVarTextSet (drw, sym_def, sym_data); if (err != PRO_TK_NO_ERROR) ProUtilMsgPrint("gen", "TEST %0s", "Unable modify var text. "); break; } err = ProDtlsyminstErase (&sym_inst); TEST_CALL_REPORT("ProDtlsyminstErase()", "ProTestSymInstModify()", err, err != PRO_TK_NO_ERROR); err = ProDtlsyminstModify (&sym_inst, sym_data); TEST_CALL_REPORT("ProDtlsyminstModify()", "ProTestSymInstModify()", err, err != PRO_TK_NO_ERROR); err = ProDtlsyminstShow (&sym_inst); TEST_CALL_REPORT("ProDtlsyminstShow()", "ProTestSymInstModify()", err, err != PRO_TK_NO_ERROR); return (0); } /*===========================================================================*\ Function : ProTestSymInstGet Purpose : \*===========================================================================*/ ProError ProTestSymInstGet (ProDrawing drw, ProDtlsyminst *sym_inst) { ProError err; ProSelection *p_sel; int n_sel; ProUtilMsgPrint("gen", "TEST %0s", "Select symbol instance"); err = ProSelect ((char*)"dtl_symbol", 1, NULL, NULL, NULL, NULL, &p_sel, &n_sel); if (err != PRO_TK_NO_ERROR || n_sel < 1) return (PRO_TK_USER_ABORT); err = ProSelectionModelitemGet (p_sel[0], sym_inst); TEST_CALL_REPORT("ProSelectionModelitemGet()", "ProTestSymInstGet()", err, err != PRO_TK_NO_ERROR); return (PRO_TK_NO_ERROR); } /*===========================================================================*\ Function : ProTestSymInstDisplay Purpose : \*===========================================================================*/ int ProTestSymInstDisplay (ProDrawing drw) { ProError err; int opt = 0, size = 0, i; ProDtlsyminst *p_sym_inst, sym_inst; static ProUtilMenuButtons disp_sym_inst_opt[] = { {"Display", 0, TEST_CALL_PRO_MENU_DELETE}, {"Draw", SYM_INST_DRAW, 0}, {"Remove", SYM_INST_REMOVE, 0}, {"Erase", SYM_INST_ERASE, 0}, {"Delete", SYM_INST_DELETE, 0}, {"",0,0} }; err = ProUtilMenuIntValueSelect(disp_sym_inst_opt, &opt); switch (opt) { case SYM_INST_DRAW : err = ProDrawingDtlsyminstsCollect (drw, PRO_VALUE_UNUSED, &p_sym_inst); TEST_CALL_REPORT("ProDrawingDtlsyminstsCollect()", "ProTestSymInstDisplay()", err, err != PRO_TK_NO_ERROR && err != PRO_TK_E_NOT_FOUND); if (err != PRO_TK_NO_ERROR) return (0); err = ProArraySizeGet ((ProArray)p_sym_inst, &size); for (i = 0; i < size; i++) { err = ProDtlsyminstDraw (&p_sym_inst[i]); TEST_CALL_REPORT("ProDtlsyminstDraw()", "ProTestSymInstDisplay()", err, err != PRO_TK_NO_ERROR); } err = ProArrayFree ((ProArray*)&p_sym_inst); break; case SYM_INST_REMOVE : err = ProTestSymInstGet (drw, &sym_inst); if (err != PRO_TK_NO_ERROR) return (0); err = ProDtlsyminstRemove (&sym_inst); TEST_CALL_REPORT("ProDtlsyminstRemove()", "ProTestSymInstDisplay()", err, err != PRO_TK_NO_ERROR); break; case SYM_INST_ERASE : err = ProTestSymInstGet (drw, &sym_inst); if (err != PRO_TK_NO_ERROR) return (0); err = ProDtlsyminstErase (&sym_inst); TEST_CALL_REPORT("ProDtlsyminstErase()", "ProTestSymInstDisplay()", err, err != PRO_TK_NO_ERROR); break; case SYM_INST_DELETE : err = ProTestSymInstGet (drw, &sym_inst); if (err != PRO_TK_NO_ERROR) return (0); err = ProDtlsyminstErase(&sym_inst); TEST_CALL_REPORT("ProDtlsyminstErase()", "ProTestSymInstDisplay()", err, err != PRO_TK_NO_ERROR); err = ProDtlsyminstDelete (&sym_inst); TEST_CALL_REPORT("ProDtlsyminstDelete()", "ProTestSymInstDisplay()", err, err != PRO_TK_NO_ERROR); break; } return (0); } /*===========================================================================*\ Function : ProTestSymInstInfo Purpose : \*===========================================================================*/ int ProTestSymInstInfo (ProDrawing drw) { ProDtlsyminst *p_sym_inst; ProError err; FILE *fp; int size = 0, i, text_size = 0, j; ProCharLine fname, line; ProDtlsyminstdata sym_data; ProDtlsymdefattachType def_at_type; double param = 0.0; ProBoolean is_def = PRO_B_FALSE; ProDtlvartext *p_vartexts; ProColor color; ProDtlsymdef sym_def; ProDtlsymdefdata def_data; ProPath path; ProName inst_name; ProLine w_prompt, w_value; fp = ProUtilGenFilePtr((ProMdl)drw, (char*)DTL_SYM_INST_FILE, fname, (char*)"w"); err = ProDrawingDtlsyminstsCollect (drw, PRO_VALUE_UNUSED, &p_sym_inst); TEST_CALL_REPORT("ProDrawingDtlsyminstsCollect()", "ProTestSymInstInfo()", err, err != PRO_TK_NO_ERROR && err != PRO_TK_E_NOT_FOUND); if (err != PRO_TK_NO_ERROR) return (0); err = ProArraySizeGet ((ProArray)p_sym_inst, &size); ProTKFprintf(fp, "File name : %s\n", fname); for (i = 0; i < size; i++) { err = ProDtlsyminstDataGet (&p_sym_inst[i], PRODISPMODE_NUMERIC, &sym_data); TEST_CALL_REPORT("ProDtlsyminstDataGet()", "ProTestSymInstInfo()", err, err != PRO_TK_NO_ERROR); err = ProDtlsyminstdataDefGet (sym_data, &sym_def); TEST_CALL_REPORT("ProDtlsyminstdataDefGet()", "ProTestSymInstInfo()", err, err != PRO_TK_NO_ERROR); err = ProDtlsymdefDataGet (&sym_def, &def_data); TEST_CALL_REPORT("ProDtlsymdefDataGet()", "ProTestSymInstInfo()", err, err != PRO_TK_NO_ERROR); err = ProTestDtlsymdefNameGet (&sym_def, inst_name); ProTKFprintf (fp, "\nId: %d. Name: %s. ", p_sym_inst[i].id, ProWstringToString (line, inst_name)); err = ProDtlsyminstdataAttachtypeGet (sym_data, &def_at_type); TEST_CALL_REPORT("ProDtlsyminstdataAttachtypeGet()", "ProTestSymInstInfo()", err, err != PRO_TK_NO_ERROR); ProTKFprintf (fp, "Attach type: %d.\n", def_at_type); err = ProDtlsyminstdataElbowlengthGet (sym_data, &is_def, ¶m); TEST_CALL_REPORT("ProDtlsyminstdataElbowlengthGet()", "ProTestSymInstInfo()", err, err != PRO_TK_NO_ERROR); ProTKFprintf (fp, "Elbow length = %5.3f is def %d. ", param, is_def); err = ProDtlsyminstdataAngleGet (sym_data, ¶m); TEST_CALL_REPORT("ProDtlsyminstdataAngleGet()", "ProTestSymInstInfo()", err, err != PRO_TK_NO_ERROR); ProTKFprintf (fp, "Angle = %5.3f. ", param); err = ProDtlsyminstdataScaledheightGet (sym_data, ¶m); TEST_CALL_REPORT("ProDtlsyminstdataScaledheightGet()", "ProTestSymInstInfo()", err, err != PRO_TK_NO_ERROR); ProTKFprintf (fp, "Height = %5.3f.", param); err = ProDtlsyminstdataVartextsCollect (sym_data, &p_vartexts); TEST_CALL_REPORT("ProDtlsyminstdataVartextsCollect()", "ProTestSymInstInfo()", err, err != PRO_TK_NO_ERROR && err != PRO_TK_E_NOT_FOUND); if (err == PRO_TK_NO_ERROR) { ProTKFprintf (fp, "\nVar text:"); err = ProArraySizeGet ((ProArray)p_vartexts, &text_size); for (j = 0; j < text_size; j++) { ProDtlvartextDataGet (p_vartexts[j], w_prompt, w_value); ProTKFprintf (fp, "\nprompt: %s.\t", ProWstringToString (line, w_prompt)); ProTKFprintf (fp, "value: %s", ProWstringToString (line, w_value)); } for (j = 0; j < text_size; j++) { ProDtlvartextFree (p_vartexts[j]); TEST_CALL_REPORT("ProDtlvartextFree()", "ProTestSymInstInfo()", err, err != PRO_TK_NO_ERROR); } err = ProArrayFree ((ProArray*)&p_vartexts); } err = ProDtlsyminstdataColorGet (sym_data, &color); TEST_CALL_REPORT("ProDtlsyminstdataColorGet()", "ProTestSymInstInfo()", err, err != PRO_TK_NO_ERROR); ProTKFprintf (fp, "\nColor: "); ProTestColorPrint (fp, color); } fclose (fp); err = ProArrayFree ((ProArray*)&p_sym_inst); ProStringToWstring(path, fname); err = ProInfoWindowDisplay(path, NULL, NULL); return (0); } /*===========================================================================*\ Function : ProTestDtlsymdefNameGet Purpose : Temporary used, while ProDtlsymdefdataPathGet not implemented \*===========================================================================*/ ProError ProTestDtlsymdefNameGet ( ProDtlsymdef *p_sym_def, ProName name ) { ProDtlsymdefdata data; ProError err; if (p_sym_def == NULL || p_sym_def->type != PRO_SYMBOL_DEFINITION) return (PRO_TK_BAD_INPUTS); err = ProDtlsymdefDataGet(p_sym_def, &data); err = ProDtlsymdefdataNameGet(data, name); return (PRO_TK_NO_ERROR); }