Example: Togglebutton Widget
|
10 ! *********************************************************************
20 ! Example: TOGGLEBUTTON Widget
30 !
40 ! This program uses a TOGGLEBUTTON widget. It provides a
50 ! row of TOGGLEBUTTONS and lists the button and its state
60 ! as the button is pressed.
70 !
80 ! **********************************************************
90 !
100 ! Define colors:
110 !
120 INTEGER Black,White,Red,Yellow,Green,Cyan,Blue,Magenta
130 DATA 0,1,2,3,4,5,6,7
140 READ Black,White,Red,Yellow,Green,Cyan,Blue,Magenta
150 !
160 INTEGER Sts ! Gets TOGGLEBUTTON value
170 DIM V1$[1],V2$[1],V3$[1] ! Converts value to string
180 !
190 INTEGER Nlines,D(1:4) ! Used for display handling
200 INTEGER Dw,Dh ! Gives display size
210 INTEGER X,Y,Pw,Ph,Iw,Ih ! PANEL parameters
220 INTEGER R1,R2,C1,C2,C3 ! Coordinates for widgets
230 INTEGER Bh,Bw,Lw ! Widget sizes
240 !
250 STATUS CRT,13;Nlines
260 GESCAPE CRT,3;D(*)
270 Dw=D(3)-D(1)
280 Dh=(D(4)-D(2))*((Nlines-7)/Nlines)
290 !
300 Ph=170 ! Interior height
310 Pw=280 ! Interior width
320 X=(Dw-Pw)/2 ! Center panel on screen
330 Y=(Dh-Ph)/2
340 !
350 CLEAR SCREEN
360 ASSIGN @Panel TO WIDGET "PANEL";SET ("VISIBLE":0)
370 CONTROL @Panel;SET ("MAXIMIZABLE":0,"RESIZABLE":0)
380 CONTROL @Panel;SET ("X":X,"Y":Y,"WIDTH":Pw,"HEIGHT":1.2*Ph)
390 CONTROL @Panel;SET ("TITLE":" Example: TOGGLEBUTTON Widget")
400 CONTROL @Panel;SET ("SYSTEM MENU":"Quit")
410 !
420 ! Determine inside dimensions of PANEL
430 !
440 STATUS @Panel;RETURN ("INSIDE WIDTH":Iw,"INSIDE HEIGHT":Ih)
450 !
460 Gaph=Ih*.04
470 Gapw=Iw*.03
480 Bh=(Ih-3*Gaph)/2 ! Button height
490 Bw=(Iw-4*Gapw)/3 ! Button width
500 R1=Gaph ! Top row
510 R2=R1+Bh+Gaph ! Row 2 = row 1 + button height + gap
520 C1=Gapw ! Left column
530 C2=C1+Bw+Gapw ! Col 2 = col 1 + button width + gap
540 C3=C2+Bw+Gapw ! Col 3 = col 2 + button width + gap
550 Lw=Bw*3+Gapw*2 ! Label width = 3 buttons plus gaps
560 !
570 ! Set up TOGGLEBUTTONS
580 !
590 ASSIGN @T1 TO WIDGET "TOGGLEBUTTON";PARENT @Panel
600 CONTROL @T1;SET ("X":C1,"Y":R1,"WIDTH":Bw,"HEIGHT":Bh)
610 CONTROL @T1;SET ("PEN":Blue)
620 CONTROL @T1;SET ("LABEL":"T1")
630 !
640 ASSIGN @T2 TO WIDGET "TOGGLEBUTTON";PARENT @Panel
650 CONTROL @T2;SET ("X":C2,"Y":R1,"WIDTH":Bw,"HEIGHT":Bh)
660 CONTROL @T2;SET ("PEN":Blue)
670 CONTROL @T2;SET ("LABEL":"T2")
680 !
690 ASSIGN @T3 TO WIDGET "TOGGLEBUTTON";PARENT @Panel
700 CONTROL @T3;SET ("X":C3,"Y":R1,"WIDTH":Bw,"HEIGHT":Bh)
710 CONTROL @T3;SET ("PEN":Blue)
720 CONTROL @T3;SET ("LABEL":"T3")
730 !
740 ! Create LABEL widget
750 !
760 ASSIGN @Label TO WIDGET "LABEL";PARENT @Panel
770 CONTROL @Label;SET ("X":C1,"Y":R2,"WIDTH":Lw,"HEIGHT":Bh)
780 CONTROL @Label;SET ("PEN":Red)
790 !
800 ! Set up events
810 !
820 ON EVENT @T1,"CHANGED" GOSUB Handler
830 ON EVENT @T2,"CHANGED" GOSUB Handler
840 ON EVENT @T3,"CHANGED" GOSUB Handler
850 ON EVENT @Panel,"SYSTEM MENU" GOTO Finis
860 !
870 ! Turn on PANEL
880 !
890 GOSUB Handler
900 CONTROL @Panel;SET ("VISIBLE":1)
910 !
920 ! Main loop, wait for event
930 !
940 LOOP
950 WAIT FOR EVENT
960 END LOOP
970 STOP
980 !
990 ! Handlers for buttons
1000 !
1010 Handler: !
1020 STATUS @T1;RETURN ("VALUE":Sts)
1030 V1$=VAL$(Sts)
1040 STATUS @T2;RETURN ("VALUE":Sts)
1050 V2$=VAL$(Sts)
1060 STATUS @T3;RETURN ("VALUE":Sts)
1070 V3$=VAL$(Sts)
1080 CONTROL @Label;SET ("VALUE":"T1:"&V1$&" / T2:"&V2$&" / T3:"&V3$)
1090 RETURN
1100 !
1110 Finis: !
1120 ASSIGN @Panel TO * ! Delete PANEL widget
1130 END