diff options
author | Olliver Schinagl <o.schinagl@ultimaker.com> | 2015-07-30 13:31:59 (GMT) |
---|---|---|
committer | Olliver Schinagl <o.schinagl@ultimaker.com> | 2015-07-30 13:31:59 (GMT) |
commit | 98430e79bd1cb3884539b00e69b4e4915e9562fb (patch) | |
tree | bc8a92976a9b53f28fb60259c08164bd4fe9bafb /src/ui_widgets.c | |
parent | 7d9482dfa3636633e50303ba22059dbdc42c6164 (diff) | |
download | eulogium-98430e79bd1cb3884539b00e69b4e4915e9562fb.zip eulogium-98430e79bd1cb3884539b00e69b4e4915e9562fb.tar.gz eulogium-98430e79bd1cb3884539b00e69b4e4915e9562fb.tar.bz2 |
fix print progress procedures, untested is procedure finish
Signed-off-by: Olliver Schinagl <o.schinagl@ultimaker.com>
Diffstat (limited to 'src/ui_widgets.c')
-rw-r--r-- | src/ui_widgets.c | 117 |
1 files changed, 93 insertions, 24 deletions
diff --git a/src/ui_widgets.c b/src/ui_widgets.c index fdd5f24..ec69984 100644 --- a/src/ui_widgets.c +++ b/src/ui_widgets.c @@ -380,38 +380,111 @@ static void _widget_progress_del(void *data, Evas *e EINA_UNUSED, Evas_Object *e ecore_event_handler_del(handler); } -static Eina_Bool _widget_progress_update(void *data, int type EINA_UNUSED, void *ev) +#define SECOND 1L +#define MINUTE (60L * SECOND) +#define HOUR (60L * MINUTE) +#define DAY (24L * HOUR) +#define WEEK (7L * DAY) +#define MONTH (4L * WEEK) +#define YEAR (52L * WEEK) + +static Eina_Bool _widget_progress_status_update(void *data, int type EINA_UNUSED, void *ev) { - Evas_Object *progressbar = data; + Evas_Object *progress_status = data; + const struct print_data *progress = ev; + int_fast32_t time = 0; + char buf[35], *str; /* 35 is a random approximation */ + + if (progress->time < SECOND) { + str = N_("Time unknown"); + } + if (progress->time > SECOND) { + str = N_("Time left: %d sec%s"); + time = progress->time; + } + if (progress->time > MINUTE) { + str = N_("Time left: %d min%s"); + time = progress->time / MINUTE; + } + if (progress->time > HOUR) { + str = N_("Time left: %d hour%s"); + time = progress->time / HOUR; + } + if (progress->time > DAY) { + str = N_("Time left: %d day%s"); + time = progress->time / DAY; + } + if (progress->time > WEEK) { + str = N_("Time left: %d week%s"); + time = progress->time / WEEK; + } + if (progress->time > MONTH) { + str = N_("Time left: %d month%s"); + time = progress->time / MONTH; + } + if (progress->time > YEAR) { + str = N_("Time left: %d year%s"); + time = progress->time / YEAR; + } + + snprintf(buf, sizeof(buf), str, (int)time, (time > 1) ? "s" : ""); /* TODO: check for real i10n time funcs */ + elm_object_text_set(progress_status, _(buf)); + + return ECORE_CALLBACK_PASS_ON; +} + +Evas_Object *widgets_progress_status_add(Evas_Object *parent, const struct print_data *progress, const struct event_info *event) +{ + Evas_Object *progress_status; + Ecore_Event_Handler *handler; + + progress_status = elm_label_add(parent); + elm_object_text_set(progress_status, _("Unknown status")); + elm_label_slide_mode_set(progress_status, ELM_LABEL_SLIDE_MODE_NONE); + evas_object_size_hint_align_set(progress_status, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(progress_status); + + _widget_progress_status_update((void *)progress_status, event->type, (void *)progress); + handler = ecore_event_handler_add(event->type, _widget_progress_status_update, progress_status); + evas_object_event_callback_add(progress_status, EVAS_CALLBACK_DEL, _widget_progress_del, handler); + evas_object_show(progress_status); + + return progress_status; +} + +static Eina_Bool _widget_progress_bar_update(void *data, int type EINA_UNUSED, void *ev) +{ + Evas_Object *progress_bar = data; const struct print_data *progress = ev; if (progress->value < 0) { - elm_progressbar_pulse_set(progressbar, EINA_TRUE); - elm_progressbar_pulse(progressbar, EINA_TRUE); + elm_progressbar_pulse_set(progress_bar, EINA_TRUE); + elm_progressbar_pulse(progress_bar, EINA_TRUE); } else { - elm_progressbar_pulse_set(progressbar, EINA_FALSE); - elm_progressbar_pulse(progressbar, EINA_FALSE); - elm_progressbar_value_set(progressbar, progress->value); + elm_progressbar_pulse_set(progress_bar, EINA_FALSE); + elm_progressbar_pulse(progress_bar, EINA_FALSE); + elm_progressbar_value_set(progress_bar, progress->value); } return ECORE_CALLBACK_PASS_ON; } -Evas_Object *widgets_progressbar_add(Evas_Object *parent, const struct print_data *progress, const struct event_info *event) +Evas_Object *widgets_progress_bar_add(Evas_Object *parent, const struct print_data *progress, const struct event_info *event) { - Evas_Object *obj; + Evas_Object *progress_bar; Ecore_Event_Handler *handler; - 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); + progress_bar = elm_progressbar_add(parent); + elm_progressbar_horizontal_set(progress_bar, EINA_TRUE); + elm_progressbar_unit_format_set(progress_bar, progress->format); + evas_object_size_hint_align_set(progress_bar, EVAS_HINT_FILL, EVAS_HINT_FILL); - return obj; + _widget_progress_bar_update((void *)progress_bar, event->type, (void *)progress); + handler = ecore_event_handler_add(event->type, _widget_progress_bar_update, progress_bar); + evas_object_event_callback_add(progress_bar, EVAS_CALLBACK_DEL, _widget_progress_del, handler); + evas_object_show(progress_bar); + + return progress_bar; } Evas_Object *ui_widget_progress(Evas_Object *parent, const struct print_data *progress, const struct event_info *event) @@ -432,11 +505,7 @@ Evas_Object *ui_widget_progress(Evas_Object *parent, const struct print_data *pr 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); + obj = widgets_progress_status_add(_top, progress, event); elm_box_pack_end(_top, obj); obj = elm_label_add(_top); @@ -449,7 +518,7 @@ Evas_Object *ui_widget_progress(Evas_Object *parent, const struct print_data *pr evas_object_show(obj); elm_box_pack_end(_top, obj); - obj = widgets_progressbar_add(_top, progress, event); + obj = widgets_progress_bar_add(_top, progress, event); elm_box_pack_end(_top, obj); _bottom = eulogium_dual_button_add(parent, &but_print_tune, &but_print_abort_confirm); |