1,6 → 1,6 |
; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj |
; ýëåìåíò TreeList äëÿ Kolibri OS |
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 05.02.2010 IgorA |
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 09.02.2010 IgorA |
; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ |
|
|
16,8 → 16,10 |
;ends |
|
tl_info_size equ word[edi +4] ;ðàçìåð äàííûõ âûäåëÿåìûõ äëÿ êàæäîãî óçëà (ïîëüçîâàòåëüñüêèå äàííûå + òåêñò äëÿ ïîäïèñè) |
tl_info_max_count equ dword[edi+6] ;ìàêñèìàëüíîå êîëè÷åñòâî óçëîâ, êîòîðûå ìîæíî äîáàâèòü â ýëåìåíò |
tl_style equ dword[edi+10] ;ñòèëè ýëåìåíòà |
tl_data_nodes equ dword[edi+14] ;óêàçàòåëü íà ñòðóêòóðû óçëîâ |
tl_data_img equ dword[edi+18] ;óêàçàòåëü íà èçîáðàæåíèÿ ñ èêîíêàìè óçëîâ |
tl_img_cx equ word[edi+22] ;øèðèíà èêîíîê |
tl_img_cy equ word[edi+24] ;âûñîòà èêîíîê |
tl_data_img_sys equ dword[edi+26] ;óêàçàòåëü íà ñèñòåìíûå èçîáðàæåíèÿ (ñòðåëêè, ïëþñèêè) |
51,8 → 53,6 |
tl_save_load_heder_size equ 26 ;ðàçìåð çàãîëîâêà äëÿ çàïèñè/÷òåíèÿ ýëåìåíòîâ |
|
;data_info dd ? ;+ 0 óêàçàòåëü íà îñíîâíûå äàíûå |
;info_max_count dd ? ;+ 6 ìàêñèìàëüíîå êîëëè÷åñòâî ñòðóêòóð |
;data_img dd ? ;+18 óêàçàòåëü íà èçîáðàæåíèÿ |
;ls_tim dd ? ;+34 âðåìÿ ïîñëåäíåãî ñîõðàíåíèÿ |
;on_activate dd ? ;+92 óêàçàòåëü íà ôóíêöèþ ïðè àêòèâèðîâàíèè óçëà |
|
133,7 → 133,7 |
imul ecx,dword[edi+6] |
call mem_Alloc |
mov dword[edi],eax ;êîïèðóåì óêàçàòåëü íà ïîëó÷åíóþ ïàìÿòü â ñòðóêòóðó |
mov dword[edi+18],0 ;îáíóëÿåì óêàçàòåëü 'data_img' |
mov tl_data_img,0 ;îáíóëÿåì óêàçàòåëü 'data_img' |
mov tl_data_img_sys,0 ;îáíóëÿåì óêàçàòåëü 'data_img_sys' |
|
mov ecx,sizeof.TreeList |
174,7 → 174,7 |
mov ebp,esp |
push ecx edi |
mov edi,dword[ebp+8] |
cmp dword[edi+18],0 ;data_img |
cmp tl_data_img,0 |
je @f |
mov ecx,dword[edi+18] |
call mem_Free ;÷èñòêà ñèñòåìíûõ èêîíîê |
327,7 → 327,7 |
mov ebx,tl_box_left |
shl ebx,16 |
cmp eax,ebx ;ëåâàÿ ãðàíèöà îêíà |
jl .test_scroll |
jl .no_in_wnd ;.test_scroll |
|
mov ebx,tl_box_left |
add ebx,tl_box_width |
573,7 → 573,7 |
tl_draw: ;âûâîä ñïèñêà íà ýêðàí |
push ebp |
mov ebp,esp |
push eax ebx ecx edx edi esi |
pushad |
;draw dir_list main rect |
mov edi,dword[ebp+8] |
mov ebx,tl_box_left |
670,7 → 670,7 |
call scroll_bar_vertical.draw |
|
.end_draw: |
pop esi edi edx ecx ebx eax |
popad |
pop ebp |
ret 4 |
|
755,13 → 755,9 |
align 4 |
tl_iterat_perv: |
push eax |
|
; mov bl,byte[edx+2] |
|
cmp tl_tim_undo,0 |
je .beg1 |
|
push eax |
.beg0: |
call tl_move_perv |
cmp edx,ecx |
1028,7 → 1024,7 |
;input: |
; eax = node position |
; edx = pointer to some node struct |
; edi = pointer to TreeInfo struct |
; edi = pointer to 'TreeList' struct |
; esi = coord of bottom border |
align 4 |
tl_draw_node: |
1067,7 → 1063,7 |
.crop: |
mov esi,ecx ;save ecx |
|
cmp dword[edi+18],0 ;data_img |
cmp tl_data_img,0 |
jne .draw_img_n |
push edx |
mov edx,tl_col_txt |
1088,7 → 1084,7 |
imul bx,tl_img_cx |
imul bx,tl_img_cy |
imul ebx,esi ;esi = icon index |
add ebx,dword[edi+18] ;data_img |
add ebx,tl_data_img |
|
mov eax,7 |
int 0x40 ;draw node icon '-' |
1116,6 → 1112,7 |
|
;input: |
; ecx = pointer to 1 node struct |
; edx = pointer to some node struct |
;... |
align 4 |
tl_draw_node_icon_opn_clo: ;ðèñóåò èêîíêè îòêðûòîãî èëè çàêðûòîãî óçëà (îáû÷íî + èëè -) |
1158,6 → 1155,8 |
|
;input: |
; al = óðîâåíü ýëåìåíòà |
; ecx = pointer to 1 node struct |
; edx = pointer to some node struct |
;... |
align 4 |
tl_draw_node_icon_par_lin: |
1213,20 → 1212,22 |
ret |
|
|
|
;icon: |
;input: |
; al = óðîâåíü ýëåìåíòà |
;... |
; ecx = pointer to 1 node struct |
; edx = pointer to some node struct |
; edi = pointer to 'TreeList' struct |
align 4 |
tl_draw_node_icon_par_lin_up: |
push eax ebx ecx edx esi |
push eax ebx ecx edx |
push esi |
cmp tl_data_img_sys,0 ;if not image |
je @f |
cmp al,0 |
je @f |
|
;--------- |
xor esi,esi ;â si áóäåì íàñ÷èòûâàòü êîë-âî èêîíîê, íóæíûõ äëÿ ïðîðèñîâêè ëèíèè |
;--- öèêë äëÿ âû÷èñëåíèÿ êîëëè÷åñòâà âåðòèêàëüíûõ ëèíèé --- |
.cycle0: |
call tl_iterat_perv ;get perv visible item |
cmp edx,ecx |
1233,10 → 1234,10 |
jle .cycle1 ;if begin of list |
|
cmp byte[edx+2],al |
jle .cycle1 ;óðîâåíü âåðõíåãî ýëåìåíòà íå òðåáóåò ïðîðèñîâêè |
jle .cycle0end ;óðîâåíü âåðõíåãî ýëåìåíòà íå òðåáóåò ïðîðèñîâêè |
inc si |
jmp .cycle0 |
.cycle1: |
.cycle0end: |
cmp si,0 ;si = êîë-âî èêîíîê ëèíèè êîòîðûå íóæíî íàðèñîâàòü ñâåðõó |
je @f |
shl esi,16 |
1257,25 → 1258,24 |
mov ebx,3 ;rgb = 3 bytes |
imul bx,tl_img_cx |
imul bx,tl_img_cy |
;imul ebx,1 |
add ebx,tl_data_img_sys |
|
add esi,tl_box_top |
add si,tl_capt_cy ;si = âåðõíÿÿ ãðàíèöà îêíà |
mov eax,7 |
;--------- |
.cycle2: |
;--- öèêë äëÿ ðèñîâàíèÿ âåðòèêàëüíîé ëèíèè --- |
.cycle1: |
sub dx,tl_img_cy ;ïîäíèìàåì êîîðäèíàòó y ââåðõ |
cmp dx,si |
jl @f |
; int 0x40 ;draw line icon |
cmp esi,0x10000 |
jl @f |
int 0x40 ;draw line icon |
sub esi,0x10000 ;óìåíüøàåì ñ÷åò÷èê èêîíîê |
jmp .cycle2 |
jmp .cycle1 |
@@: |
pop esi edx ecx ebx eax |
pop esi |
pop edx ecx ebx eax |
ret |
|
;input: |
1470,7 → 1470,7 |
pop dword [edx+8] |
|
call tl_get_node_index ;*** eax = i *** |
cmp eax,dword[edi+6] ;info_max_count |
cmp eax,tl_info_max_count |
jge .u0 |
|
mov [ecx],eax ;node[po_t].next=i; // ññûëêè ïåðåíàïðàâëÿåì |
2008,7 → 2008,7 |
tl_node_lev_inc: ;óâåëè÷èòü óðîâåíü |
push ebp |
mov ebp,esp |
push eax edx edi |
push eax ecx edx edi |
mov edi,dword[ebp+8] |
bt tl_style,2 ;tl_list_box_mode |
jc @f |
2015,12 → 2015,19 |
call tl_get_cur_node_index ;eax=po_t |
cmp eax,2 |
jl @f |
mov ecx,tl_data_nodes |
imul eax,sizeof.TreeList |
add eax,tl_data_nodes |
add eax,ecx ;eax = pointer to some node struct |
add ecx,sizeof.TreeList ;ecx = pointer to 1 node struct |
|
mov edx,eax |
inc word[edx+2] |
call tl_iterat_perv ;ïðîâåðÿåì åñòü ëè âåðõíèé óçåë |
cmp edx,ecx |
jle @f ;åñëè âåðõíåãî óçëà íå òî òåêóùèé óçåë íå äâèãàåì |
|
inc word[eax+2] |
@@: |
pop edi edx eax |
pop edi edx ecx eax |
pop ebp |
ret 4 |
|
2028,7 → 2035,7 |
tl_node_lev_dec: ;óìåíüøèòü óðîâåíü |
push ebp |
mov ebp,esp |
push eax edx edi |
push eax edi |
mov edi,dword[ebp+8] |
call tl_get_cur_node_index ;eax=po_t |
cmp eax,2 |
2035,12 → 2042,11 |
jl @f |
imul eax,sizeof.TreeList |
add eax,tl_data_nodes |
mov edx,eax |
cmp word[edx+2],0 |
cmp word[eax+2],0 |
je @f |
dec word[edx+2] |
dec word[eax+2] |
@@: |
pop edi edx eax |
pop edi eax |
pop ebp |
ret 4 |
|
2464,8 → 2470,6 |
;input: |
; eax = value |
; edi = string buffer |
;output: |
; edi = |
align 4 |
tl_convert_to_str: |
pushad |