diff options
Diffstat (limited to 'src/eulogium.c')
-rw-r--r-- | src/eulogium.c | 989 |
1 files changed, 622 insertions, 367 deletions
diff --git a/src/eulogium.c b/src/eulogium.c index 280e204..a9ddeee 100644 --- a/src/eulogium.c +++ b/src/eulogium.c @@ -18,38 +18,40 @@ #include "eulogium_item_list.h" #include "eulogium_private.h" #include "gettext.h" +#include "network.h" +#include "print_data.h" #include "procedures.h" +#include "settings_data.h" +#include "ui_input.h" #include "ui_widgets.h" #define COPYRIGHT "Copyright © 2015 Olliver Schinagl <o.schinagl@ultimaker.com> and various contributors (see AUTHORS)." -#define SECOND 1UL -#define MINUTE (60UL * SECOND) -#define HOUR (60UL * MINUTE) -#define DAY (24UL * HOUR) -#define WEEK (7UL * DAY) -#define MONTH (4UL * WEEK) -#define YEAR (52UL * WEEK) - -int INPUT_MOUSE_WHEEL_UP = 0; /* For custom ecore_event handling */ -int INPUT_MOUSE_WHEEL_DOWN = 0; /* For custom ecore_event handling */ +#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) /* TODO this LUT can be much improved */ char *griffin_print_status[] = { - gettext_noop("Unknown"), - gettext_noop("Disconnected"), - gettext_noop("Error"), - gettext_noop("First Run Wizard"), - gettext_noop("IDLE"), - gettext_noop("Slicing"), - gettext_noop("Heating"), - gettext_noop("Printing"), - gettext_noop("Cooling down"), - gettext_noop("Wait for Removal"), - gettext_noop("Paused"), + N_("Unknown"), + N_("Disconnected"), + N_("Error"), + N_("First Run Wizard"), + N_("IDLE"), + N_("Slicing"), + N_("Heating"), + N_("Printing"), + N_("Cooling down"), + N_("Wait for Removal"), + N_("Paused"), }; /* TODO Create def for a menu/screen to house all the buttons */ +/* BTN is better then but-sex. */ static void _on_print_abort_ret(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED); static void _cb_content_prev_set(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); @@ -89,11 +91,19 @@ static void _but_settings_hotend_2_offset_cb(void *data, Evas_Object *obj EINA_U static void _but_material_customize_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); static void _but_print_tune_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); static void _but_settings_led_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); +static void _but_led_hue_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); +static void _but_led_saturation_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); static void _but_led_brightness_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); +static void _but_bed_heatup_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); +static void _but_hotend_heatup_0_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); +static void _but_hotend_heatup_1_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); +static void _but_print_speed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); +static void _but_fan_speed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); +static void _but_flow_rate_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); /* Buttons */ static struct button_def but_return = { - .text = gettext_noop("RETURN"), + .text = N_("RETURN"), .cb = { .func = _cb_content_prev_set, .data = NULL, @@ -355,9 +365,9 @@ static struct menu_def menu_system_settings = { .entry = { { .icon = "user-home", - .label = gettext_noop("Return"), + .label = N_("Return"), .item = {.type = LIST_ITEM_BUTTON}, - .footer = gettext_noop("Return to Main menu"), + .footer = N_("Return to Main menu"), .footer_alt = NULL, .func = _cb_content_prev_set, .toggle_timer = NULL, @@ -499,7 +509,7 @@ static struct menu_def menu_settings_network = { }, { .icon = NULL, .label = "Network info", - .end = NULL, + .item = {.type = LIST_ITEM_BUTTON}, .footer = NULL, .footer_alt = NULL, .func = _but_network_info_cb, @@ -508,7 +518,7 @@ static struct menu_def menu_settings_network = { }, { .icon = NULL, .label = "Manage WiFi", - .end = NULL, + .item = {.type = LIST_ITEM_BUTTON}, .footer = "Connect or forget", .footer_alt = NULL, .func = _network_wifi_manage_cb, @@ -594,7 +604,7 @@ static struct menu_def menu_settings_language = { { .icon = "user-home", .label = "Return", - .end = NULL, + .item = {.type = LIST_ITEM_BUTTON}, .footer = "Return to Main menu", .footer_alt = NULL, .func = _cb_content_prev_set, @@ -603,7 +613,7 @@ static struct menu_def menu_settings_language = { }, { .icon = NULL, .label = "English", - .end = NULL, + .item = {.type = LIST_ITEM_BUTTON}, .footer = "Welcome", .footer_alt = NULL, .func = NULL, @@ -782,6 +792,15 @@ static struct menu_def menu_system_maintenance = { .data = NULL, }, { .icon = NULL, + .label = "Speed", + .end = NULL, + .footer = "100 %", + .footer_alt = NULL, + .func = &_but_print_speed_cb, + .toggle_timer = NULL, + .data = NULL, + }, { + .icon = NULL, .label = "Level buildplate", .end = NULL, .footer = NULL, @@ -795,7 +814,7 @@ static struct menu_def menu_system_maintenance = { .end = NULL, .footer = NULL, .footer_alt = NULL, - .func = NULL, + .func = &_but_bed_heatup_cb, .toggle_timer = NULL, .data = NULL, }, { @@ -840,7 +859,7 @@ static struct menu_def menu_system_maintenance = { .end = NULL, .footer = NULL, .footer_alt = NULL, - .func = NULL, + .func = &_but_hotend_heatup_0_cb, .toggle_timer = NULL, .data = NULL, }, { @@ -849,7 +868,7 @@ static struct menu_def menu_system_maintenance = { .end = NULL, .footer = NULL, .footer_alt = NULL, - .func = NULL, + .func = &_but_hotend_heatup_1_cb, .toggle_timer = NULL, .data = NULL, }, { @@ -858,7 +877,16 @@ static struct menu_def menu_system_maintenance = { .end = NULL, .footer = NULL, .footer_alt = NULL, - .func = NULL, + .func = &_but_fan_speed_cb, + .toggle_timer = NULL, + .data = NULL, + }, { + .icon = NULL, + .label = "Set Material flow", + .end = NULL, + .footer = NULL, + .footer_alt = NULL, + .func = &_but_flow_rate_cb, .toggle_timer = NULL, .data = NULL, }, { @@ -1183,7 +1211,7 @@ static struct menu_def menu_settings_led = { .item = {.type = LIST_ITEM_BUTTON}, .footer = "100%", .footer_alt = NULL, - .func = _but_led_brightness_cb, + .func = _but_led_hue_cb, .toggle_timer = NULL, .data = NULL, }, { @@ -1192,7 +1220,7 @@ static struct menu_def menu_settings_led = { .item = {.type = LIST_ITEM_BUTTON}, .footer = "100%", .footer_alt = NULL, - .func = _but_led_brightness_cb, + .func = _but_led_saturation_cb, .toggle_timer = NULL, .data = NULL, }, { @@ -1255,7 +1283,7 @@ static struct menu_def menu_print_tune = { { .icon = "user-home", .label = "Return", - .end = NULL, + .item = {.type = LIST_ITEM_BUTTON}, .footer = "Return to print", .footer_alt = NULL, .func = _cb_content_prev_set, @@ -1264,7 +1292,7 @@ static struct menu_def menu_print_tune = { }, { .icon = NULL, .label = "Networking", - .end = NULL, + .item = {.type = LIST_ITEM_BUTTON}, .footer = "IP: ", .footer_alt = NULL, .func = _but_settings_network_cb, @@ -1276,16 +1304,25 @@ static struct menu_def menu_print_tune = { .end = NULL, .footer = "100 %", .footer_alt = NULL, - .func = NULL, + .func = &_but_print_speed_cb, .toggle_timer = NULL, .data = NULL, }, { .icon = NULL, - .label = "Hotend temperature", + .label = "Hotend 1 temperature", .end = NULL, .footer = "210 °C", .footer_alt = NULL, - .func = NULL, + .func = _but_hotend_heatup_0_cb, + .toggle_timer = NULL, + .data = NULL, + }, { + .icon = NULL, + .label = "Hotend 2 temperature", + .end = NULL, + .footer = "210 °C", + .footer_alt = NULL, + .func = _but_hotend_heatup_1_cb, .toggle_timer = NULL, .data = NULL, }, { @@ -1294,7 +1331,7 @@ static struct menu_def menu_print_tune = { .end = NULL, .footer = "60 °C", .footer_alt = NULL, - .func = NULL, + .func = &_but_bed_heatup_cb, .toggle_timer = NULL, .data = NULL, }, { @@ -1303,7 +1340,7 @@ static struct menu_def menu_print_tune = { .end = NULL, .footer = "100 %", .footer_alt = NULL, - .func = NULL, + .func = &_but_fan_speed_cb, .toggle_timer = NULL, .data = NULL, }, { @@ -1312,7 +1349,7 @@ static struct menu_def menu_print_tune = { .end = NULL, .footer = "100 %", .footer_alt = NULL, - .func = NULL, + .func = &_but_flow_rate_cb, .toggle_timer = NULL, .data = NULL, }, { @@ -1377,7 +1414,137 @@ static struct menu_def menu_ = { }; #endif -static void eulogium_print_data_clear(struct eulogium_data *eulogium) +static struct settings_dial_data dial_led_hue = { + .label = N_("Hue"), + .step = 1.0, + .min = 0.0, + .max = 100.0, + .value = 12.3, + .value_end = 25.0, + .format = "%1.0f", + .format_end = " | %1.0f%s", + .unit = "%", + //.method_set = "SetHue", + //.method_get = "GetHue", +}; + +static struct settings_dial_data dial_led_saturation = { + .label = N_("Saturation"), + .step = 1.0, + .min = 0.0, + .max = 100.0, + .value = 4.56, + .value_end = 25.0, + .format = "%1.0f", + .format_end = " | %1.0f%s", + .unit = "%", + //.method_set = "SetSaturation", + //.method_get = "GetSaturation", +}; + +static struct settings_dial_data dial_led_brightness = { + .label = N_("Brightness"), + .step = 1.0, + .min = 0.0, + .max = 100.0, + .value = 7.89, + .value_end = 25.0, + .format = "%1.0f", + .format_end = " | %1.0f%s", + .unit = "%", + //.method_set = "SetBrightness", + //.method_get = "GetBrightness", +}; + +static struct settings_dial_data dials[] = { + [PROC_BED_HEATUP] = { + .label = N_("Buildplate temperature"), + .step = 1.0, + .min = 0.0, + .max = 60.0, + .value = 0.0, + .value_end = 0.0, + .format = "%1.1f", + .format_end = " | %1.0f%s", + .unit = " °C", + .method_set = &procedure_target_set, + .method_get = &procedure_metadata_get, + .proc_key = PROC_BED_HEATUP, + }, + [PROC_HOTEND_HEATUP_0] = { + .label = N_("Hotend 1 temperature"), + .step = 1.0, + .min = 0.0, + .max = 300.0, + .value = 0.0, + .value_end = 0.0, + .format = "%1.1f", + .format_end = " | %1.0f%s", + .unit = " °C", + .method_set = &procedure_target_set, /* XXX use ampersant improve of functions */ + .method_get = &procedure_metadata_get, + .proc_key = PROC_HOTEND_HEATUP_0, + }, + [PROC_HOTEND_HEATUP_1] = { + .label = N_("Hotend 2 temperature"), + .step = 1.0, + .min = 0.0, + .max = 300.0, + .value = 0.0, + .value_end = 0.0, + .format = "%1.1f", + .format_end = " | %1.0f%s", + .unit = " °C", + .method_set = &procedure_target_set, /* XXX use ampersant improve of functions */ + .method_get = &procedure_metadata_get, + .proc_key = PROC_HOTEND_HEATUP_1, + }, + [PROC_PRINT_SPEED] = { + .label = N_("Print speed"), + .step = 10.0, + .min = 10.0, + .max = 1000.0, + .value = 0.0, + .value_end = 0.0, + .format = "%1.1f", + .format_end = " | %1.0f%s", + .unit = " %", + .method_set = &procedure_target_set, + .method_get = &procedure_metadata_get, + .proc_key = PROC_PRINT_SPEED, + }, + [PROC_FAN_SPEED] = { + .label = N_("Fan speed"), + .step = 1.0, + .min = 0.0, + .max = 100.0, + .value = 0.0, + .value_end = 0.0, + .format = "%1.1f", + .format_end = " | %1.0f%s", + .unit = " %", + .method_set = &procedure_target_set, + .method_get = &procedure_metadata_get, + .proc_key = PROC_FAN_SPEED, + }, + [PROC_FLOW_RATE] = { + .label = N_("Material flow rate"), + .step = 1.0, + .min = 0.0, + .max = 100.0, + .value = 0.0, + .value_end = 0.0, + .format = "%1.1f", + .format_end = " | %1.0f%s", + .unit = " %", + .method_set = &procedure_target_set, + .method_get = &procedure_metadata_get, + .proc_key = PROC_FLOW_RATE, + }, + { NULL }, /* sentinel */ +}; + +void eulogium_print_data_clear(struct eulogium_data *eulogium) { if (eulogium->progress_data_refresh) ecore_timer_del(eulogium->progress_data_refresh); @@ -1391,13 +1558,11 @@ static void eulogium_print_data_clear(struct eulogium_data *eulogium) // free(eulogium->print.name); eulogium->print.name = NULL; eulogium->print.name_changed = EINA_FALSE; + print_clear(eulogium->procedures[PROC_PRINT].meta); // if (eulogium->print.file) // free(eulogium->print.file); eulogium->print.url = NULL; - eulogium->print.time = 0; - eulogium->print.material = 0; - eulogium->print.progress = 0; eulogium->print.flags = ""; } @@ -1425,15 +1590,7 @@ static void _on_print_abort_ret(void *data, const Eldbus_Message *msg, Eldbus_Pe static void _cb_content_prev_set(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - struct eulogium_data *eulogium = data; - uint_fast8_t list_size; - - printf("prev ret\n"); - list_size = eina_list_count(elm_naviframe_items_get(eulogium->navi)); - if (list_size < 2) - printf("Not popping last item cowboy\n"); /* TODO, use proper debug construct */ - else - elm_naviframe_item_pop(eulogium->navi); + ui_stack_pop_cb(data, obj, event_info); /* XXX replace content_prev calls with ui_stack_pop */ } static void _print_abort_confirm_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1441,10 +1598,8 @@ static void _print_abort_confirm_cb(void *data, Evas_Object *obj EINA_UNUSED, vo struct eulogium_data *eulogium = data; Evas_Object *content; - content = eulogium_menu_confirm(eulogium->navi, gettext_noop("<br>Abort the print?"), "No", &but_print_abort); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + content = eulogium_menu_confirm(eulogium->navi, N_("<br>Abort the print?"), "No", &but_print_abort); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _print_abort_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1470,9 +1625,7 @@ static void _but_system_maintenance_cb(void *data, Evas_Object *obj EINA_UNUSED, printf("But sys maint\n"); content = menu_widget_list(eulogium, eulogium->navi, &menu_system_maintenance); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_material_change_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1482,9 +1635,7 @@ static void _but_material_change_cb(void *data EINA_UNUSED, Evas_Object *obj EIN printf("But material change\n"); content = eulogium_tripple_button_menu(eulogium->navi, &but_change_material_1, &but_change_material_2, &but_return); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_material_settings_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1494,9 +1645,7 @@ static void _but_material_settings_cb(void *data EINA_UNUSED, Evas_Object *obj E printf("But material settings\n"); content = eulogium_tripple_button_menu(eulogium->navi, &but_settings_material_1, &but_settings_material_2, &but_return); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_hotend_change_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1506,9 +1655,7 @@ static void _but_hotend_change_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_ printf("But hotend change\n"); content = eulogium_tripple_button_menu(eulogium->navi, &but_change_hotend_1, &but_change_hotend_2, &but_return); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_hotend_settings_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1518,9 +1665,7 @@ static void _but_hotend_settings_cb(void *data EINA_UNUSED, Evas_Object *obj EIN printf("But hotend settings\n"); content = eulogium_tripple_button_menu(eulogium->navi, &but_settings_hotend_1, &but_settings_hotend_2, &but_return); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_main_system_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1530,9 +1675,7 @@ static void _but_main_system_cb(void *data, Evas_Object *object EINA_UNUSED, voi printf("Button system pressed\n"); content = eulogium_tripple_button_menu(eulogium->navi, &but_system_settings, &but_system_maintenance, &but_return); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void menu_widget_list_push(struct eulogium_data *eulogium, struct menu_def *file) @@ -1540,9 +1683,7 @@ static void menu_widget_list_push(struct eulogium_data *eulogium, struct menu_de Evas_Object *content; content = menu_widget_list(eulogium, eulogium->navi, file); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void menu_wifi_list(struct eulogium_data *eulogium) @@ -1625,9 +1766,7 @@ static void _cb_button_main_print(void *data, Evas_Object *object EINA_UNUSED, v content = eulogium_tripple_button_menu(eulogium->navi, &but_print_local, &but_print_mmc, &but_return); if (eeze_disk_type_get(mount->disk) == EEZE_DISK_TYPE_USB) content = eulogium_tripple_button_menu(eulogium->navi, &but_print_local, &but_print_usb, &but_return); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } } @@ -1639,9 +1778,7 @@ static void _but_settings_network_cb(void *data, Evas_Object *obj EINA_UNUSED, v printf("But settings network settings\n"); content = menu_widget_list(eulogium, eulogium->navi, &menu_settings_network); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_system_settings_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1651,9 +1788,7 @@ static void _but_system_settings_cb(void *data, Evas_Object *obj EINA_UNUSED, vo printf("But system settings settings\n"); content = menu_widget_list(eulogium, eulogium->navi, &menu_system_settings); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_settings_hotend_1_offset_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1663,9 +1798,7 @@ static void _but_settings_hotend_1_offset_cb(void *data, Evas_Object *obj EINA_U printf("But settings hotend 1 offset settings\n"); content = menu_widget_list(eulogium, eulogium->navi, &menu_settings_hotend_1_offset); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_settings_hotend_2_offset_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1675,9 +1808,7 @@ static void _but_settings_hotend_2_offset_cb(void *data, Evas_Object *obj EINA_U printf("But settings hotend 2 offset settings\n"); content = menu_widget_list(eulogium, eulogium->navi, &menu_settings_hotend_2_offset); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_settings_language_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1687,9 +1818,7 @@ static void _but_settings_language_cb(void *data, Evas_Object *obj EINA_UNUSED, printf("But menu language settings\n"); content = menu_widget_list(eulogium, eulogium->navi, &menu_settings_language); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_settings_led_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1702,13 +1831,93 @@ static void _but_settings_led_cb(void *data, Evas_Object *obj EINA_UNUSED, void ui_stack_push(eulogium, content, PAGE_NORMAL); } +static void _but_led_hue_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) +{ + struct eulogium_data *eulogium = data; + Evas_Object *content; + + printf("Button led_hue pressed\n"); + content = ui_widget_dial(eulogium->navi, eulogium, &dial_led_hue); + ui_stack_push(eulogium, content, PAGE_NORMAL); +} + +static void _but_led_saturation_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) +{ + struct eulogium_data *eulogium = data; + Evas_Object *content; + + printf("Button led_saturation pressed\n"); + content = ui_widget_dial(eulogium->navi, eulogium, &dial_led_saturation); + ui_stack_push(eulogium, content, PAGE_NORMAL); +} + static void _but_led_brightness_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) { struct eulogium_data *eulogium = data; Evas_Object *content; printf("Button led_brightness pressed\n"); - content = eulogium_settings_dial(eulogium->navi, eulogium); + content = ui_widget_dial(eulogium->navi, eulogium, &dial_led_brightness); + ui_stack_push(eulogium, content, PAGE_PRINTING); +} + +static void _but_bed_heatup_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) +{ + struct eulogium_data *eulogium = data; + Evas_Object *content; + + printf("Button bed temperature pressed\n"); + content = ui_widget_dial(eulogium->navi, eulogium, &dials[PROC_BED_HEATUP]); + ui_stack_push(eulogium, content, PAGE_NORMAL); +} + +static void _but_hotend_heatup_0_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) +{ + struct eulogium_data *eulogium = data; + Evas_Object *content; + + printf("Button hotend 1 temperature pressed\n"); + content = ui_widget_dial(eulogium->navi, eulogium, &dials[PROC_HOTEND_HEATUP_0]); + ui_stack_push(eulogium, content, PAGE_NORMAL); +} + +static void _but_hotend_heatup_1_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) +{ + struct eulogium_data *eulogium = data; + Evas_Object *content; + + printf("Button hotend 2 temperature pressed\n"); + content = ui_widget_dial(eulogium->navi, eulogium, &dials[PROC_HOTEND_HEATUP_1]); + ui_stack_push(eulogium, content, PAGE_NORMAL); +} + +static void _but_print_speed_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) +{ + struct eulogium_data *eulogium = data; + Evas_Object *content; + + printf("Button print speed pressed\n"); + content = ui_widget_dial(eulogium->navi, eulogium, &dials[PROC_PRINT_SPEED]); + ui_stack_push(eulogium, content, PAGE_PRINTING); +} + +static void _but_fan_speed_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) +{ + struct eulogium_data *eulogium = data; + Evas_Object *content; + + printf("Button fan speed pressed\n"); + content = ui_widget_dial(eulogium->navi, eulogium, &dials[PROC_FAN_SPEED]); + ui_stack_push(eulogium, content, PAGE_NORMAL); +} + +static void _but_flow_rate_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) +{ + struct eulogium_data *eulogium = data; + Evas_Object *content; + + printf("Button material flow pressed\n"); + content = ui_widget_dial(eulogium->navi, eulogium, &dials[PROC_FLOW_RATE]); ui_stack_push(eulogium, content, PAGE_NORMAL); } @@ -1735,11 +1944,11 @@ static void _but_network_info_cb(void *data, Evas_Object *obj EINA_UNUSED, void Evas_Object *content, *_top, *_bottom; char *buf; - /* XXX Quick hack to make the adv feature a little more useful, this needs to be made much better! */ + /* XXX Quick hack to make the adv feature a little more useful, put this in a list? */ _top = elm_box_add(eulogium->navi); evas_object_show(_top); - _top = elm_label_add(eulogium->navi); /* TODO, dynamically update IPs */ + _top = elm_label_add(eulogium->navi); /* TODO, dynamically update IPs, requires 'redrawing' of some sort */ buf = parse_networks_for_display(eulogium->networks); elm_object_text_set(_top, buf); free(buf); @@ -1750,10 +1959,8 @@ static void _but_network_info_cb(void *data, Evas_Object *obj EINA_UNUSED, void evas_object_smart_callback_add(_bottom, "clicked", but_return.cb.func, but_return.cb.data); evas_object_show(_bottom); -// elm_naviframe_item_simple_push(eulogium->navi, box); content = eulogium_split_screen(eulogium->navi, _top, _bottom); - if (content) - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_main_mathot_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1764,9 +1971,7 @@ static void _but_main_mathot_cb(void *data, Evas_Object *object EINA_UNUSED, voi printf("Button matts pressed\n"); content = eulogium_tripple_button_menu(eulogium->navi, &but_mathot_material, &but_mathot_hotend, &but_return); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_settings_material_1_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1777,9 +1982,7 @@ static void _but_settings_material_1_cb(void *data, Evas_Object *object EINA_UNU printf("Button matts settings 1 pressed\n"); content = menu_widget_list(eulogium, eulogium->navi, &menu_material_1); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_settings_material_2_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1790,9 +1993,7 @@ static void _but_settings_material_2_cb(void *data, Evas_Object *object EINA_UNU printf("Button matts settings 2 pressed\n"); content = menu_widget_list(eulogium, eulogium->navi, &menu_material_2); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_material_customize_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1803,9 +2004,7 @@ static void _but_material_customize_cb(void *data, Evas_Object *object EINA_UNUS printf("Button matts customize pressed\n"); content = menu_widget_list(eulogium, eulogium->navi, &menu_material_customize); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_print_tune_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1816,9 +2015,7 @@ static void _but_print_tune_cb(void *data, Evas_Object *object EINA_UNUSED, void printf("Button print tune pressed\n"); content = menu_widget_list(eulogium, eulogium->navi, &menu_print_tune); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_PRINTING); } static void _but_change_material_1_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1829,9 +2026,7 @@ static void _but_change_material_1_cb(void *data, Evas_Object *object EINA_UNUSE printf("Button matts change 1 pressed\n"); content = eulogium_tripple_button_menu(eulogium->navi, &but_return, &but_return, &but_return); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_change_material_2_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1842,9 +2037,7 @@ static void _but_change_material_2_cb(void *data, Evas_Object *object EINA_UNUSE printf("Button matts change 2 pressed\n"); content = eulogium_tripple_button_menu(eulogium->navi, &but_return, &but_return, &but_return); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_mathot_material_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1855,9 +2048,7 @@ static void _but_mathot_material_cb(void *data, Evas_Object *object EINA_UNUSED, printf("Button mathot material pressed\n"); content = eulogium_tripple_button_menu(eulogium->navi, &but_material_change, &but_material_settings, &but_return); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_mathot_hotend_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1868,9 +2059,7 @@ static void _but_mathot_hotend_cb(void *data, Evas_Object *object EINA_UNUSED, v printf("Button mathot hotend pressed\n"); content = eulogium_tripple_button_menu(eulogium->navi, &but_hotend_change, &but_hotend_settings, &but_return); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_settings_hotend_1_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1881,9 +2070,7 @@ static void _but_settings_hotend_1_cb(void *data, Evas_Object *object EINA_UNUSE printf("Button hotend settings 1 pressed\n"); content = menu_widget_list(eulogium, eulogium->navi, &menu_settings_hotend_1_offset); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_settings_hotend_2_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1894,9 +2081,7 @@ static void _but_settings_hotend_2_cb(void *data, Evas_Object *object EINA_UNUSE printf("Button hotend settings 2 pressed\n"); content = menu_widget_list(eulogium, eulogium->navi, &menu_settings_hotend_1_offset); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_change_hotend_1_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1907,9 +2092,7 @@ static void _but_change_hotend_1_cb(void *data, Evas_Object *object EINA_UNUSED, printf("Button hotend change 1 pressed\n"); content = eulogium_tripple_button_menu(eulogium->navi, &but_return, &but_return, &but_return); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } static void _but_change_hotend_2_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED) @@ -1920,9 +2103,7 @@ static void _but_change_hotend_2_cb(void *data, Evas_Object *object EINA_UNUSED, printf("Button matts change 2 pressed\n"); content = eulogium_tripple_button_menu(eulogium->navi, &but_return, &but_return, &but_return); - if (!content) - return; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); } void eulogium_button_cb_set(struct button_def *button, struct button_cb *cb) @@ -1961,23 +2142,6 @@ void eulogium_print_data_set(struct eulogium_data *eulogium, char *filepath) eulogium->print.time = 12; } -/* Function to make the Z-axis of any wheel focus the next/previous focusable widget */ -static void _cb_eulogium_input_wheel(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Mouse_Wheel *ev = event_info; - Ecore_Event *event = NULL; - - if (ev->z > 0) { - elm_object_focus_next((Evas_Object *)data, ELM_FOCUS_NEXT); - event = ecore_event_add(INPUT_MOUSE_WHEEL_DOWN, NULL, NULL, NULL); - } else { - elm_object_focus_next((Evas_Object *)data, ELM_FOCUS_PREVIOUS); - event = ecore_event_add(INPUT_MOUSE_WHEEL_UP, NULL, NULL, NULL); - } - if (!event) - EINA_LOG_ERR("Wheel event failed to queue."); -} - static void _cb_eulogium_exit(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { elm_exit(); @@ -2102,12 +2266,17 @@ static void _on_get_time_ret(void *data, const Eldbus_Message *msg, Eldbus_Pendi static Eina_Bool _timer_progress_data_update_cb(void *data) { struct eulogium_data *eulogium = data; + struct print_data *print = eulogium->procedures[PROC_PRINT].meta; static enum printer_status status = -1; static double progress = 0; static double time = -1; - //eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getProgress", _on_get_progress_ret, &eulogium->print.progress, 2, ""); - //eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getTime", _on_get_time_ret, &eulogium->print.time, 2, ""); + procedure_metadata_get(PROC_PRINT); + /* XXX This is an ugly hack that doesn't even work to abort the timer, we need to refactor this into something sensible + * Basically we want to stop this time whenever the item gets removed from the stack via the + * clean/free callback. */ + if ((!eulogium->status) && (!eulogium->progress) && (!eulogium->name) && (!eulogium->time)) + return ECORE_CALLBACK_CANCEL; if (eulogium->printer.status != status) { elm_object_text_set(eulogium->status, _(griffin_print_status[eulogium->printer.status])); @@ -2125,7 +2294,7 @@ static Eina_Bool _timer_progress_data_update_cb(void *data) } if (eulogium->print.time != time) { char buf[255], *str; - uint_fast32_t time = 0; + int_fast32_t time = 0; if (eulogium->print.time < 1) { str = "Print time unknown"; @@ -2195,7 +2364,7 @@ static Eina_Bool _timer_print_unblock_cb(void *data) } } -Evas_Object *eulogium_print_ignore(struct eulogium_data *eulogium) +Evas_Object *eulogium_print_ignore(struct eulogium_data *eulogium) /* TODO pass print_data struct */ { Evas_Object *_top, *_bottom; @@ -2238,17 +2407,52 @@ Evas_Object *eulogium_print_ignore(struct eulogium_data *eulogium) return eulogium_split_screen(eulogium->navi, _top, _bottom); } -Evas_Object *eulogium_print_progress(struct eulogium_data *eulogium) +Evas_Object *eulogium_pre_print(Evas_Object *parent, struct eulogium_data *eulogium) +{ + Evas_Object *_top, *_bottom, *obj; + + _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); + elm_box_homogeneous_set(_top, EINA_FALSE); + evas_object_show(_top); + + obj = elm_label_add(_top); + elm_object_text_set(obj, _("Preparing printer ...")); + 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); + + /* Pulse progress */ + + _bottom = eulogium_dual_button_add(eulogium->navi, &but_print_tune, &but_print_abort_confirm); + _bottom = elm_button_add(parent); + evas_object_size_hint_weight_set(_bottom, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(_bottom, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_text_set(_bottom, _(but_print_abort_confirm.text)); + evas_object_smart_callback_add(_bottom, "clicked", but_print_abort_confirm.cb.func, but_print_abort_confirm.cb.data); + evas_object_show(obj); + evas_object_show(_bottom); + + return eulogium_split_screen(eulogium->navi, _top, _bottom); +} + +Evas_Object *eulogium_print_progress(Evas_Object *parent, struct eulogium_data *eulogium, const struct print_data *print) /* TODO pass timer var to store timer in */ { Evas_Object *_top, *_bottom; + /* TODO maybe this timer needs to be split into twofold update the widgets locally here, + * emit a signal/tell the metadata cb to start gathering meta data */ + /* this needs to be done, so that we can pass the proper parameters. For now, just hackishly split them. + */ eulogium->progress_data_refresh = ecore_timer_add(0.5, _timer_progress_data_update_cb, eulogium); if (!eulogium->progress_data_refresh) { /* TODO make define for the timeout */ EINA_LOG_CRIT("Unable to create progress update timer"); return NULL; } - _top = elm_box_add(eulogium->navi); + _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); elm_box_homogeneous_set(_top, EINA_FALSE); @@ -2269,7 +2473,7 @@ Evas_Object *eulogium_print_progress(struct eulogium_data *eulogium) elm_box_pack_end(_top, eulogium->status); eulogium->name = elm_label_add(_top); - elm_object_text_set(eulogium->name, eulogium->print.name); + elm_object_text_set(eulogium->name, print->jobname); elm_label_slide_mode_set(eulogium->name, ELM_LABEL_SLIDE_MODE_AUTO); //elm_label_slide_speed_set(object, 2); elm_label_slide_go(eulogium->name); @@ -2282,29 +2486,29 @@ Evas_Object *eulogium_print_progress(struct eulogium_data *eulogium) elm_progressbar_horizontal_set(eulogium->progress, EINA_TRUE); elm_progressbar_pulse_set(eulogium->progress, EINA_FALSE); /* TODO: pulse = time-unknown/pause */ elm_progressbar_pulse(eulogium->progress, EINA_FALSE); - elm_progressbar_value_set(eulogium->progress, eulogium->print.progress); + elm_progressbar_value_set(eulogium->progress, print->progress); elm_progressbar_unit_format_set(eulogium->progress, "%1.1f %%"); evas_object_size_hint_align_set(eulogium->progress, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_show(eulogium->progress); elm_box_pack_end(_top, eulogium->progress); - _bottom = eulogium_dual_button_add(eulogium->navi, &but_print_tune, &but_print_abort_confirm); + _bottom = eulogium_dual_button_add(parent, &but_print_tune, &but_print_abort_confirm); evas_object_show(_bottom); - return eulogium_split_screen(eulogium->navi, _top, _bottom); + return eulogium_split_screen(parent, _top, _bottom); } -Evas_Object *eulogium_generic_error(struct eulogium_data *eulogium, uint8_t eulogium_error) +Evas_Object *eulogium_generic_error(struct eulogium_data *eulogium, int_fast16_t eulogium_error) { Evas_Object *box, *object; - char buf[] = "Printer error -255.<br>Please contact support via<br>http://ultimaker.com/support."; + char buf[] = "Printer error 65536.<br>Please contact support via<br>http://ultimaker.com/support."; /* TODO, replace with define of strings to collect all strings centrally */ box = elm_box_add(eulogium->navi); evas_object_show(box); object = elm_label_add(eulogium->navi); - snprintf(buf, sizeof(buf), "Printer error %d.<br>Please contact support via<br>http://ultimaker.com/support.", eulogium_error); + snprintf(buf, sizeof(buf), "Printer error %d.<br>Please contact support via<br>http://ultimaker.com/support.", (int)eulogium_error); elm_object_text_set(object, _(buf)); evas_object_show(object); elm_box_pack_end(box, object); @@ -2323,33 +2527,15 @@ Evas_Object *eulogium_generic_error(struct eulogium_data *eulogium, uint8_t eulo return box; } -static void _on_cleared_printer_ret(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) -{ - const char *errname, *errmsg; - Eina_Bool cleared_bed = EINA_FALSE; - - if (eldbus_message_error_get(msg, &errname, &errmsg)) { - EINA_LOG_ERR("%s %s", errname, errmsg); - return; - } - if (!eldbus_message_arguments_get(msg, "b", &cleared_bed)) { - EINA_LOG_ERR("Failed to get bed clear status."); - return; - } - if (cleared_bed == EINA_TRUE) - EINA_LOG_INFO("Bed has been successfully Cleared"); - else - EINA_LOG_WARN("Unable to clear printer bed"); -} - -static void _cleared_bed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) +static void _cleaned_bed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { struct eulogium_data *eulogium = data; - //eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "clearedPrinter", _on_cleared_printer_ret, eulogium, -1, ""); + procedure_print_printer_cleaned(); + _cb_content_prev_set(eulogium, obj, event_info); } -Evas_Object *eulogium_clear_print_bed(struct eulogium_data *eulogium) +Evas_Object *eulogium_clean_print_bed(struct eulogium_data *eulogium) { Evas_Object *_top, *_bottom, *obj; @@ -2363,12 +2549,17 @@ Evas_Object *eulogium_clear_print_bed(struct eulogium_data *eulogium) _bottom = elm_button_add(eulogium->navi); elm_object_text_set(_bottom, _("Print removed")); - evas_object_smart_callback_add(_bottom, "clicked", _cleared_bed_cb, eulogium); + evas_object_smart_callback_add(_bottom, "clicked", _cleaned_bed_cb, eulogium); evas_object_show(_bottom); return eulogium_split_screen(eulogium->navi, _top, _bottom); } +struct _wifilist_data { + struct eulogium_data *eulogium; + struct network_data *network; +}; + struct _filelist_data { struct eulogium_data *eulogium; struct dir_entry_def *dir; @@ -2380,6 +2571,39 @@ struct _filelist_entry_data { char *filepath; }; +static void _cb_select_wifi(void *data, Evas_Object *eo EINA_UNUSED, void *event_info EINA_UNUSED) +{ + struct eulogium_data *eulogium = ((struct _wifilist_data *)data)->eulogium; + Evas_Object *navi = eulogium->navi; + const struct network_data *network = ((struct _wifilist_data *)data)->network; + Evas_Object *content, *_top, *_bottom, *obj; + + /* TODO replace with generic dialog code */ + _top = elm_box_add(navi); + evas_object_show(_top); + + obj = elm_label_add(_top); + elm_object_text_set(obj, _("Attempting to connect to Wifi:")); + evas_object_show(obj); + elm_box_pack_end(_top, obj); + + obj = elm_label_add(_top); + elm_object_text_set(obj, network->ssid); + evas_object_show(obj); + elm_box_pack_end(_top, obj); + /* TODO add animation and 'connection finished' signal handler */ + + _bottom = elm_button_add(navi); + elm_object_text_set(_bottom, _("Ok")); + evas_object_smart_callback_add(_bottom, "clicked", _cb_content_prev_set, eulogium); + evas_object_show(_bottom); + + content = eulogium_split_screen(navi, _top, _bottom); + ui_stack_push(eulogium, content, PAGE_NORMAL); + + network_connect_wifi(network); +}; + static void _cb_select_file(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { struct eulogium_data *eulogium = ((struct _filelist_entry_data *)data)->filelist->eulogium; @@ -2398,8 +2622,12 @@ static void _cb_select_file(void *data, Evas_Object *obj EINA_UNUSED, void *even strncpy(new_dir->dir.path, filepath, new_dir_len); menu_widget_list_push(eulogium, new_dir); } else { + Evas_Object *content; + eulogium_print_data_set(eulogium, filepath); - procedure_start_print(eulogium->dbus.proxy[PRINTER], &eulogium->print); + procedure_print_start(&eulogium->print); + content = eulogium_pre_print(eulogium->navi, eulogium); + ui_stack_push(eulogium, content, PAGE_PRINTING); } } } @@ -2465,10 +2693,10 @@ static void _cb_populate_filelist(const char *name, const char *path, void *data ext = ecore_file_ext_get(name); if (!ext) return; - if (!filelist->eulogium->printer.file_handlers) - return; - for (i = 0; filelist->eulogium->printer.file_handlers[i] != NULL; i++) - if (strncmp(ext, filelist->eulogium->printer.file_handlers[i], strlen(ext)) == 0) +// if (!filelist->eulogium->printer.file_handlers) +// return; +// for (i = 0; filelist->eulogium->printer.file_handlers[i] != NULL; i++) + if (strncmp(ext, /*filelist->eulogium->printer.file_handlers[i] */"gcode", strlen(ext)) == 0) valid_ext++; if (!valid_ext) return; @@ -2483,7 +2711,7 @@ static void _cb_populate_filelist(const char *name, const char *path, void *data elm_image_resizable_set(icon, EINA_FALSE, EINA_FALSE); evas_object_show(icon); - filelist_entry = malloc(sizeof(struct _filelist_entry_data)); + filelist_entry = malloc(sizeof(struct _filelist_entry_data)); /* XXX free on destroy */ filelist_entry->filelist = filelist; filelist_entry->filepath = filepath; eulogium_item_list_sorted_insert(filelist->list, icon, name, NULL, _cb_select_file, filelist_entry, _cb_dirfile_sort); @@ -2558,9 +2786,35 @@ static void _set_hotspot_power_cb(void *data, Evas_Object *obj, void *event_info eldbus_proxy_call(eulogium->dbus.proxy[NETWORK], "setHotspotPower", on_method_generic_ret, NULL, -1, "b", elm_check_state_get(obj)); } -static void _menu_generate_wifilist(struct eulogium_data *eulogium, Evas_Object *list, struct wifi_def *wifi) +static void network_wifi_list(struct eulogium_data *eulogium, Evas_Object *list, struct network_data *networks) { Evas_Object *icon; + uint_fast16_t i = 0; + + if (!networks) + return; + + + icon = elm_icon_add(list); + elm_icon_standard_set(icon, "wifi-wpa-icon"); + evas_object_show(icon); + for (i = 0; networks[i].obj_path; i++) + if (networks[i].tech == TECH_WIFI) { + struct _wifilist_data *wifilist; + + wifilist = malloc(sizeof(struct _wifilist_data)); /* XXX free on destroy */ + wifilist->eulogium = eulogium; + wifilist->network = &networks[i]; + + eulogium_item_list_append(list, NULL, networks[i].ssid, NULL, _cb_select_wifi, wifilist); + } +} + +static void _menu_generate_wifilist(struct eulogium_data *eulogium, Evas_Object *list, struct network_data *networks) +{ + Evas_Object *icon; + + network_wifi_list(eulogium, list, networks); icon = elm_icon_add(list); elm_icon_standard_set(icon, "user-home"); @@ -2637,7 +2891,7 @@ Evas_Object *menu_widget_list(struct eulogium_data *eulogium, Evas_Object *paren if (menu->type == LIST_FILE) _menu_generate_filelist(eulogium, list, &menu->dir); if (menu->type == LIST_WIFI) - _menu_generate_wifilist(eulogium, list, NULL); + _menu_generate_wifilist(eulogium, list, eulogium->networks); eulogium_item_list_go(list); evas_object_show(list); elm_box_pack_end(box, list); @@ -2681,8 +2935,7 @@ static void _eulogium_multi_screen_next_cb(void *data, Evas_Object *obj EINA_UNU /* XXX what else? */ } else { content = eulogium_multi_screen_menu(eulogium, eulogium->navi, screen_data, pagenum, pageindex); - if (content) - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_NORMAL); /* XXX what else? */ } free(data); @@ -2911,82 +3164,6 @@ Evas_Object *eulogium_tripple_button_menu(Evas_Object *parent, const struct butt return eulogium_split_screen(parent, _top, _bottom); } -static Eina_Bool _dial_change_delay(void *data) -{ - Evas_Object *dial = data; - Ecore_Timer *delay; - - evas_object_data_set(dial, "delay", NULL); - evas_object_smart_callback_call(dial, "delay,changed", NULL); - - return ECORE_CALLBACK_CANCEL; -} - -static Eina_Bool _dial_change(void *data, int type, void *event_info EINA_UNUSED) -{ - Evas_Object *dial = data; - Ecore_Timer *delay; - double value, step; - -/* TODO XXX we call this dirty little hack because debian's v1.8 of elm does not offer us to actually call drag,left - * evas_object_smart_callback_call(dial, "drag,left", NULL); would have been much cleaner and we didn't need to do - * the val+step get/set thing and thus also benefit from delay,changed which we now 'fake' badly. - */ - value = elm_slider_value_get(dial); - step = elm_slider_step_get(dial); - if (type == INPUT_MOUSE_WHEEL_UP) - elm_slider_value_set(dial, value + step); - if (type == INPUT_MOUSE_WHEEL_DOWN) - elm_slider_value_set(dial, value - step); - evas_object_smart_callback_call(dial, "changed", NULL); - delay = evas_object_data_get(dial, "delay"); - ecore_timer_del(delay); - delay = ecore_timer_add(0.5, _dial_change_delay, dial); /* TODO make define for delay */ - evas_object_data_set(dial, "delay", delay); - - return ECORE_CALLBACK_PASS_ON; -} - -static void _dial_send_update(void *data, Evas_Object *eo, void *event_info EINA_UNUSED) -{ - Eldbus_Proxy *proxy = data; - - eldbus_proxy_call(proxy, "setBrightness", NULL, NULL, -1, "d", elm_slider_value_get(eo)); -} - -Evas_Object *eulogium_settings_dial(Evas_Object *parent, struct eulogium_data *eulogium) -{ - Evas_Object *_top, *_bottom, *obj; - - /* if type is tar/cur do something different TODO */ - _top = elm_slider_add(parent); - elm_object_text_set(_top, "Brightness:"); - elm_object_focus_allow_set(_top, EINA_FALSE); - elm_slider_unit_format_set(_top, "%1.0f%"); - elm_slider_min_max_set(_top, 0, 100); - elm_slider_step_set(_top, 1.0); - 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); - evas_object_smart_callback_add(_top, "delay,changed", _dial_send_update, eulogium->dbus.proxy[LED]); - eulogium->event_inc = ecore_event_handler_add(INPUT_MOUSE_WHEEL_UP, _dial_change, _top); - eulogium->event_dec = ecore_event_handler_add(INPUT_MOUSE_WHEEL_DOWN, _dial_change, _top); - evas_object_show(_top); - - obj = elm_label_add(_top); - elm_object_text_set(obj, "100%"); - evas_object_show(obj); - elm_object_part_content_set(_top, "end", obj); - - _bottom = elm_button_add(parent); - elm_object_text_set(_bottom, _("Click when done")); /* TODO, make define for this text */ - evas_object_size_hint_weight_set(_bottom, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(_bottom, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_smart_callback_add(_bottom, "clicked", _cb_content_prev_set, eulogium); - evas_object_show(_bottom); - - return eulogium_split_screen(parent, _top, _bottom); -} - static struct multi_screen screen[] = { { .type = NONE, @@ -3038,55 +3215,24 @@ static struct multi_screen_data screen_data = { Evas_Object *eulogium_main_menu(Evas_Object *window, struct eulogium_data *eulogium) { Evas_Object *content; + Elm_Object_Item *navi_item; eulogium->navi = elm_naviframe_add(window); if (!eulogium->navi) return NULL; - elm_naviframe_prev_btn_auto_pushed_set(eulogium->navi, EINA_FALSE); /* We removed this from the theme, enabling it causes errors */ + /* We removed the prev button from the theme, enabling it causes errors */ + elm_naviframe_prev_btn_auto_pushed_set(eulogium->navi, EINA_FALSE); + /* Except the first frame, never safe any frames after pop */ + elm_naviframe_content_preserve_on_pop_set(eulogium->navi, EINA_FALSE); + /* The main menu should be drawn first, consider changing this to 'get bottom, insert before bottom, pop_to + * instead of assuming the stack is empty */ content = eulogium_tripple_button_menu(eulogium->navi, &but_main_print, &but_main_mathot, &but_main_system); - if (!content) - return NULL; - elm_naviframe_item_simple_push(eulogium->navi, content); + ui_stack_push(eulogium, content, PAGE_BOTTOM); return eulogium->navi; } -static void eulogium_setup(struct eulogium_data *eulogium) -{ - while (screen_data.screen[screen_data.count].type != END) - screen_data.count++; - - /* This is silly, barding redonkylous and will get fixed in the refactoring */ - eulogium->procedures = procedures_init(); - eulogium_button_cb_data_set(&but_return, eulogium); - eulogium_button_cb_data_set(&but_print_abort_confirm, eulogium); - eulogium_button_cb_data_set(&but_print_abort, eulogium); - eulogium_button_cb_data_set(&but_print_tune, eulogium); - eulogium_button_cb_data_set(&but_main_print, eulogium); - eulogium_button_cb_data_set(&but_print_ignore, eulogium); - eulogium_button_cb_data_set(&but_print_local, eulogium); - eulogium_button_cb_data_set(&but_print_usb, eulogium); - eulogium_button_cb_data_set(&but_main_mathot, eulogium); - eulogium_button_cb_data_set(&but_main_system, eulogium); - eulogium_button_cb_data_set(&but_system_maintenance, eulogium); - eulogium_button_cb_data_set(&but_system_settings, eulogium); - eulogium_button_cb_data_set(&but_material_change, eulogium); - eulogium_button_cb_data_set(&but_material_settings, eulogium); - eulogium_button_cb_data_set(&but_settings_material_1, eulogium); - eulogium_button_cb_data_set(&but_settings_material_2, eulogium); - eulogium_button_cb_data_set(&but_change_material_1, eulogium); - eulogium_button_cb_data_set(&but_change_material_2, eulogium); - eulogium_button_cb_data_set(&but_mathot_material, eulogium); - eulogium_button_cb_data_set(&but_mathot_hotend, eulogium); - eulogium_button_cb_data_set(&but_hotend_change, eulogium); - eulogium_button_cb_data_set(&but_hotend_settings, eulogium); - eulogium_button_cb_data_set(&but_settings_hotend_1, eulogium); - eulogium_button_cb_data_set(&but_settings_hotend_2, eulogium); - eulogium_button_cb_data_set(&but_change_hotend_1, eulogium); - eulogium_button_cb_data_set(&but_change_hotend_2, eulogium); -} - static void _on_get_print_name_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) { struct eulogium_data *eulogium = data; @@ -3105,11 +3251,12 @@ static void _on_get_print_name_ret(void *data, const Eldbus_Message *msg, Eldbus /* TODO Call generic error screen in case of trouble here? */ } +#if 0 static void eulogium_printer_status_set(struct eulogium_data *eulogium, struct _status_msg *status) { Evas_Object *content = NULL; - EINA_LOG_WARN("Printer status: %s", status->s); + EINA_LOG_ERR("Printer status: %s", status->s); if (eulogium->printer.status != status->i) { switch (status->i) { @@ -3180,6 +3327,7 @@ static void eulogium_printer_status_set(struct eulogium_data *eulogium, struct _ eulogium->printer.status = status->i; } } +#endif static void _on_get_file_handlers_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) { @@ -3212,7 +3360,7 @@ static void _on_get_file_handlers_ret(void *data, const Eldbus_Message *msg, Eld strncpy(file_handlers[i], file_handler, fhandler_size); } file_handlers[i] = NULL; /* sentinel */ - eulogium->printer.file_handlers = file_handlers; + eulogium->printer.file_handlers = file_handlers; /* TODO do directly, only pass **file_handlers as data */ } static void _on_status_changed_ret(void *data, const Eldbus_Message *msg) @@ -3220,6 +3368,7 @@ static void _on_status_changed_ret(void *data, const Eldbus_Message *msg) _on_get_status_ret(data, msg, NULL); } +/* XXX TODO: this is being called somewhere where it shouldn't, making only hotplug usb events work */ static void eulogium_disk_free(struct mount_data *mount) { eeze_disk_free(mount->disk); @@ -3253,10 +3402,10 @@ static void _on_where_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending return; /* Never use a medium that is mounted under dev, proc, run or sys. */ - if (!(strncmp(where, "/dev/", 5) && - strncmp(where, "/proc/", 6) && - strncmp(where, "/run/", 5) && - strncmp(where, "/sys/", 5))) + if (!(strncmp(where, "/dev/", sizeof("/dev/") - 1) && + strncmp(where, "/proc/", sizeof("/proc/") - 1) && + strncmp(where, "/run/", sizeof("/run/") - 1) && + strncmp(where, "/sys/", sizeof("/sys/") - 1))) return; mount->disk = eeze_disk_new_from_mount(where); @@ -3316,7 +3465,7 @@ static void _on_unit_new_ret(void *data, const Eldbus_Message *msg) return; } ext = ecore_file_ext_get(id); - if (strncmp(ext, "mount", 5)) + if (strcmp(ext, "mount")) return; obj = eldbus_object_get(eulogium->dbus.conn, "org.freedesktop.systemd1", unit); @@ -3432,7 +3581,7 @@ static void _on_unit_removed_ret(void *data, const Eldbus_Message *msg) return; } ext = ecore_file_ext_get(id); - if (strncmp(ext, "mount", 5)) + if (strcmp(ext, "mount")) return; obj = eldbus_object_get(eulogium->dbus.conn, "org.freedesktop.systemd1", unit); @@ -3472,8 +3621,8 @@ static void _on_get_available_procedures_ret(void *data, const Eldbus_Message *m if (eldbus_message_iter_arguments_get(avail_proc_struct, "sb", &key, &executable)) { uint_fast16_t i; - for (i = 0; eulogium->procedures[i].key ; i++) { - if (strncmp(key, eulogium->procedures[i].key, eulogium->procedures[i].keylen)) { + for (i = 0; eulogium->procedures[i].key ; i++) { /* XXX use enum/null rather then i to iterate over array */ + if (strcmp(key, eulogium->procedures[i].key)) { eulogium->procedures[i].executable = executable; eulogium->procedures[i].available = EINA_TRUE; } else { @@ -3496,28 +3645,36 @@ static void _on_get_active_procedures_ret(void *data, const Eldbus_Message *msg, return; } if (!eldbus_message_arguments_get(msg, "a(ss)", &array)) { - EINA_LOG_ERR("Message content does not match expected \"a(ss)\" signature."); + EINA_LOG_ERR("Message content does not match expected \"a(ss)\" signature."); /* TODO make macro/function of this as we re-use it often */ 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)) { - uint_fast16_t i; + struct procedure_data *procedure; - for (i = 0; eulogium->procedures[i].key ; i++) { - if (strncmp(key, eulogium->procedures[i].key, eulogium->procedures[i].keylen)) { - printf("Step: %s\n", step); - } else { - EINA_LOG_WARN("Procedure not found: '%s'", key); - } + EINA_LOG_ERR("Key '%s' step '%s'", key, step); + procedure = procedure_get(key); + if (!procedure) { + EINA_LOG_ERR("Unknown procedure %s", key); + return; + } + procedure->status = PROC_ACTIVE; + procedure->step_active = procedure_step_get(procedure, step); + + if (!procedure->step_active) { + EINA_LOG_ERR("Unknown step %s in procedure %s", step, key); + return; } + procedure_process_step(data, procedure); } } } -static void _on_procedure_start_ret(void *data EINA_UNUSED, const Eldbus_Message *msg) +static void _on_procedure_start_ret(void *data, const Eldbus_Message *msg) { const char *errname, *errmsg; const char *key, *step; + struct procedure_data *procedure; if (eldbus_message_error_get(msg, &errname, &errmsg)) { EINA_LOG_ERR("%s %s", errname, errmsg); @@ -3527,13 +3684,28 @@ static void _on_procedure_start_ret(void *data EINA_UNUSED, const Eldbus_Message 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); + return; + } + procedure->status = PROC_ACTIVE; + procedure->step_active = procedure_step_get(procedure, step); + + if (!procedure->step_active) { + EINA_LOG_ERR("Unknown step %s in procedure %s", step, key); + return; + } + procedure_process_step(data, procedure); } static void _on_procedure_next_step_ret(void *data EINA_UNUSED, const Eldbus_Message *msg) { + struct eulogium_data *eulogium = data; const char *errname, *errmsg; const char *key, *step; + struct procedure_data *procedure; if (eldbus_message_error_get(msg, &errname, &errmsg)) { EINA_LOG_ERR("%s %s", errname, errmsg); @@ -3543,13 +3715,25 @@ static void _on_procedure_next_step_ret(void *data EINA_UNUSED, const Eldbus_Mes EINA_LOG_ERR("Message content does not match expected \"ss\" signature. (%s)", eldbus_message_signature_get(msg)); return; } - EINA_LOG_ERR("next: Key '%s' step %s", key, step); + EINA_LOG_ERR("next: Key '%s' step '%s'", key, step); + procedure = procedure_get(key); + if (!procedure) { + EINA_LOG_WARN("Unknown procedure, %s.", key); + return; + } + procedure->step_active = procedure_step_get(procedure, step); + if (!procedure->step_active) { + EINA_LOG_ERR("Unknown step %s in procedure %s", step, key); + return; + } + procedure_process_step(data, procedure); } static void _on_procedure_finished_ret(void *data EINA_UNUSED, const Eldbus_Message *msg) { const char *errname, *errmsg; const char *key; + struct procedure_data *procedure; if (eldbus_message_error_get(msg, &errname, &errmsg)) { EINA_LOG_ERR("%s %s", errname, errmsg); @@ -3560,6 +3744,14 @@ static void _on_procedure_finished_ret(void *data EINA_UNUSED, const Eldbus_Mess return; } EINA_LOG_ERR("finshed Key '%s'", key); + procedure = procedure_get(key); + if (!procedure) { + EINA_LOG_ERR("Unknown procedure %s", key); + return; + } + procedure->status = PROC_FINISHED; + procedure->step_active = NULL; + procedure_process_step(data, procedure); } static void _on_get_error_ret(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED) @@ -3598,6 +3790,7 @@ static uint_fast16_t _dbus_members_map(Eldbus_Proxy *proxy, struct menu_entry_de return i; } +/* move this to dbus_common */ static int eulogium_dbus_init(struct eulogium_data *eulogium) { Eldbus_Object *obj; @@ -3657,6 +3850,36 @@ static int eulogium_dbus_init(struct eulogium_data *eulogium) EINA_LOG_WARN("Could not get dbus network proxy."); return -EFAULT; } + + /* Find a nice home for these */ + eldbus_proxy_signal_handler_add(proxy, "UnitNew", _on_unit_new_ret, eulogium); + eldbus_proxy_signal_handler_add(proxy, "UnitRemoved", _on_unit_removed_ret, eulogium); + msg = eldbus_proxy_method_call_new(proxy, "ListUnitsFiltered"); + iter = eldbus_message_iter_get(msg); + array = eldbus_message_iter_container_new(iter, 'a', "s"); + if (!array) + EINA_LOG_ERR("Empty container"); + eldbus_message_iter_basic_append(array, 's', "mounted"); + eldbus_message_iter_container_close(iter, array); + eldbus_proxy_send(proxy, msg, _on_list_units_ret, eulogium, -1); + /* eldbus_proxy_call(proxy, "ListUnitsFiltered", _on_list_units_ret, eulogium, -1, "as", "{mounted}"); */ + + return 0; +} + +static void eulogium_setup(struct eulogium_data *eulogium) +{ + struct print_data *print; + + while (screen_data.screen[screen_data.count].type != END) + screen_data.count++; + + /* This is silly, barding redonkylous and will get fixed in the refactoring */ + if (eulogium_dbus_init(eulogium)) + EINA_LOG_CRIT("Griffin D-Bus initialization failed!"); + eulogium->procedures = procedures_init(eulogium->dbus.proxy[PRINTER]); + network_init(eulogium->dbus.proxy[NETWORK]); + _dbus_members_map(eulogium->dbus.proxy[NETWORK], menu_settings_network.entry); /* TODO: put signal/method name strings in macro/LUT */ eldbus_proxy_call(eulogium->dbus.proxy[NETWORK], "getNetworkInfo", on_method_get_network_info_ret, eulogium, -1, ""); @@ -3673,25 +3896,50 @@ static int eulogium_dbus_init(struct eulogium_data *eulogium) //eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getStatus", _on_get_status_ret, eulogium, -1, ""); //eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getPrintName", _on_get_print_name_ret, eulogium, -1, ""); //eldbus_proxy_signal_handler_add(eulogium->dbus.proxy[PRINTER], "statusChanged", _on_status_changed_ret, eulogium); + eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getProcedureMetaData", on_method_get_procedure_metadata_ret, &eulogium->procedures[PROC_PRINT], -1, "s", eulogium->procedures[PROC_PRINT].key); - eldbus_proxy_signal_handler_add(proxy, "UnitNew", _on_unit_new_ret, eulogium); - eldbus_proxy_signal_handler_add(proxy, "UnitRemoved", _on_unit_removed_ret, eulogium); - msg = eldbus_proxy_method_call_new(proxy, "ListUnitsFiltered"); - iter = eldbus_message_iter_get(msg); - array = eldbus_message_iter_container_new(iter, 'a', "s"); - if (!array) - EINA_LOG_ERR("Empty container"); - eldbus_message_iter_basic_append(array, 's', "mounted"); - eldbus_message_iter_container_close(iter, array); - eldbus_proxy_send(proxy, msg, _on_list_units_ret, eulogium, -1); - /* eldbus_proxy_call(proxy, "ListUnitsFiltered", _on_list_units_ret, eulogium, -1, "as", "{mounted}"); */ + eulogium_button_cb_data_set(&but_return, eulogium); + eulogium_button_cb_data_set(&but_print_abort_confirm, eulogium); + eulogium_button_cb_data_set(&but_print_abort, eulogium); + eulogium_button_cb_data_set(&but_print_tune, eulogium); + eulogium_button_cb_data_set(&but_main_print, eulogium); + eulogium_button_cb_data_set(&but_print_ignore, eulogium); + eulogium_button_cb_data_set(&but_print_local, eulogium); + eulogium_button_cb_data_set(&but_print_usb, eulogium); + eulogium_button_cb_data_set(&but_main_mathot, eulogium); + eulogium_button_cb_data_set(&but_main_system, eulogium); + eulogium_button_cb_data_set(&but_system_maintenance, eulogium); + eulogium_button_cb_data_set(&but_system_settings, eulogium); + eulogium_button_cb_data_set(&but_material_change, eulogium); + eulogium_button_cb_data_set(&but_material_settings, eulogium); + eulogium_button_cb_data_set(&but_settings_material_1, eulogium); + eulogium_button_cb_data_set(&but_settings_material_2, eulogium); + eulogium_button_cb_data_set(&but_change_material_1, eulogium); + eulogium_button_cb_data_set(&but_change_material_2, eulogium); + eulogium_button_cb_data_set(&but_mathot_material, eulogium); + eulogium_button_cb_data_set(&but_mathot_hotend, eulogium); + eulogium_button_cb_data_set(&but_hotend_change, eulogium); + eulogium_button_cb_data_set(&but_hotend_settings, eulogium); + eulogium_button_cb_data_set(&but_settings_hotend_1, eulogium); + eulogium_button_cb_data_set(&but_settings_hotend_2, eulogium); + eulogium_button_cb_data_set(&but_change_hotend_1, eulogium); + eulogium_button_cb_data_set(&but_change_hotend_2, eulogium); - return 0; + print = malloc(sizeof(struct print_data)); /* TODO this needs a better place, together with dials */ + procedure_meta_set(&eulogium->procedures[PROC_PRINT], print); + procedure_meta_set(&eulogium->procedures[PROC_BED_HEATUP], &dials[PROC_BED_HEATUP]); + procedure_meta_set(&eulogium->procedures[PROC_HOTEND_HEATUP_0], &dials[PROC_HOTEND_HEATUP_0]); + procedure_meta_set(&eulogium->procedures[PROC_HOTEND_HEATUP_1], &dials[PROC_HOTEND_HEATUP_1]); + procedure_meta_set(&eulogium->procedures[PROC_PRINT_SPEED], &dials[PROC_PRINT_SPEED]); + procedure_meta_set(&eulogium->procedures[PROC_FAN_SPEED], &dials[PROC_FAN_SPEED]); + procedure_meta_set(&eulogium->procedures[PROC_FLOW_RATE], &dials[PROC_FLOW_RATE]); + procedure_meta_getall(); } EAPI_MAIN int elm_main(int argc, char **argv) { Eina_Bool quit_option = EINA_FALSE; + Eina_Bool verbose = EINA_FALSE; static const Ecore_Getopt optdesc = { PACKAGE_NAME, "%prog [options]", @@ -3701,6 +3949,7 @@ EAPI_MAIN int elm_main(int argc, char **argv) "eulogium program", 0, { + ECORE_GETOPT_STORE_TRUE('v', "verbose", "Enable debug output"), ECORE_GETOPT_LICENSE('L', "license"), ECORE_GETOPT_COPYRIGHT('C', "copyright"), ECORE_GETOPT_VERSION('V', "version"), @@ -3709,6 +3958,7 @@ EAPI_MAIN int elm_main(int argc, char **argv) } }; Ecore_Getopt_Value values[] = { + ECORE_GETOPT_VALUE_BOOL(verbose), ECORE_GETOPT_VALUE_BOOL(quit_option), ECORE_GETOPT_VALUE_BOOL(quit_option), ECORE_GETOPT_VALUE_BOOL(quit_option), @@ -3720,6 +3970,8 @@ EAPI_MAIN int elm_main(int argc, char **argv) struct eulogium_data eulogium = { .mounts = NULL, .progress_data_refresh = NULL, + .event_inc = NULL, + .event_dec = NULL, .print = { .name = NULL, .url = NULL, @@ -3730,26 +3982,30 @@ EAPI_MAIN int elm_main(int argc, char **argv) .status = DISCONNECTED, .file_handlers = NULL, }, + .networks = NULL, .footer = NULL, }; Evas_Object *window, *object; // Evas_Object *splash_window; // Eina_List *engines, *l; - eeze_init(); - eeze_disk_function(); - if (!(eeze_disk_can_mount() && eeze_disk_can_unmount())) - EINA_LOG_ERR("No disk (u)mount support available"); - elm_need_eldbus(); - args = ecore_getopt_parse(&optdesc, values, argc, argv); if (args < 0) { EINA_LOG_CRIT("Could not parse arguments."); return EXIT_FAILURE; } - INPUT_MOUSE_WHEEL_UP = ecore_event_type_new(); - INPUT_MOUSE_WHEEL_DOWN = ecore_event_type_new(); + /* TODO: Fix logging domain stuff */ + if (verbose) + eina_log_domain_level_set(PACKAGE_NAME, EINA_LOG_LEVEL_DBG); + else + eina_log_domain_level_set(PACKAGE_NAME, EINA_LOG_LEVEL_INFO); + + eeze_init(); + eeze_disk_function(); + elm_need_eldbus(); + + input_init(); // elm_prefs_data_new(); /* TODO */ elm_policy_set(ELM_POLICY_QUIT, /* ELM_POLICY_QUIT_NONE */ ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); @@ -3769,7 +4025,7 @@ EAPI_MAIN int elm_main(int argc, char **argv) #if (ELM_VERSION_MAJOR > 1) || (ELM_VERSION_MINOR >= 10) elm_config_accel_preference_set("accel"); #endif - elm_theme_overlay_add(NULL, "./default.edj"); + elm_theme_overlay_add(NULL, "/usr/local/share/eulogium/default.edj"); #if 0 /* TODO make icon */ icon = evas_object_image_add(evas_object_evas_get(win)); @@ -3781,9 +4037,6 @@ EAPI_MAIN int elm_main(int argc, char **argv) elm_config_focus_highlight_animate_set(EINA_FALSE); elm_config_softcursor_mode_set(ELM_SOFTCURSOR_MODE_OFF); - if (eulogium_dbus_init(&eulogium)) - EINA_LOG_CRIT("Griffin D-Bus initialization failed!"); - /* TODO: move into its own init */ window = elm_win_add(NULL, PACKAGE_NAME, ELM_WIN_BASIC); if (!window) @@ -3821,7 +4074,7 @@ EAPI_MAIN int elm_main(int argc, char **argv) evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_color_set(object, 0, 0, 0, 0); evas_object_repeat_events_set(object, EINA_TRUE); - evas_object_event_callback_add(object, EVAS_CALLBACK_MOUSE_WHEEL, _cb_eulogium_input_wheel, window); /* TODO elm_obj_ev? event propagation issues? */ + evas_object_event_callback_add(object, EVAS_CALLBACK_MOUSE_WHEEL, input_mouse_wheel_cb, window); /* TODO elm_obj_ev? event propagation issues? */ /* TODO: don't these two input events repeat/fall through, everything else, may/should. */ evas_object_show(object); elm_win_resize_object_add(window, object); @@ -3838,6 +4091,8 @@ EAPI_MAIN int elm_main(int argc, char **argv) free(eulogium.printer.file_handlers[i]); free(eulogium.printer.file_handlers); /* TODO: Cleanup function? */ + procedures_shutdown(); + elm_shutdown(); eeze_shutdown(); |