home *** CD-ROM | disk | FTP | other *** search
- 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
-