diff options
Diffstat (limited to 'src/ui_widgets.c')
-rw-r--r-- | src/ui_widgets.c | 133 |
1 files changed, 61 insertions, 72 deletions
diff --git a/src/ui_widgets.c b/src/ui_widgets.c index f690fb6..fdd5f24 100644 --- a/src/ui_widgets.c +++ b/src/ui_widgets.c @@ -52,7 +52,7 @@ void _event_handler_from_navi_del(const Evas_Object *navi, const char *str) * place to not pop the very first page of the stack, as that is our * 'main-menu'. TODO Improve doc, this is just an early note. */ -Eina_Bool ui_stack_pop(const Evas_Object *navi) /* TODO replace with just the navi pointer */ +Eina_Bool ui_stack_pop(const Evas_Object *navi) { Eina_List *navi_list, *l; Elm_Object_Item *navi_item; @@ -284,7 +284,7 @@ Evas_Object *ui_widget_spinner(Evas_Object *parent, struct eulogium_data *eulogi Evas_Object *ui_widget_spinner_add(Evas_Object *parent, struct settings_dial_data *dial_data) { Evas_Object *obj, *_top, *_bottom; - Ecore_Event_Handler *handler; +// Ecore_Event_Handler *handler; _top = elm_box_add(parent); evas_object_size_hint_weight_set(_top, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -372,47 +372,51 @@ Evas_Object *ui_widget_slider(Evas_Object *parent, struct eulogium_data *eulogiu return eulogium_split_screen(parent, _top, _bottom); } -struct _progress_screen_data { - Evas_Object *title; - Evas_Object *status; - Evas_Object *jobname; - Evas_Object *progressbar; - const struct print_data *progress_data; - Ecore_Event_Handler *handler; -}; - static void _widget_progress_del(void *data, Evas *e EINA_UNUSED, Evas_Object *eo EINA_UNUSED, void *event_info EINA_UNUSED) { - struct _progress_screen_data *screen = data; - - if (screen->handler) - ecore_event_handler_del(screen->handler); - screen->handler = NULL; + Ecore_Event_Handler *handler = data; - free(screen); + if (handler) + ecore_event_handler_del(handler); } -static Eina_Bool _widget_progress_update(void *data, int type EINA_UNUSED, void *event_info EINA_UNUSED) +static Eina_Bool _widget_progress_update(void *data, int type EINA_UNUSED, void *ev) { - struct _progress_screen_data *screen = data; - const struct print_data *progress = screen->progress_data; + Evas_Object *progressbar = data; + const struct print_data *progress = ev; - elm_object_text_set(screen->jobname, _(progress->jobname)); - elm_object_text_set(screen->status, _(progress->status)); - elm_progressbar_value_set(screen->progressbar, progress->value); + if (progress->value < 0) { + elm_progressbar_pulse_set(progressbar, EINA_TRUE); + elm_progressbar_pulse(progressbar, EINA_TRUE); + } else { + elm_progressbar_pulse_set(progressbar, EINA_FALSE); + elm_progressbar_pulse(progressbar, EINA_FALSE); + elm_progressbar_value_set(progressbar, progress->value); + } return ECORE_CALLBACK_PASS_ON; } -Evas_Object *ui_widget_progress(Evas_Object *parent, const struct procedure_data *procedure) +Evas_Object *widgets_progressbar_add(Evas_Object *parent, const struct print_data *progress, const struct event_info *event) { - struct print_data *progress = procedure->meta; /* XXX rename to progress data | check meta_type if it is the correct type. */ - Evas_Object *_top, *_bottom, *content; + Evas_Object *obj; Ecore_Event_Handler *handler; - struct _progress_screen_data *screen; - screen = calloc(1, sizeof(struct _progress_screen_data)); - screen->progress_data = progress; + obj = elm_progressbar_add(parent); + elm_progressbar_horizontal_set(obj, EINA_TRUE); + elm_progressbar_unit_format_set(obj, progress->format); + evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, EVAS_HINT_FILL); + _widget_progress_update((void *)obj, event->type, (void *)progress); + handler = ecore_event_handler_add(event->type, _widget_progress_update, obj); + evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _widget_progress_del, handler); + evas_object_show(obj); + + return obj; +} + +Evas_Object *ui_widget_progress(Evas_Object *parent, const struct print_data *progress, const struct event_info *event) +{ + Evas_Object *_top, *_bottom, *content, *obj; _top = elm_box_add(parent); evas_object_size_hint_weight_set(_top, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -420,58 +424,43 @@ Evas_Object *ui_widget_progress(Evas_Object *parent, const struct procedure_data elm_box_homogeneous_set(_top, EINA_FALSE); evas_object_show(_top); - screen->title = elm_label_add(_top); /* TODO make label sit inverted at the top */ - elm_object_text_set(screen->title, _(progress->title)); - elm_label_slide_mode_set(screen->title, ELM_LABEL_SLIDE_MODE_NONE); - evas_object_size_hint_align_set(screen->title, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(screen->title); - elm_box_pack_end(_top, screen->title); - - screen->status = elm_label_add(_top); - elm_object_text_set(screen->status, _("Unknown status")); - elm_label_slide_mode_set(screen->status, ELM_LABEL_SLIDE_MODE_NONE); - evas_object_size_hint_align_set(screen->status, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(screen->status); - elm_box_pack_end(_top, screen->status); - - screen->jobname = elm_label_add(_top); - elm_object_text_set(screen->jobname, progress->jobname); - elm_label_slide_mode_set(screen->jobname, ELM_LABEL_SLIDE_MODE_AUTO); + obj = elm_label_add(_top); + elm_object_style_set(obj, "title"); + elm_object_text_set(obj, _(progress->title)); /* TODO move title outside of the ui element when splitting widgets further */ + elm_label_slide_mode_set(obj, ELM_LABEL_SLIDE_MODE_NONE); + evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(obj); + elm_box_pack_end(_top, obj); + + obj = elm_label_add(_top); + elm_object_text_set(obj, _("Unknown status")); + elm_label_slide_mode_set(obj, ELM_LABEL_SLIDE_MODE_NONE); + evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(obj); + elm_box_pack_end(_top, obj); + + obj = elm_label_add(_top); + elm_object_text_set(obj, progress->jobname); + elm_label_slide_mode_set(obj, ELM_LABEL_SLIDE_MODE_AUTO); //elm_label_slide_speed_set(object, 2); - elm_object_style_set(screen->jobname, "slide_bounce"); - elm_label_slide_go(screen->jobname); /* XXX only slide when strlen > 20? as a workaround to this not working automatically. */ - evas_object_size_hint_align_set(screen->jobname, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(screen->jobname); - elm_box_pack_end(_top, screen->jobname); - - screen->progressbar = elm_progressbar_add(_top); - elm_progressbar_horizontal_set(screen->progressbar, EINA_TRUE); - if (progress->value < 0) { - elm_progressbar_pulse_set(screen->progressbar, EINA_TRUE); - elm_progressbar_pulse(screen->progressbar, EINA_TRUE); - } else { - elm_progressbar_pulse_set(screen->progressbar, EINA_FALSE); - elm_progressbar_pulse(screen->progressbar, EINA_FALSE); - } - elm_progressbar_value_set(screen->progressbar, progress->value); /* get this from the procedure meta data */ - elm_progressbar_unit_format_set(screen->progressbar, "%1.1f %%"); - evas_object_size_hint_align_set(screen->progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(screen->progressbar); - elm_box_pack_end(_top, screen->progressbar); + elm_object_style_set(obj, "slide_bounce"); + elm_label_slide_go(obj); /* XXX only slide when strlen > 20? as a workaround to this not working automatically. */ + evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(obj); + elm_box_pack_end(_top, obj); - handler = ecore_event_handler_add(procedure->poll.event, _widget_progress_update, screen); - /* XXX handler add to something?; this is broken atm */ + obj = widgets_progressbar_add(_top, progress, event); + elm_box_pack_end(_top, obj); -// _bottom = eulogium_dual_button_add(parent, &but_print_tune, &but_print_abort_confirm); -// evas_object_show(_bottom); + _bottom = eulogium_dual_button_add(parent, &but_print_tune, &but_print_abort_confirm); + evas_object_show(_bottom); content = eulogium_split_screen(parent, _top, _bottom); - evas_object_event_callback_add(content, EVAS_CALLBACK_DEL, _widget_progress_del, screen); return content; } void ui_init(void) { - wizard_init_all(); + wizard_init_all(); /* XXX this does not belong here! init from main/init */ } |