diff options
author | Olliver Schinagl <o.schinagl@ultimaker.com> | 2015-06-10 07:12:19 (GMT) |
---|---|---|
committer | Olliver Schinagl <o.schinagl@ultimaker.com> | 2015-06-12 05:30:15 (GMT) |
commit | bd7fa86fb019b76c92df3be62fc90eb8e79456af (patch) | |
tree | 569bfa02cb9ecf872edf2961295bae0b024cc718 /src/eulogium_item_list.c | |
parent | 61edebbad95a94e068cb3a936326c389ecfdc7f1 (diff) | |
download | eulogium-bd7fa86fb019b76c92df3be62fc90eb8e79456af.zip eulogium-bd7fa86fb019b76c92df3be62fc90eb8e79456af.tar.gz eulogium-bd7fa86fb019b76c92df3be62fc90eb8e79456af.tar.bz2 |
[griffin.hmi] refactor eulogium_button_list
eulogium_button_list has been changed to item_list where we take
parameters for either a button OR a checklist, since a check button is
very similar to a button. Worst case, if all fails, we can always use
the parameters to put all items in a horizontal box.
Signed-off-by: Olliver Schinagl <o.schinagl@ultimaker.com>
Diffstat (limited to 'src/eulogium_item_list.c')
-rw-r--r-- | src/eulogium_item_list.c | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/src/eulogium_item_list.c b/src/eulogium_item_list.c new file mode 100644 index 0000000..7522634 --- /dev/null +++ b/src/eulogium_item_list.c @@ -0,0 +1,140 @@ +/* + * Eulogium_item_list, inspired elm_list. + * + * Copyright (c) 2015 Ultimaker B.V. + * Author: Olliver Schinagl <o.schinagl@ultimaker.com> + * + * SPDX-License-Identifier: AGPL-3.0+ + */ + +#include <Elementary.h> +#include <libintl.h> + +#include "eulogium_private.h" +#include "gettext.h" + +#include "eulogium_item_list.h" + +Evas_Object *eulogium_item_list_add(Evas_Object *parent) +{ + Evas_Object *list, *box; + Eina_List *l = NULL; + + list = elm_scroller_add(parent); + evas_object_data_set(list, "eulogium_item_list", l); + box = elm_box_add(list); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, 0); + evas_object_data_set(list, "content", box); + elm_object_content_set(list, box); + evas_object_show(box); + + return list; +} + +static Evas_Object *_item_new(Evas_Object *parent, Evas_Object *icon, char const *label, + Eina_Bool *check, 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"); + } + if (label) + elm_object_text_set(item, _(label)); + if (icon) + elm_object_part_content_set(item, "icon", icon); + if (data) + evas_object_data_set(item, "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); + + return item; +} + +Evas_Object *eulogium_item_list_prepend(Evas_Object *list, Evas_Object *icon, + char const *label, Eina_Bool *check, + 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; + + if ((!box) && (!list)) + return NULL; + + item = _item_new(box, icon, label, check, func, data); + + if (l) + l = eina_list_prepend(l, item); + else + l = eina_list_prepend(NULL, item); + evas_object_data_set(list, "eulogium_item_list", l); + + return item; +} + +Evas_Object *eulogium_item_list_append(Evas_Object *list, Evas_Object *icon, + char const *label, Eina_Bool *check, + 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; + + if ((!box) && (!list)) + return NULL; + + item = _item_new(box, icon, label, check, func, data); + + if (l) + l = eina_list_append(l, item); + else + l = eina_list_append(NULL, item); + evas_object_data_set(list, "eulogium_item_list", l); + + return item; +} + +Evas_Object *eulogium_item_list_sorted_insert(Evas_Object *list, Evas_Object *icon, + char const *label, Eina_Bool *check, + 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; + + if ((!box) && (!list)) + return NULL; + + item = _item_new(box, icon, label, check, func, data); + + if (l) + l = eina_list_sorted_insert(l, cmp_func, item); + else + l = eina_list_sorted_insert(NULL, cmp_func, item); + evas_object_data_set(list, "eulogium_item_list", l); + + return item; +} + +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; + + if ((!box) && (!list)) + return; + + EINA_LIST_FOREACH(item_list, l, item) + elm_box_pack_end(box, item); +} |