From 955a281630ec2b3dd75cb708d69f788afca6a049 Mon Sep 17 00:00:00 2001 From: Olliver Schinagl Date: Mon, 30 Mar 2015 22:57:50 +0200 Subject: some cleanups and fix naviframe, yay --- src/eulogium.c | 389 ++++++++++++++++++++++++++++++++++++--------------------- src/eulogium.h | 38 ++++++ 2 files changed, 284 insertions(+), 143 deletions(-) create mode 100644 src/eulogium.h diff --git a/src/eulogium.c b/src/eulogium.c index 6d18a59..c168f9f 100644 --- a/src/eulogium.c +++ b/src/eulogium.c @@ -13,48 +13,50 @@ #include "gettext.h" +#include "eulogium.h" + #define COPYRIGHT "Copyright © 2015 Olliver Schinagl and various contributors (see AUTHORS)." -#define EULOGIUM_ICON_DIR_SMALL "images/icon_dir_small.png" +void eulogium_button_cb_set(struct button_def *button, struct button_cb *cb) +{ + if (cb && button) + button->cb = *cb; +} -struct eulogium_data { - Evas_Object *window; - Evas_Object *content_next; - Evas_Object *content_cur; - Evas_Object *content_prev; - Evas_Object *flip; -}; +void eulogium_button_cb_data_set(struct button_def *button, void *data) +{ + if (data && button) + button->cb.data = data; +} -struct button_cb { - void (*func)(void *data, Evas_Object *obj, void *event_info); - void *data; - const char *info; -}; +void eulogium_button_data_set(struct button_def *button, void *data) +{ + if (data && button) + button->data = data; +} -struct button_def { - const char *text; - struct button_cb cb; - void *data; -}; +void eulogium_filepath_set(struct eulogium_data *eulogium, char *filepath) +{ + if (filepath && eulogium) + eulogium->filepath = filepath; +} -/* test function to map try to mouse button th emit a click event */ -static void _cb_eulogium_input_button(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +/* test function to map try to mouse button to emit a click event */ +static void _cb_eulogium_input_button(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) { -// Evas_Event_Mouse_Down *ev = event_info; - struct eulogium_data *eulogium = data; + Evas_Event_Mouse_Down *ev = event_info; +// struct eulogium_data *eulogium = data; - elm_flip_interaction_set(eulogium->flip, ELM_FLIP_INTERACTION_ROTATE); - elm_flip_go(eulogium->flip, ELM_FLIP_ROTATE_Y_CENTER_AXIS); -// printf("Button: %d\n", ev->button); -// if (ev->button == 2) { + printf("Button: %d\n", ev->button); + if (ev->button == 2) { // /* Broken */ // focused = elm_object_focused_object_get((Evas_Object *)data); // elm_object_signal_emit(focused, "mouse,down,1", "event"); /* TODO does not work */ // printf("Object: 0x%p\n", focused); -// } else { + } else { // /* TODO: remove if we know the button event from the rotary encoder */ // printf("Button: %d\n", ev->button); -// } + } } /* Function to make the Z-axis of any wheel focus the next/previous focusable widget */ @@ -86,64 +88,127 @@ static void _cb_eulogium_exit(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUS elm_exit(); } -/* Buttons */ -static struct button_def but_print = { - .text = "PRINT", - .cb = { - .func = &_cb_eulogium_button, - .data = NULL, - .info = "print button pressed", - }, - .data = NULL, -}; +Evas_Object *eulogium_print_progress(struct eulogium_data *eulogium) +{ + Evas_Object *table; + Evas_Object *object; -static struct button_def but_material = { - .text = "MATERIAL", - .cb = { - .func = &_cb_eulogium_button, - .data = NULL, - .info = "matterial button pressed", - }, - .data = NULL, -}; + table = elm_table_add(eulogium->layout); + elm_table_homogeneous_set(table, EINA_FALSE); -static struct button_def but_maintanance = { - .text = "MAINTANANCE", - .cb = { - .func = &_cb_eulogium_button, - .data = NULL, - .info = "maintanance button pressed", - }, - .data = NULL, + object = elm_label_add(table); + elm_object_text_set(object, "Print time remaining \%d hours."); + evas_object_show(object); + elm_table_pack(table, object, 0, 0, 3, 1); + + object = elm_label_add(table); + elm_object_text_set(object, "Random info."); + evas_object_show(object); + elm_table_pack(table, object, 0, 1, 3, 1); + + object = elm_label_add(table); + elm_object_text_set(object, "File: \%s."); + evas_object_show(object); + elm_table_pack(table, object, 0, 2, 3, 1); + + object = elm_progressbar_add(table); + evas_object_show(object); + elm_table_pack(table, object, 0, 3, 3, 1); + +#if 0 /* FIXME use themed seperator */ + object = elm_separator_add(eulogium->layout); + elm_separator_horizontal_set(object, EINA_TRUE); + evas_object_show(object); + elm_table_pack(table, object, 0, 4, 3, 1); +#else + object = evas_object_rectangle_add(evas_object_evas_get(eulogium->layout)); + evas_object_color_set(object, 0x33, 0x99, 0xff, 0xff); + evas_object_size_hint_min_set(object, 0, 1); + evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(object, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(object); + elm_table_pack(table, object, 0, 4, 3, 1); +#endif + + object = elm_button_add(table); + elm_object_text_set(object, "TUNE"); + evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(object, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(object); + elm_table_pack(table, object, 0, 5, 1, 1); + +#if 0 /* FIXME use themed seperator */ + object = elm_separator_add(eulogium->layout); + elm_separator_horizontal_set(object, EINA_TRUE); + evas_object_show(object); + elm_table_pack(table, object, 1, 5, 1, 1); +#else + object = evas_object_rectangle_add(evas_object_evas_get(eulogium->layout)); + evas_object_color_set(object, 0x33, 0x99, 0xff, 0xff); + evas_object_size_hint_min_set(object, 1, 0); + evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(object, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(object); + elm_table_pack(table, object, 1, 5, 1, 1); +#endif + + object = elm_button_add(table); + elm_object_text_set(object, "PAUSE"); + evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(object, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(object); + elm_table_pack(table, object, 2, 5, 1, 1); + + return table; +} + +/* Uglyness due to a 'shortcomming' of elm_list sorted insert using 1 data var for both funcs */ +struct _filelist_sort { + struct eulogium_data *eulogium; + char *filepath; }; -static void _cb_run_chosen_file(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +static void _cb_select_file(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { + char *filepath = ((struct _filelist_sort *)data)->filepath; + struct eulogium_data *eulogium = ((struct _filelist_sort *)data)->eulogium; + Evas_Object *content; + + eulogium->filepath = filepath; /* TODO: can we set this higher up the chain? not likely. */ + if (ecore_file_is_dir(filepath)) { + content = eulogium_print_menu(eulogium); /* TODO: maybe path as parameter was not bad */ + } else { + content = eulogium_print_progress(eulogium); + } + elm_naviframe_item_simple_push(eulogium->layout, content); } -static int _cb_dirfile_sort(const void *data1,const void *data2) +static int _cb_dirfile_sort(const void *data1, const void *data2) { - const char *file1 = elm_object_item_data_get(data1); - const char *file2 = elm_object_item_data_get(data2); - if (!file1) + const char *filepath1 = ((struct _filelist_sort *)elm_object_item_data_get(data1))->filepath; + const char *filepath2 = ((struct _filelist_sort *)elm_object_item_data_get(data2))->filepath; + + if (!filepath1) return 1; - if (!file2) + if (!filepath2) return -1; - if (ecore_file_is_dir(file1) != (ecore_file_is_dir(file2))) { - return (ecore_file_is_dir(file1) ? -1 : 1); + if (ecore_file_is_dir(filepath1) != (ecore_file_is_dir(filepath2))) { + return (ecore_file_is_dir(filepath1) ? -1 : 1); } - return strcoll(file1, file2); + return strcoll(filepath1, filepath2); } static void _cb_populate_filelist(const char *name, const char *path, void *data) { - Evas_Object *list = (Evas_Object *)data; + struct eulogium_data *eulogium = data; + Evas_Object *list = (Evas_Object *)eulogium->data; Evas_Object *icon; Elm_Object_Item *list_item; char *filepath; uint_fast32_t dir_len; uint_fast8_t hidden_visible = 1; + struct _filelist_sort *filelist_sort; if (hidden_visible && (name[0] == '.')) return; @@ -159,51 +224,60 @@ static void _cb_populate_filelist(const char *name, const char *path, void *data elm_icon_standard_set(icon, "file"); elm_image_resizable_set(icon, EINA_FALSE, EINA_FALSE); - list_item = elm_list_item_sorted_insert(list, name, icon, NULL, _cb_run_chosen_file, filepath, _cb_dirfile_sort); - elm_list_item_show(list_item); + filelist_sort = malloc(sizeof(struct _filelist_sort)); + filelist_sort->eulogium = eulogium; + filelist_sort->filepath = filepath; + list_item = elm_list_item_sorted_insert(list, name, icon, NULL, _cb_select_file, filelist_sort, _cb_dirfile_sort); +// free(filepath); & filelist_sort /* TODO is this required?, yes! / + elm_list_item_show(list_item); /* TODO: seems not needed? */ } -static void _cb_filelist_bottom(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +#if 0 +static void _cb_filelist_bottom(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) { Evas_Object *list = data; elm_list_item_bring_in(elm_list_first_item_get(list)); } -static void _cb_filelist_top(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +static void _cb_filelist_top(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) { Evas_Object *list = data; elm_list_item_bring_in(elm_list_last_item_get(list)); } +#endif -static void _cb_filelist_bringin(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +static void _cb_content_prev_set(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) { - Evas_Object *list = event_info; + struct eulogium_data *eulogium = data; - printf("pow\n"); + elm_naviframe_item_pop(eulogium->layout); } -static Evas_Object *eulogium_print_menu(Evas_Object *window, const char *path) +Evas_Object *eulogium_print_menu(struct eulogium_data *eulogium) { Evas_Object *box; Evas_Object *list; Evas_Object *icon; - box = elm_box_add(window); - list = elm_list_add(window); + box = elm_table_add(eulogium->layout); + list = elm_list_add(box); evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_list_multi_select_set(list, EINA_FALSE); elm_scroller_bounce_set(list, EINA_FALSE, EINA_FALSE); elm_list_mode_set(list, ELM_LIST_COMPRESS); - elm_box_pack_end(box, list); + elm_table_pack(box, list, 0, 0, 1, 1); - eina_file_dir_list(path, EINA_FALSE, _cb_populate_filelist, list); + eulogium->data = (void *)list; + eina_file_dir_list(eulogium->filepath, EINA_FALSE, _cb_populate_filelist, eulogium); + eulogium->data = NULL; icon = elm_icon_add(list); elm_icon_standard_set(icon, "home"); - elm_list_item_insert_before(list, elm_list_first_item_get(list), "RETURN", icon, NULL, NULL, NULL); + elm_list_item_prepend(list, "RETURN", icon, NULL, _cb_content_prev_set, eulogium); /* XXX TODO: when we pop the filelist from the stack, who calls elm_list_free();? */ + elm_list_go(list); // evas_object_smart_callback_add(list, "edge,bottom", _cb_filelist_bottom, list); // evas_object_smart_callback_add(list, "edge,top", _cb_filelist_top, list); @@ -211,32 +285,32 @@ static Evas_Object *eulogium_print_menu(Evas_Object *window, const char *path) // evas_object_smart_callback_add(list, "longpressed", _cb_filelist_filedetails, NULL); /* TODO, use inwin */ evas_object_show(list); + evas_object_show(box); return box; }; -static Evas_Object *eulogium_tripple_button_menu(Evas_Object *window, - struct button_def *left, struct button_def *right EINA_UNUSED, struct button_def *bottom EINA_UNUSED) +Evas_Object *eulogium_tripple_button_menu(struct eulogium_data *eulogium, + const struct button_def *left, const struct button_def *right, const struct button_def *bottom) { Evas_Object *table; Evas_Object *object; - table = elm_table_add(window); + table = elm_table_add(eulogium->layout); elm_table_homogeneous_set(table, EINA_FALSE); - evas_object_show(table); - object = elm_button_add(window); + object = elm_button_add(table); elm_object_text_set(object, left->text); - evas_object_smart_callback_add(object, "clicked", left->cb.func, left); + evas_object_smart_callback_add(object, "clicked", left->cb.func, left->cb.data); evas_object_show(object); elm_table_pack(table, object, 0, 0, 1, 1); #if 0 /* FIXME use themed seperator */ - object = elm_separator_add(window); + object = elm_separator_add(table); elm_separator_horizontal_set(object, EINA_TRUE); evas_object_show(object); elm_table_pack(table, object, 1, 0, 1, 1); #else - object = evas_object_rectangle_add(evas_object_evas_get(window)); + object = evas_object_rectangle_add(table); evas_object_color_set(object, 0x33, 0x99, 0xff, 0xff); evas_object_size_hint_min_set(object, 1, 0); evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -245,19 +319,19 @@ static Evas_Object *eulogium_tripple_button_menu(Evas_Object *window, elm_table_pack(table, object, 1, 0, 1, 1); #endif - object = elm_button_add(window); + object = elm_button_add(table); elm_object_text_set(object, right->text); - evas_object_smart_callback_add(object, "clicked", right->cb.func, right); + evas_object_smart_callback_add(object, "clicked", right->cb.func, right->cb.data); evas_object_show(object); elm_table_pack(table, object, 2, 0, 1, 1); #if 0 /* FIXME use themed seperator */ - object = elm_separator_add(window); + object = elm_separator_add(table); elm_separator_horizontal_set(object, EINA_TRUE); evas_object_show(object); elm_table_pack(table, object, 0, 1, 3, 1); #else - object = evas_object_rectangle_add(evas_object_evas_get(window)); + object = evas_object_rectangle_add(table); evas_object_color_set(object, 0x33, 0x99, 0xff, 0xff); evas_object_size_hint_min_set(object, 0, 1); evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -266,60 +340,88 @@ static Evas_Object *eulogium_tripple_button_menu(Evas_Object *window, elm_table_pack(table, object, 0, 1, 3, 1); #endif - object = elm_button_add(window); + object = elm_button_add(table); elm_object_text_set(object, bottom->text); - evas_object_smart_callback_add(object, "clicked", bottom->cb.func, bottom); + evas_object_smart_callback_add(object, "clicked", bottom->cb.func, bottom->cb.data); evas_object_show(object); elm_table_pack(table, object, 0, 2, 3, 1); + evas_object_show(table); return table; } -static Evas_Object *eulogium_menu(struct eulogium_data *eulogium) +static void _cb_button_main_print(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) { - Evas_Object *rect, *rect2; - Evas_Object *flip = eulogium->flip; + struct eulogium_data *eulogium = data; + Evas_Object *content; - eulogium->flip = elm_flip_add(eulogium->window); - if (!flip) - return NULL; + /* TODO: add intermediate window to list drive/youmagine */ + content = eulogium_print_menu(eulogium); + elm_naviframe_item_simple_push(eulogium->layout, content); +} + +/* Buttons */ +static struct button_def but_main_print = { + .text = "PRINT", + .cb = { + .func = &_cb_button_main_print, + .data = NULL, + .info = "print button pressed", + }, + .data = NULL, +}; - rect = evas_object_rectangle_add(evas_object_evas_get(eulogium->window)); - evas_object_color_set(rect, 0, 0, 255, 255); - evas_object_show(rect); +static struct button_def but_main_material = { + .text = "MATERIAL", + .cb = { + .func = &_cb_eulogium_button, + .data = NULL, + .info = "matterial button pressed", + }, + .data = NULL, +}; - rect2 = evas_object_rectangle_add(evas_object_evas_get(eulogium->window)); - evas_object_color_set(rect2, 0, 255, 0, 255); - evas_object_show(rect2); +static struct button_def but_main_maintanance = { + .text = "MAINTANANCE", + .cb = { + .func = &_cb_eulogium_button, + .data = NULL, + .info = "maintanance button pressed", + }, + .data = NULL, +}; - elm_object_part_content_set(eulogium->flip, "front", rect); - elm_object_part_content_set(eulogium->flip, "back", rect2); - evas_object_show(flip); +Evas_Object *eulogium_main_menu(Evas_Object *window, struct eulogium_data *eulogium) +{ + Evas_Object *content; - elm_flip_interaction_set(flip, ELM_FLIP_INTERACTION_PAGE); - elm_flip_interaction_direction_enabled_set(flip, ELM_FLIP_DIRECTION_UP, EINA_TRUE); - elm_flip_interaction_direction_enabled_set(flip, ELM_FLIP_DIRECTION_DOWN, EINA_TRUE); - elm_flip_interaction_direction_enabled_set(flip, ELM_FLIP_DIRECTION_LEFT, EINA_TRUE); - elm_flip_interaction_direction_enabled_set(flip, ELM_FLIP_DIRECTION_RIGHT, EINA_TRUE); - elm_flip_interaction_direction_hitsize_set(flip, ELM_FLIP_DIRECTION_UP, 1); - elm_flip_interaction_direction_hitsize_set(flip, ELM_FLIP_DIRECTION_DOWN, 1); - elm_flip_interaction_direction_hitsize_set(flip, ELM_FLIP_DIRECTION_LEFT, 1); - elm_flip_interaction_direction_hitsize_set(flip, ELM_FLIP_DIRECTION_RIGHT, 1); + eulogium->layout = elm_naviframe_add(window); + if (!eulogium->layout) + return NULL; + //elm_naviframe_item_title_enabled_set(eulogium->layout, EINA_FALSE, EINA_TRUE); +// elm_naviframe_item_title_visible_set(eulogium->layout, EINA_FALSE); - eulogium->content_cur = eulogium_print_menu(eulogium->window, "/home/oliver"); - eulogium->content_next = eulogium_tripple_button_menu(eulogium->window, &but_print, &but_material, &but_maintanance); + content = eulogium_tripple_button_menu(eulogium, &but_main_print, &but_main_material, &but_main_maintanance); + if (!content) + return NULL; + elm_naviframe_item_simple_push(eulogium->layout, content); - elm_object_part_content_set(eulogium->flip, "back", eulogium->content_cur); - elm_object_part_content_set(eulogium->flip, "front", eulogium->content_next); + return eulogium->layout; +} - return eulogium->flip; +static void eulogium_setup(struct eulogium_data *eulogium) +{ + eulogium->filepath = "/home/oliver"; /* TODO: this is just a quick hack until we get media insert detect */ + eulogium_button_cb_data_set(&but_main_print, eulogium); + eulogium_button_cb_data_set(&but_main_material, eulogium); + eulogium_button_cb_data_set(&but_main_maintanance, eulogium); } EAPI_MAIN int elm_main(int argc, char **argv) { Eina_Bool quit_option = EINA_FALSE; static const Ecore_Getopt optdesc = { - "eulogium", + PACKAGE_NAME, "%prog [options]", PACKAGE_VERSION, COPYRIGHT, @@ -343,8 +445,8 @@ EAPI_MAIN int elm_main(int argc, char **argv) }; int args; struct eulogium_data eulogium; - Evas_Object *object; - Evas_Object *splash_window; + Evas_Object *window, *object; +// Evas_Object *splash_window; // Eina_List *engines, *l; args = ecore_getopt_parse(&optdesc, values, argc, argv); @@ -371,6 +473,7 @@ EAPI_MAIN int elm_main(int argc, char **argv) #if (ELM_VERSION_MAJOR > 1) || (ELM_VERSION_MINOR >= 10) elm_config_accel_preference_set("accel"); #endif + #if 0 /* TODO make icon */ icon = evas_object_image_add(evas_object_evas_get(win)); snprintf(buf, sizeof(buf), "%s/images/rage.png", elm_app_data_dir_get()); @@ -380,51 +483,51 @@ EAPI_MAIN int elm_main(int argc, char **argv) elm_config_focus_highlight_enabled_set(EINA_TRUE); elm_config_focus_highlight_animate_set(EINA_TRUE); - eulogium.window = elm_win_add(NULL, PACKAGE_NAME, ELM_WIN_BASIC); - if (!eulogium.window) + window = elm_win_add(NULL, PACKAGE_NAME, ELM_WIN_BASIC); + if (!window) return EXIT_FAILURE; - elm_win_title_set(eulogium.window, PACKAGE_NAME); - evas_object_resize(eulogium.window, 128, 64); - evas_object_repeat_events_set(eulogium.window, EINA_TRUE); - elm_win_autodel_set(eulogium.window, EINA_TRUE); - evas_object_smart_callback_add(eulogium.window, "delete,request", _cb_eulogium_exit, NULL); - evas_object_event_callback_add(eulogium.window, EVAS_CALLBACK_RESIZE, _cb_eulogium_resize, NULL); - - object = elm_bg_add(eulogium.window); + elm_win_title_set(window, PACKAGE_NAME); + evas_object_resize(window, 128, 64); + evas_object_repeat_events_set(window, EINA_TRUE); + elm_win_autodel_set(window, EINA_TRUE); + evas_object_smart_callback_add(window, "delete,request", _cb_eulogium_exit, NULL); + evas_object_event_callback_add(window, EVAS_CALLBACK_RESIZE, _cb_eulogium_resize, NULL); + + object = elm_bg_add(window); if (!object) return EXIT_FAILURE; elm_bg_color_set(object, 0, 0, 0); evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(object, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_win_resize_object_add(eulogium.window, object); + elm_win_resize_object_add(window, object); evas_object_show(object); - - object = eulogium_menu(&eulogium); + eulogium_setup(&eulogium); + object = eulogium_main_menu(window, &eulogium); if (!object) return EXIT_FAILURE; evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(object, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_win_resize_object_add(eulogium.window, object); + elm_win_resize_object_add(window, object); evas_object_show(object); #if 0 /* Ideally we want to add the callbacks to the window. This currently does not work */ - evas_object_event_callback_add(eulogium.window, EVAS_CALLBACK_MOUSE_WHEEL, _cb_eulogium_input_wheel, NULL); + evas_object_event_callback_add(window, EVAS_CALLBACK_MOUSE_WHEEL, _cb_eulogium_input_wheel, NULL); #else /* HACK: draw a transparent rectangle over the entire window and capture events we are interested in */ - object = evas_object_rectangle_add(evas_object_evas_get(eulogium.window)); + object = evas_object_rectangle_add(evas_object_evas_get(window)); if (!object) return EXIT_FAILURE; evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_color_set(object, 0, 0, 0, 0); evas_object_repeat_events_set(object, EINA_TRUE); evas_object_event_callback_add(object, EVAS_CALLBACK_MOUSE_DOWN, _cb_eulogium_input_button, &eulogium); - evas_object_event_callback_add(object, EVAS_CALLBACK_MOUSE_WHEEL, _cb_eulogium_input_wheel, eulogium.window); + evas_object_event_callback_add(object, EVAS_CALLBACK_MOUSE_WHEEL, _cb_eulogium_input_wheel, window); /* TODO: don't these two input events repeat/fall through, everything else, may/should. */ evas_object_show(object); - elm_win_resize_object_add(eulogium.window, object); + elm_win_resize_object_add(window, object); #endif - evas_object_show(eulogium.window); + evas_object_show(window); elm_run(); diff --git a/src/eulogium.h b/src/eulogium.h new file mode 100644 index 0000000..2158aa6 --- /dev/null +++ b/src/eulogium.h @@ -0,0 +1,38 @@ +/* TODO COPYRIGHT */ + +#ifndef _EULOGIUM_H +#define _EULOGIUM_H + +struct eulogium_data { + Evas_Object *layout; + Evas_Object *content_prev; + Evas_Object *content_cur; + char *filepath; + void *data; +}; + + +struct button_cb { + void (*func)(void *data, Evas_Object *object, void *event_info); + void *data; + const char *info; +}; + +struct button_def { + const char *text; + struct button_cb cb; + void *data; +}; + +void eulogium_filepath_set(struct eulogium_data *eulogium, char *filepath); + +void eulogium_button_cb_set(struct button_def *button, struct button_cb *cb); +void eulogium_button_cb_data_set(struct button_def *button, void *data); +void eulogium_button_data_set(struct button_def *button, void *data); + +Evas_Object *eulogium_main_menu(Evas_Object *window, struct eulogium_data *eulogium); +Evas_Object *eulogium_tripple_button_menu(struct eulogium_data *eulogium, const struct button_def *left, const struct button_def *right, const struct button_def *bottom); +Evas_Object *eulogium_print_menu(struct eulogium_data *eulogium); +Evas_Object *eulogium_print_progress(struct eulogium_data *eulogium); + +#endif /* _EULOGIUM_H */ -- cgit v0.12