summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorOlliver Schinagl <o.schinagl@ultimaker.com>2015-04-20 14:18:40 (GMT)
committerOlliver Schinagl <o.schinagl@ultimaker.com>2015-04-28 05:07:15 (GMT)
commit1096f1693d98ddf381f1be1948fe77386ebdfaf8 (patch)
tree3c296387f86edb74e630fbe43c53c4a7af2fc00f /src
parentcaaa3f02e7c63d2abdf00de91e4248ced0a99655 (diff)
downloadeulogium-1096f1693d98ddf381f1be1948fe77386ebdfaf8.zip
eulogium-1096f1693d98ddf381f1be1948fe77386ebdfaf8.tar.gz
eulogium-1096f1693d98ddf381f1be1948fe77386ebdfaf8.tar.bz2
rework the filelist, store data in the elm_object_item
Signed-off-by: Olliver Schinagl <o.schinagl@ultimaker.com>
Diffstat (limited to 'src')
-rw-r--r--src/eulogium.c97
1 files changed, 52 insertions, 45 deletions
diff --git a/src/eulogium.c b/src/eulogium.c
index bda83df..ccb7100 100644
--- a/src/eulogium.c
+++ b/src/eulogium.c
@@ -202,31 +202,32 @@ Evas_Object *eulogium_start_print(struct eulogium_data *eulogium, char *filepath
return eulogium_print_progress(eulogium);
}
-/* Uglyness due to a 'shortcomming' of elm_list sorted insert using 1 data var for both funcs */
-struct _filelist_sort {
- struct eulogium_data *eulogium;
+struct _filelist_data {
+ void (*func)(void *data, Evas_Object *obj, void *event_info);
char *filepath;
};
-static void _cb_select_file(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+static void _cb_select_file(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
{
- char *filepath = ((struct _filelist_sort *)data)->filepath;
- struct eulogium_data *eulogium = ((struct _filelist_sort *)data)->eulogium;
+ struct eulogium_data *eulogium = data;
+ struct _filelist_data *filelist = elm_object_item_data_get(event_info);
Evas_Object *content;
- if (ecore_file_is_dir(filepath)) {
- content = eulogium_print_menu(eulogium, filepath);
- } else {
- eulogium->print.material = 100.23; /* TODO */
- content = eulogium_start_print(eulogium, filepath);
+ if (filelist) {
+ if (ecore_file_is_dir(filelist->filepath)) {
+ content = eulogium_print_menu(eulogium, filelist->filepath);
+ } else {
+ eulogium->print.material = 100.23; /* TODO */
+ content = eulogium_start_print(eulogium, filelist->filepath);
+ }
+ elm_naviframe_item_simple_push(eulogium->navi, content);
}
- elm_naviframe_item_simple_push(eulogium->navi, content);
}
static int _cb_dirfile_sort(const void *data1, const void *data2)
{
- const char *filepath1 = ((struct _filelist_sort *)elm_object_item_data_get(data1))->filepath;
- const char *filepath2 = ((struct _filelist_sort *)elm_object_item_data_get(data2))->filepath;
+ const char *filepath1 = ((struct _filelist_data *)elm_object_item_data_get(data1))->filepath;
+ const char *filepath2 = ((struct _filelist_data *)elm_object_item_data_get(data2))->filepath;
if (!filepath1)
return 1;
@@ -266,12 +267,11 @@ static void _cb_populate_filelist(const char *name, const char *path, void *data
struct eulogium_data *eulogium = data;
Evas_Object *list = (Evas_Object *)eulogium->data;
Evas_Object *icon;
- Elm_Object_Item *list_item;
char *filepath;
char *ext;
uint_fast32_t dir_len;
uint_fast8_t hidden_visible = 1;
- struct _filelist_sort *filelist_sort;
+ struct _filelist_data *filelist;
if (hidden_visible && (name[0] == '.'))
return;
@@ -293,36 +293,21 @@ static void _cb_populate_filelist(const char *name, const char *path, void *data
}
icon = elm_icon_add(list);
- if (ecore_file_is_dir(filepath))
+ if (ecore_file_is_dir(filepath)) {
elm_icon_standard_set(icon, "folder");
- else
+ } else {
elm_icon_standard_set(icon, "file");
+ }
elm_image_resizable_set(icon, EINA_FALSE, EINA_FALSE);
- filelist_sort = malloc(sizeof(struct _filelist_sort)); /* never freed, memleak! XXX */
- filelist_sort->eulogium = eulogium;
- filelist_sort->filepath = filepath;
- list_item = elm_list_item_sorted_insert(list, name, icon, NULL, _cb_select_file, filelist_sort, _cb_dirfile_sort);
-// free(filepath); & filelist_sort /* TODO is this required?, yes! /
- elm_list_item_show(list_item); /* TODO: seems not needed? */
-}
-
-#if 0
-static void _cb_filelist_bottom(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Evas_Object *list = data;
+ filelist = malloc(sizeof(struct _filelist_data)); /* never freed, memleak! XXX check cb */
+ filelist->filepath = filepath;
+ filelist->func = &_cb_select_file;
- elm_list_item_bring_in(elm_list_first_item_get(list));
+ elm_list_item_sorted_insert(list, name, icon, NULL, NULL, filelist, _cb_dirfile_sort);
+// free(filepath); /* TODO is this required?, yes! /
}
-static void _cb_filelist_top(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Evas_Object *list = data;
-
- elm_list_item_bring_in(elm_list_last_item_get(list));
-}
-#endif
-
static void _cb_content_prev_set(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
struct eulogium_data *eulogium = data;
@@ -345,20 +330,40 @@ static struct button_def but_return = {
.data = NULL,
};
+static void _filelist_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
+{
+ struct eulogium_data *eulogium = data;
+ Elm_Object_Item *item = event_info;
+ struct _filelist_data *fl;
+
+ if (!item) {
+ printf("ohnoes, no item\n");
+ return;
+ }
+
+ fl = elm_object_item_data_get(item);
+
+ if (fl) {
+ fl->func(eulogium, NULL, item);
+ }
+ //free(fl); /* Item data that has been set needs to be freed 'somewhere', check item_del callback */
+}
+
Evas_Object *eulogium_print_menu(struct eulogium_data *eulogium, char *filepath)
{
Evas_Object *box;
Evas_Object *list;
Evas_Object *icon;
+ Elm_Object_Item *item;
+ struct _filelist_data *filelist;
box = elm_box_add(eulogium->navi);
-#if 1
+
list = elm_label_add(box);
elm_object_text_set(list, "SD Card"); /* TODO This may be more then just the SD card */
evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(list);
elm_box_pack_start(box, list);
-#endif
list = elm_list_add(box);
evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
@@ -373,12 +378,14 @@ Evas_Object *eulogium_print_menu(struct eulogium_data *eulogium, char *filepath)
icon = elm_icon_add(list);
elm_icon_standard_set(icon, "home");
- elm_list_item_prepend(list, "< RETURN", icon, NULL, _cb_content_prev_set, eulogium); /* XXX TODO: when we pop the filelist from the stack, who calls elm_list_free();? */
+ item = elm_list_item_prepend(list, "< RETURN", NULL, NULL, NULL, NULL);
+ /* XXX TODO: when we pop the filelist from the stack, who calls elm_list_free();? */
+ filelist = malloc(sizeof(struct _filelist_data));
+ filelist->func = &_cb_content_prev_set;
+ elm_object_item_data_set(item, filelist);
+ evas_object_smart_callback_add(list, "activated", _filelist_cb, eulogium);
elm_list_go(list);
-// evas_object_smart_callback_add(list, "edge,bottom", _cb_filelist_bottom, list);
-// evas_object_smart_callback_add(list, "edge,top", _cb_filelist_top, list);
-// evas_object_smart_callback_add(list, "highlighted", _cb_filelist_bringin, NULL);
// evas_object_smart_callback_add(list, "longpressed", _cb_filelist_filedetails, NULL); /* TODO, use inwin */
evas_object_show(list);