/* * Eulogium_item_list, inspired elm_list. * * Copyright (c) 2015 Ultimaker B.V. * Author: Olliver Schinagl * * SPDX-License-Identifier: AGPL-3.0+ */ #include #include #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); }