HTBasic Help
×
Menu
Index

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