Subversion Repositories Kolibri OS

Rev

Rev 6615 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6615 Rev 6690
1
#ifndef KOLIBRI_TREELIST_H
1
#ifndef KOLIBRI_TREELIST_H
2
#define KOLIBRI_TREELIST_H
2
#define KOLIBRI_TREELIST_H
3
 
3
 
4
 
4
 
5
/// êîíñòàíòû ñòèëÿ
5
/// êîíñòàíòû ñòèëÿ
6
enum tl_style {
6
enum tl_style {
7
    TL_KEY_NO_EDIT  = 1,    // ýëåìåíò íåëüçÿ ðåäàêòèðîâàòü íà êëàâèàòóðå (èçìåíÿòü óðîâíè, óäàëÿòü)
7
    TL_KEY_NO_EDIT  = 1,    // ýëåìåíò íåëüçÿ ðåäàêòèðîâàòü íà êëàâèàòóðå (èçìåíÿòü óðîâíè ñòðåëêàìè, óäàëÿòü DEL)
8
    TL_DRAW_PAR_LINE = 2,   // ðèñîâàòü ëèíèè ê ðîäèòåëüñêîìó óçëó
8
    TL_DRAW_PAR_LINE = 2,   // ðèñîâàòü ëèíèè ê ðîäèòåëüñêîìó óçëó
9
    TL_LISTBOX_MODE  = 4    //ñòèëü íå îòîáðàæàåò óðîâíè (êàê â ListBox âñå îäíîãî óðîâíÿ)
9
    TL_LISTBOX_MODE  = 4    //ñòèëü íå îòîáðàæàåò óðîâíè (êàê â ListBox âñå îäíîãî óðîâíÿ)
10
};
10
};
11
 
11
 
12
/// êîíñòàíòû äëÿ ôóíêöèé
12
/// êîíñòàíòû äëÿ ôóíêöèé
13
enum tl_err {
13
enum tl_err {
14
    TL_ERR_LOAD_CAPTION     = 1, //â ïàìÿòè íåò çàãîëîâêà 'tree'
14
    TL_ERR_LOAD_CAPTION     = 1, //â ïàìÿòè íåò çàãîëîâêà 'tree'
15
    TL_ERR_SAVE_MEMOTY_SIZE = 2, //íå õâàòàåò ïàìÿòè äëÿ ñîõðàíåíèÿ ýëåìåíòà
15
    TL_ERR_SAVE_MEMOTY_SIZE = 2, //íå õâàòàåò ïàìÿòè äëÿ ñîõðàíåíèÿ ýëåìåíòà
16
    TL_ERR_LOAD_INFO_SIZE   = 4, //íå ñîâïàäàåò ðàçìåð èíôîðìàöèîííîé ñòðóêòóðû ïðè îòêðûòèè
16
    TL_ERR_LOAD_INFO_SIZE   = 4, //íå ñîâïàäàåò ðàçìåð èíôîðìàöèîííîé ñòðóêòóðû ïðè îòêðûòèè
17
};
17
};
18
 
18
 
19
typedef struct __attribute__ ((__packed__)) {
19
typedef struct __attribute__ ((__packed__)) {
20
    uint16_t    type;   //òèï ýëåìåíòà, èëè èíäåêñ èêîíêè äëÿ óçëà
20
    uint16_t    type;   //òèï ýëåìåíòà, èëè èíäåêñ èêîíêè äëÿ óçëà
21
    uint8_t     lev;    //óðîâåíü ýëåìåíòà
21
    uint8_t     lev;    //óðîâåíü ýëåìåíòà
22
    uint8_t     clo;    //ôëàã çàêðûòèÿ, èëè îòêðûòèÿ (èìååò ñìûñë äëÿ ðîäèòåëüñêîãî óçëà)
22
    uint8_t     clo;    //ôëàã çàêðûòèÿ, èëè îòêðûòèÿ (èìååò ñìûñë äëÿ ðîäèòåëüñêîãî óçëà)
23
    uint32_t    prev;   //èíäåêñ ïðåäûäóùåãî ýëåìåíòà
23
    uint32_t    prev;   //èíäåêñ ïðåäûäóùåãî ýëåìåíòà
24
    uint32_t    next;   //èíäåêñ ïîñëåäóþùåãî ýëåìåíòà
24
    uint32_t    next;   //èíäåêñ ïîñëåäóþùåãî ýëåìåíòà
25
    uint32_t    tcreat; //âðåì. ñîçäàíèÿ
25
    uint32_t    tcreat; //âðåì. ñîçäàíèÿ
26
    uint32_t    tdel;   //âðåì. óäàëåíèÿ
26
    uint32_t    tdel;   //âðåì. óäàëåíèÿ
27
} treelist_node;
27
} treelist_node;
28
 
28
 
29
 
29
 
30
typedef struct __attribute__ ((__packed__)) {
30
typedef struct __attribute__ ((__packed__)) {
31
    uint32_t    left;
31
    uint32_t    left;
32
    uint32_t    top;
32
    uint32_t    top;
33
    uint32_t    width;
33
    uint32_t    width;
34
    uint32_t    height;
34
    uint32_t    height;
35
    void       *data_info;  // óêàçàòåëü íà îñíîâíûå äàíûå
35
    void       *data_info;  // óêàçàòåëü íà îñíîâíûå äàíûå
36
    uint16_t    info_size;  // ðàçìåð äàííûõ âûäåëÿåìûõ äëÿ êàæäîãî óçëà (ïîëüçîâàòåëüñüêèå äàííûå + òåêñò äëÿ ïîäïèñè)
36
    uint16_t    info_size;  // ðàçìåð äàííûõ âûäåëÿåìûõ äëÿ êàæäîãî óçëà (ïîëüçîâàòåëüñüêèå äàííûå + òåêñò äëÿ ïîäïèñè)
37
    uint32_t    info_max_count; // ìàêñèìàëüíîå êîëè÷åñòâî óçëîâ, êîòîðûå ìîæíî äîáàâèòü â ýëåìåíò
37
    uint32_t    info_max_count; // ìàêñèìàëüíîå êîëè÷åñòâî óçëîâ, êîòîðûå ìîæíî äîáàâèòü â ýëåìåíò
38
    uint32_t    style;      // ñòèëè ýëåìåíòà
38
    uint32_t    style;      // ñòèëè ýëåìåíòà
39
    treelist_node *data_nodes; // óêàçàòåëü íà ñòðóêòóðû óçëîâ
39
    treelist_node *data_nodes; // óêàçàòåëü íà ñòðóêòóðû óçëîâ
40
    void       *data_img;   // óêàçàòåëü íà èçîáðàæåíèÿ ñ èêîíêàìè óçëîâ
40
    void       *data_img;   // óêàçàòåëü íà èçîáðàæåíèÿ ñ èêîíêàìè óçëîâ
41
    uint16_t    img_cx;     // øèðèíà èêîíîê
41
    uint16_t    img_cx;     // øèðèíà èêîíîê
42
    uint16_t    img_cy;     // âûñîòà èêîíîê
42
    uint16_t    img_cy;     // âûñîòà èêîíîê
43
    void       *data_img_sys;//óêàçàòåëü íà ñèñòåìíûå èçîáðàæåíèÿ (ñòðåëêè, ïëþñèêè)
43
    void       *data_img_sys;//óêàçàòåëü íà ñèñòåìíûå èçîáðàæåíèÿ (ñòðåëêè, ïëþñèêè)
44
    uint32_t    ch_tim;     // êîëè÷åñòâî èçìåíåíèé â ôàéëå
44
    uint32_t    ch_tim;     // êîëè÷åñòâî èçìåíåíèé â ôàéëå
45
    uint32_t    tim_undo;   // êîëè÷åñòâî îòìåíåííûõ äåéñòâèé
45
    uint32_t    tim_undo;   // êîëè÷åñòâî îòìåíåííûõ äåéñòâèé
46
    uint32_t    cur_pos;    // ïîçèöèÿ êóðñîðà
46
    uint32_t    cur_pos;    // ïîçèöèÿ êóðñîðà
47
    color_t     col_bkg;    // öâåò ôîíà
47
    color_t     col_bkg;    // öâåò ôîíà
48
    color_t     col_zag; // öâåò çàãîëîâêà
48
    color_t     col_zag; // öâåò çàãîëîâêà
49
    color_t     col_txt; // öâåò òåêñòà
49
    color_t     col_txt; // öâåò òåêñòà
50
    uint16_t    capt_cy;    // âûñîòà ïîäïèñè
50
    uint16_t    capt_cy;    // âûñîòà ïîäïèñè
51
    uint16_t    info_capt_offs;//ñäâèã äëÿ íà÷àëà òåêñòà (ïîäïèñè óçëà)
51
    uint16_t    info_capt_offs;//ñäâèã äëÿ íà÷àëà òåêñòà (ïîäïèñè óçëà)
52
    uint16_t    info_capt_len;//äëèíà òåêñòà ïîäïèñè óçëà (åñëè = 0 òî äî êîíöà ñòðóêòóðû)
52
    uint16_t    info_capt_len;//äëèíà òåêñòà ïîäïèñè óçëà (åñëè = 0 òî äî êîíöà ñòðóêòóðû)
53
    void       *el_focus;   // óêàçàòåëü íà ñòðóêòóðó ýëåìåíòà â ôîêóñå
53
    void       *el_focus;   // óêàçàòåëü íà ñòðóêòóðó ýëåìåíòà â ôîêóñå
54
    scrollbar  *p_scroll;   // óêàçàòåëü íà ñòðóêòóðó ñêðîëëèíãà
54
    scrollbar  *p_scroll;   // óêàçàòåëü íà ñòðóêòóðó ñêðîëëèíãà
55
    void       *on_press;   // +84 óêàçàòåëü íà ôóíêöèþ, êîòîðàÿ âûçûâàåòñÿ ïðè íàæàòèè Enter
55
    void       *on_press;   // +84 óêàçàòåëü íà ôóíêöèþ, êîòîðàÿ âûçûâàåòñÿ ïðè íàæàòèè Enter
56
} treelist;
56
} treelist;
-
 
57
 
-
 
58
// capt_cy may be 0 = no caption
57
 
59
// if icon_size is 16x16, and data_img id NULL, no icons - useful in list mode
58
static inline treelist* kolibri_new_treelist( uint32_t x_w, uint32_t y_h, uint16_t capt_cy, uint32_t icon_size_xy, uint16_t info_size, uint32_t info_max_count,
60
static inline treelist* kolibri_new_treelist( uint32_t x_w, uint32_t y_h, uint16_t capt_cy, uint32_t icon_size_xy, uint16_t info_size, uint32_t info_max_count,
59
                                             uint16_t info_capt_len, uint16_t info_capt_offs, enum tl_style style, void *el_focus, color_t back, color_t title, color_t txt)
61
                                             uint16_t info_capt_len, uint16_t info_capt_offs, enum tl_style style, void *el_focus, color_t back, color_t title, color_t txt)
60
{
62
{
61
    treelist *tl = (treelist *)calloc(1, sizeof(treelist));
63
    treelist *tl = (treelist *)calloc(1, sizeof(treelist));
62
    tl->left= x_w >> 16;
64
    tl->left= x_w >> 16;
63
    tl->width = x_w & 0xFFFF;
65
    tl->width = x_w & 0xFFFF;
64
    tl->top = y_h >> 16;
66
    tl->top = y_h >> 16;
65
    tl->height = y_h & 0xFFFF;
67
    tl->height = y_h & 0xFFFF;
66
    tl->info_size = info_size;
68
    tl->info_size = info_size;
67
    tl->info_max_count = info_max_count;
69
    tl->info_max_count = info_max_count;
68
    tl->style = style;
70
    tl->style = style;
69
    tl->img_cx = icon_size_xy >> 16;
71
    tl->img_cx = icon_size_xy >> 16;
70
    tl->img_cy = icon_size_xy & 0xFFFF;
72
    tl->img_cy = icon_size_xy & 0xFFFF;
71
    tl->col_bkg = back;
73
    tl->col_bkg = back;
72
    tl->col_zag = title;
74
    tl->col_zag = title;
73
    tl->col_txt = txt;
75
    tl->col_txt = txt;
74
    tl->info_capt_len = info_capt_len;
76
    tl->info_capt_len = info_capt_len;
75
    tl->info_capt_offs = info_capt_offs;
77
    tl->info_capt_offs = info_capt_offs;
76
    tl->el_focus = el_focus;
78
    tl->el_focus = el_focus;
-
 
79
    tl->capt_cy = capt_cy;
77
    tl->p_scroll = kolibri_new_scrollbar_def(X_Y(0, 16), X_Y(0, 0), 100, 30, 0);
80
    tl->p_scroll = kolibri_new_scrollbar_def(X_Y(0, 16), X_Y(0, 0), 100, 30, 0);
78
    return tl;
81
    return tl;
79
}
82
}
80
 
83
 
81
static inline void gui_add_treelist(kolibri_window *wnd, treelist* tl)
84
static inline void gui_add_treelist(kolibri_window *wnd, treelist* tl)
82
{
85
{
83
    kolibri_window_add_element(wnd, KOLIBRI_TREELIST, tl);
86
    kolibri_window_add_element(wnd, KOLIBRI_TREELIST, tl);
84
}
87
}
85
 
88
 
86
 
89
 
87
///ðåàêöèÿ íà ìûøü
90
///ðåàêöèÿ íà ìûøü
88
extern void (*tl_mouse)(treelist *) __attribute__((__stdcall__));
91
extern void (*tl_mouse)(treelist *) __attribute__((__stdcall__));
89
 
92
 
90
///âûâîä ñïèñêà íà ýêðàí
93
///âûâîä ñïèñêà íà ýêðàí
91
extern void (*tl_draw)(treelist *) __attribute__((__stdcall__));
94
extern void (*tl_draw)(treelist *) __attribute__((__stdcall__));
92
__attribute__((__stdcall__)) static inline void treelist_draw(treelist *tl)
95
__attribute__((__stdcall__)) static inline void treelist_draw(treelist *tl)
93
{
96
{
94
    tl->p_scroll->all_redraw = 1;
97
    tl->p_scroll->all_redraw = 1;
95
    (*tl_draw)(tl);
98
    (*tl_draw)(tl);
96
}
99
}
97
 
100
 
98
 
101
 
99
///ïåðåìåùàåì óçåë ââåðõ
102
///ïåðåìåùàåì óçåë ââåðõ
100
extern void (*tl_node_move_up)(treelist *) __attribute__((__stdcall__));
103
extern void (*tl_node_move_up)(treelist *) __attribute__((__stdcall__));
101
 
104
 
102
///ïåðåìåùàåì óçåë âíèç
105
///ïåðåìåùàåì óçåë âíèç
103
extern void (*tl_node_move_down)(treelist *) __attribute__((__stdcall__));
106
extern void (*tl_node_move_down)(treelist *) __attribute__((__stdcall__));
104
 
107
 
105
///âûäåëåíèå ïàìÿòè äëÿ ñòðóêòóð ñïèñêà è îñíîâíîé èíôîðìàöèè (êîíñòðóêòîð)
108
///âûäåëåíèå ïàìÿòè äëÿ ñòðóêòóð ñïèñêà è îñíîâíîé èíôîðìàöèè (êîíñòðóêòîð)
106
extern void (*tl_data_init)(treelist *) __attribute__((__stdcall__));
109
extern void (*tl_data_init)(treelist *) __attribute__((__stdcall__));
107
 
110
 
108
 
111
 
109
///î÷èñòêà ïàìÿòè ýëåìåíòà (äåñòðóêòîð)
112
///î÷èñòêà ïàìÿòè ýëåìåíòà (äåñòðóêòîð)
110
extern void (*tl_data_clear)(treelist *) __attribute__((__stdcall__));
113
extern void (*tl_data_clear)(treelist *) __attribute__((__stdcall__));
111
static inline void treelist_data_clear(treelist *tl)
114
static inline void treelist_data_clear(treelist *tl)
112
{
115
{
113
    (*tl_data_clear)(tl);
116
    (*tl_data_clear)(tl);
114
    free(tl->p_scroll);
117
    free(tl->p_scroll);
115
}
118
}
116
 
119
 
117
///î÷èñòêà ñïèñêà (èíôîðìàöèè)
120
///î÷èñòêà ñïèñêà (èíôîðìàöèè)
118
extern void (*tl_info_clear)(treelist *) __attribute__((__stdcall__));
121
extern void (*tl_info_clear)(treelist *) __attribute__((__stdcall__));
119
 
122
 
120
extern void (*tl_key_asm)(treelist *) __attribute__((__stdcall__));
123
extern void (*tl_key_asm)(treelist *) __attribute__((__stdcall__));
121
///ðåàêöèÿ íà êëàâèàòóðó
124
///ðåàêöèÿ íà êëàâèàòóðó
122
__attribute__((__stdcall__)) static inline void treelist_key(treelist *tl, oskey_t code)
125
__attribute__((__stdcall__)) static inline void treelist_key(treelist *tl, oskey_t code)
123
{
126
{
124
    __asm__ __volatile__ (
127
    __asm__ __volatile__ (
125
             "push %2\n\t"
128
             "push %2\n\t"
126
             "call *%1 \n\t"::"a"(code.val), "m"(tl_key_asm), "m"(tl):);  // indirect call with asterisk *
129
             "call *%1 \n\t"::"a"(code.val), "m"(tl_key_asm), "m"(tl):);  // indirect call with asterisk *
127
 
130
 
128
//    (*tl_key_asm)(tl);
131
//    (*tl_key_asm)(tl);
129
}
132
}
130
 
133
 
131
///îòìåíà äåéñòâèÿ
134
///îòìåíà äåéñòâèÿ
132
extern void (*tl_info_undo)(treelist *) __attribute__((__stdcall__));
135
extern void (*tl_info_undo)(treelist *) __attribute__((__stdcall__));
133
 
136
 
134
///ïîâòîð äåéñòâèÿ
137
///ïîâòîð äåéñòâèÿ
135
extern void (*tl_info_redo)(treelist *) __attribute__((__stdcall__));
138
extern void (*tl_info_redo)(treelist *) __attribute__((__stdcall__));
136
 
139
 
137
extern void (*tl_node_add)(treelist *, uint32_t n_opt, void *n_info) __attribute__((__stdcall__));
140
extern void (*tl_node_add)(treelist *, uint32_t n_opt, void *n_info) __attribute__((__stdcall__));
138
///äîáàâèòü óçåë
141
///äîáàâèòü óçåë
139
///input:
142
///input:
140
/// tlist - óêàçàòåëü íà ñòðóêòóðó ëèñòà
143
/// tlist - óêàçàòåëü íà ñòðóêòóðó ëèñòà
141
/// n_opt - îïöèè äîáàâëåíèÿ
144
/// n_opt - îïöèè äîáàâëåíèÿ
142
/// n_info - óêàçàòåëü íà äîáàâëÿåìûå äàííûå
145
/// n_info - óêàçàòåëü íà äîáàâëÿåìûå äàííûå
143
static inline void treelist_node_add(treelist *tl, void *n_info, uint16_t type, uint8_t clos, uint8_t lev)
146
static inline void treelist_node_add(treelist *tl, void *n_info, uint16_t type, uint8_t clos, uint8_t lev)
144
{
147
{
145
    uint32_t    n_opt = (type << 16) | (clos << 8) | lev;
148
    uint32_t    n_opt = (type << 16) | (clos << 8) | lev;
146
    (*tl_node_add)(tl, n_opt, n_info);
149
    (*tl_node_add)(tl, n_opt, n_info);
147
}
150
}
148
 
151
 
149
///çàïèñàòü â òåêóùèé óçåë
152
///çàïèñàòü â òåêóùèé óçåë
150
///input:
153
///input:
151
/// tlist - óêàçàòåëü íà ñòðóêòóðó ëèñòà
154
/// tlist - óêàçàòåëü íà ñòðóêòóðó ëèñòà
152
/// n_info - óêàçàòåëü íà äàííûå
155
/// n_info - óêàçàòåëü íà äàííûå
153
extern void (*tl_node_set_data)(treelist *, void *n_info) __attribute__((__stdcall__));
156
extern void (*tl_node_set_data)(treelist *, void *n_info) __attribute__((__stdcall__));
154
 
157
 
155
///âçÿòü óêàçàòåëü íà äàííûå óçëà ïîä êóðñîðîì
158
///âçÿòü óêàçàòåëü íà äàííûå óçëà ïîä êóðñîðîì
156
extern void* (*tl_node_get_data)(treelist *) __attribute__((__stdcall__));
159
extern void* (*tl_node_get_data)(treelist *) __attribute__((__stdcall__));
157
 
160
 
158
///óäàëèòü óçåë ïîä êóðñîðîì
161
///óäàëèòü óçåë ïîä êóðñîðîì
159
extern void (*tl_node_delete)(treelist *) __attribute__((__stdcall__));
162
extern void (*tl_node_delete)(treelist *) __attribute__((__stdcall__));
160
 
163
 
161
///ïîñòàâèòü êóðñîð íà ïåðâûé óçåë
164
///ïîñòàâèòü êóðñîð íà ïåðâûé óçåë
162
extern void (*tl_cur_beg)(treelist *) __attribute__((__stdcall__));
165
extern void (*tl_cur_beg)(treelist *) __attribute__((__stdcall__));
163
 
166
 
164
///ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ íèæå
167
///ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ íèæå
165
extern void (*tl_cur_next)(treelist *) __attribute__((__stdcall__));
168
extern void (*tl_cur_next)(treelist *) __attribute__((__stdcall__));
166
 
169
 
167
///ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ âûøå
170
///ïåðåíåñòè êóðñîð íà 1 ïîçèöèþ âûøå
168
extern void (*tl_cur_perv)(treelist *) __attribute__((__stdcall__));
171
extern void (*tl_cur_perv)(treelist *) __attribute__((__stdcall__));
169
 
172
 
170
///îòêðûòü/çàêðûòü óçåë (ðàáîòàåò ñ óçëàìè êîòîðûå èìåþò äî÷åðíèå óçëû)
173
///îòêðûòü/çàêðûòü óçåë (ðàáîòàåò ñ óçëàìè êîòîðûå èìåþò äî÷åðíèå óçëû)
171
extern void (*tl_node_close_open)(treelist *) __attribute__((__stdcall__));
174
extern void (*tl_node_close_open)(treelist *) __attribute__((__stdcall__));
172
 
175
 
173
///óâåëè÷èòü óðîâåíü
176
///óâåëè÷èòü óðîâåíü
174
extern void (*tl_node_lev_inc)(treelist *) __attribute__((__stdcall__));
177
extern void (*tl_node_lev_inc)(treelist *) __attribute__((__stdcall__));
175
 
178
 
176
///óìåíüøèòü óðîâåíü
179
///óìåíüøèòü óðîâåíü
177
extern void (*tl_node_lev_dec)(treelist *) __attribute__((__stdcall__));
180
extern void (*tl_node_lev_dec)(treelist *) __attribute__((__stdcall__));
178
 
181
 
179
///âçÿòü óêàçàòåëü íà ñòðóêòóðó óçëà â óêàçàííîé ïîçèöèè
182
///âçÿòü óêàçàòåëü íà ñòðóêòóðó óçëà â óêàçàííîé ïîçèöèè
180
///input:
183
///input:
181
/// tlist - pointer to 'TreeList' struct
184
/// tlist - pointer to 'TreeList' struct
182
/// node_ind - node index
185
/// node_ind - node index
183
///output - pointer to node info or NULL
186
///output - pointer to node info or NULL
184
extern treelist_node* (*tl_node_poi_get_info)(treelist *, int node_ind) __attribute__((__stdcall__));
187
extern treelist_node* (*tl_node_poi_get_info)(treelist *, int node_ind) __attribute__((__stdcall__));
185
 
188
 
186
///âçÿòü óêàçàòåëü íà ñëåäóùóþ ñòðóêòóðó óçëà
189
///âçÿòü óêàçàòåëü íà ñëåäóùóþ ñòðóêòóðó óçëà
187
///input:
190
///input:
188
/// tlist - pointer to 'TreeList' struct
191
/// tlist - pointer to 'TreeList' struct
189
/// node_p - node param struct
192
/// node_p - node param struct
190
///output - pointer to next node struct or NULL
193
///output - pointer to next node struct or NULL
191
extern treelist_node* (*tl_node_poi_get_next_info)(treelist *, treelist_node*) __attribute__((__stdcall__));
194
extern treelist_node* (*tl_node_poi_get_next_info)(treelist *, treelist_node*) __attribute__((__stdcall__));
192
 
195
 
193
///;âçÿòü óêàçàòåëü íà äàííûå óçëà
196
///;âçÿòü óêàçàòåëü íà äàííûå óçëà
194
///input:
197
///input:
195
/// tlist - pointer to 'TreeList' struct
198
/// tlist - pointer to 'TreeList' struct
196
/// node_p - node param struct
199
/// node_p - node param struct
197
///output - pointer
200
///output - pointer
198
extern void* (*_tl_node_poi_get_data)(treelist *, treelist_node*) __attribute__((__stdcall__));
201
extern void* (*_tl_node_poi_get_data)(treelist *, treelist_node*) __attribute__((__stdcall__));
199
 
202
 
200
/// tlist - pointer to 'TreeList' struct
203
/// tlist - pointer to 'TreeList' struct
201
/// opt - options: 0 - first element, 1 - add next element
204
/// opt - options: 0 - first element, 1 - add next element
202
/// h_mem - pointer to memory
205
/// h_mem - pointer to memory
203
/// mem_size - memory size
206
/// mem_size - memory size
204
///output - error code
207
///output - error code
205
extern int (*tl_save_mem)(treelist *, int opt, void *h_mem, int mem_size) __attribute__((__stdcall__));
208
extern int (*tl_save_mem)(treelist *, int opt, void *h_mem, int mem_size) __attribute__((__stdcall__));
206
 
209
 
207
/**input:
210
/**input:
208
; tlist - pointer to 'TreeList' struct
211
; tlist - pointer to 'TreeList' struct
209
; opt   - options: element index + (2*(add mode)+(init mode)) shl 16, tl_load_mode_add        equ 0x20000 ;îïöèÿ ñ÷èòûâàíèÿ â ðåæèìå äîáàâëåíèÿ èíôîðìàöèè
212
; opt   - options: element index + (2*(add mode)+(init mode)) shl 16, tl_load_mode_add        equ 0x20000 ;îïöèÿ ñ÷èòûâàíèÿ â ðåæèìå äîáàâëåíèÿ èíôîðìàöèè
210
; h_mem - pointer to memory
213
; h_mem - pointer to memory
211
; mem_size - memory size
214
; mem_size - memory size
212
;   ðàçìåð ïàìÿòè, ïîêà íå èñïîëüçóåòñÿ (íàçíà÷àëñÿ äëÿ êîíòðîëÿ)
215
;   ðàçìåð ïàìÿòè, ïîêà íå èñïîëüçóåòñÿ (íàçíà÷àëñÿ äëÿ êîíòðîëÿ)
213
;   äëÿ åãî èñïîëüçîâàíèÿ íóæíî äîðàáîòàòü ôóíêöèþ
216
;   äëÿ åãî èñïîëüçîâàíèÿ íóæíî äîðàáîòàòü ôóíêöèþ
214
;output:
217
;output:
215
; eax - error code
218
; eax - error code
216
;memory header format:
219
;memory header format:
217
;  +0 - (4) 'tree'
220
;  +0 - (4) 'tree'
218
;  +4 - (2) info size
221
;  +4 - (2) info size
219
;  +6 - (4) count nodes
222
;  +6 - (4) count nodes
220
; +10 - (4) tlist style
223
; +10 - (4) tlist style
221
; +14 - (4) cursor pos
224
; +14 - (4) cursor pos
222
; +18 - (2) info capt offs
225
; +18 - (2) info capt offs
223
; +20 - (2) info capt len
226
; +20 - (2) info capt len
224
; +22 - (4) scroll pos
227
; +22 - (4) scroll pos
225
;memory data format:
228
;memory data format:
226
; +26 - (info size + 8) * count nodes */
229
; +26 - (info size + 8) * count nodes */
227
extern int (*_tl_load_mem)(treelist *, int opt, void *h_mem, int mem_size) __attribute__((__stdcall__));
230
extern int (*_tl_load_mem)(treelist *, int opt, void *h_mem, int mem_size) __attribute__((__stdcall__));
228
 
231
 
229
/// ;áåðåò ðàçìåð ïàìÿòè çàíÿòîé ôóíêöèåé tl_save_mem ïðè ñîõðàíåíèè ýëåìåíòîâ
232
/// ;áåðåò ðàçìåð ïàìÿòè çàíÿòîé ôóíêöèåé tl_save_mem ïðè ñîõðàíåíèè ýëåìåíòîâ
230
/// tlist - pointer to 'TreeList' struct
233
/// tlist - pointer to 'TreeList' struct
231
/// h_mem - pointer to saved memory
234
/// h_mem - pointer to saved memory
232
extern int (*tl_get_mem_size)(treelist *, void *h_mem) __attribute__((__stdcall__));
235
extern int (*tl_get_mem_size)(treelist *, void *h_mem) __attribute__((__stdcall__));
233
 
236
 
234
#endif //KOLIBRI_TREELIST_H
237
#endif //KOLIBRI_TREELIST_H