summaryrefslogtreecommitdiffstats
path: root/src/ui_widgets.c
diff options
context:
space:
mode:
authorOlliver Schinagl <o.schinagl@ultimaker.com>2015-07-30 13:31:59 (GMT)
committerOlliver Schinagl <o.schinagl@ultimaker.com>2015-07-30 13:31:59 (GMT)
commit98430e79bd1cb3884539b00e69b4e4915e9562fb (patch)
treebc8a92976a9b53f28fb60259c08164bd4fe9bafb /src/ui_widgets.c
parent7d9482dfa3636633e50303ba22059dbdc42c6164 (diff)
downloadeulogium-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.c117
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);