implement range selection for listbox
This commit is contained in:
parent
883686d4a2
commit
766a98f43b
1 changed files with 49 additions and 15 deletions
64
taro-ls.tal
64
taro-ls.tal
|
@ -12,6 +12,8 @@
|
|||
%MID_SEPARATOR { #0008 }
|
||||
%BOTTOM_SECTION { #0040 }
|
||||
|
||||
( listbox helper macros )
|
||||
|
||||
%LB_DATA { #02 ADD }
|
||||
%LB_LEN { #04 ADD }
|
||||
%LB_OFFSET { #06 ADD }
|
||||
|
@ -19,9 +21,10 @@
|
|||
%LB_TOP { #09 ADD }
|
||||
%LB_HEIGHT { #0b ADD }
|
||||
%LB_SELECT_IDX { #0c ADD }
|
||||
%SB_LEN { #0e ADD }
|
||||
%SB_POS { #0f ADD }
|
||||
%SB_STEP { #11 ADD }
|
||||
%LB_SELECT_LEN { #0e ADD }
|
||||
%SB_LEN { #10 ADD }
|
||||
%SB_POS { #11 ADD }
|
||||
%SB_STEP { #13 ADD }
|
||||
|
||||
|00 @System &vector $2 &wst $1 &rst $1 &eaddr $2 &ecode $1 &pad $1 &r $2 &g $2 &b $2 &debug $1 &halt $1
|
||||
|10 @Console &vector $2 &read $1 &pad $5 &write $1 &error $1
|
||||
|
@ -44,10 +47,10 @@
|
|||
@resizing [ $1 &x $2 &y $2 &dx $2 &dy $2 ]
|
||||
@decoding [ $1 &msg_type $1 &counting $1 &count $2 &processed $2 ]
|
||||
@mboxes [ &bytes $2 &data $2 &len $2 &offset $2 &elem_offset $1
|
||||
&top $2 &height $1 &select_index $2
|
||||
&top $2 &height $1 &select_index $2 &select_len $2
|
||||
&sb_len $1 &sb_pos $2 &sb_step $2 ]
|
||||
@list [ &bytes $2 &data $2 &len $2 &offset $2 &elem_offset $1
|
||||
&top $2 &height $1 &select_index $2
|
||||
&top $2 &height $1 &select_index $2 &select_len $2
|
||||
&sb_len $1 &sb_pos $2 &sb_step $2 ]
|
||||
|
||||
( program )
|
||||
|
@ -64,6 +67,8 @@
|
|||
|
||||
;list_data .list/data STZ2
|
||||
;mbox_data .mboxes/data STZ2
|
||||
#0001 .list/select_len STZ2
|
||||
#0001 .mboxes/select_len STZ2
|
||||
|
||||
.Screen/height DEI2 TOP_SECTION BOTTOM_SECTION ADD2 MID_SEPARATOR ADD2 SUB2 #03 SFT2 NIP .list/height STZ
|
||||
TOP_SECTION #03 SFT2 NIP .mboxes/height STZ
|
||||
|
@ -72,6 +77,11 @@
|
|||
;on_screen .Screen/vector DEO2
|
||||
;on_mouse .Mouse/vector DEO2
|
||||
;on_stdin .Console/vector DEO2
|
||||
;on_key .Controller/vector DEO2
|
||||
BRK
|
||||
|
||||
@on_key ( -> )
|
||||
.Controller/key DEI .Console/error DEO
|
||||
BRK
|
||||
|
||||
@on_stdin ( -> )
|
||||
|
@ -139,8 +149,8 @@ JMP2r
|
|||
|
||||
@on_mouse ( -> )
|
||||
|
||||
;mbox_select_handler .mboxes .refresh/mboxes #0000 mouse_event_list
|
||||
;noop_list_click .list .refresh/list TOP_SECTION MID_SEPARATOR ADD2 mouse_event_list
|
||||
;mbox_select_handler .mboxes .refresh/mboxes #0000 #00 mouse_event_list
|
||||
;noop_list_click .list .refresh/list TOP_SECTION MID_SEPARATOR ADD2 #04 mouse_event_list
|
||||
|
||||
.resizing LDZ #00 EQU ,&resz_check JCN
|
||||
( resizing )
|
||||
|
@ -308,15 +318,18 @@ JMP2r
|
|||
JMP2r
|
||||
|
||||
@get_entry_color ( list -- colorByte )
|
||||
STHk LB_OFFSET LDZ2
|
||||
STHkr LB_SELECT_IDX LDZ2
|
||||
|
||||
DUP LB_OFFSET LDZ2
|
||||
ROT LB_SELECT_IDX LDZ2
|
||||
|
||||
NEQ2 ,&normal JCN
|
||||
|
||||
LTH2 ,&normal JCN
|
||||
STHkr LB_OFFSET LDZ2
|
||||
STHkr LB_SELECT_IDX LDZ2 STHkr LB_SELECT_LEN LDZ2 ADD2 #0001 SUB2
|
||||
GTH2 ,&normal JCN
|
||||
POPr
|
||||
( selected )
|
||||
#04 JMP2r
|
||||
&normal
|
||||
POPr
|
||||
#03
|
||||
JMP2r
|
||||
|
||||
|
@ -403,8 +416,9 @@ JMP2r
|
|||
JMP2r
|
||||
|
||||
|
||||
@mouse_event_list ( clickhandler* list refresh ypos* -- )
|
||||
@mouse_event_list ( clickhandler* list refresh ypos* multiselect -- )
|
||||
|
||||
,&multi STR
|
||||
,&y STR2
|
||||
,&r STR
|
||||
STH
|
||||
|
@ -421,7 +435,7 @@ JMP2r
|
|||
( scroll_up )
|
||||
STHkr try_scroll_up_mouse
|
||||
,&no_scroll JMP
|
||||
|
||||
&multi $1
|
||||
&scroll_down
|
||||
STHkr try_scroll_down_mouse
|
||||
|
||||
|
@ -431,7 +445,7 @@ JMP2r
|
|||
|
||||
( click handler here )
|
||||
.Mouse/state DEI #01 AND #00 EQU ,&done JCN
|
||||
.Mouse/y DEI2 ,&y LDR2 SUB2 #03 SFT2 STHkr LB_TOP LDZ2 ADD2 STHkr LB_SELECT_IDX STZ2
|
||||
,&multi LDR ,&y LDR2 STHkr mouse_select_on_click
|
||||
STHr ROT ROT JSR2
|
||||
#01 ,&r LDR STZ
|
||||
JMP2r
|
||||
|
@ -443,6 +457,26 @@ JMP2r
|
|||
POP2
|
||||
JMP2r
|
||||
|
||||
@mouse_select_on_click ( multi ypos list -- )
|
||||
STH
|
||||
,&y STR2
|
||||
.Controller/button DEI #04 AND AND ,&multiselect JCN
|
||||
#0001 STHkr LB_SELECT_LEN STZ2
|
||||
.Mouse/y DEI2 ,&y LDR2 SUB2 #03 SFT2 STHkr LB_TOP LDZ2 ADD2 STHkr LB_SELECT_IDX STZ2
|
||||
POPr
|
||||
JMP2r
|
||||
&multiselect
|
||||
( first_to_last )
|
||||
.Mouse/y DEI2 ,&y LDR2 SUB2 #03 SFT2 STHkr LB_TOP LDZ2 ADD2
|
||||
DUP2 STHkr LB_SELECT_IDX LDZ2 LTH2 ,&last_to_first JCN
|
||||
STHkr LB_SELECT_IDX LDZ2 SUB2 INC2 STHkr LB_SELECT_LEN STZ2
|
||||
POPr JMP2r
|
||||
&last_to_first
|
||||
DUP2 STHkr LB_SELECT_IDX LDZ2 SWP2 SUB2 INC2 STHkr LB_SELECT_LEN STZ2
|
||||
STHr LB_SELECT_IDX STZ2
|
||||
JMP2r
|
||||
&y $2
|
||||
|
||||
@mbox_select_handler ( list -- )
|
||||
|
||||
#0000 ,&idx STR2
|
||||
|
|
Loading…
Reference in a new issue