HTBasic Help
×
Menu
Index

Example: Widget

 
10     ! *********************************************************************
20     ! Example: COMBO Widget
30     !
40     ! This program creates a COMBO widget and allows
50     ! the user to select an item from a supplied list
60     ! or to enter text via the keyboard.
70     !
80     ! ***********************************************
90     !
100   DIM Items$(0:15)[26],Sel$[1000]
110   INTEGER I,Sel,Fg,Bg,Lb_fg,Lb_bg
120   Items$(0)="  6 BY 12"
130   Items$(1)="  8 BY 16"
140   Items$(2)="  10 BY 20"
150   Items$(3)="  EDITABLE"
160   Items$(4)="  NOT EDITABLE"
170   Items$(5)="  USE DROPDOWN BUTTON"
180   Items$(6)="  NO DROPDOWN BUTTON"
190   Items$(7)="  SHOW LIST"
200   Items$(8)="  HIDE LIST"
210   Items$(9)="  SHOW SCROLLBAR"
220   Items$(10)="  HIDE SCROLLBAR"
230   Items$(11)="  SET COLORS"
240   FOR I=BASE(Items$,1)+12 TO BASE(Items$,1)+SIZE(Items$,1)-1
250     Items$(I)="item "&VAL$(I)
260   NEXT I
270   ASSIGN @Combo TO WIDGET "COMBO";SET ("ITEMS":Items$(*),"TITLE":" Example: COMBO Widget","COLUMNS":MAXLEN(Items$(0)))
280   CONTROL @Combo;SET ("X":100,"Y":50,"WIDTH":250,"BACKGROUND":1,"LIST BACKGROUND":1)
290   CONTROL @Combo;SET ("SYSTEM MENU":"Quit")
300   ON EVENT @Combo,"SELECTION" GOSUB Disp_sel
310   ON EVENT @Combo,"KEYSTROKE" GOSUB Disp_keystroke
320   ON EVENT @Combo,"RETURN" GOSUB Disp_return
330   ON EVENT @Combo,"SYSTEM MENU" GOTO Finis
340   LOOP
350     WAIT FOR EVENT
360   END LOOP
370 !
380 Disp_sel: !
390   STATUS @Combo;RETURN ("SELECTION":Sel)
400   STATUS @Combo;RETURN ("TEXT":Sel$)
410   DISP
420   DISP "selection: ";Sel;"""";Sel$;""""
430   SELECT Sel
440   CASE 0,1,2
450     CONTROL @Combo;SET ("FONT":Sel$,"COLUMNS":MAXLEN(Items$(0)))
460   CASE 3,4
470     CONTROL @Combo;SET ("EDITABLE":Sel=3)
480   CASE 5,6
490     CONTROL @Combo;SET ("DROPDOWN BUTTON":Sel=5)
500   CASE 7,8
510     CONTROL @Combo;SET ("SHOW LIST":Sel=7)
520   CASE 9,10
530     CONTROL @Combo;SET ("SCROLLBAR":Sel=9)
540   CASE 11
550     CONTROL @Combo;SET ("SENSITIVE":0)
560     STATUS @Combo;RETURN ("PEN":Fg,"BACKGROUND":Bg,"LIST PEN":Lb_fg,"LIST BACKGROUND":Lb_bg)
570     IF FNQuery_colors(Fg,Bg,Lb_fg,Lb_bg) THEN
580       CONTROL @Combo;SET ("PEN":Fg,"BACKGROUND":Bg,"LIST PEN":Lb_fg,"LIST BACKGROUND":Lb_bg)
590     END IF
600     CONTROL @Combo;SET ("SENSITIVE":1)
610   END SELECT
620   RETURN
630 !
640 Disp_keystroke: !
650   STATUS @Combo;RETURN ("TEXT":Sel$)
660   DISP
670   DISP "keystroke: """;Sel$;""""
680   RETURN
690 !
700 Disp_return: !
710   STATUS @Combo;RETURN ("TEXT":Sel$)
720   DISP
730   DISP "return: """;Sel$;""""
740   RETURN
750 Finis: !
760   ASSIGN @Combo TO *                                ! Delete COMBO widget
770   END
780   !
790   DEF FNQuery_colors(INTEGER Fg,Bg,Lb_fg,Lb_bg)
800     INTEGER Num_pens(0:0),Max_pen,Xoffset,Nw_height,Yoffset,Demo_offset
810     GESCAPE CRT,1;Num_pens(*)
820     Max_pen=Num_pens(0)
830     Xoffset=10+17*CHRX
840     Demo_offset=Xoffset+7*CHRX
850     Yoffset=10
860     !
870     ! Edit colors
880     !
890     ASSIGN @Panel TO WIDGET "PANEL";SET ("TITLE":"Select COMBO Colors","X":10,"Y":10,"VISIBLE":0),TRANSIENT
900     ASSIGN @Fg_label TO WIDGET "LABEL";SET ("VALUE":"Edit Pen","JUSTIFICATION":"RIGHT","X":10,"Y":Yoffset,"COLUMNS":15,"BORDER":0),PARENT @Panel
910     ASSIGN @Fg TO WIDGET "NUMBER";SET ("X":Xoffset,"Y":Yoffset,"COLUMNS":4,"FORMAT":"SHORT INTEGER","MINIMUM":0,"MAXIMUM":Max_pen,"VALUE":Fg),PARENT @Panel
920     STATUS @Fg;RETURN ("HEIGHT":Nw_height)
930     ASSIGN @Edit_demo TO WIDGET "LABEL";SET ("VALUE":"Edit Colors","X":Demo_offset,"Y":Yoffset,"COLUMNS":15,"HEIGHT":2*Nw_height,"PEN":Fg,"BACKGROUND":Bg),PARENT @Panel
940     Yoffset=Yoffset+Nw_height
950     ASSIGN @Bg_label TO WIDGET "LABEL";SET ("VALUE":"Edit Background","JUSTIFICATION":"RIGHT","X":10,"Y":Yoffset,"COLUMNS":15,"BORDER":0),PARENT @Panel
960     ASSIGN @Bg TO WIDGET "NUMBER";SET ("X":Xoffset,"Y":Yoffset,"COLUMNS":4,"FORMAT":"SHORT INTEGER","MINIMUM":0,"MAXIMUM":Max_pen,"VALUE":Bg),PARENT @Panel
970     !
980     ! List colors
990     !
1000    Yoffset=Yoffset+Nw_height
1010    ASSIGN @Lb_fg_label TO WIDGET "LABEL";SET ("VALUE":"List Pen","JUSTIFICATION":"RIGHT","X":10,"Y":Yoffset,"COLUMNS":15,"BORDER":0),PARENT @Panel
1020    ASSIGN @Lb_fg TO WIDGET "NUMBER";SET ("X":Xoffset,"Y":Yoffset,"COLUMNS":4,"FORMAT":"SHORT INTEGER","MINIMUM":0,"MAXIMUM":Max_pen,"VALUE":Lb_fg),PARENT @Panel
1030    ASSIGN @List_demo TO WIDGET "LABEL";SET ("VALUE":"List Colors","X":Demo_offset,"Y":Yoffset,"COLUMNS":15,"HEIGHT":2*Nw_height,"PEN":Fg,"BACKGROUND":Lb_bg),PARENT @Panel
1040    Yoffset=Yoffset+Nw_height
1050    ASSIGN @Lb_bg_label TO WIDGET "LABEL";SET ("VALUE":"List Background","JUSTIFICATION":"RIGHT","X":10,"Y":Yoffset,"COLUMNS":15,"BORDER":0),PARENT @Panel
1060    ASSIGN @Lb_bg TO WIDGET "NUMBER";SET ("X":Xoffset,"Y":Yoffset,"COLUMNS":4,"FORMAT":"SHORT INTEGER","MINIMUM":0,"MAXIMUM":Max_pen,"VALUE":Lb_bg),PARENT @Panel
1070    Yoffset=Yoffset+Nw_height+10
1080    STATUS @List_demo;RETURN ("WIDTH":W)
1090    STATUS @Panel;RETURN ("WIDTH":Pw,"HEIGHT":Ph,"INSIDE WIDTH":Piw,"INSIDE HEIGHT":Pih)
1100    Pw=Pw-Piw
1110    Piw=Demo_offset+W+10
1120    Pw=Pw+Piw
1130    ASSIGN @Sep TO WIDGET "SEPARATOR";SET ("X":10,"Y":Yoffset,"WIDTH":Piw-20,"HEIGHT":5),PARENT @Panel
1140    Yoffset=Yoffset+10
1150    ASSIGN @Done TO WIDGET "PUSHBUTTON";SET ("X":10+5*CHRX,"Y":Yoffset,"COLUMNS":10,"LABEL":"DONE"),PARENT @Panel
1160    ASSIGN @Cancel TO WIDGET "PUSHBUTTON";SET ("X":Demo_offset,"Y":Yoffset,"COLUMNS":10,"LABEL":"CANCEL"),PARENT @Panel
1170    STATUS @Cancel;RETURN ("HEIGHT":H)
1180    Ph=Ph-Pih
1190    Pih=Yoffset+H+10
1200    Ph=Ph+Pih
1210    CONTROL @Panel;SET ("WIDTH":Pw,"HEIGHT":Ph,"VISIBLE":1)
1220    !
1230    ON EVENT @Fg,"RETURN",2 GOSUB Set_edit
1240    ON EVENT @Fg,"DONE",2 GOSUB Set_edit
1250    ON EVENT @Bg,"RETURN",2 GOSUB Set_edit
1260    ON EVENT @Bg,"DONE",2 GOSUB Set_edit
1270    ON EVENT @Lb_fg,"RETURN",2 GOSUB Set_list
1280    ON EVENT @Lb_fg,"DONE",2 GOSUB Set_list
1290    ON EVENT @Lb_bg,"DONE",2 GOSUB Set_list
1300    ON EVENT @Done,"ACTIVATED",2 GOTO Done
1310    ON EVENT @Cancel,"ACTIVATED",2 GOTO Cancel
1320    !
1330    LOOP
1340      WAIT FOR EVENT
1350    END LOOP
1360 Set_edit:!
1370    STATUS @Fg;RETURN ("VALUE":Fg)
1380    STATUS @Bg;RETURN ("VALUE":Bg)
1390    CONTROL @Edit_demo;SET ("PEN":Fg,"BACKGROUND":Bg)
1400    RETURN
1410 !
1420 Set_list:!
1430    STATUS @Lb_fg;RETURN ("VALUE":Lb_fg)
1440    STATUS @Lb_bg;RETURN ("VALUE":Lb_bg)
1450    CONTROL @List_demo;SET ("PEN":Lb_fg,"BACKGROUND":Lb_bg)
1460    RETURN
1470 !
1480 Done: RETURN 1
1490 Cancel: RETURN 0
1500  FNEND