//This example shows bttns. Bttns return a menu val //unless you rig them to send macros. Menu entries are //about the same as bttns, but don't have a border. I64 PopUpFreq() {//See also PopUpRangeI64() I64 i; CDoc *doc=DocNew; DocPrint(doc,"$TX+CX,\"Set Freq\"$\n" //Centered text "$CM+LX,2,4$$BT,\"100 Hz\",LE=100$" "$CM+LX,18,0$$BT,\"200 Hz\",LE=200$" "$CM+LX,2,4$$BT,\"400 Hz\",LE=400$" "$CM+LX,18,0$$BT,\"800 Hz\",LE=800$\n"); i=PopUpMenu(doc); if (i<0) i=0; // <SHIFT-ESC> DocDel(doc); return i; } #define MU_NOTHING 0 #define MU_SET_FREQ 1 #define MU_SND_ON 2 #define MU_SND_OFF 3 U0 MenuBttn() { Bool done=FALSE; I64 i,j=0,freq=100; I64 old_flags=DocPut->flags; //This allows keyboard navigation to skip nonselible entries. DocPut->flags|=DOCF_FORM; do { DocClear; //Use <CTRL-l> to generate cursor movement expressions and check "Quote". "$CM+CX-RE,-4$Menu Demo\n\n"; "$LM,8$"; //Set left margin //These are bttns that return a val from a menu selection. if (!j) "\n$BT,\"Snd On\",LE=MU_SND_ON$\n\n\n"; else "\n$BT,\"Snd Off\",LE=MU_SND_OFF$\n\n\n"; "\n$BT,\"Set Freq\",LE=MU_SET_FREQ$\n\n\n" "\n$BT,\"Nothing\",LE=MU_NOTHING$\n\n\n" "\n$BT,\"Done\",LE=DOCM_CANCEL$\n\n\n"; i=DocMenu(DocPut); DocBottom; switch (i) { case MU_NOTHING: break; case MU_SND_ON: j=freq; Snd(Freq2Ona(j)); break; case MU_SND_OFF: j=0; Snd; break; case MU_SET_FREQ: freq=PopUpFreq; if (j) { j=freq; Snd(Freq2Ona(j)); } break; default: done=TRUE; } } while (!done); DocPut->flags=DocPut->flags&~DOCF_FORM | old_flags & DOCF_FORM; DocClear; Snd; } MenuBttn;