Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
1277 IgorA 1
2
3
элемент Tree List
4
5
45
46
47

Оглавление

1283 IgorA 48

Введение

49

Функции

1277 IgorA 50
    1285 IgorA 51
  • tl_data_init
  • 52
  • tl_data_clear
  • 53
  • tl_info_clear
  • 54
  • tl_key
  • 55
  • tl_mouse
  • 56
  • tl_draw
  • 57
  • tl_info_undo
  • 58
  • tl_info_redo
  • 59
  • tl_node_add
  • 1328 IgorA 60
  • tl_node_set_data
  • 61
  • tl_node_get_data
  • 62
  • tl_node_delete
  • 1277 IgorA 63
  • tl_cur_beg
  • 64
  • tl_cur_next
  • 65
  • tl_cur_perv
  • 66
  • tl_node_close_open
  • 67
  • tl_node_lev_inc
  • 68
  • tl_node_lev_dec
  • 1285 IgorA 69
  • tl_node_move_up
  • 70
  • tl_node_move_down
  • 1277 IgorA 71
  • tl_node_poi_get_info
  • 72
  • tl_node_poi_get_next_info
  • 73
  • tl_node_poi_get_data
  • 1303 IgorA 74
  • tl_save_mem
  • 75
  • tl_load_mem
  • 1328 IgorA 76
  • tl_get_mem_size
  • 77
  • version_tree_list
  • 1277 IgorA 78
    1283 IgorA 79

    Структура tree_list

    80

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

    1277 IgorA 81
     
    1285 IgorA 82

    Введение

    1277 IgorA 83

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

    84

    1328 IgorA 85

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

    1277 IgorA 86
     
    1283 IgorA 87

    Функции

    1277 IgorA 88
     
    1285 IgorA 89

    tl_data_init

    1277 IgorA 90

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

    1285 IgorA 91

    tl_data_clear

    1283 IgorA 92

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

    1285 IgorA 93
     
    94

    tl_info_clear

    1283 IgorA 95

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

    1285 IgorA 96
     
    97

    tl_key

    1303 IgorA 98

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

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

    1285 IgorA 102
     
    103

    tl_mouse

    1277 IgorA 104

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

    1285 IgorA 105
     
    106

    tl_draw

    1277 IgorA 107

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

    1285 IgorA 108
     
    109

    tl_info_undo

    1277 IgorA 110

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

    1283 IgorA 111
     
    1285 IgorA 112

    tl_info_redo

    113

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

    114
     
    115

    tl_node_add

    1283 IgorA 116

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

    117
      push dword tree1
    118
      push dword 0x10002
    119
      push dword data_buffer
    120
      call dword[tl_node_add]
    1303 IgorA 121

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

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

    1283 IgorA 123
     
    1328 IgorA 124

    tl_node_set_data

    1277 IgorA 125

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

    1328 IgorA 126
     
    127

    tl_node_get_data

    1277 IgorA 128

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

    1328 IgorA 129
     
    130

    tl_node_delete

    1277 IgorA 131

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

    1328 IgorA 132
     
    1277 IgorA 133

    tl_cur_beg

    134

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

    135

    tl_cur_next

    136

    Переносит курсор ниже.

    137

    tl_cur_perv

    138

    Переносит курсор выше.

    139

    tl_node_close_open

    140

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

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

    142

    tl_node_lev_inc

    143

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

    144

    tl_node_lev_dec

    145

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

    1283 IgorA 146
     
    1285 IgorA 147

    tl_node_move_up

    148

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

    149
      push dword tree1
    150
      call dword[tl_node_move_up] ;переместить узел
    151

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

    152
     
    153

    tl_node_move_down

    154

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

    155
      push dword tree1
    156
      call dword[tl_node_move_down] ;переместить узел
    157

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

    158
     
    1277 IgorA 159

    tl_node_poi_get_info

    160

    Берет внутренний указатель на структуру описывающую узел.

    161

    tl_node_poi_get_next_info

    1283 IgorA 162

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

    1277 IgorA 163

    tl_node_poi_get_data

    164

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

    1283 IgorA 165
     
    1285 IgorA 166

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

    1283 IgorA 167
     
    1303 IgorA 168

    tl_save_mem

    169

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

    170
      MEM_SIZE equ 5000
    171
      node_data rb MEM_SIZE
    172
    .........
    173
      push dword tree1
    174
      push dword 0
    175
      push dword node_data
    176
      push dword MEM_SIZE
    177
      call dword[tl_save_mem]
    178
      pop eax
    179

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

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

    184
     
    185

    tl_load_mem

    186

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

    187
      MEM_SIZE equ 5000
    188
      node_data rb MEM_SIZE
    189
    .........
    190
      push dword tree1
    191
      push dword 0
    192
      push dword node_data
    193
      push dword MEM_SIZE
    194
      call dword[tl_load_mem]
    195
      pop eax
    196

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

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

    201
     
    1328 IgorA 202

    tl_get_mem_size

    203

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

    204
     
    205

    version_tree_list

    1277 IgorA 206

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

    207
     
    1283 IgorA 208

    Структура tree_list

    1277 IgorA 209
    struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
    210
        col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\
    1309 IgorA 211
        info_capt_len,el_focus, p_scrol,on_press {
    1277 IgorA 212
      .data_info  dd 0
    213
      .info_size  dw info_size
    214
      .info_max_count dd info_max_count
    215
      .style      dd style
    216
      .data_nodes dd 0
    217
      .data_img   dd 0
    218
      .img_cx     dw img_cx
    219
      .img_cy     dw img_cy
    220
      .data_img_sys dd 0
    221
      .ch_tim     dd 0
    222
      .ls_tim     dd 0
    223
      .tim_undo   dd 0
    224
      .cur_pos    dd 0
    225
      .col_bkg    dd col_bkg
    226
      .col_zag    dd col_zag
    227
      .col_txt    dd col_txt
    1303 IgorA 228
      .box_left   dd box_l
    1277 IgorA 229
      .box_top    dd box_t
    230
      .box_width  dd box_w
    231
      .box_height dd box_h
    232
      .capt_cy    dw capt_cy
    1303 IgorA 233
      .info_capt_offs dw info_capt_offs
    234
      .info_capt_len  dw info_capt_len
    235
      .el_focus    dd el_focus
    236
      .p_scrol     dd p_scrol
    1309 IgorA 237
      rb 4
    1277 IgorA 238
      .on_activate dd 0
    1283 IgorA 239
      .on_press    dd on_press
    1277 IgorA 240
    }
    1328 IgorA 241

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

    1283 IgorA 242

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

    243

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

    244

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

    1277 IgorA 245

    data_img - указатель на изображения с иконками узлов.

    246

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

    1283 IgorA 247

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

    1303 IgorA 248

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

    1277 IgorA 249

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

    1303 IgorA 250

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

    1277 IgorA 251
     
    1328 IgorA 252

    253

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

    254
     
    1283 IgorA 255

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

    256
    tree1 tree_list 24,500, tl_draw_par_line+tl_list_box_mode, 16,16,\
    1309 IgorA 257
        0x8080ff,0x0000ff,0xffffff, 10,35,200-16,285, 14,4,0,\
    258
        el_focus, wScr,fun_on_enter
    1283 IgorA 259
     
    260

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

    1277 IgorA 261

    tl_key_no_edit

    262

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

    263

    tl_draw_par_line

    264

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

    265

    tl_list_box_mode

    266

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

    267
     
    1283 IgorA 268

    1328 IgorA 269

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

    1277 IgorA 270
    271