update functions: tl_mouse, tl_node_add

update documentation

git-svn-id: svn://kolibrios.org@1283 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA 2009-11-23 09:33:00 +00:00
parent 7b9c6b519b
commit c44423f7ec
2 changed files with 128 additions and 118 deletions

View File

@ -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_top equ dword[edi+62]
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_key_no_edit equ 1b ;
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
struct TreeList
type dw ? ;+ 0 тип элемента, или индекс иконки для узла
lev db ? ;+ 2 уровень элемента
clo db ? ;+ 3 флаг закрытия, или открытия (имеет смысл для родительского узла)
perv dd ? ;+ 4 индекс предыдущего элемента
next dd ? ;+ 8 индекс последующего элемента
tc dd ? ;+12 врем. создания
td dd ? ;+16 врем. удаления
ends
}
;data_info dd ? ;+ 0 óêàçàòåëü íà îñíîâíûå äàíûå
;info_max_count dd ? ;+ 6 ìàêñèìàëüíîå êîëëè÷åñòâî ñòðóêòóð
;data_img dd ? ;+18 óêàçàòåëü íà èçîáðàæåíèÿ
;ls_tim dd ? ;+34 âðåìÿ ïîñëåäíåãî ñîõðàíåíèÿ
;on_activate dd ? ;+92 óêàçàòåëü íà ôóíêöèþ ïðè àêòèâèðîâàíèè óçëà
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 @@ struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
.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 @@ tl_data_init: ;
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 @@ tl_data_init: ;
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 @@ tl_data_clear: ;
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 @@ tl_info_clear: ;
;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 @@ tl_mouse: ;
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 @@ tl_mouse: ;
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 @@ tl_mouse: ;
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 @@ tl_mouse: ;
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 @@ tl_mouse: ;
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 @@ tl_info_set_undo: ;
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 @@ tl_info_set_undo: ;
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 @@ tl_info_set_undo: ;
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 @@ tl_draw: ;
;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 @@ align 4
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 @@ align 4
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 @@ tl_move_perv:
; 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 @@ tl_draw_node:
@@:
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 @@ tl_draw_node_caption:
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,19 +1201,19 @@ tl_node_add: ;
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]
;--
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,13 +1223,18 @@ tl_node_add: ;
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;
;*** 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 @@ tl_node_add: ;
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,20 +1258,20 @@ tl_node_add: ;
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 ***
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 @@ tl_node_set_data:
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 @@ tl_node_set_data:
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 @@ tl_node_get_data: ;
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 @@ tl_node_poi_get_info: ;
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 @@ tl_node_poi_get_next_info: ;
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 @@ tl_node_poi_get_data: ;
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 @@ tl_get_cur_node_index: ;
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 @@ tl_get_cur_node_index: ;
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 @@ align 4
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 @@ tl_node_delete: ;
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 @@ tl_get_node_count: ;
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 @@ tl_node_close_open: ;
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 @@ tl_node_lev_inc: ;
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 @@ tl_node_lev_dec: ;
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

View File

@ -45,8 +45,8 @@ table { font-size: 15px; }
</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 @@ table { font-size: 15px; }
<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 @@ table { font-size: 15px; }
<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 @@ table { font-size: 15px; }
<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 @@ table { font-size: 15px; }
.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 @@ table { font-size: 15px; }
<h2>tl_list_box_mode</h2>
<p>Стиль не отображает уровни (как в ListBox все узлы одного уровня).</p>
<hr>
<p>Документация обновлялась последний раз 23.11.09.</p>
</body>
</html>