diff options
Diffstat (limited to 'frontends/kolibrios/kolibri_gui_elements.h')
-rw-r--r-- | frontends/kolibrios/kolibri_gui_elements.h | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/frontends/kolibrios/kolibri_gui_elements.h b/frontends/kolibrios/kolibri_gui_elements.h new file mode 100644 index 000000000..d82b734af --- /dev/null +++ b/frontends/kolibrios/kolibri_gui_elements.h @@ -0,0 +1,126 @@ +#ifndef KOLIBRI_GUI_ELEMENTS_H +#define KOLIBRI_GUI_ELEMENTS_H + +/* GUI Elements being used */ +#include "kolibri_editbox.h" +#include "kolibri_checkbox.h" +#include "kolibri_button.h" + +/* enum KOLIBRI_GUI_ELEMENT_TYPE contains all available GUI items from box_lib */ +/* More elements can be added from other libraries as required */ +enum KOLIBRI_GUI_ELEMENT_TYPE { + KOLIBRI_EDIT_BOX, + KOLIBRI_CHECK_BOX, + KOLIBRI_RADIO_BUTTON, + KOLIBRI_SCROLL_BAR, + KOLIBRI_DYNAMIC_BUTTON, + KOLIBRI_MENU_BAR, + KOLIBRI_FILE_BROWSER, + KOLIBRI_TREE_LIST, + KOLIBRI_PATH_SHOW, + KOLIBRI_TEXT_EDITOR, + KOLIBRI_FRAME, + KOLIBRI_PROGRESS_BAR, + + KOLIBRI_BUTTON, + + /* Add elements above this element in order to let KOLIBRI_NUM_GUI_ELEMENTS */ + /* stay at correct value */ + + KOLIBRI_NUM_GUI_ELEMENTS +}; + +/* Linked list which connects together all the elements drawn inside a GUI window */ +struct kolibri_window_element { + enum KOLIBRI_GUI_ELEMENT_TYPE type; + void *element; + struct kolibri_window_element *next, *prev; +}; + +/* Generic structure for supporting functions on various elements of Kolibri's GUI */ +struct kolibri_element_operations { + void (*redraw_fn)(void *); + void (*mouse_fn)(void *); + void (*key_fn)(void *); +}; + +/* Structure for a GUI Window on Kolibri. It also contains all the elements drawn in window */ +struct kolibri_window { + unsigned int topleftx, toplefty; + unsigned int sizex, sizey; + char *window_title; + + /* Refer to sysfuncs, value to be stored in EDX (Function 0) */ + unsigned int XY; + + struct kolibri_window_element *elements; +}; + +/*---------------------End of Structure and enum definitions---------------*/ +/*---------------------Define various functions for initializing GUI-------*/ + +/* Master table containing operations for various GUI elements in one place */ +struct kolibri_element_operations kolibri_gui_op_table[KOLIBRI_NUM_GUI_ELEMENTS]; + +void kolibri_init_gui_op_table(void) +{ +/* Setting up functions for edit box GUI elements*/ +kolibri_gui_op_table[KOLIBRI_EDIT_BOX].redraw_fn = edit_box_draw; +kolibri_gui_op_table[KOLIBRI_EDIT_BOX].mouse_fn = edit_box_mouse; +kolibri_gui_op_table[KOLIBRI_EDIT_BOX].key_fn = editbox_key; + +/* Setting up functions for check box GUI elements*/ +kolibri_gui_op_table[KOLIBRI_CHECK_BOX].redraw_fn = check_box_draw2; +kolibri_gui_op_table[KOLIBRI_CHECK_BOX].mouse_fn = check_box_mouse2; +kolibri_gui_op_table[KOLIBRI_CHECK_BOX].key_fn = NULL; + +/* Setting up functions for Kolibri Buttons ( SysFunc 8 )*/ +kolibri_gui_op_table[KOLIBRI_BUTTON].redraw_fn = draw_button; +kolibri_gui_op_table[KOLIBRI_BUTTON].mouse_fn = NULL; +kolibri_gui_op_table[KOLIBRI_BUTTON].key_fn = NULL; +} + +/* Create a new main GUI window for KolibriOS */ +/* tl stands for TOP LEFT. x and y are coordinates. */ + +struct kolibri_window * kolibri_new_window(int tlx, int tly, int sizex, int sizey, char *title) +{ + struct kolibri_window *new_win = (struct kolibri_window *)malloc(sizeof(struct kolibri_window)); + + new_win->topleftx = tlx; + new_win->toplefty = tly; + new_win->sizex = sizex; + new_win->sizey = sizey; + new_win->window_title = title; + new_win->XY = 0x00000013; /* All windows are skinned windows with caption for now */ + new_win->elements = NULL; + + return new_win; +} + +/* Add an element to an existing window */ +void kolibri_window_add_element(struct kolibri_window *some_window, enum KOLIBRI_GUI_ELEMENT_TYPE element_type, void *some_gui_element) +{ + struct kolibri_window_element *new_element = (struct kolibri_window_element *)malloc(sizeof(struct kolibri_window_element)); + + new_element -> type = element_type; + new_element -> element = some_gui_element; + + if(!(some_window->elements)) /* No elements in window yet */ + { + some_window->elements = new_element; + some_window->elements -> prev = some_window->elements; + some_window->elements -> next = some_window->elements; + } + else + { + struct kolibri_window_element *last_element = some_window -> elements -> prev; + + last_element -> next = new_element; + new_element -> next = some_window -> elements; /* start of linked list */ + some_window -> elements -> prev = new_element; + new_element -> prev = last_element; + } +} + +#endif /* KOLIBRI_GUI_ELEMENTS_H */ |