A2osX/LIB/LIBGUI.S.MENU.txt
2020-10-09 17:28:01 +02:00

418 lines
6.3 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1
*--------------------------------------
MENU.MBarInit >STYA ZPMENUPtr
>STYA ZPPtr1
ldy #S.MBAR.S
lda (ZPPtr1),y
bmi .80
stz DX
stz DX+1
.1 lda (ZPPtr1)
beq .8
lda #S.MBAR.TEXT
clc
adc ZPPtr1
tay
lda ZPPtr1+1
adc #0
ldx hSYSFONB
jsr FON.GetTextSize
ldy #S.MBAR.X1
lda DX
sta (ZPPtr1),y
iny
lda DX+1
sta (ZPPtr1),y
iny #S.MBAR.XT
lda DX
clc
adc PREFS.MBARXMARGIN
sta DX
sta (ZPPtr1),y
iny
lda DX+1
adc #0
sta DX+1
sta (ZPPtr1),y
lda DX
clc
adc CB.CACHE+S.CB.SrcW
sta DX
lda DX+1
adc CB.CACHE+S.CB.SrcW+1
sta DX+1
iny #S.MBAR.X2
lda DX
clc
adc PREFS.MBARXMARGIN
sta DX
sta (ZPPtr1),y
iny
lda DX+1
adc #0
sta DX+1
sta (ZPPtr1),y
lda (ZPPtr1)
clc
adc ZPPtr1
sta ZPPtr1
bcc .1
inc ZPPtr1+1
bra .1
.8 lda #$80
ldy #S.MBAR.S
sta (ZPPtr1),y
.80 clc
rts
*--------------------------------------
* MENU.New(int X, int Y, *MITEM mitems)
*--------------------------------------
MENU.New >LDYAI S.MENU
>SYSCALL2 getmem
bcs .9
>STYA ZPMENUPtr
lda #S.OBJ.T.MENU
sta (ZPMENUPtr) S.OBJ.T
lda #0
ldy #S.MENU-1
.1 sta (ZPMENUPtr),y
dey
bne .1
>PULLA
ldy #S.MENU.MITEMS
sta (ZPMENUPtr),y
>PULLA
iny
sta (ZPMENUPtr),y
>PULLA
ldy #S.OBJ.Y1
sta (ZPMENUPtr),y
>PULLA
iny
sta (ZPMENUPtr),y
>PULLA
ldy #S.OBJ.X1
sta (ZPMENUPtr),y
>PULLA
iny
sta (ZPMENUPtr),y
txa hMenu
* clc
rts
.9 >POP 6
MENU.New.RTS rts
*--------------------------------------
MENU.Show >SYSCALL2 GetMemPtr
>STYA ZPMENUPtr
jsr GetCBBuf
bcs MENU.New.RTS
>DEBUG
ldy #S.MENU.MITEMS
lda (ZPMENUPtr),y
sta ZPPtr1
iny
lda (ZPMENUPtr),y
sta ZPPtr1+1
* |Icon ChkMrk "Menu Item" KEYMOD1-KEYMOD2-KEY > |
stz IY Icon Margin W
stz IE Max Text W
stz IE+1
stz INE Max Mod-Key W
lda #12 2px Borders+5 LMARGIN (Checked) +5 RMARGIN (SubMenu)
sta DX
stz DX+1
lda #2 2px Borders
sta DY Menu H
stz DY+1
.1 lda (ZPPtr1)
beq .3
jsr MENU.Show.GetW
lda DY
clc
adc SYSFON.H
sta DY
bcc .2
inc DY+1
.2 lda (ZPPtr1)
clc
adc ZPPtr1
sta ZPPtr1
bcc .1
inc ZPPtr1+1
bra .1
.3 lda DX
clc
adc IE Text W
sta DX
lda DX+1
adc IE+1
sta DX+1
lda DX
clc
adc INE Mod-Key W
sta DX
bcc .4
inc DX+1
.4 ldy #S.OBJ.Y1
lda (ZPMENUPtr),y
clc
adc DY
tax
iny
lda (ZPMENUPtr),y
adc DY+1
cpx WND.Screen+S.OBJ.H
sbc WND.Screen+S.OBJ.H+1
bcc .5
dey
lda (ZPMENUPtr),y
* sec
sbc DY
sta (ZPMENUPtr),y
iny
lda (ZPMENUPtr),y
sbc DY+1
sta (ZPMENUPtr),y
.5 jsr MENU.Show.Borders
.8 >LDYA L.WND.Screen
jmp DrawCBPtrToYA1
MENU.Show.RTS rts
*--------------------------------------
MENU.Show.GetW ldy #S.MITEM.F
lda (ZPPtr1),y
cmp #S.MITEM.F.SEP
beq MENU.Show.RTS
ldy #S.MITEM.pICON
lda (ZPPtr1),y
iny
ora (ZPPtr1),y
beq .1
lda #16
sta DX
.1 lda #S.MITEM.TEXT
clc
adc ZPPtr1
tay
lda ZPPtr1+1
adc #0
ldx hSYSFON
jsr FON.GetTextSize
lda CB.Cache+S.CB.SrcW
cmp IE
lda CB.Cache+S.CB.SrcW+1
sbc IE+1
bcc .2
lda CB.Cache+S.CB.SrcW
sta IE
lda CB.Cache+S.CB.SrcW+1
sta IE+1
.2 ldx #0
ldy #S.MITEM.KEYMOD
lda (ZPPtr1),y
beq .6
bit #S.MITEM.KEYMOD.CTRL
beq .4
.3 lda KEY.Ctrl,x
sta KEYSTRING,x
inx
cpx #6
bne .3
lda (ZPPtr1),y
.4 bit #S.MITEM.KEYMOD.OA
beq .5
lda #1
sta KEYSTRING,x
inx
lda #"-"
sta KEYSTRING,x
inx
lda (ZPPtr1),y
.5 bit #S.MITEM.KEYMOD.CA
beq .6
lda #2
sta KEYSTRING,x
inx
lda #"-"
sta KEYSTRING,x
inx
.6 iny
lda (ZPPtr1),y
beq .8
sta KEYSTRING,x
inx
stz KEYSTRING,x
>LDYA L.KEYSTRING
ldx hSYSFON
jsr FON.GetTextSize
cpy INE
bcs .8
sty INE
.8 rts
*--------------------------------------
MENU.Show.Borders
lda #S.CB.CMD.HLINE TOP
jsr MENU.Show.Borders.H
ldy #S.OBJ.X1
jsr MENU.Show.Borders.Y
ldy #S.OBJ.Y1
jsr MENU.Show.Borders.Y
ldy #S.OBJ.X2
jsr MENU.Show.Borders.Y
ldy #S.OBJ.Y1
jsr MENU.Show.Borders.Y
lda #S.CB.CMD.VLINE LEFT
jsr MENU.Show.Borders.Y
ldy #S.OBJ.X1
jsr MENU.Show.Borders.Y
ldy #S.OBJ.Y1
jsr MENU.Show.Borders.Y
ldy #S.OBJ.X1
jsr MENU.Show.Borders.Y
ldy #S.OBJ.Y2
jsr MENU.Show.Borders.Y
lda #S.CB.CMD.VLINE RIGHT
jsr MENU.Show.Borders.H
ldy #S.OBJ.X2
jsr MENU.Show.Borders.Y
ldy #S.OBJ.Y1
jsr MENU.Show.Borders.Y
ldy #S.OBJ.X2
jsr MENU.Show.Borders.Y
ldy #S.OBJ.Y2
jsr MENU.Show.Borders.Y
lda #S.CB.CMD.HLINE BOTTOM
jsr MENU.Show.Borders.H
ldy #S.OBJ.X1
jsr MENU.Show.Borders.Y
ldy #S.OBJ.Y2
jsr MENU.Show.Borders.Y
ldy #S.OBJ.X2
jsr MENU.Show.Borders.Y
ldy #S.OBJ.Y2
jsr MENU.Show.Borders.Y
rts
MENU.Show.Borders.H
jsr PutA2CBBuf
lda #S.CB.OP.SET
jsr PutA2CBBuf
lda #S.CB.M.MONO
jsr PutA2CBBuf
lda PREFS.BORDERCOLOR
jmp PutA2CBBuf
MENU.Show.Borders.Y
lda (ZPMENUPtr),y
jsr PutA2CBBuf
iny
lda (ZPMENUPtr),y
jmp PutA2CBBuf
*--------------------------------------
MENU.Destroy
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.menu
LOAD usr/src/lib/libgui.s
ASM