Subversion Repositories Kolibri OS

Rev

Rev 1609 | Go to most recent revision | Details | 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

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

    91
     
    92

    tl_node_delete

    93

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

    94
     
    95

    tl_cur_beg

    96

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

    97
     
    98

    tl_cur_next

    99

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

    100
     
    101

    tl_cur_perv

    102

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

    103
     
    104

    tl_node_close_open

    105

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

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

    107
     
    108

    tl_node_lev_inc

    109

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

    110
     
    111

    tl_node_lev_dec

    112

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

    113
     
    114

    tl_node_move_up

    115

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

    116
      push dword tree1
    117
      call dword[tl_node_move_up] ;переместить узел
    118

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

    119
     
    120

    tl_node_move_down

    121

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

    122
      push dword tree1
    123
      call dword[tl_node_move_down] ;переместить узел
    124

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

    125
     
    126

    tl_node_poi_get_info

    127

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

    128

    tl_node_poi_get_next_info

    129

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

    130

    tl_node_poi_get_data

    131

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

    132
     
    133

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

    134
     
    135

    tl_save_mem

    136

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

    137
      MEM_SIZE equ 5000
    138
      node_data rb MEM_SIZE
    139
    .........
    140
      push dword tree1
    141
      push dword 0
    142
      push dword node_data
    143
      push dword MEM_SIZE
    144
      call dword[tl_save_mem]
    145
      pop eax
    146

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

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

    151
     
    152

    tl_load_mem

    153

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

    154
      MEM_SIZE equ 5000
    155
      node_data rb MEM_SIZE
    156
    .........
    157
      push dword tree1
    158
      push dword 0
    159
      push dword node_data
    160
      push dword MEM_SIZE
    161
      call dword[tl_load_mem]
    162
      pop eax
    163

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

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

    168
     
    169

    tl_get_mem_size

    170

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

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

    173
     
    174

    version_tree_list

    175

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

    176
     
    177

    Структура tree_list

    178
    struc tree_list info_size,info_max_count,style, img_cx,img_cy,\
    179
        col_bkg,col_zag,col_txt, box_l,box_t,box_w,box_h, capt_cy,info_capt_offs,\
    180
        info_capt_len,el_focus, p_scrol,on_press {
    181
      .data_info  dd 0
    182
      .info_size  dw info_size
    183
      .info_max_count dd info_max_count
    184
      .style      dd style
    185
      .data_nodes dd 0
    186
      .data_img   dd 0
    187
      .img_cx     dw img_cx
    188
      .img_cy     dw img_cy
    189
      .data_img_sys dd 0
    190
      .ch_tim     dd 0
    191
      .ls_tim     dd 0
    192
      .tim_undo   dd 0
    193
      .cur_pos    dd 0
    194
      .col_bkg    dd col_bkg
    195
      .col_zag    dd col_zag
    196
      .col_txt    dd col_txt
    197
      .box_left   dd box_l
    198
      .box_top    dd box_t
    199
      .box_width  dd box_w
    200
      .box_height dd box_h
    201
      .capt_cy    dw capt_cy
    202
      .info_capt_offs dw info_capt_offs
    203
      .info_capt_len  dw info_capt_len
    204
      .el_focus    dd el_focus
    205
      .p_scrol     dd p_scrol
    206
      rb 4
    207
      .on_activate dd 0
    208
      .on_press    dd on_press
    209
    }
    210

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

    211

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

    212

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

    213

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

    214

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

    215

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

    216

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

    217

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

    218

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

    219

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

    220
     
    221

    222

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

    223
     
    224

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

    225
    tree1 tree_list 24,500, tl_draw_par_line+tl_list_box_mode, 16,16,\
    226
        0x8080ff,0x0000ff,0xffffff, 10,35,200-16,285, 14,4,0,\
    227
        el_focus, wScr,fun_on_enter
    228
     
    229

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

    230

    tl_key_no_edit

    231

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

    232

    tl_draw_par_line

    233

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

    234

    tl_list_box_mode

    235

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

    236
     
    237

    238

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

    239
    240