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