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; }
  • tl_info_undo
  • tl_info_redo
  • tl_node_add
  • -
  • tl_node_set_data
  • -
  • tl_node_get_data
  • -
  • tl_node_delete
  • +
  • tl_node_set_data
  • +
  • tl_node_get_data
  • +
  • tl_node_delete
  • tl_cur_beg
  • tl_cur_next
  • tl_cur_perv
  • @@ -73,7 +73,8 @@ table { font-size: 15px; }
  • tl_node_poi_get_data
  • tl_save_mem
  • tl_load_mem
  • -
  • version_tree_list
  • +
  • tl_get_mem_size
  • +
  • version_tree_list
  • Структура tree_list

    Стили элемента

    @@ -81,6 +82,7 @@ table { font-size: 15px; }

    Введение

    Внешний вид элемента управления TreeList:

    +

    Рис. 1. Окно программы с элементом TreeList

    Функции

    @@ -119,12 +121,15 @@ table { font-size: 15px; }

    где: tree1 - структура tree_list; 0x10002 - параметры узла (старшие байты 0x0001 - индекс иконки, отображаемой возле узла; меньший байт 0x02 - уровень вложености узла); data_buffer - указатель на дынные, добавляемые в узел.

    -

    tl_node_set_data

    +

    tl_node_set_data

    Устанавливает новые данные (пользовательские и подпись) в узел под курсором.

    -

    tl_node_get_data

    + +

    tl_node_get_data

    Берет указатель на данные (пользовательские и подпись) из узла под курсором.

    -

    tl_node_delete

    + +

    tl_node_delete

    Удаляет узел, но не окончательно, при необходимости узел можно вернуть функцией tl_info_undo.

    +

    tl_cur_beg

    Ставит курсор в начало списка, перематывает скроллинг если нужно.

    tl_cur_next

    @@ -194,7 +199,10 @@ table { font-size: 15px; } MEM_SIZE - размер блока памяти для сохранения. В регистр eax пишется значение 0 или записываются коды ошибок считывания.

    -

    version_tree_list

    +

    tl_get_mem_size

    +

    Вычисляет размер блока памяти (в который были раньше сохранены элементы).

    + +

    version_tree_list

    Версия элемента

    Структура tree_list

    @@ -230,7 +238,7 @@ table { font-size: 15px; } .on_activate dd 0 .on_press dd on_press } -

    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.

    \ No newline at end of file