/*============================================================================*\ FILE : TestMenu.c PURPOSE : Menu function testing for Pro/TOOLKIT HISTORY.. DATE BUILD AUTHOR MODIFICATIONS 13-Nov-96 H-01-17 dmp $$1 Created 21-Nov-96 H-01-17 mgs $$2 Explictly cast ProMenuHold to fix comilation errors on sgi. 05-Dec-96 H-01-19 amin $$3 Changed order of arg for ProWstringToString ProStringToWstring 20-Jan-97 H-01-21 Pavel $$4 Added calls some function 28-Jan-97 H-01-25 Jerry $$5 Added appl include 15-Jun-97 H-03-14 Pavel $$6 Added calls some functions 06-Oct-97 H-03-25 Pavel $$7 More TEST_CALL_REPORT 01-Jul-98 I-01-13 AKH $$8 Added support for PT/Products Toolkit 23-Nov-98 I-01-28 akh $$9 Added qcr file \*============================================================================*/ /*----------------------------------------------------------------------------*\ Pro/TOOLKIT includes \*----------------------------------------------------------------------------*/ #include "ProToolkit.h" #include "ProMenu.h" #include "ProUtil.h" /*----------------------------------------------------------------------------*\ Pro/DEVELOP includes \*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*\ C System includes \*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*\ Application includes \*----------------------------------------------------------------------------*/ #include #include #include /*----------------------------------------------------------------------------*\ Application macros \*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*\ Application data types \*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*\ Application global/external data \*----------------------------------------------------------------------------*/ static int menuTestMode = TRUE; static wchar_t **strings; static wchar_t **help; /*============================================================================*\ Function : ProTestMenus Purpose : Create a menu to test Menu functions \*============================================================================*/ int ProTestMenus(void *a, int b) { int menu_id; ProError status; int result; int action; int i; char tmp_str[80]; ProBoolean bool; FILE *fp = NULL; int ProTestMenuGenaction(FILE*, void*, void*, void*, void*, int*); if((fp = fopen ("test_menus.txt", "a")) == NULL) return -1; ProUtilMsgPrint("gen", "TEST %0s", "ProTestMenus: enter"); /*----------------------------------------------------------------------------*\ Test initialization \*----------------------------------------------------------------------------*/ strings = (wchar_t**)calloc(PRO_TEST_NUM_STRINGS+1, sizeof(wchar_t *)); help = (wchar_t**)calloc(PRO_TEST_NUM_STRINGS+1, sizeof(wchar_t *)); for( i = 0; i < PRO_TEST_NUM_STRINGS; i++ ) { strings[i] = (wchar_t*)calloc(80, sizeof(wchar_t)); help[i] = (wchar_t*)calloc(80, sizeof(wchar_t)); sprintf(tmp_str, "Button%d", i); ProStringToWstring(strings[i], tmp_str); sprintf(tmp_str, "Select Button%d", i); ProStringToWstring(help[i], tmp_str); } strings[i] = (wchar_t*)calloc(80, sizeof(wchar_t)); help[i] = (wchar_t*)calloc(80, sizeof(wchar_t)); /*----------------------------------------------------------------------------*\ Setup the main menu for testing \*----------------------------------------------------------------------------*/ status = ProMenuFileRegister("TkMenu", "tkmenu.mnu", &menu_id); TEST_CALL_REPORT("ProMenuFileRegister()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonLocationSet("TkMenu", "Done", -1); TEST_CALL_REPORT("ProMenubuttonLocationSet()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet("TkMenu", "StringsSelect", (ProMenubuttonAction)ProTestMenuAction, fp, PRO_TEST_MENU_STRINGS); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet("TkMenu", "Activate", (ProMenubuttonAction)ProTestMenuAction, fp, PRO_TEST_MENU_ACTIVATE); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet("TkMenu", "Deactivate", (ProMenubuttonAction)ProTestMenuAction, fp, PRO_TEST_MENU_DEACTIVATE); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR); action = PRO_TEST_MENU_DONE; status = ProMenubuttonGenactionSet("TkMenu", "Done", (ProMenubuttonGenaction)ProTestMenuGenaction, fp, NULL, NULL, NULL, NULL, &action); TEST_CALL_REPORT("ProMenubuttonGenactionSet()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActionSet("TkMenu", "TkMenu", (ProMenubuttonAction) ProMenuHold, NULL, 0); TEST_CALL_REPORT("ProMenubuttonActionSet()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR); /*----------------------------------------------------------------------------*\ Setup pre- and post- actions for the done button \*----------------------------------------------------------------------------*/ status = ProMenubuttonPreactionSet("TkMenu", "Done", (ProMenubuttonAction)ProTestMenuPremode, fp, 0); TEST_CALL_REPORT("ProMenubuttonPreactionSet()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonPostactionSet("TkMenu", "Done", (ProMenubuttonAction)ProTestMenuPostmode, fp, 0); TEST_CALL_REPORT("ProMenubuttonPostactionSet()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR); /*----------------------------------------------------------------------------*\ Display and Process the main testing menu \*----------------------------------------------------------------------------*/ if( !menuTestMode ) { status = ProMenuDatamodeSet("TkMenu", TRUE); TEST_CALL_REPORT("ProMenuDatamodeSet()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonDelete("TkMenu", "Deactivate", &result); TEST_CALL_REPORT("ProMenubuttonDelete()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonVisibilitySet("TkMenu", "Activate", FALSE); TEST_CALL_REPORT("ProMenubuttonVisibilitySet()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR); status = ProMenuCreate(PROMENUTYPE_MAIN, "TkMenu", &menu_id); TEST_CALL_REPORT("ProMenuCreate()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR); } else { status = ProMenuModeSet("TkMenu", PROMENUMODE_OPERATIONAL); TEST_CALL_REPORT("ProMenuModeSet()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR); status = ProMenuPush(); TEST_CALL_REPORT("ProMenuPush()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR); status = ProMenuCreate(PROMENUTYPE_MAIN, "TkMenu", &menu_id); TEST_CALL_REPORT("ProMenuCreate()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonHighlight("TkMenu", "StringsSelect"); TEST_CALL_REPORT("ProMenubuttonHighlight()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonDeactivate("TkMenu", "Deactivate"); TEST_CALL_REPORT("ProMenubuttonDeactivate()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR); } status = ProMenuProcess("TkMenu", &action); TEST_CALL_REPORT("ProMenuProcess()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR && status != PRO_TK_E_FOUND); status = ProMenuVisibilityGet("TkMain", &bool); TEST_CALL_REPORT("ProMenuVisibilityGet()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR && status != PRO_TK_E_FOUND); if (bool == FALSE) { status = ProMenuPop(); TEST_CALL_REPORT("ProMenuPop()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR); } fclose(fp); return(0); } /*============================================================================*\ Function : ProTestMenuPreMode Purpose : Function used for testing ProMenubuttonPreactionSet() \*============================================================================*/ int ProTestMenuPremode(FILE *fp, int b) { ProError status; fprintf(fp, "PreAction called\n"); TEST_CALL_REPORT("ProMenubuttonAction()", "ProTestMenuPremode()", 0, 0); if( menuTestMode ) { ProUtilMsgPrint("gen", "TEST %0s", "Cannot currently leave menu test mode!"); status = ProMenuCommandPush("StringsSelect"); TEST_CALL_REPORT("ProMenuCommandPush()", "ProTestMenu()", status, status != PRO_TK_NO_ERROR); return(1); } return(0); } /*============================================================================*\ Function : ProTestMenuPostMode Purpose : Function used for testing ProMenubuttonPostactionSet() \*============================================================================*/ int ProTestMenuPostmode(FILE *fp, int b) { TEST_CALL_REPORT("ProMenubuttonAction()", "ProTestMenuPostmode()", 0, 0); fprintf(fp, "PostAction called\n"); ProUtilMsgPrint("gen", "TEST %0s", "Menu testing complete!"); return(0); } /*============================================================================*\ Function : ProTestMenuAction Purpose : Available actions for menu picks \*============================================================================*/ int ProTestMenuAction(FILE *fp, int choice) { ProError status; int n_selected; wchar_t **selected; wchar_t title[20]; char mess[100], button[20]; int i; static int exit_number=-1; TEST_CALL_REPORT("ProMenubuttonAction()", "ProTestMenuAction()", 0, 0); switch(choice) { case PRO_TEST_MENU_DONE: exit_number++; switch (exit_number%3) { case 0: ProUtilMsgPrint("gen", "TEST %0s", "Can not leave menu now." " Press once more."); status = ProMenuHold(); TEST_CALL_REPORT("ProMenuHold()", "ProTestMenuAction()", status, status != PRO_TK_NO_ERROR); break; case 1: status = ProMenuDeleteWithStatus(choice); TEST_CALL_REPORT("ProMenuDeleteWithStatus()", "ProTestMenuAction()", status, status != PRO_TK_NO_ERROR); break; case 2: status = ProMenuDelete(); TEST_CALL_REPORT("ProMenuDelete()", "ProTestMenuAction()", status, status != PRO_TK_NO_ERROR); break; } break; case PRO_TEST_MENU_ACTIVATE: status = ProMenubuttonDeactivate("TkMenu", "Activate"); TEST_CALL_REPORT("ProMenubuttonDeactivate()", "ProTestMenuAction()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonActivate("TkMenu", "Deactivate"); TEST_CALL_REPORT("ProMenubuttonActivate()", "ProTestMenuAction()", status, status != PRO_TK_NO_ERROR); break; case PRO_TEST_MENU_DEACTIVATE: status = ProMenubuttonActivate("TkMenu", "Activate"); TEST_CALL_REPORT("ProMenubuttonActivate()", "ProTestMenuAction()", status, status != PRO_TK_NO_ERROR); status = ProMenubuttonDeactivate("TkMenu", "Deactivate"); TEST_CALL_REPORT("ProMenubuttonDeactivate()", "ProTestMenuAction()", status, status != PRO_TK_NO_ERROR); break; case PRO_TEST_MENU_STRINGS: status = ProMenubuttonUnhighlight("TkMenu", "StringsSelect"); TEST_CALL_REPORT("ProMenubuttonUnhighlight()", "ProTestMenuAction()", status, status != PRO_TK_NO_ERROR); ProStringToWstring(title, "Strings"); status = ProMenuStringsSelect(title, strings, 1, help, &selected, &n_selected); TEST_CALL_REPORT("ProMenuStringsSelect()", "ProTestMenuAction()", status, status != PRO_TK_NO_ERROR); for( i = 0; i < n_selected; i++ ) { ProWstringToString(button, selected[i]); sprintf(mess, "%s was selected", button); fprintf(fp, "%s\n", mess); ProUtilMsgPrint("gen", "TEST %0s", mess); } break; default: break; } menuTestMode = FALSE; return(0); } /*============================================================================*\ Function : ProTestMenuGenaction Purpose : Available actions for menu picks \*============================================================================*/ int ProTestMenuGenaction(FILE *fp, void *b, void *c, void *d, void *e, int *f) { TEST_CALL_REPORT("ProMenubuttonGenaction()", "ProTestMenuGenaction()", 0, 0); ProTestMenuAction(fp, *f); return (0); } /*============================================================================*\ Function : ProTestMacro Purpose : Run macro entered by user \*============================================================================*/ int ProTestMacro( void* p_dummy, int int_dummy ) { #ifndef PT_PRODUCTS_BUILD ProError status; ProMacro w_macro; ProMacro w_default_macro; char default_macro[] = "#MODE;#PART;#LIST;"; char buffer[ PRO_LINE_SIZE ]; ProStringToWstring( w_default_macro, default_macro ); sprintf( buffer, "Enter macro keys [%s]: ", default_macro ); ProUtilMsgPrint( "gen", "TEST %0s", buffer ); if( !ProUtilStringGet( w_macro, w_default_macro, PRO_MACRO_SIZE ) ) return -1; status = ProMacroLoad( w_macro ); TEST_CALL_REPORT( "ProMacroLoad()", "ProTestMacro()", status, status != PRO_TK_NO_ERROR ); #endif return 0; }