update TreeList:

1) add new function 'tl_get_mem_size' - get size memory block
2) fix functions: 'tl_save_mem', 'tl_load_mem' - calculate size memory block

git-svn-id: svn://kolibrios.org@1328 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA 2009-12-23 13:50:32 +00:00
parent 28318762d1
commit 639a979c3a
4 changed files with 64 additions and 19 deletions

View File

@ -164,6 +164,7 @@ EXPORTS:
dd sz_tl_node_poi_get_data, tl_node_poi_get_data
dd sz_tl_save_mem, tl_save_mem
dd sz_tl_load_mem, tl_load_mem
dd sz_tl_get_mem_size,tl_get_mem_size
dd sz_tl_version_tree_list, 0x00000001
dd 0,0
@ -230,4 +231,5 @@ szVersion_FileBrowser db 'version_FileBrowser',0
sz_tl_node_poi_get_data db 'tl_node_poi_get_data',0
sz_tl_save_mem db 'tl_save_mem',0
sz_tl_load_mem db 'tl_load_mem',0
sz_tl_get_mem_size db 'tl_get_mem_size',0
sz_tl_version_tree_list db 'version_tree_list',0

View File

@ -1,6 +1,6 @@
; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
; ýëåìåíò TreeList äëÿ Kolibri OS
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 8.12.2009 IgorA
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 23.12.2009 IgorA
; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
@ -2215,15 +2215,11 @@ tl_save_mem:
cmp dword[ebp+16],0 ;add mode
je @f
.beg_cycle:
cmp dword[esi],0x65657274 ;0x65657274 = 'tree'
jne @f
xor ebx,ebx
mov bx,word[esi+4]
imul ebx,dword[esi+6]
add ebx,tl_save_load_heder_size
push dword edi
push dword esi
call tl_get_mem_size ;áåðåì ðàçìåð ðàíåå ñîõðàí¸ííûõ äàííûõ
pop ebx
add esi,ebx
jmp .beg_cycle
@@:
xor ebx,ebx
@ -2328,11 +2324,17 @@ tl_load_mem:
mov cx,word[ebp+16]
cmp cx,0 ;load in array mode
je @f
; push dword edi
; push dword esi
; call tl_get_mem_size ;áåðåì ðàçìåð ðàíåå ñîõðàí¸ííûõ äàííûõ
; pop ebx
; add esi,ebx
.beg_cycle:
cmp dword[esi],0x65657274 ;0x65657274 = 'tree'
jne .no_tree
xor ebx,ebx
mov bx,word[esi+4]
add bx,8
imul ebx,dword[esi+6]
add ebx,tl_save_load_heder_size
add esi,ebx
@ -2395,6 +2397,36 @@ add esi,ebx
pop ebp
ret 12
;input:
;dword[ebp+ 8] - pointer to memory
;dword[ebp+12] - pointer to 'TreeList' struct
;output:
;dword[ebp+ 8] - error code
align 4
tl_get_mem_size: ;áåðåò ðàçìåð ïàìÿòè çàíÿòîé ôóíêöèåé tl_save_mem ïðè ñîõðàíåíèè ýëåìåíòîâ
push ebp
mov ebp,esp
push ebx edi esi
mov esi,dword[ebp+ 8]
mov edi,dword[ebp+12]
@@:
cmp dword[esi],0x65657274 ;0x65657274 = 'tree'
jne @f
xor ebx,ebx
mov bx,word[esi+4]
add bx,8 ;ðàçìåð äîïîëíèòåëüíîé èíôîðìàöèè îá óçëå (èíäåêñ çàïèñè; èíäåêñ èêîíêè, óðîâåíü, ...)
imul ebx,dword[esi+6]
add ebx,tl_save_load_heder_size
add esi,ebx
jmp @b
@@:
sub esi,dword[ebp+ 8]
mov dword[ebp+12],esi ;âîçâðàùàåì ðàçìåð áëîêà ïàìÿòè
pop esi edi edx
pop ebp
ret 4
;ascii scan key
; 13 28 Enter
; 32 57 Space

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

View File

@ -57,9 +57,9 @@ table { font-size: 15px; }
<li><a href="#fun_undo">tl_info_undo</a></li>
<li><a href="#fun_redo">tl_info_redo</a></li>
<li><a href="#fun_add">tl_node_add</a></li>
<li>tl_node_set_data</li>
<li>tl_node_get_data</li>
<li>tl_node_delete</li>
<li><a href="#fun_set_d">tl_node_set_data</a></li>
<li><a href="#fun_get_d">tl_node_get_data</a></li>
<li><a href="#fun_delete">tl_node_delete</a></li>
<li>tl_cur_beg</li>
<li>tl_cur_next</li>
<li>tl_cur_perv</li>
@ -73,7 +73,8 @@ table { font-size: 15px; }
<li>tl_node_poi_get_data</li>
<li><a href="#fun_sme">tl_save_mem</a></li>
<li><a href="#fun_lme">tl_load_mem</a></li>
<li>version_tree_list</li>
<li><a href="#fun_gme">tl_get_mem_size</a></li>
<li><a href="#version">version_tree_list</a></li>
</ul>
<p><a href="#struc_tree_list">Структура tree_list</a></p>
<p><a href="#tree_list_styles">Стили элемента</a></p>
@ -81,6 +82,7 @@ table { font-size: 15px; }
<h1><a name="vveden">Введение</a></h1>
<p>Внешний вид элемента управления TreeList:</p>
<p><img src="window_tree_list.png"></p>
<p>Ðèñ. 1. Îêíî ïðîãðàììû ñ ýëåìåíòîì TreeList</p>
<h1><a name="funct">Функции</a></h1>
@ -119,12 +121,15 @@ table { font-size: 15px; }
<p>где: <b>tree1</b> - структура tree_list;
<b>0x10002</b> - параметры узла (старшие байты 0x0001 - индекс иконки, отображаемой возле узла; меньший байт 0x02 - уровень вложености узла); <b>data_buffer</b> - указатель на дынные, добавляемые в узел.</p>
<h2>tl_node_set_data</h2>
<h2><a name="fun_set_d">tl_node_set_data</a></h2>
<p>Устанавливает новые данные (пользовательские и подпись) в узел под курсором.</p>
<h2>tl_node_get_data</h2>
<h2><a name="fun_get_d">tl_node_get_data</a></h2>
<p>Берет указатель на данные (пользовательские и подпись) из узла под курсором.</p>
<h2>tl_node_delete</h2>
<h2><a name="fun_delete">tl_node_delete</a></h2>
<p>Удаляет узел, но не окончательно, при необходимости узел можно вернуть функцией <b>tl_info_undo</b>.</p>
<h2>tl_cur_beg</h2>
<p>Ставит курсор в начало списка, перематывает скроллинг если нужно.</p>
<h2>tl_cur_next</h2>
@ -194,7 +199,10 @@ table { font-size: 15px; }
<b>MEM_SIZE</b> - размер блока памяти для сохранения.
В регистр <b>eax</b> пишется значение 0 или записываются коды ошибок считывания.</p>
<h2>version_tree_list</h2>
<h2><a name="fun_gme">tl_get_mem_size</a></h2>
<p>Âû÷èñëÿåò ðàçìåð áëîêà ïàìÿòè (â êîòîðûé áûëè ðàíüøå ñîõðàíåíû ýëåìåíòû).</p>
<h2><a name="version">version_tree_list</a></h2>
<p>Версия элемента</p>
<h1><a name="struc_tree_list">Структура tree_list</a></h1>
@ -230,7 +238,7 @@ table { font-size: 15px; }
.on_activate dd 0
.on_press dd on_press
}</pre>
<p><b>info_size</b> - количество байт, которое будет выделено для каждого узла. Часть этой памяти пользователь может использовать для своих целей (регулируется через <i>info_capt_offs</i> и <i>info_capt_len</i>) а остальная часть будет использована как подпись узла.</p>
<p><b>info_size</b> - êîëè÷åñòâî áàéò, êîòîðîå áóäåò âûäåëåíî äëÿ êàæäîãî óçëà. ×àñòü ýòîé ïàìÿòè ïîëüçîâàòåëü ìîæåò èñïîëüçîâàòü äëÿ ñâîèõ öåëåé (ðåãóëèðóåòñÿ ÷åðåç <i>info_capt_offs</i> è <i>info_capt_len</i> ñì. ðèñ. 2) à îñòàëüíàÿ ÷àñòü áóäåò èñïîëüçîâàíà êàê ïîäïèñü óçëà.</p>
<p><b>info_max_count</b> - максимальное количество узлов, которые можно добавить в элемент.</p>
<p><b>style</b> - стили элемента.</p>
<p><b>data_nodes</b> - указатель на внутренние структуры узлов (<i>TreeList</i>).</p>
@ -241,6 +249,9 @@ table { font-size: 15px; }
<p><b>p_scrol</b> - указатель на структуру скроллинга, связанного с данным элементом.</p>
<p><b>on_press</b> - указатель на функцию, которая будет вызвана при нажитии [<b>Enter</b>]. Если указатель равен 0 то ничего не будет вызыватся.</p>
<p><img src="info_size.png"></p>
<p>Ðèñ. 2. Ïàðàìåòðû <i>info_size</i>, <i>info_capt_offs</i> è <i>info_capt_len</i> â óçëå</p>
<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,0,\
@ -255,6 +266,6 @@ table { font-size: 15px; }
<p>Стиль не отображает уровни (как в ListBox все узлы одного уровня).</p>
<hr>
<p>Документация обновлялась последний раз 5.12.09.</p>
<p>Äîêóìåíòàöèÿ îáíîâëÿëàñü ïîñëåäíèé ðàç 23.12.09.</p>
</body>
</html>