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