From 4c8d3b5802f325c1cafd45f1eaa8f1bf30da502b Mon Sep 17 00:00:00 2001 From: Olliver Schinagl Date: Thu, 9 Apr 2015 07:19:36 +0200 Subject: make multi screen next button recursive Signed-off-by: Olliver Schinagl --- src/eulogium.c | 84 +++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 63 insertions(+), 21 deletions(-) diff --git a/src/eulogium.c b/src/eulogium.c index de60bd1..56ecfc3 100644 --- a/src/eulogium.c +++ b/src/eulogium.c @@ -485,12 +485,64 @@ Evas_Object *eulogium_multi_text_menu(struct eulogium_data *eulogium, Evas_Objec return eulogium_split_screen(parent, _top, _bottom); } +struct _multi_screen_next_cb_data { + struct eulogium_data *eulogium; + struct multi_screen_data *screen_data; + uint_fast8_t pagenum; + Eina_Bool pageindex; +}; + +static void _eulogium_multi_screen_next_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +{ + Evas_Object *content; + struct eulogium_data *eulogium = ((struct _multi_screen_next_cb_data *)data)->eulogium; + uint_fast8_t pagenum = ((struct _multi_screen_next_cb_data *)data)->pagenum; + Eina_Bool pageindex = ((struct _multi_screen_next_cb_data *)data)->pageindex; + struct multi_screen_data *screen_data = ((struct _multi_screen_next_cb_data *)data)->screen_data; + + if (pagenum >= screen_data->count) { + Elm_Object_Item *item; + + item = elm_naviframe_bottom_item_get(eulogium->layout); + if (item) + elm_naviframe_item_pop_to(item); + /* XXX what else? */ + } else { + content = eulogium_multi_screen_menu(eulogium, eulogium->layout, screen_data, pagenum, pageindex); + if (content) + elm_naviframe_item_simple_push(eulogium->layout, content); + /* XXX what else? */ + } + free(data); +} + Evas_Object *eulogium_multi_screen_menu(struct eulogium_data *eulogium, Evas_Object *parent, struct multi_screen_data *screen_data, uint_fast8_t pagenum, Eina_Bool pageindex) { Evas_Object *object; Evas_Object *_top, *_bottom; + struct _multi_screen_next_cb_data *multi_screen_next_cb_data; char buf[6]; + _top = elm_box_add(parent); + evas_object_show(_top); + + if (screen_data->count == 0) { + printf("Tut tut, we can't have a count of 0!\n"); /* TODO proper debugging infra */ + return NULL; + } + + if (pagenum >= screen_data->count) + pagenum = screen_data->count - 1; + + if (pageindex) { + object = elm_label_add(_top); + snprintf(buf, sizeof(buf), "%d/%d", pagenum + 1, screen_data->count); + elm_object_text_set(object, buf); + evas_object_show(object); + evas_object_size_hint_align_set(object, 1.0, 0); + elm_box_pack_end(_top, object); + } + #if 0 printf("%s\n", screen->text); printf("%s\n", screen->text); @@ -507,41 +559,31 @@ Evas_Object *eulogium_multi_screen_menu(struct eulogium_data *eulogium, Evas_Obj break; } #endif - _top = elm_box_add(parent); - evas_object_show(_top); - - if (pagenum >= screen_data->count) - pagenum = screen_data->count - 1; - - if (pageindex) { - object = elm_label_add(_top); - snprintf(buf, sizeof(buf), "%d/%d", pagenum + 1, screen_data->count); - elm_object_text_set(object, buf); - evas_object_show(object); - evas_object_size_hint_align_set(object, 1.0, 0); - elm_box_pack_end(_top, object); - } - _bottom = elm_box_add(parent); elm_box_horizontal_set(_bottom, EINA_TRUE); evas_object_show(_bottom); - if (screen_data->screen[0].prev_button) { + multi_screen_next_cb_data = malloc(sizeof(struct _multi_screen_next_cb_data)); + multi_screen_next_cb_data->eulogium = eulogium; + multi_screen_next_cb_data->screen_data = screen_data; + multi_screen_next_cb_data->pagenum = pagenum + 1; + multi_screen_next_cb_data->pageindex = EINA_TRUE; + + if (screen_data->screen[pagenum].prev_button) { object = elm_button_add(parent); evas_object_size_hint_align_set(object, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_object_text_set(object, screen_data->screen[0].prev_button); + elm_object_text_set(object, screen_data->screen[pagenum].prev_button); evas_object_smart_callback_add(object, "clicked", _cb_content_prev_set, eulogium); evas_object_show(object); elm_box_pack_end(_bottom, object); - printf("Button created\n"); } - if (screen_data->screen[0].next_button) { + if (screen_data->screen[pagenum].next_button) { object = elm_button_add(parent); evas_object_size_hint_align_set(object, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_object_text_set(object, screen_data->screen[0].next_button); -// evas_object_smart_callback_add(_bottom, "clicked", _eulogium_multi_text_next_cb, multi_text_next_cb_data); + elm_object_text_set(object, screen_data->screen[pagenum].next_button); + evas_object_smart_callback_add(object, "clicked", _eulogium_multi_screen_next_cb, multi_screen_next_cb_data); evas_object_show(object); elm_box_pack_end(_bottom, object); } -- cgit v0.12