A2osX/LIB/LIBGUI.S.MENU.txt

596 lines
9.4 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 (ZPMENUPtr),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
*--------------------------------------
* ----------------------------------------------
* |Icon ChkMrk "Menu Item" KEYMOD1-KEYMOD2-KEY>|
* ----------------------------------------------
MENU.Show >SYSCALL2 GetMemPtr
>STYA ZPMENUPtr
jsr GetCBBuf
bcs MENU.New.RTS
ldy #S.MENU.MITEMS
lda (ZPMENUPtr),y
sta ZPPtr1
iny
lda (ZPMENUPtr),y
sta ZPPtr1+1
stz DX
stz DX+1
stz IY Icon Margin W
stz IE Max Text W
stz IE+1
stz INE Max Mod-Key W
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 #12 2px Borders+5 LMARGIN (Checked) +5 RMARGIN (SubMenu)
clc
adc IY
sta DX
bcc .30
inc DX+1
.30 lda DX
sec 1px sep
adc IE Text W
sta DX
lda DX+1
adc IE+1
sta DX+1
lda DX
sec 1px sep
adc INE Mod-Key W
sta DX
bcc .4
inc DX+1
.4 ldy #S.OBJ.W
sta (ZPMENUPtr),y
iny
lda DX+1
sta (ZPMENUPtr),y
iny #S.OBJ.H
lda DY
sta (ZPMENUPtr),y
tax
iny
lda DY+1
sta (ZPMENUPtr),y
pha
txa
ldy #S.OBJ.Y1
clc
adc (ZPMENUPtr),y
tax
pla
iny
adc (ZPMENUPtr),y
cpx WND.Screen+S.OBJ.H
sbc WND.Screen+S.OBJ.H+1
bcc .5
ldy #S.OBJ.Y1
lda (ZPMENUPtr),y
* sec
sbc DY
sta (ZPMENUPtr),y
iny
lda (ZPMENUPtr),y
sbc DY+1
sta (ZPMENUPtr),y
.5 >LDYA ZPMENUPtr
jsr OBJ.SetX2Y2
jsr MENU.Show.Borders
ldy #S.MENU.MITEMS
lda (ZPMENUPtr),y
sta ZPPtr1
iny
lda (ZPMENUPtr),y
sta ZPPtr1+1
ldy #S.OBJ.Y1
lda (ZPMENUPtr),y
clc
adc #1
sta DY
iny
lda (ZPMENUPtr),y
adc #0
sta DY+1
.6 lda (ZPPtr1)
beq .8
jsr MENU.Show.Item
lda DY
clc
adc SYSFON.H
sta DY
bcc .7
inc DY+1
.7 lda (ZPPtr1)
clc
adc ZPPtr1
sta ZPPtr1
bcc .6
inc ZPPtr1+1
bra .6
.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 #17 Reserve space for Icon W + 1px SEP
sta IY
.1 jsr MENU.GetText
ldx hSYSFON
jsr FON.GetTextSize
ldx CB.Cache+S.CB.SrcW
cpx IE
lda CB.Cache+S.CB.SrcW+1
sbc IE+1
bcc .2
stx IE Set Max text W
lda CB.Cache+S.CB.SrcW+1
sta IE+1
.2 jsr MENU.GetKeyString
beq .8
>LDYA L.KEYSTRING
ldx hSYSFON
jsr FON.GetTextSize
lda CB.Cache+S.CB.SrcW
cmp INE
bcc .8
sta INE set Max Mod-key W
.8 rts
*--------------------------------------
MENU.Show.Borders
lda #S.CB.CMD.FILLRECT
jsr PutA2CBBuf
lda #S.CB.OP.SET
jsr PutA2CBBuf
lda #S.CB.M.MONO
jsr PutA2CBBuf
lda PREFS.MENUCOLOR
jsr PutA2CBBuf
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.Y2
jsr MENU.Show.Borders.Y
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.H
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
jmp MENU.Show.Borders.Y
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.Show.Item ldy #S.MITEM.F
lda (ZPPtr1),y
cmp #S.MITEM.F.SEP
bne .1
lda #S.CB.CMD.HLINE
jsr PutA2CBBuf
lda #S.CB.OP.SET
jsr PutA2CBBuf
lda #S.CB.M.MONO
jsr PutA2CBBuf
lda PREFS.BORDERCOLOR
jsr PutA2CBBuf
ldy #S.OBJ.X1
jsr MENU.Show.Borders.Y
lda SYSFON.H
lsr
clc
adc DY
jsr PutA2CBBuf
lda DY+1
adc #0
jsr PutA2CBBuf
ldy #S.OBJ.X2
jsr MENU.Show.Borders.Y
ldy #S.OBJ.Y1
jmp MENU.Show.Borders.Y
*--------------------------------------
.1 ldy #S.OBJ.X1
lda (ZPMENUPtr),y
sec +1px Border
adc #5 TODO : Checked
sta DX
iny
lda (ZPMENUPtr),y
adc #0
sta DX+1
jsr MENU.GetIcon
beq .2
jsr DRAW.YABMAtDXDY
.2 lda DX
clc
adc IY Icon reserved W
sta DX
lda DX+1
adc #0
sta DX+1
jsr MENU.GetText
ldx hSYSFON
jsr DRAW.YATextAtDXDY
jsr MENU.GetKeyString
beq .3
lda DX
sec
adc IE
sta DX
lda DX+1
adc IE+1
sta DX+1
>LDYA L.KEYSTRING
ldx hSYSFON
jsr DRAW.YATextAtDXDY
.3
clc
rts
*--------------------------------------
MENU.GetIcon ldy #S.MITEM.pICON+1
lda (ZPPtr1),y
bne .1
dey
lda (ZPPtr1),y
beq .8
tax
ldy L.BMs,x
lda L.BMs+1,x NON ZERO
.8 rts
.1 pha
dey
lda (ZPPtr1),y
tay
pla NON ZERO
rts
*--------------------------------------
MENU.GetText lda #S.MITEM.TEXT
clc
adc ZPPtr1
tay
lda ZPPtr1+1
adc #0
rts
*--------------------------------------
MENU.GetKeyString
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 .7
sta KEYSTRING,x
inx
.7 stz KEYSTRING,x
txa
rts
*--------------------------------------
MENU.Destroy
clc
rts
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.menu
LOAD usr/src/lib/libgui.s
ASM