-+-+-+-+-+-+-+-+ START OF PART 191 -+-+-+-+-+-+-+-+ X ptk_inqmenuname(menuset.integers`5Bi`5D,`20 X &menunames.integers`5Bmenunames.number++`5D, &err); X `7D X psetpickfilter(1, 1, &menunames, &emptyset); X X#ifdef SUN X pickpet = 2; X pickrec.pickpet2_datarec.highlight_colour = 2; X pickrec.pickpet2_datarec.highlight_count = 2; X pickrec.pickpet2_datarec.highlight_duration = 0.3; X X aperture = &pickrec.pickpet2_datarec.aperture_size; X aperture->x = aperture->y = aperture->z = 0.05; X X#endif X#ifdef VMS X pickpet = 1; X pickrec.pickpet1_datarec.aperature = 0.05; X#endif X X pinitpick3(1, 1, pickinit.status, &pickinit.pick_path, pickpet,`20 X &pickecho, &pickrec, pickorder);`20 X`20 X /* set pick */ X psetpickmode(1, 1, PREQUEST, PES_ECHO); X X /* request pick */ X pickdata.pick.pick_path = pickarray; X X preqpick(1, 1, 10, &pickdata); X X if (pickdata.status == PQP_OK) X `7B X pickinput.inputclass = PI_PICK; X pickinput.ptkugeninput.ptkspickinput.pickdata = pickdata.pick; X pickinput.ptkugeninput.ptkspickinput.pathorder = PBOTTOM_FIRST; X if (ptk_scanmenus(WS1, &pickinput, &pickoutput)) X `7B X printf("menu item %d was picked from menu %d.\n", pickoutput.itemnum,` V20 X pickoutput.menuid); X *itemnum = pickoutput.itemnum; X `7D X else X printf("You did not pick a menu.\n"); X `7D X else X printf("Nothing picked.\n"); X`7D X X/*-------------------------------------------------------------------------- V*/ X Xptkboolean getmenupick(C(Pint) menuid, C(ptksmenuoutput *) pickoutput) XPreANSI(Pint menuid) XPreANSI(ptksmenuoutput *pickoutput) X`7B X Ppick pickinit; X Plimit3 pickecho; X Ppickrec pickrec; X Ppathorder pickorder; `20 X Pqpick pickdata; X Ppickpathel pickarray`5B10`5D; X Ppoint3 *aperture; X Pint pickpet; X ptksgeneralinput pickinput; X Pintlst menuset, emptyset; X Pint menusetlist`5B20`5D; X Pint totsize; X Pchar name`5B30`5D; X X emptyset.number = 0; X menuset.number = 1; X menuset.integers = menusetlist; X sprintf(name, "name$menu%d", menuid); X menusetlist`5B0`5D = ptk_stringtoint("name", name); X pickecho.xmin = 0.0; X pickecho.ymin = 0.0; X pickecho.zmin = 0.0; X pickecho.xmax = devx; X pickecho.ymax = devy; X pickecho.zmax = devz; X pickinit.status = PP_NOPICK; X pickinit.pick_path.depth = 0; X pickorder = PBOTTOM_FIRST; X /* make menu pickable */ X psetpickfilter(1, 1, &menuset, &emptyset); X X#ifdef SUN X pickpet = 2; X pickrec.pickpet2_datarec.highlight_colour = 2; X pickrec.pickpet2_datarec.highlight_count = 2; X pickrec.pickpet2_datarec.highlight_duration = 0.2; X X aperture = &pickrec.pickpet2_datarec.aperture_size; X aperture->x = aperture->y = aperture->z = 0.05; X X#endif X#ifdef VMS X pickpet = 1; X pickrec.pickpet1_datarec.aperature = 0.05; X#endif X X pinitpick3(1, 1, pickinit.status, &pickinit.pick_path, pickpet,`20 X &pickecho, &pickrec, pickorder);`20 X`20 X /* set pick */ X psetpickmode(1, 1, PREQUEST, PES_ECHO); X X /* request pick */ X pickdata.pick.pick_path = pickarray; X preqpick(1, 1, 10, &pickdata); X X if (pickdata.status == PQP_OK) X `7B X pickinput.inputclass = PI_PICK; X pickinput.ptkugeninput.ptkspickinput.pickdata = pickdata.pick; X pickinput.ptkugeninput.ptkspickinput.pathorder = PBOTTOM_FIRST; X `7D X return ptk_scanmenus(WS1, &pickinput, pickoutput); X`7D X X/*-------------------------------------------------------------------------- V*/ X Xvoid pointinput(C(Pint *) itemnum) XPreANSI(Pint *itemnum) X`7B X /* test locator */ X Ploc initloc; X Plimit echovol; X Plocrec locrec; X Pqloc locdata; X ptksgeneralinput locinput; X ptksmenuoutput locoutput; X X *itemnum = 0; X printf("Point at a menu item...\n"); X initloc.view_index = 0; X initloc.position = ptk_point(0.5, 0.5); X echovol.xmin = 0.0; X echovol.ymin = 0.0; X echovol.xmax = devx; X echovol.ymax = devy; X pinitloc(1, 1, &initloc, 1, &echovol, &locrec); X psetlocmode(1, 1, PREQUEST, PES_ECHO); X preqloc(1, 1, &locdata); X if (locdata.status == PSTAT_OK) X locinput.inputclass = PI_LOCATOR; X locinput.ptkugeninput.locpoint = locdata.loc.position; X if (ptk_scanmenus(WS1, &locinput, &locoutput)) X `7B X printf("menu item %d was pointed at from menu %d.\n", locoutput.itemnum, V`20 X locoutput.menuid); X *itemnum = locoutput.itemnum; X if (locoutput.measure) X printf("value, x = %f, y = %f\n", locoutput.value.x,`20 X locoutput.value.y); X `7D X else X printf("You did not point at a menu.\n"); X`7D X X/*-------------------------------------------------------------------------- V*/ X Xstatic void stringinput(C(Pint *) itemnum) XPreANSI(Pint *itemnum) X`7B X /* test string */ X ptksgeneralinput strinput; X Pchar dummystr`5B30`5D; X Pint dummylen; X ptksmenuoutput stroutput; X Plimit echoarea; X X *itemnum = 0; X strinput.inputclass = PI_STRING; X printf("Enter a menu item...\n"); `20 X echoarea = ptk_limit(0.0, devx * 0.5, 0.0, devy * 0.05); X ptk_readstring(WS1, "", "Type menu item name >", &echoarea, X 30, dummystr, &dummylen); X strncpy(strinput.ptkugeninput.str, dummystr, dummylen); X strinput.ptkugeninput.str`5Bdummylen`5D = '\0'; `20 X if (ptk_scanmenus(WS1, &strinput, &stroutput)) X `7B X printf("menu item %d was entered from menu %d.\n", stroutput.itemnum,`20 X stroutput.menuid); X *itemnum = stroutput.itemnum; X `7D X else X printf("No menu item of that name.\n"); X`7D X X/*-------------------------------------------------------------------------- V*/ X Xstatic void makemainmenu(C(void)) X`7B X Pint i, err; X Ppoint topleft; X Ppoint box; X Pint numboxes;`20 X Ptxpath mpath; X Pint textind; X Pfloat charht; X Pint white, blue, black, green; X `20 X /* create a BOX menu */ X /* set up main menu - box menu(box, user, rotator, exit) */ X mainmenuid = ptk_stringtoint("menuid", "mainmenu");`20 X box = ptk_point(0.2, 0.1); X textind = 1; X charht = 0.025; X topleft = ptk_point(0.8, 1.0); X X ptk_createboxmenu(mainmenuid, &topleft, &box); X X if (docolour) X `7B X white = ptk_stringtoint("colourindex", "white"); X blue = ptk_stringtoint("colourindex", "blue"); X black = ptk_stringtoint("colourindex", "black"); X green = ptk_stringtoint("colourindex", "green"); X ptk_setboxmenuattrs(1, mainmenuid, PTP_LEFT, -3,`20 X white, green, green, white, black, white, green, green); X `7D X X ptk_createtextmenuitem(mainmenuid, "box", 1, PEDIT_INSERT, &err); X ptk_createtextmenuitem(mainmenuid, "user", 2, PEDIT_INSERT, &err); X ptk_createtextmenuitem(mainmenuid, "rotator", 3, PEDIT_INSERT, &err); X ptk_createtextmenuitem(mainmenuid, "exit", 4, PEDIT_INSERT, &err); X`7D X X/*-------------------------------------------------------------------------- V*/ X Xstatic void makeinputmenu(C(void)) X/* create a box menu for selecting a PHIGS input device */ X`7B X Pint i, err; X Ppoint topleft; X Ppoint box; X Pint numboxes;`20 X Ptxpath mpath; X Pint textind; X Pfloat charht; X Pint white, magenta, black, darkmagenta; X X inputmenuid = ptk_stringtoint("menuid", "inputmenu");`20 X box = ptk_point(0.2, 0.1); X textind = 1; X charht = 0.03; X topleft = ptk_point(0.8, 0.5); X X ptk_createboxmenu(inputmenuid, &topleft, &box); X X if (docolour) X `7B X white = ptk_stringtoint("colourindex", "white"); X magenta = ptk_stringtoint("colourindex", "magenta"); X darkmagenta = ptk_stringtoint("colourindex", "medium magenta"); X black = ptk_stringtoint("colourindex", "black"); X ptk_setboxmenuattrs(1, inputmenuid, PTP_DOWN, 1, white,`20 X magenta, magenta, white, black, white, darkmagenta, darkmagenta); X `7D X X ptk_createtextmenuitem(inputmenuid, "pick", 1, PEDIT_INSERT, &err); X ptk_createtextmenuitem(inputmenuid, "point", 2, PEDIT_INSERT, &err); X ptk_createtextmenuitem(inputmenuid, "string", 3, PEDIT_INSERT, &err); X ptk_createtextmenuitem(inputmenuid, "exit", 4, PEDIT_INSERT, &err); X`7D X X/*-------------------------------------------------------------------------- V*/ X Xstatic void createbox(C(void)) X/* create a box menu with 4 items */ X`7B X Pint i, err; X Ppoint topleft; X Ppoint box; X Pint numboxes;`20 X Ptxpath mpath; X Pint textind; X Pfloat charht; X Pint white, green, black, darkgreen; X`20 X boxmenuid = ptk_stringtoint("menuid", "boxmenu"); X box = ptk_point(0.2, 0.1); X textind = 1; X charht = 0.03; X topleft = ptk_point(0.0, 0.0); X X ptk_createboxmenu(boxmenuid, &topleft, &box); X X if (docolour) X `7B X white = ptk_stringtoint("colourindex", "white"); X green = ptk_stringtoint("colourindex", "green"); X darkgreen = ptk_stringtoint("colourindex", "medium green"); X black = ptk_stringtoint("colourindex", "black"); X ptk_setboxmenuattrs(1, boxmenuid, PTP_DOWN, 1, white, green, green,`20 X white, black, white, darkgreen, darkgreen); X `7D X X topleft = ptk_point(0.5, 0.7); X ptk_setmenuposition(boxmenuid, &topleft);`20 X X ptk_createtextmenuitem(boxmenuid, "item 1", 1, PEDIT_INSERT, &err); X ptk_createtextmenuitem(boxmenuid, "item 2", 2, PEDIT_INSERT, &err); X ptk_createtextmenuitem(boxmenuid, "item 3", 3, PEDIT_INSERT, &err); X ptk_createtextmenuitem(boxmenuid, "item 4", 4, PEDIT_INSERT, &err); X`7D X X/*-------------------------------------------------------------------------- V*/ X Xstatic void createuser(C(void)) X/* create a user menu,`20 X** in this case a typical menu for a drawing package. X*/ X`7B X Pint userstructid; X Pint err; X X makeshademenu(); X usermenuid = ptk_stringtoint("menuid", "usermenu");`20 X userstructid = ptk_stringtoint("structureid", "usermenu");`20 X ptk_createusermenu(usermenuid, userstructid); X ptk_createstructmenuitem(usermenuid,`20 X ptk_stringtoint("structureid", "shademenu1"), 1, PEDIT_INSERT, &err) V; X ptk_createstructmenuitem(usermenuid,`20 X ptk_stringtoint("structureid", "shademenu2"), 2, PEDIT_INSERT, &err) V; X ptk_createstructmenuitem(usermenuid,`20 X ptk_stringtoint("structureid", "shademenu3"), 3, PEDIT_INSERT, &err) V; X ptk_createstructmenuitem(usermenuid,`20 X ptk_stringtoint("structureid", "shademenu4"), 4, PEDIT_INSERT, &err) V; X ptk_createstructmenuitem(usermenuid,`20 X ptk_stringtoint("structureid", "shademenu5"), 5, PEDIT_INSERT, &err) V; X ptk_createstructmenuitem(usermenuid,`20 X ptk_stringtoint("structureid", "shademenu6"), 6, PEDIT_INSERT, &err) V; X`7D X X/*-------------------------------------------------------------------------- V*/ X Xstatic void createrotator(C(void)) X/* create a 1D, 2D and 3D rotator */ X`7B X Ppoint size, pos; X Pint blue, white, black, green; X X /* create a rotator */ X rotator1 = ptk_stringtoint("menuid", "1drotator"); X rotator2 = ptk_stringtoint("menuid", "2drotator"); X rotator3 = ptk_stringtoint("menuid", "3drotator"); X size = ptk_point(0.2, 0.2); X X ptk_createrotator(WS1, rotator1, PTKEONED, &size, "1D rotator", X 0.02); X ptk_createrotator(WS1, rotator2, PTKETWOD, &size, "2D rotator", X 0.02); X size = ptk_point(0.3, 0.2); X ptk_createrotator(WS1, rotator3, PTKETHREED, &size, "3D rotator", X 0.02); X if (docolour) X `7B X blue = ptk_stringtoint("colourindex", "blue"); X white = ptk_stringtoint("colourindex", "white"); X black = ptk_stringtoint("colourindex", "black"); X green = ptk_stringtoint("colourindex", "green"); X ptk_setrotatorattrs(WS1, rotator1, 1, white, blue, white, blue,`20 X white, blue, white, black); X ptk_setrotatorattrs(WS1, rotator2, 1, white, blue, white, blue,`20 X white, blue, white, black); X ptk_setrotatorattrs(WS1, rotator3, -3, white, green, white, green, X white, green, white, black); X `7D X pos = ptk_point(0.5, 0.3); X ptk_setmenuposition(rotator1, &pos); X pos = ptk_point(0.5, 0.55); X ptk_setmenuposition(rotator2, &pos); X pos = ptk_point(0.5, 0.8); X ptk_setmenuposition(rotator3, &pos); X ptk_setrotatortitle(rotator1, "zoom");`20 X`7D X X/*-------------------------------------------------------------------------- V*/ X Xstatic void testboxmenu(C(void)) X/* enable pick, locator and string input on box menus,`20 X** Menu items on the input menu and box menu are highlighted X** when selected. X*/ X`7B X ptkboolean boxmenuquit; X ptksmenuoutput output; X Pint itemnum; X X ptk_unpostmenu(WS1, mainmenuid); `20 X ptk_postmenu(WS1, inputmenuid); X X ptk_postmenu(WS1, boxmenuid); `20 X pupdatews(WS1, PPERFORM); X boxmenuquit = FALSE; X do X `7B X output.itemnum = 0; X if (getmenupick(inputmenuid, &output)) X `7B X ptk_setboxmenuhighlightitem(inputmenuid, output.itemnum); X pupdatews(WS1, PPERFORM); X switch (output.itemnum) X `7B X case 1: pickinput(&itemnum); X ptk_setboxmenuhighlightitem(boxmenuid, itemnum); X break; X case 2: pointinput(&itemnum); X ptk_setboxmenuhighlightitem(boxmenuid, itemnum); X break; X case 3: stringinput(&itemnum); X ptk_setboxmenuhighlightitem(boxmenuid, itemnum); X break; X case 4: boxmenuquit = TRUE; X break; `20 X `7D X pupdatews(WS1, PPERFORM); X `7D X `7D while (!boxmenuquit); X ptk_clearboxmenuhighlight(inputmenuid); X ptk_clearboxmenuhighlight(boxmenuid); X ptk_unpostmenu(WS1, boxmenuid); X`7D X X/*-------------------------------------------------------------------------- V*/ X Xstatic void testusermenu(C(void)) X/* enable pick, locator and string input on user menu. X** The invisibility filter is used to hide the main menu. X*/ X`7B X ptkboolean usermenuquit; X ptksmenuoutput output; X Pint err, itemnum, lastitemnum, stid, invismenu; X Pintlst incl, excl; X Pchar name`5B20`5D; X X excl.number = 0; X excl.integers = NULL; X incl.number = 1; X incl.integers = &invismenu; X lastitemnum = itemnum = 0; X X sprintf(name, "name$menu%d", mainmenuid); X invismenu = ptk_stringtoint("name", name); X psetinvisfilter(WS1, &incl, &excl); +-+-+-+-+-+-+-+- END OF PART 191 +-+-+-+-+-+-+-+-