summaryrefslogtreecommitdiffstats
path: root/src
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
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')
-rw-r--r--src/Makefile.am2
-rw-r--r--src/eulogium.c184
-rw-r--r--src/eulogium_item_list.c140
-rw-r--r--src/eulogium_item_list.h28
4 files changed, 175 insertions, 179 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index a0417e7..e60d34d 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -11,7 +11,7 @@ AM_CPPFLAGS = -DPACKAGE_BIN_DIR=\"$(bindir)/\" \
-I$(top_srcdir)/src/ \
@EFL_CFLAGS@
-eulogium_SOURCES = eulogium.c
+eulogium_SOURCES = eulogium.c eulogium_item_list.c
eulogium_LDADD = @EFL_LIBS@
localedir = $(datadir)/locale
diff --git a/src/eulogium.c b/src/eulogium.c
index c0bc0ad..30f8d41 100644
--- a/src/eulogium.c
+++ b/src/eulogium.c
@@ -1566,170 +1566,6 @@ static void _but_change_hotend_2_cb(void *data, Evas_Object *object EINA_UNUSED,
elm_naviframe_item_simple_push(eulogium->navi, content);
}
-Evas_Object *eulogium_button_list_add(Evas_Object *parent)
-{
- Evas_Object *list, *box;
- Eina_List *l = NULL;
-
- list = elm_scroller_add(parent);
- evas_object_data_set(list, "eulogium_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;
-}
-
-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_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;
-
- 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, item);
- else
- 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_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;
-
- 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, item);
- else
- 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_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 *item;
- Evas_Object *button;
-
- if ((!box) && (!list))
- return NULL;
-
- 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(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, item);
- else
- 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;
-}
-
-void eulogium_button_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_list");
- Evas_Object *button;
-
- if ((!box) && (!list))
- return;
-
- EINA_LIST_FOREACH(item_list, l, button)
- elm_box_pack_end(box, button);
-}
-
void eulogium_button_cb_set(struct button_def *button, struct button_cb *cb)
{
if (cb && button)
@@ -2178,7 +2014,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, NULL, _cb_select_file, filelist_entry, _cb_dirfile_sort);
+ eulogium_item_list_sorted_insert(filelist->list, icon, name, 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? */
@@ -2243,14 +2079,14 @@ static void _menu_generate_filelist(struct eulogium_data *eulogium, Evas_Object
icon = elm_icon_add(list);
elm_icon_standard_set(icon, "user-home");
evas_object_show(icon);
- eulogium_button_list_prepend(list, "Return", icon, NULL, _cb_content_prev_set, eulogium);
+ eulogium_item_list_prepend(list, icon, "Return", 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 *item, *icon, *end;
+ Evas_Object *item, *icon;
for (i = 0; entry[i].label != NULL; i++) {
if (entry[i].icon) {
@@ -2260,15 +2096,7 @@ static void _menu_generate_menulist(struct eulogium_data *eulogium, Evas_Object
} else {
icon = NULL;
}
- 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 */
+ item = eulogium_item_list_append(list, icon, entry[i].label, NULL, 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]);
@@ -2293,7 +2121,7 @@ Evas_Object *menu_widget_list(struct eulogium_data *eulogium, Evas_Object *paren
evas_object_show(obj);
elm_box_pack_start(box, obj);
- list = eulogium_button_list_add(box);
+ list = eulogium_item_list_add(box);
elm_scroller_bounce_set(list, EINA_FALSE, EINA_FALSE);
elm_scroller_policy_set(list, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
@@ -2304,7 +2132,7 @@ Evas_Object *menu_widget_list(struct eulogium_data *eulogium, Evas_Object *paren
_menu_generate_menulist(eulogium, list, menu->entry);
if (menu->type == LIST_FILE)
_menu_generate_filelist(eulogium, list, &menu->dir);
- eulogium_button_list_go(list);
+ eulogium_item_list_go(list);
evas_object_show(list);
elm_box_pack_end(box, list);
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);
+}
diff --git a/src/eulogium_item_list.h b/src/eulogium_item_list.h
new file mode 100644
index 0000000..182b053
--- /dev/null
+++ b/src/eulogium_item_list.h
@@ -0,0 +1,28 @@
+/*
+ * 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+
+ */
+
+#ifndef _EULOGIUM_ITEM_LIST_H
+#define _EULOGIUM_ITEM_LIST_H
+
+#include <Elementary.h>
+
+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,
+ 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,
+ 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,
+ Evas_Smart_Cb func, const void *data,
+ Eina_Compare_Cb cmp_func);
+void eulogium_item_list_go(Evas_Object *list);
+
+#endif /* _EULOGIUM_ITEM_LIST_H */