diff --git a/programs/develop/libraries/box_lib/trunk/box_lib.asm b/programs/develop/libraries/box_lib/trunk/box_lib.asm index b643fce7f5..d079c007d8 100644 --- a/programs/develop/libraries/box_lib/trunk/box_lib.asm +++ b/programs/develop/libraries/box_lib/trunk/box_lib.asm @@ -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 \ No newline at end of file diff --git a/programs/develop/libraries/box_lib/trunk/tree_list.mac b/programs/develop/libraries/box_lib/trunk/tree_list.mac index 70623db96b..3aede04fd7 100644 --- a/programs/develop/libraries/box_lib/trunk/tree_list.mac +++ b/programs/develop/libraries/box_lib/trunk/tree_list.mac @@ -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 diff --git a/programs/develop/libraries/box_lib/trunk/tree_list_doc/info_size.png b/programs/develop/libraries/box_lib/trunk/tree_list_doc/info_size.png new file mode 100644 index 0000000000..5876da4a31 Binary files /dev/null and b/programs/develop/libraries/box_lib/trunk/tree_list_doc/info_size.png differ diff --git a/programs/develop/libraries/box_lib/trunk/tree_list_doc/info_treelist.htm b/programs/develop/libraries/box_lib/trunk/tree_list_doc/info_treelist.htm index 83f754700f..537d68c763 100644 --- a/programs/develop/libraries/box_lib/trunk/tree_list_doc/info_treelist.htm +++ b/programs/develop/libraries/box_lib/trunk/tree_list_doc/info_treelist.htm @@ -57,9 +57,9 @@ table { font-size: 15px; }
Внешний вид элемента управления TreeList:
+Рис. 1. Окно программы с элементом TreeList
где: tree1 - структура tree_list; 0x10002 - параметры узла (старшие байты 0x0001 - индекс иконки, отображаемой возле узла; меньший байт 0x02 - уровень вложености узла); data_buffer - указатель на дынные, добавляемые в узел.
-Устанавливает новые данные (пользовательские и подпись) в узел под курсором.
-Берет указатель на данные (пользовательские и подпись) из узла под курсором.
-Удаляет узел, но не окончательно, при необходимости узел можно вернуть функцией tl_info_undo.
+Ставит курсор в начало списка, перематывает скроллинг если нужно.
Вычисляет размер блока памяти (в который были раньше сохранены элементы).
+ +Версия элемента
info_size - количество байт, которое будет выделено для каждого узла. Часть этой памяти пользователь может использовать для своих целей (регулируется через info_capt_offs и info_capt_len) а остальная часть будет использована как подпись узла.
+info_size - количество байт, которое будет выделено для каждого узла. Часть этой памяти пользователь может использовать для своих целей (регулируется через info_capt_offs и info_capt_len см. рис. 2) а остальная часть будет использована как подпись узла.
info_max_count - максимальное количество узлов, которые можно добавить в элемент.
style - стили элемента.
data_nodes - указатель на внутренние структуры узлов (TreeList).
@@ -241,6 +249,9 @@ table { font-size: 15px; }p_scrol - указатель на структуру скроллинга, связанного с данным элементом.
on_press - указатель на функцию, которая будет вызвана при нажитии [Enter]. Если указатель равен 0 то ничего не будет вызыватся.
+ +Рис. 2. Параметры info_size, info_capt_offs и info_capt_len в узле
+Пример создания структуры:
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; }Стиль не отображает уровни (как в ListBox все узлы одного уровня).
-Документация обновлялась последний раз 5.12.09.
+Документация обновлялась последний раз 23.12.09.