Subversion Repositories Kolibri OS

Rev

Rev 6466 | Rev 6479 | 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. /* GUI Elements being used */
  5. #include "kolibri_editbox.h"
  6. #include "kolibri_checkbox.h"
  7. #include "kolibri_button.h"
  8. #include "kolibri_progressbar.h"
  9. #include "kolibri_frame.h"
  10. #include "kolibri_scrollbar.h"
  11. #include "kolibri_statictext.h"
  12.  
  13. #define X_Y(x,y) (((x)<<16)|(y))
  14.  
  15. /* enum KOLIBRI_GUI_ELEMENT_TYPE contains all available GUI items from box_lib */
  16. /* More elements can be added from other libraries as required */
  17. enum KOLIBRI_GUI_ELEMENT_TYPE {
  18.   KOLIBRI_EDIT_BOX,
  19.   KOLIBRI_CHECK_BOX,
  20.   KOLIBRI_RADIO_BUTTON,
  21.   KOLIBRI_SCROLL_BAR_H,
  22.   KOLIBRI_SCROLL_BAR_V,
  23.   KOLIBRI_DYNAMIC_BUTTON,
  24.   KOLIBRI_MENU_BAR,
  25.   KOLIBRI_FILE_BROWSER,
  26.   KOLIBRI_TREE_LIST,
  27.   KOLIBRI_PATH_SHOW,
  28.   KOLIBRI_TEXT_EDITOR,
  29.   KOLIBRI_FRAME,
  30.   KOLIBRI_PROGRESS_BAR,
  31.   KOLIBRI_STATICTEXT,
  32.   KOLIBRI_STATICNUM,
  33.  
  34.   KOLIBRI_BUTTON,
  35.  
  36.   /* Add elements above this element in order to let KOLIBRI_NUM_GUI_ELEMENTS */
  37.   /* stay at correct value */
  38.  
  39.   KOLIBRI_NUM_GUI_ELEMENTS
  40. };
  41.  
  42. /* Linked list which connects together all the elements drawn inside a GUI window */
  43. typedef struct{
  44.   enum KOLIBRI_GUI_ELEMENT_TYPE type;
  45.   void *element;
  46.   void *next, *prev;
  47. }kolibri_window_element;
  48.  
  49. typedef void (*cb_elem_boxlib)(void *) __attribute__((__stdcall__));
  50.  
  51. /* Generic structure for supporting functions on various elements of Kolibri's GUI */
  52. typedef struct {
  53.         cb_elem_boxlib  redraw_fn;
  54.         cb_elem_boxlib  mouse_fn;
  55.         cb_elem_boxlib  key_fn;
  56. }kolibri_element_operations;
  57.  
  58. /* Structure for a GUI Window on Kolibri. It also contains all the elements drawn in window */
  59. typedef struct{
  60.   unsigned int topleftx, toplefty;
  61.   unsigned int sizex, sizey;
  62.   char *window_title;
  63.  
  64.   /* Refer to sysfuncs, value to be stored in EDX (Function 0) */
  65.   unsigned int XY;
  66.  
  67.   kolibri_window_element *elements;
  68. }kolibri_window;
  69.  
  70. /*---------------------End of Structure and enum definitions---------------*/
  71. /*---------------------Define various functions for initializing GUI-------*/
  72.  
  73. /* Master table containing operations for various GUI elements in one place */
  74. kolibri_element_operations kolibri_gui_op_table[KOLIBRI_NUM_GUI_ELEMENTS];
  75.  
  76. void kolibri_init_gui_op_table(void)
  77. {
  78. /* Setting up functions for edit box GUI elements*/
  79. kolibri_gui_op_table[KOLIBRI_EDIT_BOX].redraw_fn = (cb_elem_boxlib)edit_box_draw;
  80. kolibri_gui_op_table[KOLIBRI_EDIT_BOX].mouse_fn = (cb_elem_boxlib)edit_box_mouse;
  81. kolibri_gui_op_table[KOLIBRI_EDIT_BOX].key_fn = (cb_elem_boxlib)editbox_key;
  82.  
  83. /* Setting up functions for check box GUI elements*/
  84. kolibri_gui_op_table[KOLIBRI_CHECK_BOX].redraw_fn = (cb_elem_boxlib)check_box_draw2;
  85. kolibri_gui_op_table[KOLIBRI_CHECK_BOX].mouse_fn = (cb_elem_boxlib)check_box_mouse2;
  86. kolibri_gui_op_table[KOLIBRI_CHECK_BOX].key_fn = NULL;
  87.  
  88. /* Setting up functions for Kolibri Buttons ( SysFunc 8 )*/
  89. kolibri_gui_op_table[KOLIBRI_BUTTON].redraw_fn = (cb_elem_boxlib)draw_button;
  90. kolibri_gui_op_table[KOLIBRI_BUTTON].mouse_fn = NULL;
  91. kolibri_gui_op_table[KOLIBRI_BUTTON].key_fn = NULL;
  92.  
  93. /* Setting up functions for progress bar GUI elements*/
  94. kolibri_gui_op_table[KOLIBRI_PROGRESS_BAR].redraw_fn = (cb_elem_boxlib)progressbar_draw;
  95. kolibri_gui_op_table[KOLIBRI_PROGRESS_BAR].mouse_fn = NULL;
  96. kolibri_gui_op_table[KOLIBRI_PROGRESS_BAR].key_fn = NULL;
  97. debug_board_printf("PROGRESS (%x,%x,%x)\n", progressbar_draw,0,0);
  98.  
  99. /* Setting up functions for frame GUI elements*/
  100. kolibri_gui_op_table[KOLIBRI_FRAME].redraw_fn = (cb_elem_boxlib)frame_draw;
  101. kolibri_gui_op_table[KOLIBRI_FRAME].mouse_fn = NULL;
  102. kolibri_gui_op_table[KOLIBRI_FRAME].key_fn = NULL;
  103.  
  104. debug_board_printf("FRAME (%x,%x,%x)\n", frame_draw,0,0);
  105.  
  106.  
  107. /* scrollbars */
  108. kolibri_gui_op_table[KOLIBRI_SCROLL_BAR_H].redraw_fn = (cb_elem_boxlib)scrollbar_h_draw;
  109. kolibri_gui_op_table[KOLIBRI_SCROLL_BAR_H].mouse_fn = (cb_elem_boxlib)scrollbar_h_mouse;
  110. kolibri_gui_op_table[KOLIBRI_SCROLL_BAR_H].key_fn = NULL;
  111. debug_board_printf("SCROLL_H (%x,%x,%x)\n", scrollbar_h_draw,scrollbar_h_mouse,0);
  112.  
  113. kolibri_gui_op_table[KOLIBRI_SCROLL_BAR_V].redraw_fn = (cb_elem_boxlib)scrollbar_v_draw;
  114. kolibri_gui_op_table[KOLIBRI_SCROLL_BAR_V].mouse_fn = (cb_elem_boxlib)scrollbar_v_mouse;
  115. kolibri_gui_op_table[KOLIBRI_SCROLL_BAR_V].key_fn = NULL;
  116. debug_board_printf("SCROLL_V (%x,%x,%x)\n", scrollbar_v_draw,scrollbar_v_mouse,0);
  117.  
  118. kolibri_gui_op_table[KOLIBRI_STATICTEXT].redraw_fn = (cb_elem_boxlib)statictext_draw;
  119. kolibri_gui_op_table[KOLIBRI_STATICTEXT].mouse_fn = NULL;
  120. kolibri_gui_op_table[KOLIBRI_STATICTEXT].key_fn = NULL;
  121.  
  122. kolibri_gui_op_table[KOLIBRI_STATICNUM].redraw_fn = (cb_elem_boxlib)staticnum_draw;
  123. kolibri_gui_op_table[KOLIBRI_STATICNUM].mouse_fn = NULL;
  124. kolibri_gui_op_table[KOLIBRI_STATICNUM].key_fn = NULL;
  125. debug_board_printf("STATICNUM (%x,%x,%x)\n", staticnum_draw,0,0);
  126. }
  127.  
  128. /* Create a new main GUI window for KolibriOS */
  129. /* tl stands for TOP LEFT. x and y are coordinates. */
  130.  
  131. kolibri_window * kolibri_new_window(int tlx, int tly, int sizex, int sizey, char *title)
  132. {
  133.   kolibri_window *new_win = (kolibri_window *)malloc(sizeof(kolibri_window));
  134.  
  135.   new_win->topleftx = tlx;
  136.   new_win->toplefty = tly;
  137.   new_win->sizex = sizex;
  138.   new_win->sizey = sizey;
  139.   new_win->window_title = title;
  140.   new_win->XY = 0x00000013; /* All windows are skinned windows with caption for now */
  141.   new_win->elements = NULL;
  142.  
  143.   return new_win;
  144. }
  145.  
  146. /* Add an element to an existing window */
  147. void kolibri_window_add_element(kolibri_window *some_window, enum KOLIBRI_GUI_ELEMENT_TYPE element_type, void *some_gui_element)
  148. {
  149.   kolibri_window_element *new_element = (kolibri_window_element *)malloc(sizeof(kolibri_window_element));
  150.  
  151.   new_element -> type = element_type;
  152.   new_element -> element = some_gui_element;
  153.  
  154.   if(!(some_window->elements)) /* No elements in window yet */
  155.     {
  156.       some_window->elements = new_element;
  157.       some_window->elements -> prev = some_window->elements;
  158.       some_window->elements -> next = some_window->elements;
  159.     }
  160.   else
  161.     {
  162.       kolibri_window_element *last_element = some_window -> elements -> prev;
  163.  
  164.       last_element -> next = new_element;
  165.       new_element -> next = some_window -> elements; /* start of linked list  */
  166.       some_window -> elements -> prev = new_element;
  167.       new_element -> prev = last_element;
  168.     }
  169. }
  170.  
  171. #endif /* KOLIBRI_GUI_ELEMENTS_H */
  172.