HTBasic Help
×
Menu
Index

Example: Cyclical Pushbutton

 
10    ! *********************************************************************
20    ! Example: Cyclical PUSHBUTTON
30    !
40    ! This example implements an object which cycles through its values
50    ! each time it is pushed. It uses a PUSHBUTTON widget. When the button
60    ! is pressed, the "LABEL" and "STATE" change. Any number of choices
70    ! could be used. This type of control, however, works best if the
80    ! number of choices is kept small.
90    !
100   ! ***************************************************************
110   !
120   INTEGER Tab_1,Tab_1_cols,Tab_2,Tab_2_cols,Width
130   INTEGER States,State,I
140   DIM Labels$(0:10)[10]
150   !
160   Tab_1=10
170   Tab_1_cols=25
180   Tab_2=Tab_1+(Tab_1_cols+1)*CHRX
190   Tab_2_cols=10
200   Width=Tab_2+(Tab_2_cols+3)*CHRX+Tab_1
210   States=5
220   !
230   ! Create labels for each state
240   !
250   FOR I=BASE(Labels$,1) TO BASE(Labels$,1)+SIZE(Labels$,1)-1
260     Labels$(I)="State "&VAL$(I)
270   NEXT I
280   !
290   ! Create widgets
300   !
310   ASSIGN @Panel TO WIDGET "PANEL";SET ("X":100,"Y":50,"WIDTH":Width,"HEIGHT":10*CHRY,"TITLE":" Example: Cyclical PUSHBUTTON")
320   CONTROL @Panel;SET ("SYSTEM MENU":"Quit")
330   ON EVENT @Panel,"SYSTEM MENU" GOTO Finis
340   !
350   ASSIGN @Cyclic_label TO WIDGET "LABEL";PARENT @Panel,SET ("X":10,"Y":Tab_1,"COLUMNS":Tab_1_cols,"BORDER":0)
360   CONTROL @Cyclic_label;SET ("VALUE":"Multi-state PUSHBUTTON: ","JUSTIFICATION":"RIGHT")
370   ASSIGN @Cyclic TO WIDGET "PUSHBUTTON";PARENT @Panel,SET ("X":Tab_2,"Y":10,"COLUMNS":Tab_2_cols)
380   CONTROL @Cyclic;SET ("STATES":States,"LABELS":Labels$(*),"PANEL DEFAULT":1)
390   !
400   ASSIGN @States_label TO WIDGET "LABEL";PARENT @Panel,SET ("X":Tab_1,"Y":3*CHRY,"COLUMNS":Tab_1_cols,"BORDER":0)
410   CONTROL @States_label;SET ("JUSTIFICATION":"RIGHT","VALUE":"Number of States (1-"&VAL$(SIZE(Labels$,1))&"): ")
420   ASSIGN @States TO WIDGET "NUMBER";PARENT @Panel,SET ("X":Tab_2,"Y":3*CHRY,"COLUMNS":Tab_2_cols)
430   CONTROL @States;SET ("FORMAT":"SHORT INTEGER","MINIMUM":1,"MAXIMUM":SIZE(Labels$,1),"VALUE":States)
440   !
450   ASSIGN @State_label TO WIDGET "LABEL";PARENT @Panel,SET ("X":Tab_1,"Y":5*CHRY,"COLUMNS":Tab_1_cols,"BORDER":0)
460   CONTROL @State_label;SET ("JUSTIFICATION":"RIGHT","VALUE":"Current State: ")
470   ASSIGN @State TO WIDGET "NUMBER";PARENT @Panel,SET ("X":Tab_2,"Y":5*CHRY,"COLUMNS":Tab_2_cols)
480   CONTROL @State;SET ("FORMAT":"SHORT INTEGER","MINIMUM":0,"MAXIMUM":States-1,"VALUE":0)
490   !
500   ! Define events
510   !
520   ON EVENT @Cyclic,"ACTIVATED",1 GOSUB Disp_state
530   ON EVENT @States,"RETURN" GOSUB Set_states
540   ON EVENT @States,"DONE" GOSUB Reset_states
550   ON EVENT @State,"RETURN" GOSUB Set_state
560   ON EVENT @State,"DONE" GOSUB Reset_state
570   !
580   LOOP
590     WAIT FOR EVENT
600   END LOOP
610   !
620   ! Event branches
630   !
640 Set_states: !
650   STATUS @States;RETURN ("VALUE":States)
660   CONTROL @State;SET ("MAXIMUM":States-1)
670   CONTROL @Cyclic;SET ("STATES":States)
680   RETURN
690   !
700 Reset_states: !
710   STATUS @Cyclic;RETURN ("STATES":States)
720   CONTROL @States;SET ("VALUE":States)
730   RETURN
740   !
750 Set_state:   !
760   STATUS @State;RETURN ("VALUE":State)
770   CONTROL @Cyclic;SET ("STATE":State)
780   RETURN
790   !
800 Reset_state: !
810   STATUS @Cyclic;RETURN ("STATE":State)
820   CONTROL @State;SET ("VALUE":State)
830   RETURN
840   !
850 Disp_state: !
860   STATUS @Cyclic;RETURN ("STATE":State)
870   CONTROL @State;SET ("VALUE":State)
880   RETURN
890   !
900 Finis: END