add new functions: tl_node_move_up, tl_node_move_down. Small fix in redraw caption.

git-svn-id: svn://kolibrios.org@1285 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA 2009-11-25 11:01:46 +00:00
parent f38c7eea18
commit 48f7d9c554
3 changed files with 229 additions and 37 deletions

View File

@ -80,10 +80,12 @@ use_menu_bar
;--------------------------------------------------
align 16
use_file_browser
;--------------------------------------------------
;align 16
init:
ret
;tree list
;--------------------------------------------------
align 16
use_tree_list
;;;;;;;;;;;
;;Data
@ -92,11 +94,9 @@ ret
;mouse_flag dd 0x0
;--------------------------------------------------
;tree list
;--------------------------------------------------
align 16
use_tree_list
;align 16
init:
ret
align 16
@ -157,6 +157,8 @@ EXPORTS:
dd sz_tl_node_close_open,tl_node_close_open
dd sz_tl_node_lev_inc,tl_node_lev_inc
dd sz_tl_node_lev_dec,tl_node_lev_dec
dd sz_tl_node_move_up,tl_node_move_up
dd sz_tl_node_move_down, tl_node_move_down
dd sz_tl_node_poi_get_info, tl_node_poi_get_info
dd sz_tl_node_poi_get_next_info,tl_node_poi_get_next_info
dd sz_tl_node_poi_get_data, tl_node_poi_get_data
@ -219,6 +221,8 @@ szVersion_FileBrowser db 'version_FileBrowser',0
sz_tl_node_close_open db 'tl_node_close_open',0
sz_tl_node_lev_inc db 'tl_node_lev_inc',0
sz_tl_node_lev_dec db 'tl_node_lev_dec',0
sz_tl_node_move_up db 'tl_node_move_up',0
sz_tl_node_move_down db 'tl_node_move_down',0
sz_tl_node_poi_get_info db 'tl_node_poi_get_info',0
sz_tl_node_poi_get_next_info db 'tl_node_poi_get_next_info',0
sz_tl_node_poi_get_data db 'tl_node_poi_get_data',0

View File

@ -1,6 +1,6 @@
; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj
; ýëåìåíò TreeList äëÿ Kolibri OS
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 23.11.2009 IgorA
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 24.11.2009 IgorA
; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ
@ -382,6 +382,7 @@ tl_mouse: ;
mov esi,tl_box_top
add esi,tl_box_height ;esi = coord bottom border
call tl_draw_cursor ;ïåðåðèñîâêà êóðñîðà
call tl_draw_caption_cur_pos
jmp .no_draw
.no_in_wnd: ;íå ïîïàëè â îêíî - ïîòåðÿ ôîêóñà (ïðè óñëîâèè ÷òî ôîêóñ áûë íà äàííîì ýåëåìåíòå)
mov ebx,tl_el_focus
@ -611,6 +612,8 @@ tl_draw: ;
; ecx = pointer to 1 node struct
; edx = pointer to some node struct
; edi = pointer to 'TreeList' struct
;output:
; edx = pointer to next node struct
align 4
tl_iterat_next:
push bx
@ -989,7 +992,7 @@ tl_draw_node:
; ecx = pointer to 1 node struct
;...
align 4
tl_draw_node_icon_opn_clo:
tl_draw_node_icon_opn_clo: ;ðèñóåò èêîíêè îòêðûòîãî èëè çàêðûòîãî óçëà (îáû÷íî + èëè -)
push eax ebx ecx edx esi
inc al
call tl_iterat_next_all ;get next visible item
@ -1567,6 +1570,7 @@ tl_cur_next: ;
@@:
mov edi,dword[ebp+8] ;restore edi
call tl_draw_cursor ;ïåðåðèñîâêà êóðñîðà
call tl_draw_caption_cur_pos
.no_redraw:
pop esi edi ebx eax
pop ebp
@ -1630,6 +1634,7 @@ tl_cur_perv: ;
;mov esi,tl_box_top
;add esi,tl_box_height ;esi = coord bottom border
call tl_draw_cursor ;ïåðåðèñîâêà êóðñîðà
call tl_draw_caption_cur_pos
.no_redraw:
pop esi edi eax
pop ebp
@ -1706,6 +1711,169 @@ tl_node_lev_dec: ;
pop ebp
ret 4
align 4
tl_node_move_up: ;ïåðåìåùàåì óçåë ââåðõ
push ebp
mov ebp,esp
push eax ebx ecx edx edi esi
mov edi,dword[ebp+8]
call tl_get_cur_node_index ;eax=po_t
cmp eax,2
jl @f
mov ebx,eax ;copy index of node struct
mov edx,tl_data_nodes
mov ecx,edx
add ecx,sizeof.TreeList
imul eax,sizeof.TreeList
add eax,edx ;eax = pointer to 2 node struct
mov edx,eax ;edx = pointer to 2 node struct
mov esi,eax ;esi = pointer to 2 node struct
call tl_iterat_perv ;edx = pointer to 1 node struct
call tl_get_node_index ;eax = index of 1 node struct
cmp edx,ecx
jle @f
cmp dword[edx+8],ebx ;+8 next
jne .po8
call tl_node_move_po6 ;óçëû èäóò ïîäðÿä ìåíÿåì 6 ññûëîê
jmp .cur_mov
.po8:
call tl_node_move_po8 ;óçëû èäóò íå ïîäðÿä ìåíÿåì 8 ññûëîê
.cur_mov:
push dword edi
call tl_cur_perv
push dword edi
call tl_draw
@@:
pop esi edi edx ecx ebx eax
pop ebp
ret 4
align 4
tl_node_move_down: ;ïåðåìåùàåì óçåë âíèç
push ebp
mov ebp,esp
push eax ebx ecx edx edi esi
mov edi,dword[ebp+8]
call tl_get_cur_node_index ;eax=po_t
cmp eax,2
jl @f
mov ebx,eax ;copy index of node struct
mov edx,tl_data_nodes
mov ecx,edx
add ecx,sizeof.TreeList
imul eax,sizeof.TreeList
add eax,edx ;eax = pointer to 1 node struct
mov edx,eax ;edx = pointer to 1 node struct
mov esi,eax ;esi = pointer to 1 node struct
call tl_iterat_next ;edx = pointer to 2 node struct
call tl_get_node_index ;eax = index of 2 node struct
cmp edx,ecx
jle @f
cmp dword[esi+8],eax ;+8 next
jne .po8
xchg eax,ebx ;ìåíÿå ïîðÿäîê ñëåäîâàíèÿ çàìåíÿåìûõ óçëîâ
xchg edx,esi
call tl_node_move_po6 ;óçëû èäóò ïîäðÿä ìåíÿåì 6 ññûëîê
jmp .cur_mov
.po8: ;à òóò ïîðÿäîê ñëåäîâàíèÿ óçëîâ íå ìåíÿåì
call tl_node_move_po8 ;óçëû èäóò íå ïîäðÿä ìåíÿåì 8 ññûëîê
.cur_mov:
push dword edi
call tl_cur_next
push dword edi
call tl_draw
@@:
pop esi edi edx ecx ebx eax
pop ebp
ret 4
align 4
tl_node_move_po6:
mov ecx,edx ;save node pointer
call tl_move_perv
mov dword[edx+8],ebx
mov edx,esi
call tl_move_next
mov dword[edx+4],eax
mov edx,ecx ;restore node pointer
;+4 perv
mov ecx,dword[edx+4]
mov dword[esi+4],ecx
;+8 next
mov ecx,dword[esi+8]
mov dword[edx+8],ecx
mov dword[edx+4],ebx
mov dword[esi+8],eax
ret
;input
;eax = index 1 node struct
;ebx = index 2 node struct
;edx = pointer 1 node struct
;esi = pointer 2 node struct
;edi = pointer to 'TreeList' struct
;output:
;eax = ?
;ebx = ?
;ecx = ?
align 4
tl_node_move_po8:
; push ecx
mov ecx,edx ;save node pointer
call tl_move_perv
mov dword[edx+8],ebx
mov edx,ecx
call tl_move_next
mov dword[edx+4],ebx
mov edx,esi
call tl_move_perv
mov dword[edx+8],eax
mov edx,esi
call tl_move_next
mov dword[edx+4],eax
mov edx,ecx ;restore node pointer
; pop ecx
;+4 perv
mov eax,dword[edx+4]
mov ebx,dword[esi+4]
xchg eax,ebx
mov dword[edx+4],eax
mov dword[esi+4],ebx
;+8 next
mov eax,dword[edx+8]
mov ebx,dword[esi+8]
xchg eax,ebx
mov dword[edx+8],eax
mov dword[esi+8],ebx
ret
;input:
; edi = pointer to 'TreeList' struct
align 4
tl_draw_caption_cur_pos:
cmp tl_capt_cy,9 ;9 - minimum caption height
jl @f
push eax ebx ecx edx edi esi
mov eax,47 ;draw
mov ebx,0x40000
mov ecx,tl_cur_pos
inc ecx
mov edx,tl_box_left
shl edx,16
add edx,50*65536+3
add edx,tl_box_top
mov esi,tl_col_txt
or esi,0x40000000 ;çàêðàøèâàòü ôîí öâåòîì edi
mov edi,tl_col_zag
int 0x40
pop esi edi edx ecx ebx eax
@@:
ret
txt_capt_cur db '‘âப ',0
txt_capt_otm db 'Žâ¬¥­ë',0
}

View File

@ -48,15 +48,15 @@ table { font-size: 15px; }
<p><a href="#vveden">Введение</a></p>
<p><a href="#funct">Функции</a></p>
<ul>
<li>tl_data_init</li>
<li>tl_data_clear</li>
<li>tl_info_clear</li>
<li>tl_key</li>
<li>tl_mouse</li>
<li>tl_draw</li>
<li>tl_info_undo</li>
<li>tl_info_redo</li>
<li>tl_node_add</li>
<li><a href="#fun_init">tl_data_init</a></li>
<li><a href="#fun_clear1">tl_data_clear</a></li>
<li><a href="#fun_clear2">tl_info_clear</a></li>
<li><a href="#fun_key">tl_key</a></li>
<li><a href="#fun_mouse">tl_mouse</a></li>
<li><a href="#fun_draw">tl_draw</a></li>
<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>
@ -66,6 +66,8 @@ table { font-size: 15px; }
<li>tl_node_close_open</li>
<li>tl_node_lev_inc</li>
<li>tl_node_lev_dec</li>
<li>tl_node_move_up</li>
<li>tl_node_move_down</li>
<li>tl_node_poi_get_info</li>
<li>tl_node_poi_get_next_info</li>
<li>tl_node_poi_get_data</li>
@ -74,30 +76,36 @@ table { font-size: 15px; }
<p><a href="#struc_tree_list">Структура tree_list</a></p>
<p><a href="#tree_list_styles">Стили элемента</a></p>
<h1><a name="#vveden">Введение</a></h1>
<h1><a name="vveden">Введение</a></h1>
<p>Внешний вид элемента управления TreeList:</p>
<p><img src="window_tree_list.png"></p>
<h1><a name="funct">Функции</a></h1>
<h2>tl_data_init</h2>
<h2><a name="fun_init">tl_data_init</a></h2>
<p>Конструктор элемента, нужно вызывать перед использованием элемента для выделения памяти и других настроек.</p>
<h2>tl_data_clear</h2>
<h2><a name="fun_clear1">tl_data_clear</a></h2>
<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>Очистка списка от всех узлов. Это действие нельзя отменить функцией <b>tl_info_undo</b>.</p>
<h2>tl_key</h2>
<p>Функция которую нужно вызывать при нажатии на клавиатуру.</p>
<h2>tl_mouse</h2>
<p>Функция для событий от мыши.</p>
<h2>tl_draw</h2>
<p>Полная перерисовка окна элемента.</p>
<h2>tl_info_undo</h2>
<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>
<h2><a name="fun_clear2">tl_info_clear</a></h2>
<p>Очистка списка от всех узлов. Это действие нельзя отменить функцией <b>tl_info_undo</b>.</p>
<h2><a name="fun_key">tl_key</a></h2>
<p>Функция которую нужно вызывать при нажатии на клавиатуру.</p>
<h2><a name="fun_mouse">tl_mouse</a></h2>
<p>Функция для событий от мыши.</p>
<h2><a name="fun_draw">tl_draw</a></h2>
<p>Полная перерисовка окна элемента.</p>
<h2><a name="fun_undo">tl_info_undo</a></h2>
<p>Отменяет добавление узлов. Действует только на весь узел целиком, не учитывая изменения внутри узлов. Т. е. нельзя отменить действия выполненные например функциями: <b>tl_node_set_data</b>, <b>tl_node_lev_inc</b> и им подобным.</p>
<h2><a name="fun_redo">tl_info_redo</a></h2>
<p>Повтор отмененных действий. Обратная функция по отношению к <b>tl_info_undo</b>.</p>
<h2><a name="fun_add">tl_node_add</a></h2>
<p>Добавляет узел, в позицию указанную курсором. Пример добавления узла:</p>
<pre> push dword tree1
push dword 0x10002
@ -125,6 +133,18 @@ table { font-size: 15px; }
<h2>tl_node_lev_dec</h2>
<p>Уменьшает уровень узла под курсором. Делает узел родительским.</p>
<h2>tl_node_move_up</h2>
<p>Перемещает вверх узел под курсором. Вместе с узлом двигается также и курсор. Пример использования функции:</p>
<pre> push dword tree1
call dword[tl_node_move_up] ;переместить узел</pre>
<p>где: <b>tree1</b> - структура tree_list</p>
<h2>tl_node_move_down</h2>
<p>Перемещает вниз узел под курсором. Вместе с узлом двигается также и курсор. Пример использования функции:</p>
<pre> push dword tree1
call dword[tl_node_move_down] ;переместить узел</pre>
<p>где: <b>tree1</b> - структура tree_list</p>
<h2>tl_node_poi_get_info</h2>
<p>Берет внутренний указатель на структуру описывающую узел.</p>
<h2>tl_node_poi_get_next_info</h2>
@ -132,7 +152,7 @@ table { font-size: 15px; }
<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>
<p>Функциями tl_node_poi_get_info, tl_node_poi_get_next_info и tl_node_poi_get_data можно считывать информацию о узлах элемента, при этом не меняя текущего положения курсора. Т. е. можно организовать доступ к даным элемента в &quot;фоновом режиме&quot;.</p>
<h2>version_tree_list</h2>
<p>Версия элемента</p>
@ -194,6 +214,6 @@ table { font-size: 15px; }
<p>Стиль не отображает уровни (как в ListBox все узлы одного уровня).</p>
<hr>
<p>Документация обновлялась последний раз 23.11.09.</p>
<p>Документация обновлялась последний раз 25.11.09.</p>
</body>
</html>