summaryrefslogtreecommitdiffstats
path: root/src/ui_widgets.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui_widgets.c')
-rw-r--r--src/ui_widgets.c133
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 */
}