Files
TempleOS-Rijn/Demo/Doc/MenuButton.CPP
T
2018-09-08 21:46:02 +02:00

77 lines
1.7 KiB
C++

//This example shows buttons. Buttons return a menu val
//unless you rig them to send macros. Menu entries are
//about the same as buttons, but don't have a border.
I64 PopUpFreq()
{ //See also $LK,"PopUpRangeI64",A="MN: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 MenuButton()
{
Bool done=FALSE;
I64 i,j=0,freq=100;
I64 old_flags=DocPut->flags;
//This allows keyboard navigation to skip nonselectible 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 buttons 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=DocMenuDo(DocPut);
DocBottom;
switch (i) {
case MU_NOTHING:
break;
case MU_SND_ON:
j=freq;
Snd(j);
break;
case MU_SND_OFF:
j=0;
Snd(j);
break;
case MU_SET_FREQ:
freq=PopUpFreq;
if (j) {
j=freq;
Snd(j);
}
break;
default:
done=TRUE;
}
} while (!done);
DocPut->flags=DocPut->flags&~DOCF_FORM |
old_flags & DOCF_FORM;
DocClear;
Snd(0);
}
MenuButton;