From 766a98f43b03a5679d48b3b5e948bec469241289 Mon Sep 17 00:00:00 2001 From: Derek Stevens Date: Sat, 18 Mar 2023 21:54:53 -0600 Subject: [PATCH] implement range selection for listbox --- taro-ls.tal | 64 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 49 insertions(+), 15 deletions(-) diff --git a/taro-ls.tal b/taro-ls.tal index 86a40d8..77df468 100644 --- a/taro-ls.tal +++ b/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