Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 1282 → Rev 1283

/programs/develop/libraries/box_lib/trunk/tree_list.mac
1,12 → 1,23
; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
; ýëåìåíò TreeList äëÿ Kolibri OS
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 20.11.2009 IgorA
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 23.11.2009 IgorA
; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
 
 
sizeof.TreeList equ 20
;struct TreeList
; type dw ? ;+ 0 òèï ýëåìåíòà, èëè èíäåêñ èêîíêè äëÿ óçëà
; lev db ? ;+ 2 óðîâåíü ýëåìåíòà
; clo db ? ;+ 3 ôëàã çàêðûòèÿ, èëè îòêðûòèÿ (èìååò ñìûñë äëÿ ðîäèòåëüñêîãî óçëà)
; perv dd ? ;+ 4 èíäåêñ ïðåäûäóùåãî ýëåìåíòà
; next dd ? ;+ 8 èíäåêñ ïîñëåäóþùåãî ýëåìåíòà
; tc dd ? ;+12 âðåì. ñîçäàíèÿ
; td dd ? ;+16 âðåì. óäàëåíèÿ
;ends
 
tl_info_size equ word[edi +4] ;ðàçìåð äàííûõ âûäåëÿåìûõ äëÿ êàæäîãî óçëà (ïîëüçîâàòåëüñüêèå äàííûå + òåêñò äëÿ ïîäïèñè)
tl_style equ dword[edi+10] ;ñòèëè ýëåìåíòà
tl_data_nodes equ dword[edi+14] ;óêàçàòåëü íà ñòðóêòóðû óçëîâ
tl_img_cx equ word[edi+22] ;øèðèíà èêîíîê
tl_img_cy equ word[edi+24] ;âûñîòà èêîíîê
tl_data_img_sys equ dword[edi+26] ;óêàçàòåëü íà ñèñòåìíûå èçîáðàæåíèÿ (ñòðåëêè, ïëþñèêè)
21,7 → 32,7
tl_box_width equ dword[edi+66]
tl_box_height equ dword[edi+70]
tl_capt_cy equ word[edi+74] ;âûñîòà ïîäïèñè
tl_info_capt_offs equ dword[edi+76]
tl_info_capt_offs equ dword[edi+76] ;ñäâèã äëÿ íà÷àëà òåêñòà (ïîäïèñè óçëà)
tl_el_focus equ dword[edi+80] ;óêàçàòåëü íà ñòðóêòóðó ýëåìåíòà â ôîêóñå
tl_p_scrol equ dword[edi+84] ;óêàçàòåëü íà ñòðóêòóðó ñêðîëëèíãà
tl_sb_draw equ dword[edi+88] ;óêàçàòåëü íà ôóíêöèþ ïåðåðèñîâûâàþùóþ ñêðîëëèíã
32,49 → 43,15
tl_draw_par_line equ 10b ;ðèñîâàòü ëèíèè ê ðîäèòåëüñêîìó óçëó
tl_list_box_mode equ 100b ;ñòèëü íå îòîáðàæàåò óðîâíè (êàê â ListBox âñå îäíîãî óðîâíÿ)
 
macro use_tree_list_structs
{
struct TreeInfo
data_info dd ? ;+ 0 óêàçàòåëü íà îñíîâíûå äàíûå
info_size dw ? ;+ 4 ðàçìåð èíôîðìàöèîííîé ñòðóêòóðû (ïîëüçîâàòåëüñüêèå äàííûå + òåêñò äëÿ ïîäïèñè)
info_max_count dd ? ;+ 6 ìàêñèìàëüíîå êîëëè÷åñòâî ñòðóêòóð
style dd ? ;+10 ñòèëè ýëåìåíòà
data_nodes dd ? ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
data_img dd ? ;+18 óêàçàòåëü íà èçîáðàæåíèÿ
img_cx dw ? ;+22 øèðèíà èêîíîê
img_cy dw ? ;+24 âûñîòà èêîíîê
data_img_sys dd ? ;+26 óêàçàòåëü íà ñèñòåìíûå èçîáðàæåíèÿ (ñòðåëêè, ïëþñèêè)
ch_tim dd ? ;+30 êîëè÷åñòâî èçìåíåíèé â ôàéëå
ls_tim dd ? ;+34 âðåìÿ ïîñëåäíåãî ñîõðàíåíèÿ
tim_undo dd ? ;+38 êîëè÷åñòâî îòìåíåííûõ äåéñòâèé
cur_pos dd ? ;+42 ïîçèöèÿ êóðñîðà
col_bkg dd ? ;+46 öâåò ôîíà
col_zag dd ? ;+50 öâåò çàãîëîâêà
col_txt dd ? ;+54 öâåò òåêñòà
wndMain BOX ? ;+58 ðàçìåð îêíà äëÿ âûâîäà
capt_cy dw ? ;+74 âûñîòà ïîäïèñè
info_capt_offs dd ? ;+76 ñäâèã äëÿ íà÷àëà òåêñòà (ïîäïèñè óçëà)
el_focus dd ? ;+80 óêàçàòåëü íà ñòðóêòóðó ýëåìåíòà â ôîêóñå
p_scrol dd ? ;+84 óêàçàòåëü íà ñòðóêòóðó ñêðîëëèíãà
sb_draw dd ? ;+88 óêàçàòåëü íà ôóíêöèþ ïåðåðèñîâûâàþùóþ ñêðîëëèíã
on_activate dd ? ;+92 óêàçàòåëü íà ôóíêöèþ ïðè àêòèâèðîâàíèè óçëà
on_press dd ? ;+96 óêàçàòåëü íà ôóíêöèþ ïðè íàæàòèè Enter
ends
;data_info dd ? ;+ 0 óêàçàòåëü íà îñíîâíûå äàíûå
;info_max_count dd ? ;+ 6 ìàêñèìàëüíîå êîëëè÷åñòâî ñòðóêòóð
;data_img dd ? ;+18 óêàçàòåëü íà èçîáðàæåíèÿ
;ls_tim dd ? ;+34 âðåìÿ ïîñëåäíåãî ñîõðàíåíèÿ
;on_activate dd ? ;+92 óêàçàòåëü íà ôóíêöèþ ïðè àêòèâèðîâàíèè óçëà
 
struct TreeList
type dw ? ;+ 0 òèï ýëåìåíòà, èëè èíäåêñ èêîíêè äëÿ óçëà
lev db ? ;+ 2 óðîâåíü ýëåìåíòà
clo db ? ;+ 3 ôëàã çàêðûòèÿ, èëè îòêðûòèÿ (èìååò ñìûñë äëÿ ðîäèòåëüñêîãî óçëà)
perv dd ? ;+ 4 èíäåêñ ïðåäûäóùåãî ýëåìåíòà
next dd ? ;+ 8 èíäåêñ ïîñëåäóþùåãî ýëåìåíòà
tc dd ? ;+12 âðåì. ñîçäàíèÿ
td dd ? ;+16 âðåì. óäàëåíèÿ
ends
}
 
struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\
el_focus, p_scrol,p_sb_draw,fun_enter {
el_focus, p_scrol,p_sb_draw,on_press {
.data_info dd 0
.info_size dw info_size
.info_max_count dd info_max_count
101,7 → 78,7
.p_scrol dd p_scrol
.p_sb_draw dd p_sb_draw
.on_activate dd 0
.on_press dd fun_enter
.on_press dd on_press
}
 
;-----------------------------------------------------------------------------
144,7 → 121,7
mov edi,dword[ebp+8]
 
xor ecx,ecx
mov cx,word[edi+4]
mov cx,tl_info_size
imul ecx,dword[edi+6]
call mem_Alloc
mov dword[edi],eax ;êîïèðóåì óêàçàòåëü íà ïîëó÷åíóþ ïàìÿòü â ñòðóêòóðó
154,7 → 131,7
mov ecx,sizeof.TreeList
imul ecx,dword[edi+6]
call mem_Alloc
mov dword[edi+14],eax ;êîïèðóåì óêàçàòåëü íà ïîëó÷åíóþ ïàìÿòü â ñòðóêòóðó
mov tl_data_nodes,eax ;êîïèðóåì óêàçàòåëü íà ïîëó÷åíóþ ïàìÿòü â ñòðóêòóðó
 
push dword edi
call tl_info_clear
202,7 → 179,7
mov ecx,dword[edi]
call mem_Free
 
mov ecx,dword[edi+14]
mov ecx,tl_data_nodes
call mem_Free
pop edi ecx
pop ebp
221,13 → 198,13
;xor ecx,ecx
mov ecx,sizeof.TreeList
imul ecx,dword[edi+6]
mov eax,dword[edi+14]
mov eax,tl_data_nodes
@@:
mov byte[eax],0 ;÷èñòèì óçëû 0-ìè
inc eax
loop @b
mov eax,dword[edi+14] ;óêàçàòåëü íà 1-é óçåë
mov dword[eax+8],1 ;óêàçàòåëü next â 1-ì óçëå ïðèðàâíèâàåì ê 1
mov eax,tl_data_nodes ;óêàçàòåëü íà 0-é óçåë
mov dword[eax+8],1 ;óêàçàòåëü next â 0-ì óçëå ïðèðàâíèâàåì ê 1
call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà
pop edi ecx eax
pop ebp
314,9 → 291,6
bt eax,0 ;left mouse button press
jae .no_draw
 
mov ebx,tl_el_focus
mov dword[ebx],edi ;set focus
 
mov eax,37
mov ebx,1
int 0x40
342,6 → 316,9
cmp ax,bx ;âåðõíÿÿ ãðàíèöà îêíà + âûñîòà ïîäïèñè
jl .no_in_wnd
 
mov esi,tl_el_focus
mov dword[esi],edi ;set focus
 
; if '+' or '-' press
mov esi,eax
shr esi,16
366,10 → 343,13
mov eax,ecx ;åñëè êóðñîð íå âûøåë çà ïðåäåëû óçëîâ, âîññòàíàâëèâàåì ñòàðîå çíà÷åíèå eax
@@:
 
mov ebx,0x80000000 ;ñòàâèì ôëàã äëÿ âûõîäà áåç îáíîâëåíèÿ
cmp eax,tl_cur_pos ;åñëè íîâîå çíà÷åíèå êóðñîðà ñîâïàëî ñ ïðåäûäóùèì
je @f ;òî ìîæåì âûéòè áåç îáíîâëåíèÿ îêíà
xor ebx,ebx
je @f ;òî íå ñòèðàåì êóðñîð
push esi
mov esi,tl_box_top
add esi,tl_box_height ;esi = coord bottom border
call tl_draw_null_cursor ;ñòèðàåì êóðñîð
pop esi
@@:
 
mov tl_cur_pos,eax
379,7 → 359,7
cmp eax,2
jl .no_open_close ;êóðñîð ñòîèò íà ïóñòîì ìåñòå, áåç óçëîâ
imul eax,sizeof.TreeList
add eax,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
add eax,tl_data_nodes
xor bx,bx
mov bl,byte[eax+2] ;+2 lev ñîõðàíÿåì óðîâåíü òåêóùåãî óçëà
inc bx ;+ ïîëå äëÿ êóðñîðà
399,13 → 379,14
call tl_node_close_open
.no_open_close:
 
bt ebx,31
jc .no_draw
push dword edi
call tl_draw
mov esi,tl_box_top
add esi,tl_box_height ;esi = coord bottom border
call tl_draw_cursor ;ïåðåðèñîâêà êóðñîðà
jmp .no_draw
.no_in_wnd: ;íå ïîïàëè â îêíî - ïîòåðÿ ôîêóñà
.no_in_wnd: ;íå ïîïàëè â îêíî - ïîòåðÿ ôîêóñà (ïðè óñëîâèè ÷òî ôîêóñ áûë íà äàííîì ýåëåìåíòå)
mov ebx,tl_el_focus
cmp dword[ebx],edi
jne .no_draw ;ýëåìåíò íå â ôîêóñå
mov dword[ebx],0 ;reset focus
.no_draw:
 
456,10 → 437,10
jl .no_work
 
push eax ebx ecx edx
mov edx,dword[edi+14]
mov edx,tl_data_nodes
mov ecx,edx
add ecx,sizeof.TreeList
call tl_move_next ;long i=tex[0].next;
call tl_move_next ;long i=node[0].next;
mov eax,tl_tim_undo
sub tl_ch_tim,eax ;ch_tim-=tim_undo;
mov eax,tl_ch_tim
470,7 → 451,7
cmp edx,ecx
jle @f
 
;if(tex[i].tc>ch_tim){ // åñëè ñîçäàíèå ñèìâîëà áûëî îòìåíåíî
;if(node[i].tc>ch_tim){ // åñëè ñîçäàíèå ñèìâîëà áûëî îòìåíåíî
cmp dword[edx+12],eax
jle .no_u1
mov dword[edx+12],0
478,19 → 459,19
 
mov ebx, dword[edx+4]
imul ebx,sizeof.TreeList
add ebx, dword[edi+14] ;.next
push dword[edx+8] ;tex[tex[i].perv].next=tex[i].next;
add ebx, tl_data_nodes ;.next
push dword[edx+8] ;node[node[i].perv].next=node[i].next;
pop dword[ebx+8]
 
mov ebx, dword[edx+8]
imul ebx,sizeof.TreeList
add ebx, dword[edi+14] ;.perv
push dword[edx+4] ;tex[tex[i].next].perv=tex[i].perv;
add ebx, tl_data_nodes ;.perv
push dword[edx+4] ;node[node[i].next].perv=node[i].perv;
pop dword[ebx+4]
 
.no_u1:
 
;else if(tex[i].td>ch_tim) tex[i].td=0; // åñëè óäàëåíèå ñèìâîëà áûëî îòìåíåíî
;else if(node[i].td>ch_tim) node[i].td=0; // åñëè óäàëåíèå ñèìâîëà áûëî îòìåíåíî
cmp dword[edx+16],eax
jle .no_u2
mov dword[edx+16],0
588,7 → 569,7
 
;cycle to nodes
xor eax,eax
mov edx,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
mov edx,tl_data_nodes
mov ecx,edx
add ecx,sizeof.TreeList
 
750,7 → 731,7
tl_move_next:
mov edx,dword[edx+8]
imul edx,sizeof.TreeList
add edx,dword[edi+14]
add edx,tl_data_nodes
ret
 
;input:
762,7 → 743,7
tl_move_perv:
mov edx,dword[edx+4]
imul edx,sizeof.TreeList
add edx,dword[edi+14]
add edx,tl_data_nodes
ret
 
;input:
770,12 → 751,12
; edi = pointer to 'TreeList' struct
;output:
; al = 1 if sumbol not visible
; (tex[i].td+tim_Undo<=ch_tim && tex[i].td) || (tex[i].tc>ch_tim-tim_Undo)
; (node[i].td+tim_Undo<=ch_tim && node[i].td) || (node[i].tc>ch_tim-tim_Undo)
align 4
tl_node_not_vis:
cmp dword[edx+16],0
je @f
mov eax,dword[edx+16] ;eax=tex[i].td
mov eax,dword[edx+16] ;eax=node[i].td
add eax,tl_tim_undo
cmp eax,tl_ch_tim
jg @f
986,7 → 967,7
@@:
 
mov al,byte[edx+2] ;draw minus '-'
mov ecx,dword[edi+14]
mov ecx,tl_data_nodes
add ecx,sizeof.TreeList
 
mov ah,10 ;get icon index '+' or '-' ?
1128,7 → 1109,7
push ebx ecx edx esi
 
xor esi,esi
mov si,word[edi+4];info_size
mov si,tl_info_size
cmp esi,tl_info_capt_offs
jle @f ;if caption size <= 0
 
1220,11 → 1201,11
 
mov ebx,sizeof.TreeList
imul ebx,dword[edi+6] ;+6 ìàêñ. êîëè÷åñòâî óçëîâ
add ebx,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
add ebx,tl_data_nodes
;--
call tl_get_cur_node_index ;eax=po_t
imul eax,sizeof.TreeList
add eax,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
add eax,tl_data_nodes
mov edx,eax
call tl_move_perv
call tl_get_node_index ;eax = index of pointer [edx]
1231,8 → 1212,8
;--
mov edx,sizeof.TreeList
shl edx,1
add edx,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
@@: ;for(i=2;i<texMax;i++)
add edx,tl_data_nodes
@@: ;for(i=2;i<nodeMax;i++)
cmp dword [edx+12],0
jne .u0
cmp dword [edx+16],0
1242,6 → 1223,11
push word[ebp+14] ;get type
pop word[edx]
mov byte[edx+2], 0 ;node[i].lev=0
bt tl_style,2 ;tl_list_box_mode
jc .l_box_m
mov cl,byte[ebp+12]
mov byte[edx+2],cl ;node[i].lev
.l_box_m:
push tl_ch_tim ;node[i].tc=ch_tim;
pop dword[edx+12]
mov dword[edx+4], eax ;node[i].perv=po_t;
1248,7 → 1234,7
;*** copy node data ***
push esi
xor ecx,ecx
mov cx,word[edi+4];info_size
mov cx,tl_info_size
mov esi,ecx
 
push eax
1263,7 → 1249,7
mov esi,edi
mov edi,dword[ebp+16] ;restore edi
mov ecx,tl_info_capt_offs
cmp cx,word[edi+4] ;+4 info_size
cmp cx,tl_info_size
jge .no_text_data
dec esi
mov byte[esi],0
1272,9 → 1258,9
 
mov ecx,eax
imul ecx,sizeof.TreeList
add ecx,dword[edi+14] ; *** ecx = tex[po_t] ***
add ecx,8 ; *** ecx = tex[po_t].next ***
push dword [ecx] ;tex[i].next=tex[po_t].next;
add ecx,tl_data_nodes ; *** ecx = node[po_t] ***
add ecx,8 ; *** ecx = node[po_t].next ***
push dword [ecx] ;node[i].next=node[po_t].next;
pop dword [edx+8]
 
call tl_get_node_index ;*** eax = i ***
1281,11 → 1267,11
cmp eax,dword[edi+6] ;info_max_count
jge .u0
 
mov [ecx],eax ;tex[po_t].next=i; // ññûëêè ïåðåíàïðàâëÿåì
mov ecx,[edx+8] ; *** ecx = tex[i].next ***
mov [ecx],eax ;node[po_t].next=i; // ññûëêè ïåðåíàïðàâëÿåì
mov ecx,[edx+8] ; *** ecx = node[i].next ***
imul ecx,sizeof.TreeList
add ecx,dword[edi+14] ; *** ecx = tex[tex[i].next] ***
mov [ecx+4],eax ;tex[tex[i].next].perv=i;
add ecx,tl_data_nodes ; *** ecx = node[node[i].next] ***
mov [ecx+4],eax ;node[node[i].next].perv=i;
 
call tb_scrol_resize ;îáðàáîòêà ñêðîëëèíãà
jmp @f
1336,7 → 1322,7
cmp eax,2
jl @f
xor ecx,ecx
mov cx,word[edi+4];info_size
mov cx,tl_info_size
imul eax,ecx
add eax,dword[edi]
mov edi,eax
1346,7 → 1332,7
mov esi,edi
mov edi,dword[ebp+12] ;restore edi
mov ecx,tl_info_capt_offs
cmp cx,word[edi+4] ;+4 info_size
cmp cx,tl_info_size
jge .no_text_data
dec esi
mov byte[esi],0
1370,7 → 1356,7
cmp eax,2
jl @f
xor ecx,ecx
mov cx,word[edi+4];info_size
mov cx,tl_info_size
imul eax,ecx
add eax,dword[edi]
mov dword[ebp+8],eax ;return node data pointer
1391,7 → 1377,7
mov eax,dword[ebp+8]
 
;cycle to nodes
mov edx,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
mov edx,tl_data_nodes
mov ecx,edx
add ecx,sizeof.TreeList
@@:
1421,7 → 1407,7
mov edi,dword[ebp+12]
mov edx,dword[ebp+8]
 
mov ecx,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
mov ecx,tl_data_nodes
add ecx,sizeof.TreeList
 
call tl_iterat_next_all
1451,7 → 1437,7
cmp eax,2
jl @f
xor ecx,ecx
mov cx,word[edi+4];info_size
mov cx,tl_info_size
imul eax,ecx
add eax,dword[edi]
mov dword[ebp+12],eax ;return node data pointer
1469,7 → 1455,7
push ecx edx
;cycle to nodes
xor eax,eax
mov edx,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
mov edx,tl_data_nodes
mov ecx,edx
add ecx,sizeof.TreeList
@@:
1482,7 → 1468,7
jmp @b
@@:
mov eax,edx
sub eax,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
sub eax,tl_data_nodes
xor edx,edx
mov ecx,sizeof.TreeList
div ecx
1498,7 → 1484,7
tl_get_node_index: ;áåðåò ïîçèöèþ óêàçàííîãî ñèìâîëà
push ecx edx
mov eax,edx
sub eax,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
sub eax,tl_data_nodes
xor edx,edx
mov ecx,sizeof.TreeList
div ecx
1515,7 → 1501,7
cmp eax,2
jl @f
imul eax,sizeof.TreeList
add eax,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
add eax,tl_data_nodes
mov edx,eax
inc tl_ch_tim
mov eax,tl_ch_tim
1596,7 → 1582,7
push ecx edx
;cycle to nodes
xor eax,eax
mov edx,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
mov edx,tl_data_nodes
mov ecx,edx
add ecx,sizeof.TreeList
@@:
1659,7 → 1645,7
cmp eax,2 ;êóðñîð ñòîèò íà óçëå ?
jl @f
imul eax,sizeof.TreeList
add eax,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
add eax,tl_data_nodes
;eax = óêàçàòåëü íà ñòðóêòóðó óçëà âûáðàííîãî êóðñîðîì
push dword edi
push dword eax
1692,7 → 1678,7
cmp eax,2
jl @f
imul eax,sizeof.TreeList
add eax,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
add eax,tl_data_nodes
mov edx,eax
inc word[edx+2]
@@:
1710,7 → 1696,7
cmp eax,2
jl @f
imul eax,sizeof.TreeList
add eax,dword[edi+14] ;+14 óêàçàòåëü íà ñòðóêòóðû óçëîâ
add eax,tl_data_nodes
mov edx,eax
cmp word[edx+2],0
je @f
/programs/develop/libraries/box_lib/trunk/tree_list_doc/info_treelist.htm
45,8 → 45,8
</head>
<body>
<h1>Îãëàâëåíèå</h1>
<p>Ââåäåíèå</p>
<p>Ôóíêöèè</p>
<p><a href="#vveden">Ââåäåíèå</a></p>
<p><a href="#funct">Ôóíêöèè</a></p>
<ul>
<li>tl_data_init</li>
<li>tl_data_clear</li>
71,20 → 71,21
<li>tl_node_poi_get_data</li>
<li>version_tree_list</li>
</ul>
<p>Ñòèëè ýëåìåíòà</p>
<p><a href="#struc_tree_list">Ñòðóêòóðà tree_list</a></p>
<p><a href="#tree_list_styles">Ñòèëè ýëåìåíòà</a></p>
 
<h1>Ââåäåíèå</h1>
<h1><a name="#vveden">Ââåäåíèå</a></h1>
<p>Âíåøíèé âèä ýëåìåíòà óïðàâëåíèÿ TreeList:</p>
<p><img src="window_tree_list.png"></p>
 
<h1>Ôóíêöèè</h1>
<h1><a name="funct">Ôóíêöèè</a></h1>
 
<h2>tl_data_init</h2>
<p>Êîíñòðóêòîð ýëåìåíòà, íóæíî âûçûâàòü ïåðåä èñïîëüçîâàíèåì ýëåìåíòà äëÿ âûäåëåíèÿ ïàìÿòè è äðóãèõ íàñòðîåê.</p>
<h2>tl_data_clear</h2>
<p>Äåñòðóêòîð ýëåìåíòà.</p>
<p>Äåñòðóêòîð ýëåìåíòà, ÷èñòèò ïàìÿòü ïî óêàçàòåëÿì: <b>data_info</b>, <b>data_nodes</b>, <b>data_img</b> è <b>data_img_sys</b>. Åñëè â ïðîãðàììå èñïîëüçóåòñÿ <i>íåñêîëüêî ýëåìåíòîâ ñ îäèíàêîâûìè èêîíêàìè</i>, òî óêàçàòåëè data_img è data_img_sys íóæíî ïðèðàâíÿòü ê 0 â äðóãèõ ýëåìåíòàõ, òàê ÷òî-áû ïðè âûçîâå äåñòðóêòîðîâ íå áûëî ïîâòîðíîãî óäàëåíèÿ îäíèõ è òåõ æå èêîíîê.</p>
<h2>tl_info_clear</h2>
<p>Î÷èñòêà ñïèñêà îò âñåõ óçëîâ.</p>
<p>Î÷èñòêà ñïèñêà îò âñåõ óçëîâ. Ýòî äåéñòâèå íåëüçÿ îòìåíèòü ôóíêöèåé <b>tl_info_undo</b>.</p>
<h2>tl_key</h2>
<p>Ôóíêöèÿ êîòîðóþ íóæíî âûçûâàòü ïðè íàæàòèè íà êëàâèàòóðó.</p>
<h2>tl_mouse</h2>
95,8 → 96,15
<p>Îòìåíÿåò äîáàâëåíèå óçëîâ. Äåéñòâóåò òîëüêî íà âåñü óçåë öåëèêîì, íå ó÷èòûâàÿ èçìåíåíèÿ âíóòðè óçëîâ. Ò. å. íåëüçÿ îòìåíèòü äåéñòâèÿ âûïîëíåííûå íàïðèìåð ôóíêöèÿìè: <b>tl_node_set_data</b>, <b>tl_node_lev_inc</b> è èì ïîäîáíûì.</p>
<h2>tl_info_redo</h2>
<p></p>
 
<h2>tl_node_add</h2>
<p>Äîáàâëÿåò óçåë, â ïîçèöèþ óêàçàííóþ êóðñîðîì.</p>
<p>Äîáàâëÿåò óçåë, â ïîçèöèþ óêàçàííóþ êóðñîðîì. Ïðèìåð äîáàâëåíèÿ óçëà:</p>
<pre> push dword tree1
push dword 0x10002
push dword data_buffer
call dword[tl_node_add]</pre>
<p>ãäå: <b>tree1</b> - ñòðóêòóðà tree_list; <b>0x10002</b> - ïàðàìåòðû óçëà (ñòàðøèå áàéòû 0x0001 - èíäåêñ èêîíêè, îòîáðàæàåìîé âîçëå óçëà; ìåíüøèé áàéò 0x02 - óðîâåíü âëîæåíîñòè óçëà); <b>data_buffer</b> - óêàçàòåëü íà äûííûå, äîáàâëÿåìûå â óçåë.</p>
 
<h2>tl_node_set_data</h2>
<p>Óñòàíàâëèâàåò íîâûå äàííûå (ïîëüçîâàòåëüñêèå è ïîäïèñü) â óçåë ïîä êóðñîðîì.</p>
<h2>tl_node_get_data</h2>
116,19 → 124,23
<p>Äîáàâèòü óðîâåíü óçëà ïîä êóðñîðîì. Äåëàåò óçåë äî÷åðíèì.</p>
<h2>tl_node_lev_dec</h2>
<p>Óìåíüøàåò óðîâåíü óçëà ïîä êóðñîðîì. Äåëàåò óçåë ðîäèòåëüñêèì.</p>
 
<h2>tl_node_poi_get_info</h2>
<p>Áåðåò âíóòðåííèé óêàçàòåëü íà ñòðóêòóðó îïèñûâàþùóþ óçåë.</p>
<h2>tl_node_poi_get_next_info</h2>
<p></p>
<p>Áåðåò óêàçàòåëü íà ñëåäóþùèé ýëåìåíò â öåïè, áåç ó÷åòà îòêðûòèÿ/çàêðûòèÿ äî÷åðíèõ óçëîâ.</p>
<h2>tl_node_poi_get_data</h2>
<p>Áåðåò óêàçàòåëü íà äàííûå (ïîëüçîâàòåëüñêèå è ïîäïèñü) èç óçëà óêàçàííîãî â óêàçàòåëå.</p>
 
<p>Ôóíêöèÿìè tl_node_poi_get_info, tl_node_poi_get_next_info è tl_node_poi_get_data ìîæíî ñ÷èòûâàòü èíôîðìàöèþ î óçëàõ ýëåìåíòà, ïðè ýòîì íå ìåíÿÿ òåêóùåãî ïîëîæåíèÿ êóðñîðà.</p>
 
<h2>version_tree_list</h2>
<p>Âåðñèÿ ýëåìåíòà</p>
 
<h1>Ñòðóêòóðà tree_list</h1>
<h1><a name="struc_tree_list">Ñòðóêòóðà tree_list</a></h1>
<pre>struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\
el_focus, p_scrol,p_sb_draw,fun_enter {
el_focus, p_scrol,p_sb_draw,on_press {
.data_info dd 0
.info_size dw info_size
.info_max_count dd info_max_count
155,15 → 167,25
.p_scrol dd p_scrol
.p_sb_draw dd p_sb_draw
.on_activate dd 0
.on_press dd fun_enter
.on_press dd on_press
}</pre>
<p><b>info_size</b> - êîëè÷åñòâî áàéò, êîòîðîå áóäåò âûäåëåíî äëÿ êàæäîãî óçëà. ×àñòü ýòîé ïàìÿòè ïîëüçîâàòåëü ìîæåò èñïîëüçîâàòü äëÿ ñâîèõ öåëåé (ðåãóëèðóåòñÿ ÷åðåç <i>info_capt_offs</i>) à îñòàëüíàÿ ÷àñòü áóäåò èñïîëüçîâàíà êàê ïîäïèñü óçëà.</p>
<p><b>info_max_count</b> - ìàêñèìàëüíîå êîëè÷åñòâî óçëîâ, êîòîðûå ìîæíî äîáàâèòü â ýëåìåíò.</p>
<p><b>style</b> - ñòèëè ýëåìåíòà.</p>
<p><b>data_nodes</b> - óêàçàòåëü íà âíóòðåííèå ñòðóêòóðû óçëîâ (<i>TreeList</i>).</p>
<p><b>data_img</b> - óêàçàòåëü íà èçîáðàæåíèÿ ñ èêîíêàìè óçëîâ.</p>
<p><b>data_img_sys</b> - óêàçàòåëü íà ñèñòåìíûå èçîáðàæåíèÿ (êóðñîð, ïëþñèêè, ëèíèè, ... âñå êðîìå èêîíîê óçëîâ).</p>
<p><b>capt_cy</b> - âûñîòà ñòðîêè äëÿ ïîäïèñè ââåðõó ýëåìåíòà, åñëè ìåíüøå 9 ïîäïèñü íå âûâîäèòñÿ.</p>
<p><b>p_scrol</b> - óêàçàòåëü íà ñòðóêòóðó ñêðîëëèíãà, ñâÿçàííîãî ñ äàííûì ýëåìåíòîì.</p>
<p><b>p_sb_draw</b> - óêàçàòåëü íà ôóíêöèþ ïåðåðèñîâêè âåðòèêàëüíîãî ñêðîëëèíãà (<i>scrollbar_ver_draw</i>).</p>
<p><b>fun_enter</b> - óêàçàòåëü íà ôóíêöèþ, êîòîðàÿ áóäåò âûçâàíà ïðè íàæèòèè <b>[Enter]</b>. Åñëè óêàçàòåëü ðàâåí 0 òî íè÷åãî íå áóäåò âûçûâàòñÿ.</p>
<p><b>on_press</b> - óêàçàòåëü íà ôóíêöèþ, êîòîðàÿ áóäåò âûçâàíà ïðè íàæèòèè <b>[Enter]</b>. Åñëè óêàçàòåëü ðàâåí 0 òî íè÷åãî íå áóäåò âûçûâàòñÿ.</p>
 
<h1>Ñòèëè ýëåìåíòà</h1>
<p>Ïðèìåð ñîçäàíèÿ ñòðóêòóðû:</p>
<pre>tree1 tree_list 24,500, tl_draw_par_line+tl_list_box_mode, 16,16,\
0x8080ff,0x0000ff,0xffffff, 10,35,200-16,285, 14,4,\
el_focus, wScr,scrollbar_ver_draw,fun_on_enter</pre>
 
<h1><a name="tree_list_styles">Ñòèëè ýëåìåíòà</a></h1>
<h2>tl_key_no_edit</h2>
<p>Ýëåìåíò íåëüçÿ ðåäàêòèðîâàòü íà êëàâèàòóðå (èçìåíÿòü óðîâíè, óäàëÿòü). Ñòàâüòå ýòîò ñòèëü åñëè íóæíî ñîçäàòü ýëåìåíò òîëüêî äëÿ ïðîñìîòðà äàííûõ.</p>
<h2>tl_draw_par_line</h2>
171,5 → 193,7
<h2>tl_list_box_mode</h2>
<p>Ñòèëü íå îòîáðàæàåò óðîâíè (êàê â ListBox âñå óçëû îäíîãî óðîâíÿ).</p>
 
<hr>
<p>Äîêóìåíòàöèÿ îáíîâëÿëàñü ïîñëåäíèé ðàç 23.11.09.</p>
</body>
</html>