Subversion Repositories Kolibri OS

Rev

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

  1. #ifndef KOLIBRI_GUI_ELEMENTS_H
  2. #define KOLIBRI_GUI_ELEMENTS_H
  3.  
  4. #include "kolibri_colors.h"
  5.  
  6. /* enum KOLIBRI_GUI_ELEMENT_TYPE contains all available GUI items from box_lib */
  7. /* More elements can be added from other libraries as required */
  8. enum KOLIBRI_GUI_ELEMENT_TYPE {
  9.   KOLIBRI_EDIT_BOX,
  10.   KOLIBRI_CHECK_BOX,
  11.   KOLIBRI_OPTIONGROUP,
  12.   KOLIBRI_SCROLL_BAR_H,
  13.   KOLIBRI_SCROLL_BAR_V,
  14.   KOLIBRI_DYNAMIC_BUTTON,
  15.   KOLIBRI_MENU_BAR,
  16.   KOLIBRI_FILE_BROWSER,
  17.   KOLIBRI_TREE_LIST,
  18.   KOLIBRI_PATH_SHOW,
  19.   KOLIBRI_TEXT_EDITOR,
  20.   KOLIBRI_FRAME,
  21.   KOLIBRI_PROGRESS_BAR,
  22.   KOLIBRI_STATICTEXT,
  23.   KOLIBRI_STATICNUM,
  24.   KOLIBRI_BUTTON,
  25.   KOLIBRI_D_BUTTON,
  26.   KOLIBRI_PATHSHOW,
  27.   KOLIBRI_FILEBROWSE,
  28.   KOLIBRI_EDITOR,
  29.   KOLIBRI_TREELIST,
  30.  
  31.   /* Add elements above this element in order to let KOLIBRI_NUM_GUI_ELEMENTS */
  32.   /* stay at correct value */
  33.  
  34.   KOLIBRI_NUM_GUI_ELEMENTS
  35. };
  36.  
  37. #define X_Y(x,y) (((x)<<16)|(y))
  38.  
  39. /* Linked list which connects together all the elements drawn inside a GUI window */
  40. typedef struct{
  41.   enum KOLIBRI_GUI_ELEMENT_TYPE type;
  42.   void *element;
  43.   void *next, *prev;
  44. }kolibri_window_element;
  45.  
  46. typedef void (*cb_elem_boxlib)(void *) __attribute__((__stdcall__));
  47.  
  48. /* Generic structure for supporting functions on various elements of Kolibri's GUI */
  49. typedef struct {
  50.         cb_elem_boxlib  redraw_fn;
  51.         cb_elem_boxlib  mouse_fn;
  52.         cb_elem_boxlib  key_fn;
  53. }kolibri_element_operations;
  54.  
  55. /* Structure for a GUI Window on Kolibri. It also contains all the elements drawn in window */
  56. typedef struct{
  57.   unsigned int topleftx, toplefty;
  58.   unsigned int sizex, sizey;
  59.   char *window_title;
  60.  
  61.   /* Refer to sysfuncs, value to be stored in EDX (Function 0) */
  62.   unsigned int XY;
  63.  
  64.   kolibri_window_element *elements;
  65. }kolibri_window;
  66.  
  67. /*---------------------End of Structure and enum definitions---------------*/
  68.  
  69. void kolibri_window_add_element(kolibri_window *some_window, enum KOLIBRI_GUI_ELEMENT_TYPE element_type, void *some_gui_element); // forward declaration
  70.  
  71. /* GUI Elements being used */
  72. #include "kolibri_button.h"
  73. #include "kolibri_checkbox.h"
  74. #include "kolibri_d_button.h"
  75. #include "kolibri_editbox.h"
  76. #include "kolibri_frame.h"
  77. #include "kolibri_menubar.h"
  78. #include "kolibri_optionbox.h"
  79. #include "kolibri_pathshow.h"
  80. #include "kolibri_progressbar.h"
  81. #include "kolibri_scrollbar.h"
  82. #include "kolibri_statictext.h"
  83. #include "kolibri_filebrowse.h"
  84. #include "kolibri_editor.h"
  85. #include "kolibri_treelist.h"
  86.  
  87.  
  88. /*---------------------Define various functions for initializing GUI-------*/
  89.  
  90. /* Master table containing operations for various GUI elements in one place */
  91. kolibri_element_operations kolibri_gui_op_table[KOLIBRI_NUM_GUI_ELEMENTS];
  92.  
  93. void kolibri_init_gui_op_table(void)
  94. {
  95. /* Setting up functions for edit box GUI elements*/
  96. kolibri_gui_op_table[KOLIBRI_EDIT_BOX].redraw_fn = (cb_elem_boxlib)edit_box_draw;
  97. kolibri_gui_op_table[KOLIBRI_EDIT_BOX].mouse_fn = (cb_elem_boxlib)edit_box_mouse;
  98. kolibri_gui_op_table[KOLIBRI_EDIT_BOX].key_fn = (cb_elem_boxlib)editbox_key;
  99.  
  100. /* Setting up functions for check box GUI elements*/
  101. kolibri_gui_op_table[KOLIBRI_CHECK_BOX].redraw_fn = (cb_elem_boxlib)check_box_draw2;
  102. kolibri_gui_op_table[KOLIBRI_CHECK_BOX].mouse_fn = (cb_elem_boxlib)check_box_mouse2;
  103. kolibri_gui_op_table[KOLIBRI_CHECK_BOX].key_fn = NULL;
  104.  
  105. /* Setting up functions for Kolibri Buttons ( SysFunc 8 )*/
  106. kolibri_gui_op_table[KOLIBRI_BUTTON].redraw_fn = (cb_elem_boxlib)draw_button;
  107. kolibri_gui_op_table[KOLIBRI_BUTTON].mouse_fn = NULL;
  108. kolibri_gui_op_table[KOLIBRI_BUTTON].key_fn = NULL;
  109.  
  110. /* Setting up functions for progress bar GUI elements*/
  111. kolibri_gui_op_table[KOLIBRI_PROGRESS_BAR].redraw_fn = (cb_elem_boxlib)progressbar_draw;
  112. kolibri_gui_op_table[KOLIBRI_PROGRESS_BAR].mouse_fn = NULL;
  113. kolibri_gui_op_table[KOLIBRI_PROGRESS_BAR].key_fn = NULL;
  114.  
  115. /* Setting up functions for frame GUI elements*/
  116. kolibri_gui_op_table[KOLIBRI_FRAME].redraw_fn = (cb_elem_boxlib)frame_draw;
  117. kolibri_gui_op_table[KOLIBRI_FRAME].mouse_fn = NULL;
  118. kolibri_gui_op_table[KOLIBRI_FRAME].key_fn = NULL;
  119.  
  120. /* scrollbars */
  121. kolibri_gui_op_table[KOLIBRI_SCROLL_BAR_H].redraw_fn = (cb_elem_boxlib)scrollbar_h_draw;
  122. kolibri_gui_op_table[KOLIBRI_SCROLL_BAR_H].mouse_fn = (cb_elem_boxlib)scrollbar_h_mouse;
  123. kolibri_gui_op_table[KOLIBRI_SCROLL_BAR_H].key_fn = NULL;
  124.  
  125. kolibri_gui_op_table[KOLIBRI_SCROLL_BAR_V].redraw_fn = (cb_elem_boxlib)scrollbar_v_draw;
  126. kolibri_gui_op_table[KOLIBRI_SCROLL_BAR_V].mouse_fn = (cb_elem_boxlib)scrollbar_v_mouse;
  127. kolibri_gui_op_table[KOLIBRI_SCROLL_BAR_V].key_fn = NULL;
  128.  
  129. kolibri_gui_op_table[KOLIBRI_STATICTEXT].redraw_fn = (cb_elem_boxlib)statictext_draw;
  130. kolibri_gui_op_table[KOLIBRI_STATICTEXT].mouse_fn = NULL;
  131. kolibri_gui_op_table[KOLIBRI_STATICTEXT].key_fn = NULL;
  132.  
  133. kolibri_gui_op_table[KOLIBRI_STATICNUM].redraw_fn = (cb_elem_boxlib)staticnum_draw;
  134. kolibri_gui_op_table[KOLIBRI_STATICNUM].mouse_fn = NULL;
  135. kolibri_gui_op_table[KOLIBRI_STATICNUM].key_fn = NULL;
  136.  
  137. kolibri_gui_op_table[KOLIBRI_OPTIONGROUP].redraw_fn = (cb_elem_boxlib)option_box_draw;
  138. kolibri_gui_op_table[KOLIBRI_OPTIONGROUP].mouse_fn = (cb_elem_boxlib)option_box_mouse;
  139. kolibri_gui_op_table[KOLIBRI_OPTIONGROUP].key_fn = NULL;
  140.  
  141. kolibri_gui_op_table[KOLIBRI_MENU_BAR].redraw_fn = (cb_elem_boxlib)menu_bar_draw;
  142. kolibri_gui_op_table[KOLIBRI_MENU_BAR].mouse_fn = (cb_elem_boxlib)menu_bar_mouse;
  143. kolibri_gui_op_table[KOLIBRI_MENU_BAR].key_fn = NULL;
  144.  
  145. kolibri_gui_op_table[KOLIBRI_D_BUTTON].redraw_fn = (cb_elem_boxlib)dynamic_button_draw;
  146. kolibri_gui_op_table[KOLIBRI_D_BUTTON].mouse_fn = (cb_elem_boxlib)dynamic_button_mouse;
  147. kolibri_gui_op_table[KOLIBRI_D_BUTTON].key_fn = NULL;
  148.  
  149. kolibri_gui_op_table[KOLIBRI_PATHSHOW].redraw_fn = (cb_elem_boxlib)path_show_draw;
  150. kolibri_gui_op_table[KOLIBRI_PATHSHOW].mouse_fn = NULL;
  151. kolibri_gui_op_table[KOLIBRI_PATHSHOW].key_fn = NULL;
  152.  
  153. kolibri_gui_op_table[KOLIBRI_FILEBROWSE].redraw_fn = (cb_elem_boxlib)filebrowse_draw;
  154. kolibri_gui_op_table[KOLIBRI_FILEBROWSE].mouse_fn = (cb_elem_boxlib)filebrowse_mouse;
  155. kolibri_gui_op_table[KOLIBRI_FILEBROWSE].key_fn = (cb_elem_boxlib)filebrowse_key;
  156.  
  157. kolibri_gui_op_table[KOLIBRI_EDITOR].redraw_fn = (cb_elem_boxlib)ted_draw;
  158. kolibri_gui_op_table[KOLIBRI_EDITOR].mouse_fn = (cb_elem_boxlib)ted_mouse;
  159. kolibri_gui_op_table[KOLIBRI_EDITOR].key_fn = (cb_elem_boxlib)editor_key;
  160. debug_board_printf("KOLIBRI_EDITOR (%x,%x,%x)\n", ted_draw, ted_mouse, editor_key);
  161.  
  162. kolibri_gui_op_table[KOLIBRI_TREELIST].redraw_fn = (cb_elem_boxlib)tl_draw;
  163. kolibri_gui_op_table[KOLIBRI_TREELIST].mouse_fn = (cb_elem_boxlib)tl_mouse;
  164. kolibri_gui_op_table[KOLIBRI_TREELIST].key_fn = (cb_elem_boxlib)treelist_key;
  165. debug_board_printf("KOLIBRI_TREELIST (%x,%x,%x)\n", tl_draw, tl_mouse, treelist_key);
  166. }
  167.  
  168. /* Create a new main GUI window for KolibriOS */
  169. /* tl stands for TOP LEFT. x and y are coordinates. */
  170.  
  171. kolibri_window * kolibri_new_window(int tlx, int tly, int sizex, int sizey, char *title)
  172. {
  173.   kolibri_window *new_win = (kolibri_window *)malloc(sizeof(kolibri_window));
  174.  
  175.   new_win->topleftx = tlx;
  176.   new_win->toplefty = tly;
  177.   new_win->sizex = sizex;
  178.   new_win->sizey = sizey;
  179.   new_win->window_title = title;
  180.   new_win->XY = 0x33;
  181.   new_win->elements = NULL;
  182.  
  183.   return new_win;
  184. }
  185.  
  186. /* Add an element to an existing window */
  187. void kolibri_window_add_element(kolibri_window *some_window, enum KOLIBRI_GUI_ELEMENT_TYPE element_type, void *some_gui_element)
  188. {
  189.   kolibri_window_element *new_element = (kolibri_window_element *)malloc(sizeof(kolibri_window_element));
  190.  
  191.   new_element -> type = element_type;
  192.   new_element -> element = some_gui_element;
  193.  
  194.   if(!(some_window->elements)) /* No elements in window yet */
  195.     {
  196.       some_window->elements = new_element;
  197.       some_window->elements -> prev = some_window->elements;
  198.       some_window->elements -> next = some_window->elements;
  199.     }
  200.   else
  201.     {
  202.       kolibri_window_element *last_element = some_window -> elements -> prev;
  203.  
  204.       last_element -> next = new_element;
  205.       new_element -> next = some_window -> elements; /* start of linked list  */
  206.       some_window -> elements -> prev = new_element;
  207.       new_element -> prev = last_element;
  208.     }
  209. }
  210.  
  211. #endif /* KOLIBRI_GUI_ELEMENTS_H */
  212.