HTBasic Help
×
Menu
Index

Example: Radiobutton Widget

 
10     ! *********************************************************************
20     ! Example: RADIOBUTTON Widget
30     !
40     ! This program generates a panel with two tab groups of RADIOBUTTON
50     ! widgets. You can set buttons and observe their behavior. A
60     ! PRINTER widget is used to display the state of the buttons used.
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   ! Set the PRINTER widget handle COMmon
170   !
180   COM @Printer
190   !
200   ! Variables for display and widget handling
210   !
220   INTEGER Nlines,D(1:4)                                                                ! Used for display setup
230   REAL Dw,Dh                                                                                ! Display dimensions
240   REAL Px,Py,Pw,Ph,Iw,Ih                                                                ! Main PANEL parameters
250   REAL Gaph,Gapw,Bh,Bw,Sh,Sw,Prh,Prw                                ! Widget dimensions
260   REAL R1,R2,R3,R4,R5,C1,C2,C3,C4,C5                                ! Widget coordinates
270   !
280   ! Set up display
290   !
300   STATUS CRT,13;Nlines
310   GESCAPE CRT,3;D(*)
320   Dw=D(3)-D(1)
330   Dh=(D(4)-D(2))*((Nlines-7)/Nlines)
340   !
350   ! Set up PANEL coordinates
360   !
370   Pw=Dw*.5
380   Ph=Dh*.65
390   Px=(Dw-Pw)
400   Py=(Dh-Ph)
410   !
420   ! Build PANEL widget and add SYSTEM MENU to PANEL
430   !
440   CLEAR SCREEN
450   ASSIGN @Main TO WIDGET "PANEL";SET ("VISIBLE":0)
460   CONTROL @Main;SET ("RESIZABLE":0,"MAXIMIZABLE":0)
470   CONTROL @Main;SET ("X":Px/4,"Y":Py/2,"WIDTH":1.3*Pw,"HEIGHT":1.5*Ph)
480   CONTROL @Main;SET ("TITLE":" Example: RADIOBUTTON Widget")
490   CONTROL @Main;SET ("SYSTEM MENU":"Quit")
500   !
510   ! Get interior dimensions
520   !
530   STATUS @Main;RETURN ("INSIDE WIDTH":Iw,"INSIDE HEIGHT":Ih)
540   !
550   ! Set up widget coordinates and dimensions
560   !
570   Gaph=Ih*.03                                                ! Vertical gap
580   Gapw=Iw*.03                                                ! Horizontal gap
590   Bh=Ih*.15                                                                ! Button height
600   Bw=(Iw-Gapw*6)/5                                                ! Button width
610   Sh=Gaph                                                                ! Separator height
620   Prh=Ih-((Bh+Sh)*2+Gaph*6)                ! Printer height
630   Prw=(Iw-2*Gapw)                                                ! Printer width
640   Sw=Prw                                                                ! Separator width
650   !
660   R1=Gaph                                                                ! Top row
670   R2=R1+Bh+Gaph                                                ! Row 2 = row 1 + button height + gap
680   R3=R2+Sh+Gaph                                                ! Row 3 = row 2 + button height + gap
690   R4=R3+Bh+Gaph                                                ! Row 4 = row 3 + button height + gap
700   R5=R4+Sh+Gaph                                                ! Row 5 = row 4 + button height + gap
710   !
720   C1=Gapw                                                                ! Left column
730   C2=C1+Bw+Gapw                                                ! Col 2 = col 1 + button width + gap
740   C3=C2+Bw+Gapw                                                ! Col 3 = col 2 + button width + gap
750   C4=C3+Bw+Gapw                                                ! Col 4 = col 3 + button width + gap
760   C5=C4+Bw+Gapw                                                ! Col 5 = col 4 + button width + gap
770   Pw=C5+Bw+Gapw                                                ! Panel width = col 5 + button width + gap
780   !
790   ! Set up first tab group of RADIOBUTTONs. Set tab stop on A1.
800   !
810   ASSIGN @A1 TO WIDGET "RADIOBUTTON";PARENT @Main
820   CONTROL @A1;SET ("LABEL":"A1","TAB STOP":1)
830   CONTROL @A1;SET ("X":C1,"Y":R1,"WIDTH":Bw,"HEIGHT":Bh)
840   !
850   ! No tab stop on A2
860   !
870   ASSIGN @A2 TO WIDGET "RADIOBUTTON";PARENT @Main
880   CONTROL @A2;SET ("LABEL":"A2","TAB STOP":0)
890   CONTROL @A2;SET ("X":C2,"Y":R1,"WIDTH":Bw,"HEIGHT":Bh)
900   !
910   ! No tab stop on A3
920   !
930   ASSIGN @A3 TO WIDGET "RADIOBUTTON";PARENT @Main
940   CONTROL @A3;SET ("LABEL":"A3","TAB STOP":0)
950   CONTROL @A3;SET ("X":C3,"Y":R1,"WIDTH":Bw,"HEIGHT":Bh)
960   !
970   ! No tab stop on A4
980   !
990   ASSIGN @A4 TO WIDGET "RADIOBUTTON";PARENT @Main
1000  CONTROL @A4;SET ("LABEL":"A4","TAB STOP":0)
1010  CONTROL @A4;SET ("X":C4,"Y":R1,"WIDTH":Bw,"HEIGHT":Bh)
1020  !
1030  ! No tab stop on A5
1040  !
1050  ASSIGN @A5 TO WIDGET "RADIOBUTTON";PARENT @Main
1060  CONTROL @A5;SET ("LABEL":"A5","TAB STOP":0)
1070  CONTROL @A5;SET ("X":C5,"Y":R1,"WIDTH":Bw,"HEIGHT":Bh)
1080  !
1090  ! Separator to mark off first tab group
1100  !
1110  ASSIGN @Sep1 TO WIDGET "SEPARATOR";PARENT @Main
1120  CONTROL @Sep1;SET ("X":C1,"Y":R2,"WIDTH":Sw,"HEIGHT":Sh)
1130  !
1140  ! Set up second tab group, set TAB STOP on B1
1150  !
1160  ASSIGN @B1 TO WIDGET "RADIOBUTTON";PARENT @Main
1170  CONTROL @B1;SET ("LABEL":"B1","TAB STOP":1)
1180  CONTROL @B1;SET ("X":C1,"Y":R3,"WIDTH":Bw,"HEIGHT":Bh)
1190  !
1200  ! B2, no tab stop
1210  !
1220  ASSIGN @B2 TO WIDGET "RADIOBUTTON";PARENT @Main
1230  CONTROL @B2;SET ("LABEL":"B2","TAB STOP":0)
1240  CONTROL @B2;SET ("X":C2,"Y":R3,"WIDTH":Bw,"HEIGHT":Bh)
1250  !
1260  ! B3, no tab stop
1270  !
1280  ASSIGN @B3 TO WIDGET "RADIOBUTTON";PARENT @Main
1290  CONTROL @B3;SET ("LABEL":"B3","TAB STOP":0)
1300  CONTROL @B3;SET ("X":C3,"Y":R3,"WIDTH":Bw,"HEIGHT":Bh)
1310  !
1320  ! B4, no tab stop
1330  !
1340  ASSIGN @B4 TO WIDGET "RADIOBUTTON";PARENT @Main
1350  CONTROL @B4;SET ("LABEL":"B4","TAB STOP":0)
1360  CONTROL @B4;SET ("X":C4,"Y":R3,"WIDTH":Bw,"HEIGHT":Bh)
1370  !
1380  ! B5, no tab stop
1390  !
1400  ASSIGN @B5 TO WIDGET "RADIOBUTTON";PARENT @Main
1410  CONTROL @B5;SET ("LABEL":"B5","TAB STOP":0)
1420  CONTROL @B5;SET ("X":C5,"Y":R3,"WIDTH":Bw,"HEIGHT":Bh)
1430  !
1440  ! Separator for second tab group
1450  !
1460  ASSIGN @Sep2 TO WIDGET "SEPARATOR";PARENT @Main
1470  CONTROL @Sep2;SET ("X":C1,"Y":R4,"WIDTH":Sw,"HEIGHT":Sh)
1480  !
1490  ! PRINTER widget
1500  !
1510  ASSIGN @Printer TO WIDGET "PRINTER";PARENT @Main,SET ("TAB STOP":1)
1520  CONTROL @Printer;SET ("TAB STOP":1)
1530  CONTROL @Printer;SET ("BACKGROUND":White)
1540  CONTROL @Printer;SET ("PEN":Black)
1550  CONTROL @Printer;SET ("X":C1,"Y":R5,"WIDTH":Prw,"HEIGHT":Prh)
1560  !
1570  ! Set up events
1580  !
1590  ON EVENT @A1,"CHANGED" GOSUB A1
1600  ON EVENT @A2,"CHANGED" GOSUB A2
1610  ON EVENT @A3,"CHANGED" GOSUB A3
1620  ON EVENT @A4,"CHANGED" GOSUB A4
1630  ON EVENT @A5,"CHANGED" GOSUB A5
1640  !
1650  ON EVENT @B1,"CHANGED" GOSUB B1
1660  ON EVENT @B2,"CHANGED" GOSUB B2
1670  ON EVENT @B3,"CHANGED" GOSUB B3
1680  ON EVENT @B4,"CHANGED" GOSUB B4
1690  ON EVENT @B5,"CHANGED" GOSUB B5
1700  !
1710  ON EVENT @Main,"SYSTEM MENU" GOTO Finis
1720  !
1730  ! Turn on panel
1740  !
1750  CONTROL @Main;SET ("VISIBLE":1)
1760  !
1770  ! Main loop, wait for event
1780  !
1790  LOOP
1800    WAIT FOR EVENT
1810  END LOOP
1820  STOP
1830  !
1840  ! Handlers for buttons
1850  !
1860 A1: !
1870  Show_value(@A1,"Button A1, VALUE:")
1880  RETURN
1890  !
1900 A2: !
1910  Show_value(@A2,"Button A2, VALUE:")
1920  RETURN
1930  !
1940 A3: !
1950  Show_value(@A3,"Button A3, VALUE:")
1960  RETURN
1970  !
1980 A4: !
1990  Show_value(@A4,"Button A4, VALUE:")
2000  RETURN
2010  !
2020 A5: !
2030  Show_value(@A5,"Button A5, VALUE:")
2040  RETURN
2050  !
2060 B1: !
2070  Show_value(@B1,"Button B1, VALUE:")
2080  RETURN
2090  !
2100 B2: !
2110  Show_value(@B2,"Button B2, VALUE:")
2120  RETURN
2130  !
2140 B3: !
2150  Show_value(@B3,"Button B3, VALUE:")
2160  RETURN
2170  !
2180 B4: !
2190  Show_value(@B4,"Button B4, VALUE:")
2200  RETURN
2210  !
2220 B5: !
2230  Show_value(@B5,"Button B5, VALUE:")
2240  RETURN
2250  !
2260 Finis: !
2270  ASSIGN @Main TO *                                ! Delete PANEL widget
2280  END
2290  !
2300  ! ********** End of Main Program ****************
2310  !
2320  ! SUB to handle display of button inputs
2330  ! on PRINTER widget
2340  !
2350  SUB Show_value(@B,Text$)
2360    COM @Printer
2370    INTEGER Checked
2380    STATUS @B;RETURN ("VALUE":Checked)
2390    CONTROL @Printer;SET ("APPEND TEXT":Text$&VAL$(Checked))
2400  SUBEND