From 908f4839df2e07d9f51df04930a61dca7bb2f1f3 Mon Sep 17 00:00:00 2001 From: Olliver Schinagl Date: Fri, 3 Apr 2015 23:27:11 +0200 Subject: Make multi-text menu finish by going to the top of the framelist Signed-off-by: Olliver Schinagl --- src/eulogium.c | 183 ++++++++++++++++++++++++++++----------------------------- src/eulogium.h | 7 ++- 2 files changed, 96 insertions(+), 94 deletions(-) diff --git a/src/eulogium.c b/src/eulogium.c index 2432ca2..0408651 100644 --- a/src/eulogium.c +++ b/src/eulogium.c @@ -138,7 +138,7 @@ Evas_Object *eulogium_print_progress(struct eulogium_data *eulogium) elm_table_homogeneous_set(table, EINA_FALSE); eulogium->print.status = elm_label_add(table); - elm_object_text_set(eulogium->print.status, "Print time: ...\nPrint status unknown."); + elm_object_text_set(eulogium->print.status, "Print time: ...
Print status unknown."); elm_label_slide_mode_set(eulogium->print.status, ELM_LABEL_SLIDE_MODE_NONE); evas_object_size_hint_align_set(eulogium->print.status, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_show(eulogium->print.status); @@ -330,7 +330,7 @@ static void _cb_populate_filelist(const char *name, const char *path, void *data elm_icon_standard_set(icon, "file"); elm_image_resizable_set(icon, EINA_FALSE, EINA_FALSE); - filelist_sort = malloc(sizeof(struct _filelist_sort)); + 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); @@ -402,32 +402,49 @@ Evas_Object *eulogium_print_menu(struct eulogium_data *eulogium, char *filepath) return box; } -struct multi_text { - uint_fast8_t count; - const char *text[]; +struct _multi_text_next_cb_data { + struct eulogium_data *eulogium; + struct multi_text *txtdata; + uint_fast8_t pagenum; + Eina_Bool pageindex; }; -Evas_Object *eulogium_multi_text_menu(struct eulogium_data *eulogium, Evas_Object *parent, struct multi_text *data, const uint_fast8_t pagenum, Eina_Bool pageindex) +static void _eulogium_multi_text_next_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + Evas_Object *content; + struct eulogium_data *eulogium = ((struct _multi_text_next_cb_data *)data)->eulogium; + uint_fast8_t pagenum = ((struct _multi_text_next_cb_data *)data)->pagenum; + Eina_Bool pageindex = ((struct _multi_text_next_cb_data *)data)->pageindex; + struct multi_text *txtdata = ((struct _multi_text_next_cb_data *)data)->txtdata; + + if (pagenum >= txtdata->count) { + Elm_Object_Item *item; + + item = elm_naviframe_bottom_item_get(eulogium->layout); + if (item) + elm_naviframe_item_pop_to(item); + } else { + content = eulogium_multi_text_menu(eulogium, eulogium->layout, NULL, txtdata, pagenum, pageindex); + elm_naviframe_item_simple_push(eulogium->layout, content); + } +} + +Evas_Object *eulogium_multi_text_menu(struct eulogium_data *eulogium, Evas_Object *parent, struct button_def *button, struct multi_text *txtdata, uint_fast8_t pagenum, Eina_Bool pageindex) { Evas_Object *object; Evas_Object *_top, *_bottom; - int i; char buf[6]; + struct _multi_text_next_cb_data *multi_text_next_cb_data; - if (pagenum < 1) - i = 0; - else if (pagenum >= data->count) - i = data->count - 1; - else - i = pagenum - 1; - + if (pagenum >= txtdata->count) + pagenum = txtdata->count - 1; _top = elm_box_add(parent); evas_object_show(_top); if (pageindex) { object = elm_label_add(_top); - snprintf(buf, sizeof(buf), "%d/%d", i + 1, data->count); + snprintf(buf, sizeof(buf), "%d/%d", pagenum + 1, txtdata->count); elm_object_text_set(object, buf); evas_object_show(object); evas_object_size_hint_align_set(object, 1.0, 0); @@ -435,13 +452,19 @@ Evas_Object *eulogium_multi_text_menu(struct eulogium_data *eulogium, Evas_Objec } object = elm_label_add(_top); - elm_object_text_set(object, data->text[i]); + elm_object_text_set(object, txtdata->text[pagenum]); evas_object_show(object); elm_box_pack_end(_top, object); + multi_text_next_cb_data = malloc(sizeof(struct _multi_text_next_cb_data)); /* XXX never freed; memleak */ + multi_text_next_cb_data->eulogium = eulogium; + multi_text_next_cb_data->txtdata = txtdata; + multi_text_next_cb_data->pagenum = pagenum + 1; + multi_text_next_cb_data->pageindex = EINA_TRUE; + _bottom = elm_button_add(parent); - elm_object_text_set(_bottom, "BUTTON"); - evas_object_smart_callback_add(_bottom, "clicked", NULL, NULL); + elm_object_text_set(_bottom, button ? button->text : "NEXT"); + evas_object_smart_callback_add(_bottom, "clicked", _eulogium_multi_text_next_cb, multi_text_next_cb_data); evas_object_show(_bottom); return eulogium_split_screen(parent, _top, _bottom); @@ -492,69 +515,6 @@ Evas_Object *eulogium_tripple_button_menu(Evas_Object *parent, const struct butt return eulogium_split_screen(parent, _top, _bottom); } -#if 0 -Evas_Object *eulogium_tripple_button_menu(struct eulogium_data *eulogium, - const struct button_def *left, const struct button_def *right, const struct button_def *bottom) -{ - Evas_Object *table; - Evas_Object *object; - - table = elm_table_add(eulogium->layout); - elm_table_homogeneous_set(table, EINA_FALSE); - - object = elm_button_add(table); - elm_object_text_set(object, left->text); - evas_object_smart_callback_add(object, "clicked", left->cb.func, left->cb.data); - evas_object_show(object); - elm_table_pack(table, object, 0, 0, 1, 1); - -#if 0 /* FIXME use themed seperator */ - object = elm_separator_add(table); - elm_separator_horizontal_set(object, EINA_TRUE); - evas_object_show(object); - elm_table_pack(table, object, 1, 0, 1, 1); -#else - object = evas_object_rectangle_add(table); - evas_object_color_set(object, 0x33, 0x99, 0xff, 0xff); - evas_object_size_hint_min_set(object, 1, 0); - evas_object_size_hint_padding_set(object, 1, 1, 1, 1); - evas_object_size_hint_align_set(object, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(object); - elm_table_pack(table, object, 1, 0, 1, 1); -#endif - - object = elm_button_add(table); - elm_object_text_set(object, right->text); - evas_object_smart_callback_add(object, "clicked", right->cb.func, right->cb.data); - evas_object_show(object); - elm_table_pack(table, object, 2, 0, 1, 1); - -#if 0 /* FIXME use themed seperator */ - object = elm_separator_add(table); - elm_separator_horizontal_set(object, EINA_TRUE); - evas_object_show(object); - elm_table_pack(table, object, 0, 1, 3, 1); -#else - object = evas_object_rectangle_add(table); - evas_object_color_set(object, 0x33, 0x99, 0xff, 0xff); - evas_object_size_hint_min_set(object, 0, 1); - evas_object_size_hint_padding_set(object, 1, 1, 1, 1); - evas_object_size_hint_align_set(object, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(object); - elm_table_pack(table, object, 0, 1, 3, 1); -#endif - - object = elm_button_add(table); - elm_object_text_set(object, bottom->text); - evas_object_smart_callback_add(object, "clicked", bottom->cb.func, bottom->cb.data); - evas_object_show(object); - elm_table_pack(table, object, 0, 2, 3, 1); - - evas_object_show(table); - return table; -} -#endif - static void _cb_button_main_print(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) { struct eulogium_data *eulogium = data; @@ -596,19 +556,46 @@ static struct button_def but_main_maintanance = { .data = NULL, }; -static struct multi_text data = { +static struct button_def but_mat_change = { + .text = "CHANGE", + .cb = { + .func = &_cb_eulogium_button, + .data = NULL, + .info = "material change button pressed", + }, + .data = NULL, +}; + +static struct button_def but_mat_settings = { + .text = "SETTINGS", + .cb = { + .func = &_cb_eulogium_button, + .data = NULL, + .info = "material change button pressed", + }, + .data = NULL, +}; + +static struct button_def but_mat_return = { + .text = "RETURN", + .cb = { + .func = &_cb_eulogium_button, + .data = NULL, + .info = "material return button pressed", + }, + .data = NULL, +}; + +static struct multi_text txtdata = { .text = { - "line1
" - "line1
" - "line1
", + "Welcome
" + "to your new Ultimaker", "line2
test
test
test
test
test", - "line3", - "line4", - "line5", + "Level the bed!", + "Nauw n00b", + "Lets Print!", NULL, }, - .count = 5, - }; Evas_Object *eulogium_main_menu(Evas_Object *window, struct eulogium_data *eulogium) @@ -618,20 +605,30 @@ Evas_Object *eulogium_main_menu(Evas_Object *window, struct eulogium_data *eulog eulogium->layout = elm_naviframe_add(window); if (!eulogium->layout) return NULL; - //elm_naviframe_item_title_enabled_set(eulogium->layout, EINA_FALSE, EINA_TRUE); + elm_naviframe_prev_btn_auto_pushed_set(eulogium->layout, EINA_FALSE); +// elm_naviframe_item_title_enabled_set(eulogium->layout, EINA_TRUE, EINA_TRUE); // elm_naviframe_item_title_visible_set(eulogium->layout, EINA_FALSE); -// content = eulogium_tripple_button_menu(eulogium->layout, &but_main_print, &but_main_material, &but_main_maintanance); - content = eulogium_multi_text_menu(eulogium, eulogium->layout, &data, 1, EINA_TRUE); + content = eulogium_tripple_button_menu(eulogium->layout, &but_main_print, &but_main_material, &but_main_maintanance); if (!content) return NULL; elm_naviframe_item_simple_push(eulogium->layout, content); +// if (firstrunwiz) { + content = eulogium_multi_text_menu(eulogium, eulogium->layout, NULL, &txtdata, 0, EINA_TRUE); + if (!content) + return NULL; + elm_naviframe_item_simple_push(eulogium->layout, content); return eulogium->layout; } static void eulogium_setup(struct eulogium_data *eulogium) { + /* XXX this is very ugly */ + txtdata.count = 0; + while (txtdata.text[txtdata.count]) + txtdata.count++; + eulogium->print.name = NULL; eulogium->print.file = NULL; eulogium->print.progress = NULL; diff --git a/src/eulogium.h b/src/eulogium.h index b0dfb20..1f7154e 100644 --- a/src/eulogium.h +++ b/src/eulogium.h @@ -31,6 +31,11 @@ struct button_def { void *data; }; +struct multi_text { + uint_fast8_t count; + const char *text[]; +}; + void eulogium_print_file_set(struct eulogium_data *eulogium, char *filepath); void eulogium_button_cb_set(struct button_def *button, struct button_cb *cb); @@ -42,6 +47,6 @@ Evas_Object *eulogium_split_screen(Evas_Object *parent, Evas_Object *top, Evas_O Evas_Object *eulogium_tripple_button_menu(Evas_Object *parent, const struct button_def *left, const struct button_def *right, const struct button_def *bottom); Evas_Object *eulogium_print_menu(struct eulogium_data *eulogium, char *filepath); Evas_Object *eulogium_print_progress(struct eulogium_data *eulogium); -Evas_Object *eulogium_multi_text_menu(Evas_Object *parent, struct multi_text *data, const uint_fast8_t pagenum, Eina_Bool pageindex); +Evas_Object *eulogium_multi_text_menu(struct eulogium_data *eulogium, Evas_Object *parent, struct multi_text *data, const uint_fast8_t pagenum, Eina_Bool pageindex); #endif /* _EULOGIUM_H */ -- cgit v0.12