From 00a7149100b41db93f4a10e91ae8fd88c988fc11 Mon Sep 17 00:00:00 2001 From: Olliver Schinagl Date: Tue, 16 Jun 2015 08:41:03 +0200 Subject: [griffin.hmi] define buttons, checkboxes and radio button for internal list widget Signed-off-by: Olliver Schinagl --- src/eulogium_item_list.c | 100 +++++++++++++++++++++++++++++------------------ src/eulogium_item_list.h | 20 ++++++++-- 2 files changed, 78 insertions(+), 42 deletions(-) diff --git a/src/eulogium_item_list.c b/src/eulogium_item_list.c index 7522634..de0f270 100644 --- a/src/eulogium_item_list.c +++ b/src/eulogium_item_list.c @@ -32,109 +32,131 @@ Evas_Object *eulogium_item_list_add(Evas_Object *parent) } static Evas_Object *_item_new(Evas_Object *parent, Evas_Object *icon, char const *label, - Eina_Bool *check, Evas_Smart_Cb func, const void *data) + struct list_item *item, Evas_Smart_Cb func, const void *data) { - Evas_Object *item; - - if (check) { - item = elm_check_add(parent); - /* elm_check_pointer_set(item, check); */ - /* elm_object_style_set(item, "list"); */ - } else { - item = elm_button_add(parent); - elm_object_style_set(item, "list"); + Evas_Object *it; + const char *cb = "changed"; + struct list_item dummy = {.type = LIST_ITEM_BUTTON}; + + if (!item) /* If no button type is passed (file-list for ex.) use the default 'button' entry */ + item = &dummy; + + + switch (item->type) { + case LIST_ITEM_RADIO: + it = elm_radio_add(parent); + /* elm_radio_pointer_set(it, &item->state); */ + /* elm_object_style_set(it, "list"); */ + case LIST_ITEM_CHECK: + it = elm_check_add(parent); + /* elm_check_pointer_set(it, &item->value); */ + /* elm_object_style_set(it, "list"); */ + break; + case LIST_ITEM_BUTTON: + cb = "clicked"; + it = elm_button_add(parent); + elm_object_style_set(it, "list"); + break; + default: + return NULL; } if (label) - elm_object_text_set(item, _(label)); + elm_object_text_set(it, _(label)); if (icon) - elm_object_part_content_set(item, "icon", icon); + elm_object_part_content_set(it, "icon", icon); if (data) - evas_object_data_set(item, "sort_data", data); + evas_object_data_set(it, "sort_data", data); if (func) - evas_object_smart_callback_add(item, check ? "changed" : "clicked", func, data); - 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); + evas_object_smart_callback_add(it, cb, func, data); + evas_object_size_hint_weight_set(it, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(it, EVAS_HINT_FILL, 0); + evas_object_show(it); - return item; + return it; } Evas_Object *eulogium_item_list_prepend(Evas_Object *list, Evas_Object *icon, - char const *label, Eina_Bool *check, + char const *label, struct list_item *item, 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_item_list"); - Evas_Object *item; + Evas_Object *it; if ((!box) && (!list)) return NULL; - item = _item_new(box, icon, label, check, func, data); + it = _item_new(box, icon, label, item, func, data); + if (!it) + return NULL; if (l) - l = eina_list_prepend(l, item); + l = eina_list_prepend(l, it); else - l = eina_list_prepend(NULL, item); + l = eina_list_prepend(NULL, it); evas_object_data_set(list, "eulogium_item_list", l); - return item; + return it; } Evas_Object *eulogium_item_list_append(Evas_Object *list, Evas_Object *icon, - char const *label, Eina_Bool *check, + char const *label, struct list_item *item, 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_item_list"); - Evas_Object *item; + Evas_Object *it; if ((!box) && (!list)) return NULL; - item = _item_new(box, icon, label, check, func, data); + it = _item_new(box, icon, label, item, func, data); + if (!it) + return NULL; if (l) - l = eina_list_append(l, item); + l = eina_list_append(l, it); else - l = eina_list_append(NULL, item); + l = eina_list_append(NULL, it); evas_object_data_set(list, "eulogium_item_list", l); - return item; + return it; } Evas_Object *eulogium_item_list_sorted_insert(Evas_Object *list, Evas_Object *icon, - char const *label, Eina_Bool *check, + char const *label, struct list_item *item, 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_item_list"); - Evas_Object *item; + Evas_Object *it; if ((!box) && (!list)) return NULL; - item = _item_new(box, icon, label, check, func, data); + it = _item_new(box, icon, label, item, func, data); + if (!it) + return NULL; if (l) - l = eina_list_sorted_insert(l, cmp_func, item); + l = eina_list_sorted_insert(l, cmp_func, it); else - l = eina_list_sorted_insert(NULL, cmp_func, item); + l = eina_list_sorted_insert(NULL, cmp_func, it); evas_object_data_set(list, "eulogium_item_list", l); - return item; + return it; } void eulogium_item_list_go(Evas_Object *list) { Evas_Object *box = evas_object_data_get(list, "content"); Eina_List *l, *item_list = evas_object_data_get(list, "eulogium_item_list"); - Evas_Object *item; + Evas_Object *it; if ((!box) && (!list)) return; - EINA_LIST_FOREACH(item_list, l, item) - elm_box_pack_end(box, item); + EINA_LIST_FOREACH(item_list, l, it) + elm_box_pack_end(box, it); } diff --git a/src/eulogium_item_list.h b/src/eulogium_item_list.h index 182b053..84168a5 100644 --- a/src/eulogium_item_list.h +++ b/src/eulogium_item_list.h @@ -12,15 +12,29 @@ #include +enum item_type { + LIST_ITEM_BUTTON, + LIST_ITEM_CHECK, + LIST_ITEM_RADIO, +}; + +struct list_item { + enum item_type type; + union { + Eina_Bool state; + int value; + }; +}; + Evas_Object *eulogium_item_list_add(Evas_Object *parent); Evas_Object *eulogium_item_list_prepend(Evas_Object *list, Evas_Object *icon, - char const *label, Eina_Bool *check, + char const *label, struct list_item *item, Evas_Smart_Cb func, const void *data); Evas_Object *eulogium_item_list_append(Evas_Object *list, Evas_Object *icon, - char const *label, Eina_Bool *check, + char const *label, struct list_item *item, Evas_Smart_Cb func, const void *data); Evas_Object *eulogium_item_list_sorted_insert(Evas_Object *list, Evas_Object *icon, - char const *label, Eina_Bool *check, + char const *label, struct list_item *item, Evas_Smart_Cb func, const void *data, Eina_Compare_Cb cmp_func); void eulogium_item_list_go(Evas_Object *list); -- cgit v0.12