HTBasic Help
×
Menu
Index

Example: Slider Test

 
10     ! *********************************************************************
20     ! Example: SLIDER Test
30     !
40     ! This program consists of a SLIDER and a LABEL in a PANEL with
50     ! a pulldown menu system. You set the SLIDER to a value, and the
60     ! LABEL shows the value.
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   ! Log and Direct are flags for LOGARITHMIC and DIRECT MOVE mode
170   ! settings. V is the value returned from the SLIDER.
180   !
190   INTEGER Log,Direct
200   REAL V
210   !
220   ! Variables for display handling
230   !
240   INTEGER Nlines,D(1:4),Dw,Dh,Iw,Ih,Gx,Gy                                ! Display size parameters
250   INTEGER Pw,Ph,Px,Py                                                                ! PANEL parameters
260   INTEGER Lx,Ly,Lw,Lh,Sx,Sy,Sw,Sh                                ! LABEL & SLIDER parameters
270   !
280   ! Get display size
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 main PANEL dimensions and origin
360   !
370   Pw=Dw*.35
380   Ph=Dh*.8
390   Px=(Dw-Pw)/2
400   Py=(Dh-Ph)/2
410   !
420   ! Build main PANEL
430   !
440   CLEAR SCREEN
450   ASSIGN @Main TO WIDGET "PANEL";SET ("VISIBLE":0)
460   CONTROL @Main;SET ("X":Px,"Y":Py,"WIDTH":Pw,"HEIGHT":Ph)
470   CONTROL @Main;SET ("RESIZABLE":0,"MAXIMIZABLE":0)
480   CONTROL @Main;SET ("BACKGROUND":9,"TITLE":" Example: SLIDER Test")
490   !
500   ! Build menu
510   !
520   ASSIGN @Menu TO WIDGET "PULLDOWN MENU";PARENT @Main
530   CONTROL @Menu;SET ("LABEL":" Menu")
540   ASSIGN @Log TO WIDGET "MENU BUTTON";PARENT @Menu
550   CONTROL @Log;SET ("LABEL":" Set LOG mode")
560   Log=0
570   ASSIGN @Direct TO WIDGET "MENU BUTTON";PARENT @Menu
580   CONTROL @Direct;SET ("LABEL":" Set DIRECT MOVE")
590   Direct=0
600   ASSIGN @S1 TO WIDGET "MENU SEPARATOR";PARENT @Menu
610   ASSIGN @Quit TO WIDGET "MENU BUTTON";PARENT @Menu
620   CONTROL @Quit;SET ("LABEL":" Quit")
630   !
640   ! PANEL done, get inside dimensions
650   !
660   STATUS @Main;RETURN ("INSIDE WIDTH":Iw,"INSIDE HEIGHT":Ih)
670   !
680   ! Set widget parameters
690   !
700   Gx=Iw*.1                                                                ! Set gaps
710   Gy=Ih*.05
720   Lx=Gx                                                                ! Position & size LABEL
730   Ly=Gy
740   Lw=Iw*.4
750   Lh=Iw*.2
760   Sx=Lx+Lw+Gx                                                ! Position & size SLIDER
770   Sy=Gy
780   Sw=Iw-(Sx+Gx)
790   Sh=Ih-(2*Gy)
800   !
810   ! Create LABEL widget
820   !
830   ASSIGN @Label TO WIDGET "LABEL";PARENT @Main
840   CONTROL @Label;SET ("X":Lx,"Y":Ly,"WIDTH":Lw,"HEIGHT":Lh)
850   CONTROL @Label;SET ("BACKGROUND":1,"PEN":Black)
860   !
870   ! Create SLIDER widget
880   !
890   ASSIGN @Slider TO WIDGET "SLIDER";PARENT @Main
900   CONTROL @Slider;SET ("X":Sx,"Y":Sy,"WIDTH":Sw,"HEIGHT":Sh)
910   CONTROL @Slider;SET ("AUTO REPEAT":1,"LOGARITHMIC":0)
920   CONTROL @Slider;SET ("MAXIMUM":100,"MINIMUM":1)
930   CONTROL @Slider;SET ("MAJOR INCREMENT":10,"MINOR INCREMENT":1)
940   !
950   ! Enable events
960   !
970   ON EVENT @Log,"ACTIVATED" GOSUB Set_log
980   ON EVENT @Direct,"ACTIVATED" GOSUB Set_direct
990   ON EVENT @Slider,"CHANGED" GOSUB Set_label
1000  ON EVENT @Quit,"ACTIVATED" GOTO Finis
1010  !
1020  ! Initialize menu labels, make all widgets visible
1030  !
1040  GOSUB Set_label
1050  CONTROL @Main;SET ("VISIBLE":1)
1060  !
1070  ! Wait for event to happen
1080  !
1090  LOOP
1100    WAIT FOR EVENT
1110  END LOOP
1120  STOP
1130  !
1140  ! ********* Subroutines *****************
1150  !
1160  ! Toggle between log and linear mode
1170  !
1180 Set_log: !
1190  SELECT Log
1200  CASE 0
1210    CONTROL @Slider;SET ("LOGARITHMIC":1)
1220    CONTROL @Log;SET ("LABEL":"Set LINEAR Mode")
1230    Log=1
1240  CASE 1
1250    CONTROL @Slider;SET ("LOGARITHMIC":0)
1260    CONTROL @Log;SET ("LABEL":"Set LOG Mode")
1270    Log=0
1280  END SELECT
1290  RETURN
1300  !
1310  ! Toggle DIRECT MOVE on or off
1320  !
1330 Set_direct: !
1340  SELECT Direct
1350  CASE 0
1360    CONTROL @Slider;SET ("DIRECT MOVE":1)
1370    CONTROL @Direct;SET ("LABEL":"Clear DIRECT MOVE")
1380    Direct=1
1390  CASE 1
1400    CONTROL @Slider;SET ("DIRECT MOVE":0)
1410    CONTROL @Direct;SET ("LABEL":"Set DIRECT MOVE")
1420    Direct=0
1430  END SELECT
1440  RETURN
1450  !
1460  ! Set label value from SLIDER widget
1470  !
1480 Set_label: !
1490  STATUS @Slider;RETURN ("VALUE":V)
1500  CONTROL @Label;SET ("VALUE":V)
1510  RETURN
1520  !
1530 Finis: !
1540  ASSIGN @Main TO *                                                ! Delete PANEL widget
1550  END