Subversion Repositories Kolibri OS

Rev

Rev 1374 | Rev 1634 | 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
  • 33
  • tl_node_poi_get_info
  • 34
  • tl_node_poi_get_next_info
  • 35
  • tl_node_poi_get_data
  • 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

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

    79
      push dword tree1
    80
      push dword 0x10002
    81
      push dword data_buffer
    82
      call dword[tl_node_add]
    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

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

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

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

    140
     
    141

    tl_node_move_down

    142

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

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

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

    146
     
    147

    tl_node_poi_get_info

    148

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

    149

    tl_node_poi_get_next_info

    150

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

    151

    tl_node_poi_get_data

    152

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

    153
     
    154

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

    155
     
    156

    tl_save_mem

    157

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

    158
      MEM_SIZE equ 5000
    159
      node_data rb MEM_SIZE
    160
    .........
    161
      push dword tree1
    162
      push dword 0
    163
      push dword node_data
    164
      push dword MEM_SIZE
    165
      call dword[tl_save_mem]
    166
      pop eax
    167

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

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

    172
     
    173

    tl_load_mem

    174

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

    175
      MEM_SIZE equ 5000
    176
      node_data rb MEM_SIZE
    177
    .........
    178
      push dword tree1
    179
      push dword 0
    180
      push dword node_data
    181
      push dword MEM_SIZE
    182
      call dword[tl_load_mem]
    183
      pop eax
    184

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

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

    189
     
    190

    tl_get_mem_size

    191

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

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

    194
     
    195

    version_tree_list

    196

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

    197
     
    198

    Структура tree_list

    199
    struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
    200
        col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\
    201
        info_capt_len,el_focus, p_scrol,on_press {
    202
      .data_info  dd 0
    203
      .info_size  dw info_size
    204
      .info_max_count dd info_max_count
    205
      .style      dd style
    206
      .data_nodes dd 0
    207
      .data_img   dd 0
    208
      .img_cx     dw img_cx
    209
      .img_cy     dw img_cy
    210
      .data_img_sys dd 0
    211
      .ch_tim     dd 0
    212
      .ls_tim     dd 0
    213
      .tim_undo   dd 0
    214
      .cur_pos    dd 0
    215
      .col_bkg    dd col_bkg
    216
      .col_zag    dd col_zag
    217
      .col_txt    dd col_txt
    218
      .box_left   dd box_l
    219
      .box_top    dd box_t
    220
      .box_width  dd box_w
    221
      .box_height dd box_h
    222
      .capt_cy    dw capt_cy
    223
      .info_capt_offs dw info_capt_offs
    224
      .info_capt_len  dw info_capt_len
    225
      .el_focus    dd el_focus
    226
      .p_scrol     dd p_scrol
    227
      rb 4
    228
      .on_activate dd 0
    229
      .on_press    dd on_press
    230
    }
    231

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

    232

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

    233

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

    234

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

    235

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

    236

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

    237

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

    238

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

    239

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

    240

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

    241
     
    242

    243

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

    244
     
    245

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

    246
    tree1 tree_list 24,500, tl_draw_par_line+tl_list_box_mode, 16,16,\
    247
        0x8080ff,0x0000ff,0xffffff, 10,35,200-16,285, 14,4,0,\
    248
        el_focus, wScr,fun_on_enter
    249
     
    250

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

    251

    tl_key_no_edit

    252

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

    253

    tl_draw_par_line

    254

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

    255

    tl_list_box_mode

    256

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

    257
     
    258

    1609 IgorA 259

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

    1374 IgorA 260
    261