Subversion Repositories Kolibri OS

Rev

Rev 1634 | Rev 5911 | 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 - указатель на структуру описывающую узел.

    1705 IgorA 156

    Замечание. Если узел с указанным индексом не найден, в указателе возвращается 0.

    1374 IgorA 157
     
    1634 IgorA 158

    tl_node_poi_get_next_info

    159

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

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

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

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

    1705 IgorA 166

    Замечание. Если следущий узел не найден, в указателе возвращается 0.

    1374 IgorA 167
     
    1634 IgorA 168

    tl_node_poi_get_data

    169

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

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

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

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

    177

    Указатель, возвращаемый функцией 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 можно считывать информацию о узлах элемента, при этом не меняя текущего положения курсора. Т. е. можно организовать доступ к даным элемента в "фоновом режиме".

    178
     
    1374 IgorA 179

    tl_save_mem

    180

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

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

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

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

    195
     
    196

    tl_load_mem

    197

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

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

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

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

    212
     
    213

    tl_get_mem_size

    214

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

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

    216
    	MEM_SIZE equ 5000
    217
    	node_data rb MEM_SIZE
    218
    .........
    219
    	;сохраняем данные в 'node_data'
    220
    	stdcall dword[tl_save_mem], MEM_SIZE, node_data, 0, tree1
    221
    	pop eax ;код ошибки
    222
    .........
    223
    	;получаем размер данных в 'node_data'
    224
    	stdcall dword[tl_get_mem_size], node_data, tree1
    225
    	pop ecx ;размер данных, должен быть <= MEM_SIZE
    1374 IgorA 226
     
    227

    version_tree_list

    228

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

    229
     
    230

    Структура tree_list

    231
    struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
    1634 IgorA 232
    	col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\
    233
    	info_capt_len,el_focus, p_scrol,on_press
    234
    {
    1374 IgorA 235
      .data_info  dd 0
    236
      .info_size  dw info_size
    237
      .info_max_count dd info_max_count
    238
      .style      dd style
    239
      .data_nodes dd 0
    240
      .data_img   dd 0
    241
      .img_cx     dw img_cx
    242
      .img_cy     dw img_cy
    243
      .data_img_sys dd 0
    244
      .ch_tim     dd 0
    245
      .ls_tim     dd 0
    246
      .tim_undo   dd 0
    247
      .cur_pos    dd 0
    248
      .col_bkg    dd col_bkg
    249
      .col_zag    dd col_zag
    250
      .col_txt    dd col_txt
    251
      .box_left   dd box_l
    252
      .box_top    dd box_t
    253
      .box_width  dd box_w
    254
      .box_height dd box_h
    255
      .capt_cy    dw capt_cy
    256
      .info_capt_offs dw info_capt_offs
    257
      .info_capt_len  dw info_capt_len
    258
      .el_focus    dd el_focus
    259
      .p_scrol     dd p_scrol
    260
      rb 4
    261
      .on_activate dd 0
    262
      .on_press    dd on_press
    263
    }
    264

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

    265

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

    266

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

    267

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

    1634 IgorA 268

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

    269

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

    270

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

    271

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

    272

    col_bkg - цвет фона.

    273

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

    274

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

    1374 IgorA 275

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

    276

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

    277

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

    1634 IgorA 278

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

    1374 IgorA 279
     
    280

    281

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

    282
     
    283

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

    284
    tree1 tree_list 24,500, tl_draw_par_line+tl_list_box_mode, 16,16,\
    1634 IgorA 285
    	0x8080ff,0x0000ff,0xffffff, 10,35,200-16,285, 14,4,0,\
    286
    	el_focus, wScr,fun_on_enter
    1374 IgorA 287
     
    288

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

    289

    tl_key_no_edit

    290

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

    291

    tl_draw_par_line

    292

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

    293

    tl_list_box_mode

    294

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

    295
     
    296

    1634 IgorA 297

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

    1374 IgorA 298
    299