diff options
author | Olliver Schinagl <o.schinagl@ultimaker.com> | 2015-04-20 14:18:40 (GMT) |
---|---|---|
committer | Olliver Schinagl <o.schinagl@ultimaker.com> | 2015-04-28 05:07:15 (GMT) |
commit | 1096f1693d98ddf381f1be1948fe77386ebdfaf8 (patch) | |
tree | 3c296387f86edb74e630fbe43c53c4a7af2fc00f /src | |
parent | caaa3f02e7c63d2abdf00de91e4248ced0a99655 (diff) | |
download | eulogium-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.c | 97 |
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); |