From 1b5dfeceb5bde0eba7e2e7767980ce292ce5b1a8 Mon Sep 17 00:00:00 2001 From: Olliver Schinagl Date: Tue, 9 Jun 2015 10:55:19 +0200 Subject: Hack to add checkboxes to menu entries, this needs to be re-written to properly set the end-component of the button Signed-off-by: Olliver Schinagl --- src/eulogium.c | 87 ++++++++++++++++++++++++++++++++++++++++++++-------------- src/eulogium.h | 2 +- 2 files changed, 68 insertions(+), 21 deletions(-) diff --git a/src/eulogium.c b/src/eulogium.c index ae9f999..ddd860b 100644 --- a/src/eulogium.c +++ b/src/eulogium.c @@ -473,7 +473,7 @@ static struct menu_def menu_settings_network = { }, { .icon = NULL, .label = "WiFi", - .end = NULL, + .end = EINA_TRUE, .footer = NULL, .footer_alt = NULL, .func = NULL, @@ -1586,97 +1586,137 @@ Evas_Object *eulogium_button_list_add(Evas_Object *parent) return list; } +Evas_Object *_eulogium_item_new(Evas_Object *obj, const char *label, Evas_Object *icon, + Evas_Object *end, Evas_Smart_Cb func, const void *data) +{ + return obj; +} + Evas_Object *eulogium_button_list_prepend(Evas_Object *list, const char *label, Evas_Object *icon, - Evas_Smart_Cb func, const void *data) + Evas_Object *end, Evas_Smart_Cb func, const void *data) { Evas_Object *box = evas_object_data_get(list, "content"); Eina_List *l = evas_object_data_get(list, "eulogium_list"); + Evas_Object *item; Evas_Object *button; if ((!box) && (!list)) return NULL; - button = elm_button_add(box); + item = elm_box_add(box); + elm_box_horizontal_set(item, EINA_TRUE); + + button = elm_button_add(item); + elm_box_pack_start(item, button); if (label) elm_object_text_set(button, _(label)); if (icon) elm_object_part_content_set(button, "icon", icon); + if (end) + elm_box_pack_end(item, end); + // elm_object_part_content_set(button, "end", end); /* TODO fix this via style */ if (func) evas_object_smart_callback_add(button, "clicked", func, data); evas_object_show(button); if (l) - l = eina_list_prepend(l, button); + l = eina_list_prepend(l, item); else - l = eina_list_prepend(NULL, button); + l = eina_list_prepend(NULL, item); evas_object_data_set(list, "eulogium_list", l); evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, 0); evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 0); + evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(item, EVAS_HINT_FILL, 0); + evas_object_show(item); return button; } Evas_Object *eulogium_button_list_append(Evas_Object *list, const char *label, Evas_Object *icon, - Evas_Smart_Cb func, const void *data) + Evas_Object *end, Evas_Smart_Cb func, const void *data) { Evas_Object *box = evas_object_data_get(list, "content"); Eina_List *l = evas_object_data_get(list, "eulogium_list"); + Evas_Object *item; Evas_Object *button; if ((!box) && (!list)) return NULL; - button = elm_button_add(box); + item = elm_box_add(box); + elm_box_horizontal_set(item, EINA_TRUE); + + button = elm_button_add(item); + elm_box_pack_start(item, button); if (label) elm_object_text_set(button, _(label)); if (icon) elm_object_part_content_set(button, "icon", icon); + if (end) + elm_box_pack_end(item, end); + // elm_object_part_content_set(button, "end", end); if (func) evas_object_smart_callback_add(button, "clicked", func, data); evas_object_show(button); if (l) - l = eina_list_append(l, button); + l = eina_list_append(l, item); else - l = eina_list_append(NULL, button); + l = eina_list_append(NULL, item); evas_object_data_set(list, "eulogium_list", l); evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, 0); evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 0); + evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(item, EVAS_HINT_FILL, 0); + evas_object_show(item); return button; } Evas_Object *eulogium_button_list_sorted_insert(Evas_Object *list, const char *label, Evas_Object *icon, - Evas_Smart_Cb func, const void *data, Eina_Compare_Cb cmp_func) + Evas_Object *end, Evas_Smart_Cb func, const void *data, + Eina_Compare_Cb cmp_func) { Evas_Object *box = evas_object_data_get(list, "content"); Eina_List *l = evas_object_data_get(list, "eulogium_list"); - Evas_Object *button; /* item */ + Evas_Object *item; + Evas_Object *button; if ((!box) && (!list)) return NULL; - button = elm_button_add(box); + item = elm_box_add(box); + elm_box_horizontal_set(item, EINA_TRUE); + + button = elm_button_add(item); + elm_box_pack_start(item, button); if (label) elm_object_text_set(button, _(label)); if (icon) elm_object_part_content_set(button, "icon", icon); + if (end) + elm_box_pack_end(item, end); + // elm_object_part_content_set(button, "end", end); if (data) - evas_object_data_set(button, "sort_data", data); + evas_object_data_set(item, "sort_data", data); if (func) evas_object_smart_callback_add(button, "clicked", func, data); evas_object_show(button); if (l) - l = eina_list_sorted_insert(l, cmp_func, button); + l = eina_list_sorted_insert(l, cmp_func, item); else - l = eina_list_sorted_insert(NULL, cmp_func, button); + l = eina_list_sorted_insert(NULL, cmp_func, item); evas_object_data_set(list, "eulogium_list", l); evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, 0); evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 0); + evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(item, EVAS_HINT_FILL, 0); + evas_object_show(item); return button; } @@ -2142,7 +2182,7 @@ static void _cb_populate_filelist(const char *name, const char *path, void *data filelist_entry = malloc(sizeof(struct _filelist_entry_data)); filelist_entry->filelist = filelist; filelist_entry->filepath = filepath; - eulogium_button_list_sorted_insert(filelist->list, name, icon, _cb_select_file, filelist_entry, _cb_dirfile_sort); + eulogium_button_list_sorted_insert(filelist->list, name, icon, NULL, _cb_select_file, filelist_entry, _cb_dirfile_sort); // evas_object_smart_callback_add(item, "focused", _update_footer_focus_cb, &menu->entry[i]); // evas_object_smart_callback_add(item, "unfocused", _update_footer_unfocus_cb, &menu->entry[i]); // evas_object_smart_callback_add(list, "longpressed", _cb_filelist_filedetails, NULL); /* TODO, popup? */ @@ -2206,16 +2246,15 @@ static void _menu_generate_filelist(struct eulogium_data *eulogium, Evas_Object icon = elm_icon_add(list); elm_icon_standard_set(icon, "user-home"); - eulogium_button_list_prepend(list, "Return", icon, _cb_content_prev_set, eulogium); evas_object_show(icon); + eulogium_button_list_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();? */ } static void _menu_generate_menulist(struct eulogium_data *eulogium, Evas_Object *list, struct menu_entry_def *entry) { int i; - Evas_Object *icon; - Evas_Object *item; + Evas_Object *item, *icon, *end; for (i = 0; entry[i].label != NULL; i++) { if (entry[i].icon) { @@ -2225,7 +2264,15 @@ static void _menu_generate_menulist(struct eulogium_data *eulogium, Evas_Object } else { icon = NULL; } - item = eulogium_button_list_append(list, entry[i].label, icon, entry[i].func, eulogium); /*XXX TODO pass data from struct */ + if (entry[i].end) { + end = elm_check_add(list); /* XXX don't add this here, we add this if the backend has this feature. */ + elm_check_state_set(end, EINA_TRUE); + elm_object_focus_allow_set(end, EINA_FALSE); + evas_object_show(end); + } else { + end = NULL; + } + item = eulogium_button_list_append(list, entry[i].label, icon, end, entry[i].func, eulogium); /*XXX TODO pass data from struct */ entry[i].data = eulogium->footer; /* XXX ugly-ness keeps adding. The footer widget should not be passed like this :( */ evas_object_smart_callback_add(item, "focused", _update_menu_footer_focus_cb, &entry[i]); evas_object_smart_callback_add(item, "unfocused", _update_menu_footer_unfocus_cb, &entry[i]); diff --git a/src/eulogium.h b/src/eulogium.h index cd760e5..8fdcd38 100644 --- a/src/eulogium.h +++ b/src/eulogium.h @@ -113,7 +113,7 @@ struct button_def { struct menu_entry_def { const char *icon; const char *label; - Evas_Object *end; + Eina_Bool end; const char *footer; /* Primary footer */ const char *footer_alt; /* Alternating footer */ Ecore_Timer *toggle_timer; -- cgit v0.12