summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlliver Schinagl <o.schinagl@ultimaker.com>2015-07-30 11:17:56 (GMT)
committerOlliver Schinagl <o.schinagl@ultimaker.com>2015-07-30 11:17:56 (GMT)
commit7d9482dfa3636633e50303ba22059dbdc42c6164 (patch)
treed7e0f4cb5d0aad74be5d6fa5ce601da699230917
parent8bff6cf624d2cbe41eb06fc427db27541f14d7f8 (diff)
downloadeulogium-7d9482dfa3636633e50303ba22059dbdc42c6164.zip
eulogium-7d9482dfa3636633e50303ba22059dbdc42c6164.tar.gz
eulogium-7d9482dfa3636633e50303ba22059dbdc42c6164.tar.bz2
make progress screens generic
Signed-off-by: Olliver Schinagl <o.schinagl@ultimaker.com>
-rw-r--r--src/eulogium.c50
-rw-r--r--src/eulogium.h6
-rw-r--r--src/print_data.h1
-rw-r--r--src/procedures.c222
-rw-r--r--src/procedures.h22
-rw-r--r--src/ui_widgets.c133
-rw-r--r--src/ui_widgets.h4
7 files changed, 240 insertions, 198 deletions
diff --git a/src/eulogium.c b/src/eulogium.c
index e34f748..e4b8338 100644
--- a/src/eulogium.c
+++ b/src/eulogium.c
@@ -120,7 +120,7 @@ static struct button_def but_return = {
.data = NULL,
};
-static struct button_def but_print_abort_confirm = {
+struct button_def but_print_abort_confirm = {
.text = "ABORT",
.cb = {
.func = &_print_abort_confirm_cb,
@@ -140,7 +140,7 @@ static struct button_def but_print_abort = {
.data = NULL,
};
-static struct button_def but_print_tune = {
+struct button_def but_print_tune = {
.text = "TUNE",
.cb = {
.func = &_but_print_tune_cb,
@@ -1704,7 +1704,8 @@ static struct print_data progressbars[] = {
.jobname = NULL,
.time = 0,
.total_time = 0,
- .value = 0.0,
+ .value = -1.0,
+ .format = "%1.1f %%",
.proc_key = PROC_PRINT,
},
[PROC_FIRMWARE_UPDATE] = {
@@ -1713,7 +1714,8 @@ static struct print_data progressbars[] = {
.jobname = NULL,
.time = 0,
.total_time = 0,
- .value = 0.0,
+ .value = -1.0,
+ .format = "%1.1f %%",
.proc_key = PROC_FIRMWARE_UPDATE,
},
};
@@ -2511,7 +2513,7 @@ static char *parse_networks_for_display(struct network_data *networks)
for (i = 0; networks[i].obj_path; i++)
if (networks[i].ipv4) { // TODO || networks[i].ipv6) /* XXX if ipv4 exists, but is '', this will still print an empty field. */
buf = realloc(buf, pos + 34 * sizeof(char *));
- pos += sprintf(buf + pos, "%s%s IP: %s", i == 0 ? "": "<br>", (networks[i].tech == TECH_ETHERNET) ? "Ethernet" : (networks[i].tech == TECH_WIFI) ? "WiFi" : "", networks[i].ipv4);
+ pos += sprintf(buf + pos, "%s%s IP: %s", i == 0 ? "": "<br>", (networks[i].tech == TECH_ETHERNET) ? "LAN" : (networks[i].tech == TECH_WIFI) ? "WiFi" : "", networks[i].ipv4);
}
return buf;
@@ -2736,7 +2738,7 @@ void eulogium_button_data_set(struct button_def *button, void *data)
button->data = data;
}
-void eulogium_print_data_set(struct eulogium_data *eulogium, char *filepath)
+void eulogium_print_data_set(struct print_data *print, char *filepath)
{
char *buf;
size_t buf_size;
@@ -2747,11 +2749,8 @@ void eulogium_print_data_set(struct eulogium_data *eulogium, char *filepath)
buf_size = strlen("file://") + strlen(filepath) + 1;
buf = malloc(buf_size); /* TODO: remember to free this later! */
snprintf(buf, buf_size, "file://%s", filepath);
- eulogium->print.url = buf;
- eulogium->print.jobname = ecore_file_strip_ext(ecore_file_file_get(filepath));
- eulogium->print.flags = "";
- eulogium->print.material = 100.23; /* TODO */
- eulogium->print.time = 12;
+ print->url = buf;
+ print->jobname = ecore_file_strip_ext(ecore_file_file_get(filepath));
}
static void _cb_eulogium_exit(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2808,7 +2807,6 @@ static Eina_Bool _timer_progress_data_update_cb(void *data)
elm_progressbar_inverted_set(eulogium->progress, EINA_TRUE);
status = eulogium->printer.status;
}
-#endif
if (progress->value != value) {
elm_progressbar_value_set(eulogium->progress, progress->value);
value = progress->value;
@@ -2855,6 +2853,7 @@ static Eina_Bool _timer_progress_data_update_cb(void *data)
progress->time = time;
}
+#endif
return ECORE_CALLBACK_RENEW;
}
@@ -2973,6 +2972,8 @@ Evas_Object *eulogium_print_progress(Evas_Object *parent, struct eulogium_data *
return NULL;
}
+ return ui_widget_progress(parent, eulogium->procedures[PROC_PRINT].meta, &eulogium->procedures[PROC_PRINT].event);
+#if 0
_top = elm_box_add(parent);
evas_object_size_hint_weight_set(_top, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(_top, EVAS_HINT_FILL, EVAS_HINT_FILL);
@@ -2993,7 +2994,6 @@ Evas_Object *eulogium_print_progress(Evas_Object *parent, struct eulogium_data *
evas_object_show(eulogium->status);
elm_box_pack_end(_top, eulogium->status);
- printf("jobname: %s\n", progress->jobname);
eulogium->name = elm_label_add(_top);
elm_object_text_set(eulogium->name, progress->jobname);
elm_label_slide_mode_set(eulogium->name, ELM_LABEL_SLIDE_MODE_AUTO);
@@ -3018,6 +3018,7 @@ Evas_Object *eulogium_print_progress(Evas_Object *parent, struct eulogium_data *
evas_object_show(_bottom);
return eulogium_split_screen(parent, _top, _bottom);
+#endif
}
void eulogium_generic_error(struct eulogium_data *eulogium, uint_fast16_t error_code, const char *error_msg)
@@ -3145,12 +3146,13 @@ static void _cb_select_file(void *data, Evas_Object *obj EINA_UNUSED, void *even
new_dir->dir.path = malloc(new_dir_len); /* XXX memleak, but by copying we can free _filelist_data without worry */
strncpy(new_dir->dir.path, filepath, new_dir_len);
content = menu_widget_list(eulogium, eulogium->navi, new_dir);
- ui_stack_push(eulogium->navi, content, PAGE_NORMAL); /* XXX We need to set the correct page type here */
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
} else {
Evas_Object *content;
+ struct print_data *progress = eulogium->procedures[PROC_PRINT].meta; /* XXX hack, fix me soon! */
- eulogium_print_data_set(eulogium, filepath);
- procedure_print_start(&eulogium->print);
+ eulogium_print_data_set(progress, filepath);
+ procedure_print_start(progress);
content = eulogium_pre_print(eulogium->navi, eulogium);
ui_stack_push(eulogium->navi, content, PAGE_PRINTING);
}
@@ -3968,7 +3970,9 @@ static void _on_get_active_procedures_ret(void *data EINA_UNUSED, const Eldbus_M
return;
}
while (eldbus_message_iter_get_and_next(array, 'r', &act_proc_struct)) {
- if (eldbus_message_iter_arguments_get(act_proc_struct, "ss", &key, &step)) {
+ if (!(eldbus_message_iter_arguments_get(act_proc_struct, "ss", &key, &step))) {
+ EINA_LOG_ERR("Message content does not match expected \"ss\" signature. (%s)", eldbus_message_signature_get(msg));
+ } else {
struct procedure_data *procedure;
EINA_LOG_ERR("Key '%s' step '%s'", key, step);
@@ -4003,10 +4007,10 @@ static void _on_procedure_start_ret(void *data, const Eldbus_Message *msg)
EINA_LOG_ERR("Message content does not match expected \"ss\" signature. (%s)", eldbus_message_signature_get(msg));
return;
}
- EINA_LOG_ERR("Key '%s' step '%s'", key, step);
+// EINA_LOG_ERR("Key '%s' step '%s'", key, step);
procedure = procedure_get(key);
if (!procedure) {
- EINA_LOG_ERR("Unknown procedure %s", key);
+// EINA_LOG_ERR("Unknown procedure %s", key);
return;
}
procedure->status = PROC_ACTIVE;
@@ -4061,15 +4065,15 @@ static void _on_procedure_finished_ret(void *data EINA_UNUSED, const Eldbus_Mess
EINA_LOG_ERR("Message content does not match expected \"s\" signature. (%s)", eldbus_message_signature_get(msg));
return;
}
- EINA_LOG_ERR("finshed Key '%s'", key);
+// EINA_LOG_ERR("finshed Key '%s'", key);
procedure = procedure_get(key);
if (!procedure) {
- EINA_LOG_ERR("Unknown procedure %s", key);
+// EINA_LOG_ERR("Unknown procedure %s", key);
return;
}
procedure->status = PROC_FINISHED;
procedure->step_active = NULL;
- procedure_process_step(procedure, data);
+ procedure_process_finish(procedure, data);
}
static void _on_get_error_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
@@ -4262,7 +4266,7 @@ static void eulogium_setup(struct eulogium_data *eulogium)
procedure_meta_set(&eulogium->procedures[PROC_CURRENT_XY], PROC_META_SLIDER, &dials[PROC_CURRENT_XY]);
procedure_meta_set(&eulogium->procedures[PROC_CURRENT_Z], PROC_META_SLIDER, &dials[PROC_CURRENT_Z]);
procedure_meta_set(&eulogium->procedures[PROC_CURRENT_E], PROC_META_SLIDER, &dials[PROC_CURRENT_E]);
- procedure_meta_getall();
+ procedure_meta_getall(); /* XXX do we really want to get all metadata at start? Not only of active and special procedures? */
}
void _priviledges_drop(void)
diff --git a/src/eulogium.h b/src/eulogium.h
index 61cbaa2..2420276 100644
--- a/src/eulogium.h
+++ b/src/eulogium.h
@@ -75,9 +75,13 @@ struct multi_text {
const char *text[];
};
+/* XXX this does not belong here, temporary here for print_progress migration */
+struct button_def but_print_abort_confirm;
+struct button_def but_print_tune;
+
void eulogium_generic_error(struct eulogium_data *eulogium, uint_fast16_t error_code, const char *error_msg);
-void eulogium_print_data_set(struct eulogium_data *eulogium, char *filepath);
+void eulogium_print_data_set(struct print_data *print, char *filepath);
Evas_Object *eulogium_main_menu(Evas_Object *window, struct eulogium_data *eulogium);
Evas_Object *eulogium_split_screen(Evas_Object *parent, Evas_Object *top, Evas_Object *bottom);
diff --git a/src/print_data.h b/src/print_data.h
index b51252a..7a4dd0e 100644
--- a/src/print_data.h
+++ b/src/print_data.h
@@ -26,6 +26,7 @@ struct print_data { /* XXX progress data or the like, strip non-progress data */
int_fast32_t time;
int_fast32_t total_time;
double value; /* progress */
+ const char *format;
char *flags;
double material;
Eina_Bool block;
diff --git a/src/procedures.c b/src/procedures.c
index 916367f..21ef87e 100644
--- a/src/procedures.c
+++ b/src/procedures.c
@@ -120,7 +120,14 @@ static void _container_dict_basic_variant_append(Eldbus_Message_Iter *array, int
eldbus_message_iter_container_close(array, dict); /* } */
}
-static void _get_meta_progress(void *data, const void *key, Eldbus_Message_Iter *var)
+void _meta_progress_free(void *meta EINA_UNUSED, void *data EINA_UNUSED)
+{
+ /* This is a dummy function, we dont' need to free anything, as there was no malloced data.
+ * If however we do not supply this function to ecore_event_add() ecore tries to free
+ * the meta that's not free-able */
+}
+
+static void _meta_progress_get(void *data, const void *key, Eldbus_Message_Iter *var)
{
struct procedure_data *procedure = data;
struct print_data *progress = procedure->meta; /* XXX rename to progress data | check meta_type if it is the correct type. */
@@ -170,11 +177,10 @@ static void _get_meta_progress(void *data, const void *key, Eldbus_Message_Iter
}
free(var_sig);
-
- ecore_event_add(procedure->poll.event, NULL, NULL, NULL);
+ ecore_event_add(procedure->event.type, procedure->meta, &_meta_progress_free, NULL);
}
-static void _get_meta_cur_tar(void *data, const void *key, Eldbus_Message_Iter *var)
+static void _meta_cur_tar_get(void *data, const void *key, Eldbus_Message_Iter *var)
{
struct procedure_data *procedure = data;
struct settings_dial_data *dial_data = procedure->meta;
@@ -201,7 +207,7 @@ static void _get_meta_cur_tar(void *data, const void *key, Eldbus_Message_Iter *
}
free(var_sig);
-// ecore_event_add(procedure->poll.event, dial_data, NULL, NULL);
+// ecore_event_add(procedure->event.type, dial_data, NULL, NULL);
}
static void _on_start_print_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
@@ -269,10 +275,10 @@ void procedure_process_step(struct procedure_data *procedure, struct eulogium_da
return;
/* XXX TODO build 'remember previous screen so we don't redraw the same' */
- EINA_LOG_CRIT("%s", procedure->step_active->key);
+ EINA_LOG_CRIT("processing key %s step %s", procedure->key, procedure->step_active->key);
if (procedure->step_active->step == STEP_FIRMWARE_UPDATE_WRITING) {
procedure_metadata_poll(procedure, EINA_TRUE);
- content = ui_widget_progress(eulogium->navi, procedure);
+ content = ui_widget_progress(eulogium->navi, procedure->meta, &procedure->event);
page_state = PAGE_FIRMWARE;
}
if (procedure->step_active->step == STEP_PRINTING) {
@@ -280,7 +286,7 @@ void procedure_process_step(struct procedure_data *procedure, struct eulogium_da
page_state = PAGE_PRINTING;
}
if (procedure->step_active->step == PROC_WAIT_FOR_CLEANUP) {
- ui_stack_page_invalidate(eulogium->navi, PAGE_PRINTING);
+ ui_stack_page_invalidate(eulogium->navi, PAGE_PRINTING); /* XXX Probably move to process_finished */
content = eulogium_clean_print_bed(eulogium);
}
@@ -288,16 +294,23 @@ void procedure_process_step(struct procedure_data *procedure, struct eulogium_da
return;
navi_item = elm_naviframe_item_simple_push(eulogium->navi, content);
- elm_object_item_data_set(navi_item, (void *)page_state);
+ elm_object_item_data_set(navi_item, (void *)page_state); /* TODO remove? why is this still here */
if (page_state == PAGE_PRINTING)
elm_naviframe_item_pop_cb_set(navi_item, _print_progress_cleanup, eulogium);
}
-void procedure_procedure_finish(struct procedure_data *procedure, struct eulogium_data *eulogium)
+void procedure_process_finish(struct procedure_data *procedure, struct eulogium_data *eulogium)
{
if (!procedure)
return;
-
+
+ EINA_LOG_CRIT("finishing key %s", procedure->key);
+ if (procedure->proc_key == PROC_FIRMWARE_UPDATE) {
+ ui_stack_page_invalidate(eulogium->navi, PAGE_FIRMWARE);
+ ui_stack_pop(eulogium->navi);
+ }
+ if (procedure->proc_key == PROC_PRINT) {
+ };
}
static struct procedure_msg print_msgs[] = {
@@ -493,245 +506,261 @@ static struct procedure_step steps_material_change[] = {
static struct procedure_data procedures[] = {
[PROC_FIRMWARE_UPDATE] = {
.key = _PROC_FIRMWARE_UPDATE,
+ .proc_key = PROC_FIRMWARE_UPDATE,
.wizard = EINA_FALSE,
.status = PROC_READY,
- .parser = _get_meta_progress,
+ .parser = _meta_progress_get,
.executable = EINA_FALSE,
.available = EINA_FALSE,
._steps = steps_firmware_update,
.step_active = NULL,
.meta = NULL, /* struct progress_data */
- .poll = {
+ .event = {
.in = 0.5,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_PRINT] = {
.key = _PROC_PRINT,
+ .proc_key = PROC_PRINT,
.wizard = EINA_FALSE,
.status = PROC_READY,
- .parser = _get_meta_progress,
+ .parser = _meta_progress_get,
.executable = EINA_FALSE,
.available = EINA_FALSE,
._steps = steps_print,
.step_active = NULL,
.meta = NULL, /* struct print_data */
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_BED_HEATUP] = {
.key = _PROC_BED_HEATUP,
+ .proc_key = PROC_BED_HEATUP,
.wizard = EINA_FALSE,
.status = PROC_READY,
- .parser = _get_meta_cur_tar,
+ .parser = _meta_cur_tar_get,
.executable = EINA_FALSE,
.available = EINA_FALSE,
._steps = steps_bed_temp_set,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_HOTEND_HEATUP_0] = {
.key = _PROC_HOTEND_HEATUP_0,
+ .proc_key = PROC_HOTEND_HEATUP_0,
.wizard = EINA_FALSE,
.status = PROC_READY,
- .parser = _get_meta_cur_tar,
+ .parser = _meta_cur_tar_get,
.executable = EINA_FALSE,
.available = EINA_FALSE,
._steps = steps_hotend_temp_set,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL
},
},
[PROC_HOTEND_HEATUP_1] = {
.key = _PROC_HOTEND_HEATUP_1,
+ .proc_key = PROC_HOTEND_HEATUP_1,
.wizard = EINA_FALSE,
.status = PROC_READY,
- .parser = _get_meta_cur_tar,
+ .parser = _meta_cur_tar_get,
.executable = EINA_FALSE,
.available = EINA_FALSE,
._steps = steps_hotend_temp_set,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_HOTEND_ACTIVE_SET] = {
.key = _PROC_HOTEND_ACTIVE_SET,
+ .proc_key = PROC_HOTEND_ACTIVE_SET,
.wizard = EINA_FALSE,
.status = PROC_READY,
- .parser = _get_meta_cur_tar,
+ .parser = _meta_cur_tar_get,
.executable = EINA_FALSE,
.available = EINA_FALSE,
._steps = steps_hotend_active_set,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_PRINT_SPEED] = {
.key = _PROC_PRINT_SPEED,
+ .proc_key = PROC_PRINT_SPEED,
.wizard = EINA_FALSE,
.status = PROC_READY,
- .parser = _get_meta_cur_tar,
+ .parser = _meta_cur_tar_get,
.executable = EINA_FALSE,
.available = EINA_FALSE,
._steps = steps_print_speed_set,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_FAN_SPEED] = {
.key = _PROC_FAN_SPEED,
+ .proc_key = PROC_FAN_SPEED,
.wizard = EINA_FALSE,
.status = PROC_READY,
- .parser = _get_meta_cur_tar,
+ .parser = _meta_cur_tar_get,
.executable = EINA_FALSE,
.available = EINA_FALSE,
._steps = steps_fan_speed_set,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_FLOW_RATE] = {
.key = _PROC_FLOW_RATE,
+ .proc_key = PROC_FLOW_RATE,
.wizard = EINA_FALSE,
.status = PROC_READY,
- .parser = _get_meta_cur_tar,
+ .parser = _meta_cur_tar_get,
.executable = EINA_FALSE,
.available = EINA_FALSE,
._steps = steps_flow_rate_set,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_RETRACTION_LENGTH] = {
.key = _PROC_RETRACTION_LENGTH,
+ .proc_key = PROC_RETRACTION_LENGTH,
.wizard = EINA_FALSE,
.status = PROC_READY,
- .parser = _get_meta_cur_tar,
+ .parser = _meta_cur_tar_get,
.executable = EINA_FALSE,
.available = EINA_FALSE,
._steps = steps_retraction_length_set,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_RETRACTION_SPEED] = {
.key = _PROC_RETRACTION_SPEED,
+ .proc_key = PROC_RETRACTION_SPEED,
.wizard = EINA_FALSE,
.status = PROC_READY,
- .parser = _get_meta_cur_tar,
+ .parser = _meta_cur_tar_get,
.executable = EINA_FALSE,
.available = EINA_FALSE,
._steps = steps_retraction_speed_set,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_RETRACTION_ZHOP] = {
.key = _PROC_RETRACTION_ZHOP,
+ .proc_key = PROC_RETRACTION_ZHOP,
.wizard = EINA_FALSE,
.status = PROC_READY,
- .parser = _get_meta_cur_tar,
+ .parser = _meta_cur_tar_get,
.executable = EINA_FALSE,
.available = EINA_FALSE,
._steps = steps_retraction_zhop_set,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_BED_LEVEL_AUTO] = {
.key = _PROC_BED_LEVEL_AUTO,
+ .proc_key = PROC_BED_LEVEL_AUTO,
.wizard = EINA_FALSE,
.status = PROC_READY,
- .parser = _get_meta_cur_tar,
+ .parser = _meta_cur_tar_get,
.executable = EINA_FALSE,
.available = EINA_FALSE,
._steps = steps_bed_level_auto,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_BED_RAISE] = {
.key = _PROC_BED_RAISE,
+ .proc_key = PROC_BED_RAISE,
.wizard = EINA_FALSE,
.status = PROC_READY,
- .parser = _get_meta_cur_tar,
+ .parser = _meta_cur_tar_get,
.executable = EINA_FALSE,
.available = EINA_FALSE,
._steps = steps_bed_raise,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_BED_HOME] = {
.key = _PROC_BED_HOME,
+ .proc_key = PROC_BED_HOME,
.wizard = EINA_FALSE,
.status = PROC_READY,
- .parser = _get_meta_cur_tar,
+ .parser = _meta_cur_tar_get,
.executable = EINA_FALSE,
.available = EINA_FALSE,
._steps = steps_bed_home,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_BED_MOVE] = {
.key = _PROC_BED_MOVE,
+ .proc_key = PROC_BED_MOVE,
.wizard = EINA_FALSE,
.status = PROC_READY,
.parser = NULL,
@@ -740,30 +769,32 @@ static struct procedure_data procedures[] = {
._steps = steps_move,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_HEAD_HOME] = {
.key = _PROC_HEAD_HOME,
+ .proc_key = PROC_HEAD_HOME,
.wizard = EINA_FALSE,
.status = PROC_READY,
- .parser = _get_meta_cur_tar,
+ .parser = _meta_cur_tar_get,
.executable = EINA_FALSE,
.available = EINA_FALSE,
._steps = steps_head_home,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_MATERIAL_MOVE_0] = {
.key = _PROC_MATERIAL_MOVE_0,
+ .proc_key = PROC_MATERIAL_MOVE_0,
.wizard = EINA_FALSE,
.status = PROC_READY,
.parser = NULL,
@@ -772,14 +803,15 @@ static struct procedure_data procedures[] = {
._steps = steps_move,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_MATERIAL_MOVE_1] = {
.key = _PROC_MATERIAL_MOVE_1,
+ .proc_key = PROC_MATERIAL_MOVE_1,
.wizard = EINA_FALSE,
.status = PROC_READY,
.parser = NULL,
@@ -788,94 +820,100 @@ static struct procedure_data procedures[] = {
._steps = steps_move,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_JERK_XY] = {
.key = _PROC_JERK_XY,
+ .proc_key = PROC_JERK_XY,
.wizard = EINA_FALSE,
.status = PROC_READY,
- .parser = _get_meta_cur_tar,
+ .parser = _meta_cur_tar_get,
.executable = EINA_FALSE,
.available = EINA_FALSE,
._steps = steps_jerk_xyz_set,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_JERK_Z] = {
.key = _PROC_JERK_Z,
+ .proc_key = PROC_JERK_Z,
.wizard = EINA_FALSE,
.status = PROC_READY,
- .parser = _get_meta_cur_tar,
+ .parser = _meta_cur_tar_get,
.executable = EINA_FALSE,
.available = EINA_FALSE,
._steps = steps_jerk_xyz_set,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_CURRENT_XY] = {
.key = _PROC_CURRENT_XY,
+ .proc_key = PROC_CURRENT_XY,
.wizard = EINA_FALSE,
.status = PROC_READY,
- .parser = _get_meta_cur_tar,
+ .parser = _meta_cur_tar_get,
.executable = EINA_FALSE,
.available = EINA_FALSE,
._steps = steps_current_xyze_set,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_CURRENT_Z] = {
.key = _PROC_CURRENT_Z,
+ .proc_key = PROC_CURRENT_Z,
.wizard = EINA_FALSE,
.status = PROC_READY,
- .parser = _get_meta_cur_tar,
+ .parser = _meta_cur_tar_get,
.executable = EINA_FALSE,
.available = EINA_FALSE,
._steps = steps_current_xyze_set,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_CURRENT_E] = {
.key = _PROC_CURRENT_E,
+ .proc_key = PROC_CURRENT_E,
.wizard = EINA_FALSE,
.status = PROC_READY,
- .parser = _get_meta_cur_tar,
+ .parser = _meta_cur_tar_get,
.executable = EINA_FALSE,
.available = EINA_FALSE,
._steps = steps_current_xyze_set,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_MATERIAL_UNLOAD] = {
.key = _PROC_MATERIAL_UNLOAD,
+ .proc_key = PROC_MATERIAL_UNLOAD,
.wizard = EINA_TRUE,
.status = PROC_READY,
.parser = NULL,
@@ -884,14 +922,15 @@ static struct procedure_data procedures[] = {
._steps = steps_material_unload,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_MATERIAL_LOAD] = {
.key = _PROC_MATERIAL_LOAD,
+ .proc_key = PROC_MATERIAL_LOAD,
.wizard = EINA_TRUE,
.status = PROC_READY,
.parser = NULL,
@@ -900,14 +939,15 @@ static struct procedure_data procedures[] = {
._steps = steps_material_load,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
[PROC_MATERIAL_CHANGE] = {
.key = _PROC_MATERIAL_CHANGE,
+ .proc_key = PROC_MATERIAL_CHANGE,
.wizard = EINA_TRUE,
.status = PROC_READY,
.parser = NULL,
@@ -916,10 +956,10 @@ static struct procedure_data procedures[] = {
._steps = steps_material_change,
.step_active = NULL,
.meta = NULL,
- .poll = {
+ .event = {
.in = 0.0,
.timer = NULL,
- .event = 0,
+ .type = 0,
},
},
};
@@ -1052,14 +1092,14 @@ Eldbus_Pending *procedure_target_set(const enum procedure_key proc_key)
void procedure_metadata_poll(struct procedure_data *procedure, Eina_Bool polling)
{
if (polling)
- if (procedure->poll.timer)
+ if (procedure->event.timer)
return; /* Timer already running */
- // procedure->poll.timer = ecore_timer_add(procedure->poll.in, procedure->poll.func, procedure);
- if (!procedure->poll.timer) {
+ // procedure->event.timer = ecore_timer_add(procedure->event.in, procedure->event.func, procedure);
+ if (!procedure->event.timer) {
EINA_LOG_CRIT("Unable to create metadata polling timer");
} else {
- if (procedure->poll.timer)
- ecore_timer_del(procedure->poll.timer);
+ if (procedure->event.timer)
+ ecore_timer_del(procedure->event.timer);
else
EINA_LOG_CRIT("Unable to delete non-existing timer");
}
@@ -1092,7 +1132,7 @@ struct procedure_data *procedures_init(Eldbus_Proxy *proxy)
for (i = PROC_NONE; i < PROC_LAST; i++) {
if (procedures[i].key)
- procedures[i].poll.event = ecore_event_type_new();
+ procedures[i].event.type = ecore_event_type_new();
}
/* TODO: we probably should do something here to prepare all procedures and their meta data
diff --git a/src/procedures.h b/src/procedures.h
index 4f6f48a..40b032f 100644
--- a/src/procedures.h
+++ b/src/procedures.h
@@ -49,7 +49,7 @@ enum procedure_status {
PROC_FINISHED,
};
-enum procedure_key { /* XXX this will cause problems and has to change */
+enum procedure_key { /* XXX this will cause problems and has to change as we want to iterate over this list */
PROC_NONE = 0,
PROC_BED_MOVE,
PROC_BED_HEATUP,
@@ -125,10 +125,10 @@ enum meta_type {
PROC_META_SPINNER,
};
-struct poll_data {
+struct event_info {
double in;
Ecore_Timer *timer;
- int event;
+ int type;
};
struct meta_data {
@@ -138,19 +138,21 @@ struct meta_data {
struct procedure_data {
const char *key;
+ enum procedure_key proc_key;
enum procedure_status status;
Eina_Bool wizard;
- const char *sig;
+ const char *sig; /* XXX can go */
const char *para; /* TODO va_list to go with sig? */
- Eina_Bool available;
- Eina_Bool executable;
+ Eina_Bool available; /* XXX can go */
+ Eina_Bool executable; /* XXX can go */
void (*parser)(void *data, const void *key, Eldbus_Message_Iter *variant);
- enum meta_type type;
- void *meta; /* TODO every proc. has meta data, some needs to be periodically updated (print_data), others on signal changes. needs enum guard to identify which meta we have. */
- const struct procedure_msg *msgs;
+ enum meta_type type; /* TODO remove in favor of meta \/ */
+ void *meta; /* TODO remove in favor of meta \/. */
+// struct meta_data meta;
+ const struct procedure_msg *msgs; /* XXX can go */
const struct procedure_step *_steps; /* TODO optional? maybe we don't even have to know the list */
const struct procedure_step *step_active;
- struct poll_data poll;
+ struct event_info event;
};
struct eulogium_data; /* XXX remove later when struct eulogium gets refactored. */
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 */
}
diff --git a/src/ui_widgets.h b/src/ui_widgets.h
index 1620f6c..1298ecc 100644
--- a/src/ui_widgets.h
+++ b/src/ui_widgets.h
@@ -78,6 +78,7 @@ struct screen_def {
* Always make sure that it fits into that. At birth, this enum was intended
* to never have more then a handful of states.
*/
+/* TODO investigate if this can't be replace with the PROC enum */
enum navi_page_state {
PAGE_BOTTOM,
PAGE_NORMAL,
@@ -101,7 +102,8 @@ void ui_stack_page_invalidate(Evas_Object *navi, const enum navi_page_state page
Evas_Object *ui_widget_slider(Evas_Object *parent, struct eulogium_data *eulogium, struct settings_dial_data *dial_data);
Evas_Object *ui_widget_spinner(Evas_Object *parent, struct eulogium_data *eulogium, struct settings_dial_data *dial_data);
Evas_Object *ui_widget_spinner_add(Evas_Object *parent, struct settings_dial_data *dial_data);
-Evas_Object *ui_widget_progress(Evas_Object *parent, const struct procedure_data *procedure);
+Evas_Object *ui_widget_progress(Evas_Object *parent, const struct print_data *progress, const struct event_info *event);
+Evas_Object *widgets_progressbar_add(Evas_Object *parent, const struct print_data *progress, const struct event_info *event);
void ui_init(void);