Subversion Repositories Kolibri OS

Rev

Rev 1609 | Rev 1705 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1374 IgorA 1
2
3
элемент Tree List
4
5
6
7
8

На главную ↑

9

Оглавление

10

Введение

11

Функции

12
    13
  • tl_data_init
  • 14
  • tl_data_clear
  • 15
  • tl_info_clear
  • 16
  • tl_key
  • 17
  • tl_mouse
  • 18
  • tl_draw
  • 19
  • tl_info_undo
  • 20
  • tl_info_redo
  • 21
  • tl_node_add
  • 22
  • tl_node_set_data
  • 23
  • tl_node_get_data
  • 24
  • tl_node_delete
  • 25
  • tl_cur_beg
  • 26
  • tl_cur_next
  • 27
  • tl_cur_perv
  • 28
  • tl_node_close_open
  • 29
  • tl_node_lev_inc
  • 30
  • tl_node_lev_dec
  • 31
  • tl_node_move_up
  • 32
  • tl_node_move_down
  • 1634 IgorA 33
  • tl_node_poi_get_info
  • 34
  • tl_node_poi_get_next_info
  • 35
  • tl_node_poi_get_data
  • 1374 IgorA 36
  • tl_save_mem
  • 37
  • tl_load_mem
  • 38
  • tl_get_mem_size
  • 39
  • version_tree_list
  • 40
    41

    Структура tree_list

    42

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

    43
     
    44

    Введение

    45

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

    46

    47

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

    48
     
    49

    Функции

    50
     
    51

    tl_data_init

    52

    Конструктор элемента, нужно вызывать перед использованием элемента для выделения памяти и других настроек.

    53

    tl_data_clear

    54

    Деструктор элемента, чистит память по указателям: data_info, data_nodes, data_img и data_img_sys. Если в программе используется несколько элементов с одинаковыми иконками, то указатели data_img и data_img_sys нужно приравнять к 0 в других элементах, так что-бы при вызове деструкторов не было повторного удаления одних и тех же иконок.

    55
     
    56

    tl_info_clear

    57

    Очистка списка от всех узлов. Это действие нельзя отменить функцией tl_info_undo.

    58
     
    59

    tl_key

    60

    Функция которую нужно вызывать при нажатии на клавиатуру.

    61
     Кнопки, которые не доступны если есть стиль tl_key_no_edit: [Enter], [Delete], [], [].
    62
     Всегда доступны: [], [], [Page Up], [Page Dn], [Space].
    63
     Функция проверяет включен ли режим scan кодов, и в случае необходимости сама преобразует коды.

    64
     
    65

    tl_mouse

    66

    Функция для событий от мыши.

    67
     
    68

    tl_draw

    69

    Полная перерисовка окна элемента.

    70
     
    71

    tl_info_undo

    72

    Отменяет добавление узлов. Действует только на весь узел целиком, не учитывая изменения внутри узлов. Т. е. нельзя отменить действия выполненные например функциями: tl_node_set_data, tl_node_lev_inc и им подобным.

    73
     
    74

    tl_info_redo

    75

    Повтор отмененных действий. Обратная функция по отношению к tl_info_undo.

    76
     
    77

    tl_node_add

    78

    Добавляет узел, в позицию указанную курсором. Пример добавления узла:

    1634 IgorA 79
    	push dword tree1
    80
    	push dword 0x10002
    81
    	push dword data_buffer
    82
    	call dword[tl_node_add]
    1374 IgorA 83

    где: tree1 - структура tree_list;

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

    85
     
    86

    tl_node_set_data

    87

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

    88
     
    89

    tl_node_get_data

    90

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

    1609 IgorA 91

    Пример 1:

    92
    	stdcall [tl_node_get_data], tree1
    93
    	pop eax
    94

    где: tree1 - структура tree_list;

    95
     eax - указатель на дынные узла.

    1374 IgorA 96
     
    1609 IgorA 97

    Пример 2:

    98
    	NODE_SIZE equ 200
    99
    	node_data rb NODE_SIZE
    100
    .........
    101
    push ecx esi edi
    102
    	stdcall [tl_node_get_data], tree1
    103
    	pop esi
    104
    	mov edi,node_data
    105
    	mov ecx,NODE_SIZE
    106
    	cld
    107
    	rep movsb
    108
    pop edi esi ecx
    109

    где: tree1 - структура tree_list;

    110
     NODE_SIZE - размер дынных узла;
    111
     node_data - копия на дынных узла.

    112
     
    1374 IgorA 113

    tl_node_delete

    114

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

    115
     
    116

    tl_cur_beg

    117

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

    118
     
    119

    tl_cur_next

    120

    Переносит курсор на одну позицию ниже.

    121
     
    122

    tl_cur_perv

    123

    Переносит курсор на одну позицию выше.

    124
     
    125

    tl_node_close_open

    126

    Открывает или закрывает родительский узел. Если у узла нет дочерних элементов,

    127
     то ничего не делает. Автоматически перерисовывает окно если состояние узла изменилось.

    128
     
    129

    tl_node_lev_inc

    130

    Добавить уровень узла под курсором. Делает узел дочерним.

    131
     
    132

    tl_node_lev_dec

    133

    Уменьшает уровень узла под курсором. Делает узел родительским.

    134
     
    135

    tl_node_move_up

    136

    Перемещает вверх узел под курсором. Вместе с узлом двигается также и курсор. Пример использования функции:

    1634 IgorA 137
    	push dword tree1
    138
    	call dword[tl_node_move_up] ;переместить узел
    1374 IgorA 139

    где: tree1 - структура tree_list

    140
     
    141

    tl_node_move_down

    142

    Перемещает вниз узел под курсором. Вместе с узлом двигается также и курсор. Пример использования функции:

    1634 IgorA 143
    	push dword tree1
    144
    	call dword[tl_node_move_down] ;переместить узел
    1374 IgorA 145

    где: tree1 - структура tree_list

    146
     
    1634 IgorA 147

    tl_node_poi_get_info

    148

    Берет внутренний указатель на структуру описывающую узел. Пример использования функции:

    149
    	push dword tree1
    150
    	push dword 0
    151
    	call dword[tl_node_poi_get_info]
    152
    	pop esi
    153

    где: tree1 - структура tree_list;

    154
    0 - позиция узла, с которого берется указатель;
    155
    esi - указатель на структуру описывающую узел.

    1374 IgorA 156
     
    1634 IgorA 157

    tl_node_poi_get_next_info

    158

    Берет указатель на следующий элемент в цепи, без учета открытия/закрытия дочерних узлов. Пример использования функции:

    159
    	push tree1
    160
    	push esi
    161
    	call dword[tl_node_poi_get_next_info]
    162
    	pop esi ;переходим к следущему узлу
    163

    где: tree1 - структура tree_list;

    164
    esi - до вызова функции указатель на структуру описывающую узел, после вызова указатель на структуру описывающую следущий узел в цепи.

    1374 IgorA 165
     
    1634 IgorA 166

    tl_node_poi_get_data

    167

    Берет указатель на данные (пользовательские и подпись) из узла указанного в указателе. Пример использования функции:

    168
    	push dword tree1
    169
    	push dword esi
    170
    	call dword[tl_node_poi_get_data]
    171
    	pop eax ;получаем данные узла
    172

    где: tree1 - структура tree_list;

    173
    esi - указатель на структуру описывающую узел;
    174
    eax - указатель на данные узла, описааного в esi.

    175

    Указатель, возвращаемый функцией tl_node_poi_get_data аналогичен указателю возвращаемому функцией tl_node_get_data. Отличие функций в том, что tl_node_poi_get_data работает без задействования курсора. Функциями tl_node_poi_get_info, tl_node_poi_get_next_info и tl_node_poi_get_data можно считывать информацию о узлах элемента, при этом не меняя текущего положения курсора. Т. е. можно организовать доступ к даным элемента в "фоновом режиме".

    176
     
    1374 IgorA 177

    tl_save_mem

    178

    Сохраняет информацию об узлах элемента в память. Пример использования функции:

    1634 IgorA 179
    	MEM_SIZE equ 5000
    180
    	node_data rb MEM_SIZE
    1374 IgorA 181
    .........
    1634 IgorA 182
    	push dword tree1
    183
    	push dword 0
    184
    	push dword node_data
    185
    	push dword MEM_SIZE
    186
    	call dword[tl_save_mem]
    187
    	pop eax
    1374 IgorA 188

    где: tree1 - структура tree_list;

    189
     0 - опция сохранения в начало блока памяти (если = 1, то добавляет элемент после других сохраненных ранее);
    190
     node_data - указатель на блок памяти;
    191
     MEM_SIZE - размер блока памяти для сохранения.
    192
    В регистр eax пишется значение 0 или записываются коды ошибок сохранения.

    193
     
    194

    tl_load_mem

    195

    Загружает информацию об узлах элемента из памяти. Пример использования функции:

    1634 IgorA 196
    	MEM_SIZE equ 5000
    197
    	node_data rb MEM_SIZE
    1374 IgorA 198
    .........
    1634 IgorA 199
    	push dword tree1
    200
    	push dword 0
    201
    	push dword node_data
    202
    	push dword MEM_SIZE
    203
    	call dword[tl_load_mem]
    204
    	pop eax
    1374 IgorA 205

    где: tree1 - структура tree_list;

    206
     0 - индекс считываемого элемента;
    207
     node_data - указатель на блок памяти;
    208
     MEM_SIZE - размер блока памяти для сохранения.
    209
    В регистр eax пишется значение 0 или записываются коды ошибок считывания.

    210
     
    211

    tl_get_mem_size

    212

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

    213
     Эту функцию можно использовать перед сохранением на диск, для получения точного
    214
     размера сохраняемых данных.

    215
     
    216

    version_tree_list

    217

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

    218
     
    219

    Структура tree_list

    220
    struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
    1634 IgorA 221
    	col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\
    222
    	info_capt_len,el_focus, p_scrol,on_press
    223
    {
    1374 IgorA 224
      .data_info  dd 0
    225
      .info_size  dw info_size
    226
      .info_max_count dd info_max_count
    227
      .style      dd style
    228
      .data_nodes dd 0
    229
      .data_img   dd 0
    230
      .img_cx     dw img_cx
    231
      .img_cy     dw img_cy
    232
      .data_img_sys dd 0
    233
      .ch_tim     dd 0
    234
      .ls_tim     dd 0
    235
      .tim_undo   dd 0
    236
      .cur_pos    dd 0
    237
      .col_bkg    dd col_bkg
    238
      .col_zag    dd col_zag
    239
      .col_txt    dd col_txt
    240
      .box_left   dd box_l
    241
      .box_top    dd box_t
    242
      .box_width  dd box_w
    243
      .box_height dd box_h
    244
      .capt_cy    dw capt_cy
    245
      .info_capt_offs dw info_capt_offs
    246
      .info_capt_len  dw info_capt_len
    247
      .el_focus    dd el_focus
    248
      .p_scrol     dd p_scrol
    249
      rb 4
    250
      .on_activate dd 0
    251
      .on_press    dd on_press
    252
    }
    253

    info_size - количество байт, которое будет выделено для каждого узла. Часть этой памяти пользователь может использовать для своих целей (регулируется через info_capt_offs и info_capt_len см. рис. 2) а остальная часть будет использована как подпись узла.

    254

    info_max_count - максимальное количество узлов, которые можно добавить в элемент.

    255

    style - стили элемента.

    256

    data_nodes - указатель на внутренние структуры узлов (TreeList).

    1634 IgorA 257

    data_img - указатель на изображения с иконками узлов. Формат изображения такой же как и в сист. ф. 7: BBGGRRBBGGRR....

    258

    img_cx - ширина одной иконки.

    259

    img_cy - высота одной иконки.

    260

    data_img_sys - указатель на системные изображения (курсор, плюсики, линии, ... все кроме иконок узлов). Формат изображения такой же как и в сист. ф. 7: BBGGRRBBGGRR...

    261

    col_bkg - цвет фона.

    262

    col_zag - цвет строки заголовка (если она задана) и кнопок и ползунка вертикальной полосы прокрутки (если она есть).

    263

    col_txt - цвет текста.

    1374 IgorA 264

    capt_cy - высота строки для подписи вверху элемента, если меньше 9 подпись не выводится.

    265

    info_capt_len - длинна текста для подписи. Если равно 0, то длинна считается так: info_size - info_capt_offs.

    266

    p_scrol - указатель на структуру скроллинга, связанного с данным элементом.

    1634 IgorA 267

    on_press - указатель на функцию, которая будет вызвана при нажатии [Enter]. Если указатель равен 0 то ничего не будет вызываться.

    1374 IgorA 268
     
    269

    270

    Рис. 2. Параметры info_size, info_capt_offs и info_capt_len в узле

    271
     
    272

    Пример создания структуры:

    273
    tree1 tree_list 24,500, tl_draw_par_line+tl_list_box_mode, 16,16,\
    1634 IgorA 274
    	0x8080ff,0x0000ff,0xffffff, 10,35,200-16,285, 14,4,0,\
    275
    	el_focus, wScr,fun_on_enter
    1374 IgorA 276
     
    277

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

    278

    tl_key_no_edit

    279

    Элемент нельзя редактировать на клавиатуре (изменять уровни, удалять). Ставьте этот стиль если нужно создать элемент только для просмотра данных.

    280

    tl_draw_par_line

    281

    Рисовать линии к родительскому узлу.

    282

    tl_list_box_mode

    283

    Стиль не отображает уровни (как в ListBox все узлы одного уровня).

    284
     
    285

    1634 IgorA 286

    Документация обновлялась последний раз 30.09.10.

    1374 IgorA 287
    288