Subversion Repositories Kolibri OS

Rev

Rev 6615 | Blame | Compare with Previous | Last modification | View Log | RSS feed

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