summaryrefslogtreecommitdiffstats
path: root/src/eulogium_item_list.c
diff options
context:
space:
mode:
authorOlliver Schinagl <o.schinagl@ultimaker.com>2015-06-10 07:12:19 (GMT)
committerOlliver Schinagl <o.schinagl@ultimaker.com>2015-06-12 05:30:15 (GMT)
commitbd7fa86fb019b76c92df3be62fc90eb8e79456af (patch)
tree569bfa02cb9ecf872edf2961295bae0b024cc718 /src/eulogium_item_list.c
parent61edebbad95a94e068cb3a936326c389ecfdc7f1 (diff)
downloadeulogium-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.c140
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);
+}