366,12 → 366,89 |
cmpe ah, 27, exit |
|
cmpe ah, 13, list_item_activate |
cmpe ah, 9, event_button.opendialog |
cmpe ah, 32, .toggle_cb |
cmpe ah, 179, .go_right |
cmpe ah, 176, .go_left |
cmpe ah, 178, .go_up |
cmpe ah, 177, .go_down |
|
cmpl ah, "a", @f |
cmpg ah, "z", @f |
jmp .letter |
@@: |
|
cmpl ah, " ", @f |
cmpg ah, "ï", @f |
jmp .letter |
@@: |
|
cmpl ah, "A", @f |
cmpg ah, "Z", @f |
jmp .letter_big |
@@: |
|
cmpl ah, "", @f |
cmpg ah, "", @f |
jmp .letter_big |
@@: |
|
cmpl ah, "0", @f |
cmpg ah, "9", @f |
jmp .letter |
@@: |
|
jmp update |
|
.letter_big: |
movzx ebx, ah |
stdcall downcase_char, ebx |
mov ah, al |
|
.letter: |
push eax |
|
stdcall get_index |
inc eax |
|
mov ecx, eax |
|
imul ebx, eax, 32 |
add ebx, list |
|
pop eax |
|
@@: |
cmpe byte [ebx], 0, @f |
|
movzx edx, byte [ebx] |
stdcall downcase_char, edx |
cmpne ah, al, .next |
stdcall set_index, ecx |
stdcall draw_list |
jmp update |
|
.next: |
inc ecx |
add ebx, 32 |
jmp @b |
@@: |
jmp update |
|
.toggle_cb: |
mov eax, [cb_always.flags] |
mov ebx, eax |
and ebx, ch_flag_en |
cmpe ebx, 0, @f |
sub eax, ch_flag_en |
jmp .toggle_cb.redraw |
@@: |
add eax, ch_flag_en |
.toggle_cb.redraw: |
mov [cb_always.flags], eax |
invoke checkbox.draw, cb_always |
jmp update |
|
.go_right: |
mov esi, 1 |
jmp .go_anyway |
392,12 → 469,7 |
stdcall draw_item, [last_x], [last_y], 0 |
|
;; [X, Y] -> INDEX |
mov eax, [last_y] |
shl eax, 1 |
add eax, [last_x] |
mov ebx, [sb_apps.position] |
shl ebx, 1 |
add eax, ebx |
stdcall get_index |
|
;; CHANGE INDEX |
add eax, esi |
412,37 → 484,16 |
@@: |
|
;; INDEX -> [X, Y] |
sub eax, ebx |
mov ebx, eax |
and ebx, 1b |
mov [last_x], ebx |
shr eax, 1 |
mov [last_y], eax |
stdcall set_index, eax |
cmpe eax, 1, @f |
|
cmpl [last_y], 0xFFFF, @f |
mov [last_y], 0 |
dec [sb_apps.position] |
jmp .full_redraw |
@@: |
|
cmpl [last_y], LIST_SIZE / 2, @f |
mov [last_y], LIST_SIZE / 2 - 1 |
inc [sb_apps.position] |
jmp .full_redraw |
@@: |
|
;; DRAW NEW SELECTION |
.partly_redraw: |
;; PARTLY REDRAW |
stdcall draw_item, [last_x], [last_y], 1 |
jmp update |
|
.full_redraw: |
cmpge [sb_apps.position], 0, @f |
mov [sb_apps.position], 0 |
;; FULL REDRAW |
@@: |
|
stdcall draw_list |
invoke scrollbar.draw, sb_apps |
jmp update |
|
;---------------------- |
464,12 → 515,7 |
;---------------------- |
|
list_item_activate: |
mov eax, [last_y] |
shl eax, 1 |
add eax, [last_x] |
mov ebx, [sb_apps.position] |
shl ebx, 1 |
add eax, ebx |
stdcall get_index |
shl eax, 5 |
add eax, list |
cmpe byte [eax], 0, update |
530,7 → 576,6 |
cmpge eax, [list.size], @f |
inc [sb_apps.position] |
stdcall draw_list |
invoke scrollbar.draw, sb_apps |
jmp update |
|
.scroll_up: |
537,7 → 582,6 |
cmpe [sb_apps.position], 0, @f |
dec [sb_apps.position] |
stdcall draw_list |
invoke scrollbar.draw, sb_apps |
jmp update |
|
@@: |
588,7 → 632,6 |
or edx, 0x34 shl 24 |
mcall 0, <[win.x], WIN_WIDTH>, <[win.y], WIN_HEIGHT>, , , win.title |
stdcall draw_list |
invoke scrollbar.draw, sb_apps |
invoke pathshow.draw, ps_addres |
invoke checkbox.draw, cb_always |
|
654,6 → 697,8 |
@@: |
cmpne edi, -1, .draw_loop |
|
invoke scrollbar.draw, sb_apps |
|
ret |
endp |
|
661,12 → 706,8 |
|
proc draw_item uses edx edi esi, _x, _y, _sel |
;; get index |
mov edi, [_y] |
shl edi, 1 |
add edi, [_x] |
mov esi, [sb_apps.position] |
shl esi, 1 |
add edi, esi |
stdcall get_index_cur, [_x], [_y] |
mov edi, eax |
|
cmpge edi, [list.size], .break |
|
763,6 → 804,87 |
|
;---------------------- |
|
proc downcase_char uses ebx, _ch |
mov ebx, [_ch] |
|
cmpl bl, "A", @f |
cmpg bl, "Z", @f |
sub bl, "A" - "a" |
jmp .ret |
@@: |
|
cmpl bl, "", @f |
cmpg bl, "", @f |
sub bl, "" - " " |
@@: |
|
.ret: |
mov al, bl |
ret |
endp |
|
;---------------------- |
|
proc get_index_cur uses ebx, _x, _y |
mov eax, [_y] |
shl eax, 1 |
add eax, [_x] |
mov ebx, [sb_apps.position] |
shl ebx, 1 |
add eax, ebx |
|
ret |
endp |
|
;---------------------- |
|
proc get_index |
stdcall get_index_cur, [last_x], [last_y] |
ret |
endp |
|
;---------------------- |
|
proc set_index uses ebx,_index |
mov eax, [_index] |
mov ebx, [sb_apps.position] |
shl ebx, 1 |
sub eax, ebx |
|
mov ebx, eax |
and ebx, 1b |
mov [last_x], ebx |
shr eax, 1 |
mov [last_y], eax |
|
mov eax, 0 |
|
cmpl [last_y], 0xFFFF, @f |
mov [last_y], 0 |
dec [sb_apps.position] |
mov eax, 1 |
jmp .exit |
@@: |
|
cmpl [last_y], LIST_SIZE / 2, @f |
mov ebx, [last_y] |
sub ebx, LIST_SIZE / 2 - 1 |
mov [last_y], LIST_SIZE / 2 - 1 |
add [sb_apps.position], ebx |
mov eax, 1 |
jmp .exit |
@@: |
|
.exit: |
cmpge [sb_apps.position], 0, @f |
mov [sb_apps.position], 0 |
@@: |
|
ret |
endp |
|
;---------------------- |
|
proc section_cb, _file, _sec |
;; CHECK IF EXISTS |
invoke libini.get_str, assoc_ini, [_sec], assoc_ini.exec, buffer, 2048, undefined |