summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlliver Schinagl <o.schinagl@ultimaker.com>2015-07-29 06:15:10 (GMT)
committerOlliver Schinagl <o.schinagl@ultimaker.com>2015-07-29 07:08:36 (GMT)
commit185a5010ed7f20b3835cd54c813a4a1f1de525b3 (patch)
treefda0744e4f70905b7ddfd5a4574ad519b29e9cc3
parent3780cd78582e673f9ea076c5c63bd436fb514477 (diff)
downloadeulogium-185a5010ed7f20b3835cd54c813a4a1f1de525b3.zip
eulogium-185a5010ed7f20b3835cd54c813a4a1f1de525b3.tar.gz
eulogium-185a5010ed7f20b3835cd54c813a4a1f1de525b3.tar.bz2
moar moar!
Signed-off-by: Olliver Schinagl <o.schinagl@ultimaker.com>
-rw-r--r--configure.ac1
-rw-r--r--data/Makefile.am5
-rw-r--r--data/etc/systemd/system/griffin.hmi.service15
-rw-r--r--data/themes/default/Makefile.am3
-rw-r--r--data/themes/default/edc/elm/button.edc8
-rw-r--r--data/themes/default/edc/elm/label.edc2
-rw-r--r--data/themes/default/edc/elm/slider.edc22
-rw-r--r--data/themes/default/fonts.edc8
-rw-r--r--packaging/debian/Makefile.am5
-rw-r--r--packaging/debian/changelog2
-rw-r--r--packaging/debian/changelog.in5
-rw-r--r--src/Makefile.am7
-rw-r--r--src/eulogium.c268
-rw-r--r--src/print_data.h5
-rw-r--r--src/procedures.c197
-rw-r--r--src/procedures.h26
-rw-r--r--src/ui_widgets.c307
-rw-r--r--src/ui_widgets.h43
-rw-r--r--src/ui_wizards.c373
-rw-r--r--src/ui_wizards.h49
20 files changed, 916 insertions, 435 deletions
diff --git a/configure.ac b/configure.ac
index 05144d5..ee29025 100644
--- a/configure.ac
+++ b/configure.ac
@@ -61,6 +61,7 @@ doc/Makefile
packaging/Makefile
packaging/slackware/Makefile
packaging/debian/Makefile
+packaging/debian/changelog
packaging/pkgbuild/Makefile
po/Makefile.in
src/Makefile
diff --git a/data/Makefile.am b/data/Makefile.am
index 2d4e6c1..b72f1fa 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -1,3 +1,8 @@
MAINTAINERCLEANFILES = Makefile.in
SUBDIRS = themes desktop
+
+etcdir = $(destdir)/
+etc_DATA = etc/systemd/system/griffin.hmi.service
+
+EXTRA_DIST = $(etc_DATA)
diff --git a/data/etc/systemd/system/griffin.hmi.service b/data/etc/systemd/system/griffin.hmi.service
new file mode 100644
index 0000000..ed952dd
--- /dev/null
+++ b/data/etc/systemd/system/griffin.hmi.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Griffin Human Machine Interface service
+Requires=griffin.target
+After=griffin.target
+
+[Service]
+Environment="EULOGIUM_USER=ultimaker EULOGIUM_GROUP=ultimaker"
+ExecStart=/usr/bin/eulogium_start.sh
+ExecStop=/usr/bin/clearscreen.sh
+Type=simple
+Restart=always
+User=root
+
+[Install]
+WantedBy=griffin.target
diff --git a/data/themes/default/Makefile.am b/data/themes/default/Makefile.am
index 369a986..65eb085 100644
--- a/data/themes/default/Makefile.am
+++ b/data/themes/default/Makefile.am
@@ -99,8 +99,6 @@ edc/elm/scroller.edc \
edc/elm/segment_control.edc \
edc/elm/separator.edc \
edc/elm/slider.edc \
-edc/elm/slider.edc \
-edc/elm/spinner.edc \
edc/elm/spinner.edc \
edc/elm/thumb.edc \
edc/elm/toolbar.edc \
@@ -125,6 +123,7 @@ img/inset_bar_vert_base.png \
img/inset_bar_vert_glow_base.png \
img/inset_bar_vert_glow_inv_base.png \
img/inset_bar_vert_glow_mid_base.png \
+img/vert_bar_inset.png \
img/knob_round_busy.png \
img/glow_round_corners.png \
img/bevel_in.png \
diff --git a/data/themes/default/edc/elm/button.edc b/data/themes/default/edc/elm/button.edc
index 260093a..22205d2 100644
--- a/data/themes/default/edc/elm/button.edc
+++ b/data/themes/default/edc/elm/button.edc
@@ -71,15 +71,15 @@ group { name: "elm/button/base/default";
}
styles {
style { name: "button_style_default";
- base: "font="FNBIG" text_class=tb_plain color=#ffffffff align=center";
+ base: "font="FNL" text_class=tb_plain color=#ffffffff align=center";
FN_TAG_BR;
}
style { name: "button_style_focused";
- base: "font="FNBIG" text_class=tb_plain color=#000000ff align=center";
+ base: "font="FNL" text_class=tb_plain color=#000000ff align=center";
FN_TAG_BR;
}
style { name: "button_style_disabled";
- base: "font="FNBIG" text_class=tb_plain color=#000000ff align=center";
+ base: "font="FNL" text_class=tb_plain color=#000000ff align=center";
FN_TAG_BR;
}
}
@@ -142,7 +142,7 @@ group { name: "elm/button/base/default";
description { state: "default" 0.0;
// fixed: 1 1;
visible: 0;
- text { font: FNBIG;
+ text { font: FNL;
min: 0 0;
text_class: "button_text";
}
diff --git a/data/themes/default/edc/elm/label.edc b/data/themes/default/edc/elm/label.edc
index c3183e8..2ceb517 100644
--- a/data/themes/default/edc/elm/label.edc
+++ b/data/themes/default/edc/elm/label.edc
@@ -38,7 +38,7 @@ group { name: "elm/label/base/title";
color_class: "label_text_title";
}
}
- part { name: "elm.text"; type: TEXTBLOCK;
+ part { name: "elm.text"; type: TEXTBLOCK; /* TODO: fixed size title? */
scale: 1;
description { state: "default" 0.0;
rel1.to: "base";
diff --git a/data/themes/default/edc/elm/slider.edc b/data/themes/default/edc/elm/slider.edc
index f1b3e18..5dcd853 100644
--- a/data/themes/default/edc/elm/slider.edc
+++ b/data/themes/default/edc/elm/slider.edc
@@ -53,15 +53,15 @@ group { name: "elm/slider/horizontal/default";
new i = m & INVERT;
if (i) {
if (!d) {
- set_state(PART:"basebar", "default", 0.0);
+ set_state(PART:"base", "default", 0.0);
} else {
- set_state(PART:"basebar", "disabled", 0.0);
+ set_state(PART:"base", "disabled", 0.0);
}
} else {
if (!d) {
- set_state(PART:"basebar", "default", 0.0);
+ set_state(PART:"base", "default", 0.0);
} else {
- set_state(PART:"basebar", "disabled", 0.0);
+ set_state(PART:"base", "disabled", 0.0);
}
}
if (l) {
@@ -124,10 +124,6 @@ group { name: "elm/slider/horizontal/default";
}
}
part { name: "base"; mouse_events: 0;
- description { state: "default" 0.0;
- }
- }
- part { name: "basebar"; mouse_events: 0;
description { state: "default" 0.0;
rel1.to: "elm.swallow.bar";
rel2.to: "elm.swallow.bar";
@@ -145,8 +141,8 @@ group { name: "elm/slider/horizontal/default";
}
part { name: "bevel"; mouse_events: 0;
description { state: "default" 0.0;
- rel1.to: "basebar";
- rel2.to: "basebar";
+ rel1.to: "base";
+ rel2.to: "base";
image.normal: "slider_run_bevel_horiz.png";
image.border: 5 5 0 0;
fill.smooth: 0;
@@ -284,7 +280,7 @@ group { name: "elm/slider/horizontal/default";
color_class: "slider_text";
text { font: FN;
text_class: "slider";
- align: 0.25 0.5;
+ align: 0.4 0.5; /* XXX quick hack to align text within the content.values */
min: 1 1;
ellipsis: -1;
}
@@ -306,8 +302,8 @@ group { name: "elm/slider/horizontal/default";
align: 1.0 0.5;
rel1.to: "elm.content.values";
rel2.to: "elm.content.values";
- rel1.relative: 0.75 0.5; /* TODO 'align to 0.5' */
- rel2.relative: 0.75 0.5;
+ rel1.relative: 0.8 0.5; /* XXX quick hack to align text within the content.values */
+ rel2.relative: 0.8 0.5;
}
description { state: "visible" 0.0;
inherit: "default" 0.0;
diff --git a/data/themes/default/fonts.edc b/data/themes/default/fonts.edc
index f913bf3..d354f2d 100644
--- a/data/themes/default/fonts.edc
+++ b/data/themes/default/fonts.edc
@@ -1,9 +1,11 @@
/* XXX HACK! We shouldn't need full pathed fonts. */
-#define FNSML "/usr/share/fonts/X11/misc/4x6.pcf.gz"
-#define FN "/usr/share/fonts/X11/misc/5x7.pcf.gz"
-#define FNBIG "/usr/share/fonts/X11/misc/6x10.pcf.gz"
+#define FNXS "/usr/share/fonts/X11/misc/4x6.pcf.gz"
+#define FNS "/usr/share/fonts/X11/misc/5x7.pcf.gz"
+#define FN "/usr/share/fonts/X11/misc/6x9.pcf.gz"
#define FNBD "/usr/share/fonts/X11/misc/6x13B.pcf.gz"
#define FNIT "/usr/share/fonts/X11/misc/6x130.pcf.gz"
+#define FNL "/usr/share/fonts/X11/misc/6x10.pcf.gz"
+#define FNXL "/usr/share/fonts/X11/misc/12x24.pcf.gz"
#define FN_COL_DEFAULT_BASIC 0 0 0 255
/* fonts.edc not sure if this one is neccesary */
diff --git a/packaging/debian/Makefile.am b/packaging/debian/Makefile.am
index cdf960e..faf23fc 100644
--- a/packaging/debian/Makefile.am
+++ b/packaging/debian/Makefile.am
@@ -1,3 +1,6 @@
MAINTAINERCLEANFILES = Makefile.in
-EXTRA_DIST = changelog compat control copyright Makefile.am rules source/format
+debiandir = $(srcdir)/debian
+debian_DATA = changelog compat control copyright Makefile.am rules source/format
+
+EXTRA_DIST = $(debian_DATA)
diff --git a/packaging/debian/changelog b/packaging/debian/changelog
index b7d8483..aa94cb5 100644
--- a/packaging/debian/changelog
+++ b/packaging/debian/changelog
@@ -1,4 +1,4 @@
-eulogium (0.0.1-0) UNRELEASED; urgency=low
+eulogium (v0.1-4-g97b1-dirty) UNRELEASED; urgency=low
* Initial release.
diff --git a/packaging/debian/changelog.in b/packaging/debian/changelog.in
new file mode 100644
index 0000000..ffaa44c
--- /dev/null
+++ b/packaging/debian/changelog.in
@@ -0,0 +1,5 @@
+@PACKAGE_NAME@ (@VERSION@) UNRELEASED; urgency=low
+
+ * Initial release.
+
+ -- Olliver Schinagl <o.schinagl@ultimaker.com> Tue, 14 Jul 2015 09:54:16 +0200
diff --git a/src/Makefile.am b/src/Makefile.am
index 0d0174f..46772f6 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -13,10 +13,11 @@ AM_CPPFLAGS = -DPACKAGE_BIN_DIR=\"$(bindir)/\" \
eulogium_SOURCES = eulogium.c eulogium_item_list.c procedures.c \
dbus_common.c print_data.c network.c ui_widgets.c \
- ui_input.c \
- eulogium.h eulogium_private.h eulogium_item_list.h procedures.h \
+ ui_input.c ui_wizards.c \
+ eulogium.h eulogium_item_list.h procedures.h \
dbus_common.h print_data.h network.h ui_widgets.h \
- ui_input.h settings_data.h gettext.h
+ ui_input.h ui_wizards.h settings_data.h \
+ libgettext.h gettext.h
eulogium_LDADD = @EFL_LIBS@
diff --git a/src/eulogium.c b/src/eulogium.c
index 663f1ff..10c6ac6 100644
--- a/src/eulogium.c
+++ b/src/eulogium.c
@@ -2,16 +2,20 @@
# include "config.h"
#endif
+#include <errno.h>
#include <Ecore_Getopt.h>
#include <Eeze.h>
#include <Eeze_Disk.h>
#include <Elementary.h>
#include <Evas.h>
#include <libintl.h>
+#include <pwd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>
+#include <sys/types.h>
+#include <unistd.h>
#include "dbus_common.h"
#include "eulogium.h"
@@ -23,6 +27,7 @@
#include "settings_data.h"
#include "ui_input.h"
#include "ui_widgets.h"
+#include "ui_wizards.h"
#define COPYRIGHT "Copyright © 2015 Olliver Schinagl <o.schinagl@ultimaker.com> and various contributors (see AUTHORS)."
@@ -1719,11 +1724,11 @@ static struct settings_dial_data dials[] = {
.label = LABEL_PROC_BED_MOVE,
.help = N_("Rotate the knob<br>CW to down<br>CCW to go up"),
.step = 1.0,
- .min = 0.0, /* Unused with this dial */
- .max = 0.0, /* Unused with this dial */
+ .min = 1.0,
+ .max = 1.0,
.value = 0.0,
.value_end = 0.0, /* Unused with this dial */
- .format = "", /* Unused with this dial */
+ .format = "",
.format_end = "", /* Unused with this dial */
.unit = "", /* Unused with this dial */
.method_set = &procedure_target_set,
@@ -1737,7 +1742,7 @@ static struct settings_dial_data dials[] = {
.max = 60.0,
.value = 0.0,
.value_end = 0.0,
- .format = "%1.1f",
+ .format = "%1.0f",
.format_end = " | %1.0f%s",
.unit = " °C",
.method_set = &procedure_target_set,
@@ -1751,7 +1756,7 @@ static struct settings_dial_data dials[] = {
.max = 300.0,
.value = 0.0,
.value_end = 0.0,
- .format = "%1.1f",
+ .format = "%1.0f",
.format_end = " | %1.0f%s",
.unit = " °C",
.method_set = &procedure_target_set, /* XXX use ampersant improve of functions */
@@ -1765,7 +1770,7 @@ static struct settings_dial_data dials[] = {
.max = 300.0,
.value = 0.0,
.value_end = 0.0,
- .format = "%1.1f",
+ .format = "%1.0f",
.format_end = " | %1.0f%s",
.unit = " °C",
.method_set = &procedure_target_set, /* XXX use ampersant improve of functions */
@@ -1774,12 +1779,12 @@ static struct settings_dial_data dials[] = {
},
[PROC_PRINT_SPEED] = {
.label = N_("Print speed"),
- .step = 10.0,
+ .step = 15.0,
.min = 10.0,
.max = 1000.0,
.value = 0.0,
.value_end = 0.0,
- .format = "%1.1f",
+ .format = "%1.0f",
.format_end = " | %1.0f%s",
.unit = "%",
.method_set = &procedure_target_set,
@@ -1822,7 +1827,7 @@ static struct settings_dial_data dials[] = {
.value = 0.0,
.value_end = 0.0,
.format = "%1.1f",
- .format_end = " | %1.0f%s",
+ .format_end = " | %1.1f%s",
.unit = " mm",
.method_set = &procedure_target_set,
.method_get = &procedure_metadata_key_get,
@@ -1835,7 +1840,7 @@ static struct settings_dial_data dials[] = {
.max = 150.0,
.value = 0.0,
.value_end = 0.0,
- .format = "%1.1f",
+ .format = "%1.0f",
.format_end = " | %1.0f%s",
.unit = " mm / s",
.method_set = &procedure_target_set,
@@ -1850,7 +1855,7 @@ static struct settings_dial_data dials[] = {
.value = 0.0,
.value_end = 0.0,
.format = "%1.1f",
- .format_end = " | %1.0f%s",
+ .format_end = " | %1.1f%s",
.unit = " mm",
.method_set = &procedure_target_set,
.method_get = &procedure_metadata_key_get,
@@ -2003,7 +2008,9 @@ 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)
{
- ui_stack_pop_cb(data, obj, event_info); /* XXX replace content_prev calls with ui_stack_pop */
+ struct eulogium_data *eulogium = data;
+
+ ui_stack_pop_cb(eulogium->navi, 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)
@@ -2012,7 +2019,7 @@ static void _print_abort_confirm_cb(void *data, Evas_Object *obj EINA_UNUSED, vo
Evas_Object *content;
content = eulogium_menu_confirm(eulogium->navi, N_("<br>Abort the print?"), "No", &but_print_abort);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _print_abort_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2038,7 +2045,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_material_change_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2048,7 +2055,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_material_settings_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2058,7 +2065,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_hotend_change_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2068,7 +2075,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_hotend_settings_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2078,7 +2085,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_main_system_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2088,7 +2095,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void menu_wifi_list(struct eulogium_data *eulogium)
@@ -2101,7 +2108,7 @@ static void menu_wifi_list(struct eulogium_data *eulogium)
wifi_list->type = LIST_WIFI;
content = menu_widget_list(eulogium, eulogium->navi, wifi_list);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void menu_internal_storage(struct eulogium_data *eulogium)
@@ -2114,7 +2121,7 @@ static void menu_internal_storage(struct eulogium_data *eulogium)
menu_internal_storage->type = LIST_FILE;
menu_internal_storage->dir.path = "/home"; /* TODO, use variable for internal storage */
content = menu_widget_list(eulogium, eulogium->navi, menu_internal_storage);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void menu_usb_storage(struct eulogium_data *eulogium)
@@ -2141,7 +2148,7 @@ static void menu_usb_storage(struct eulogium_data *eulogium)
menu_usb_storage->dir.path = malloc(mount_len);
strncpy(menu_usb_storage->dir.path, mount_point, mount_len);
content = menu_widget_list(eulogium, eulogium->navi, menu_usb_storage);
- ui_stack_push(eulogium, content, PAGE_USB);
+ ui_stack_push(eulogium->navi, content, PAGE_USB);
}
static void _network_wifi_manage_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2177,7 +2184,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
}
@@ -2189,7 +2196,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_system_settings_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2199,7 +2206,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_settings_hotend_1_offset_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2209,7 +2216,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_settings_hotend_2_offset_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2219,7 +2226,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_settings_language_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2229,7 +2236,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_settings_led_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2239,7 +2246,7 @@ static void _but_settings_led_cb(void *data, Evas_Object *obj EINA_UNUSED, void
printf("But menu led settings\n");
content = menu_widget_list(eulogium, eulogium->navi, &menu_settings_led);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_led_hue_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2249,7 +2256,7 @@ static void _but_led_hue_cb(void *data, Evas_Object *object EINA_UNUSED, void *e
printf("Button led_hue pressed\n");
content = ui_widget_slider(eulogium->navi, eulogium, &dial_led_hue);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_led_saturation_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2259,7 +2266,7 @@ static void _but_led_saturation_cb(void *data, Evas_Object *object EINA_UNUSED,
printf("Button led_saturation pressed\n");
content = ui_widget_slider(eulogium->navi, eulogium, &dial_led_saturation);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_led_brightness_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2269,7 +2276,7 @@ static void _but_led_brightness_cb(void *data, Evas_Object *object EINA_UNUSED,
printf("Button led_brightness pressed\n");
content = ui_widget_slider(eulogium->navi, eulogium, &dial_led_brightness);
- ui_stack_push(eulogium, content, PAGE_PRINTING);
+ ui_stack_push(eulogium->navi, content, PAGE_PRINTING);
}
static void _but_bed_heatup_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2279,7 +2286,7 @@ static void _but_bed_heatup_cb(void *data, Evas_Object *object EINA_UNUSED, void
printf("Button bed temperature pressed\n");
content = ui_widget_slider(eulogium->navi, eulogium, &dials[PROC_BED_HEATUP]);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_hotend_heatup_0_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2289,7 +2296,7 @@ static void _but_hotend_heatup_0_cb(void *data, Evas_Object *object EINA_UNUSED,
printf("Button hotend 1 temperature pressed\n");
content = ui_widget_slider(eulogium->navi, eulogium, &dials[PROC_HOTEND_HEATUP_0]);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_hotend_heatup_1_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2299,7 +2306,7 @@ static void _but_hotend_heatup_1_cb(void *data, Evas_Object *object EINA_UNUSED,
printf("Button hotend 2 temperature pressed\n");
content = ui_widget_slider(eulogium->navi, eulogium, &dials[PROC_HOTEND_HEATUP_1]);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_hotend_active_set_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2315,7 +2322,7 @@ static void _but_print_speed_cb(void *data, Evas_Object *object EINA_UNUSED, voi
printf("Button print speed pressed\n");
content = ui_widget_slider(eulogium->navi, eulogium, &dials[PROC_PRINT_SPEED]);
- ui_stack_push(eulogium, content, PAGE_PRINTING);
+ ui_stack_push(eulogium->navi, content, PAGE_PRINTING);
}
static void _but_fan_speed_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2325,7 +2332,7 @@ static void _but_fan_speed_cb(void *data, Evas_Object *object EINA_UNUSED, void
printf("Button fan speed pressed\n");
content = ui_widget_slider(eulogium->navi, eulogium, &dials[PROC_FAN_SPEED]);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_flow_rate_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2335,7 +2342,7 @@ static void _but_flow_rate_cb(void *data, Evas_Object *object EINA_UNUSED, void
printf("Button material flow pressed\n");
content = ui_widget_slider(eulogium->navi, eulogium, &dials[PROC_FLOW_RATE]);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_retraction_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2345,7 +2352,7 @@ static void _but_retraction_cb(void *data, Evas_Object *obj EINA_UNUSED, void *e
printf("But menu retraction\n");
content = menu_widget_list(eulogium, eulogium->navi, &menu_retraction);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_retraction_length_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2355,7 +2362,7 @@ static void _but_retraction_length_cb(void *data, Evas_Object *obj EINA_UNUSED,
printf("But retraction length\n");
content = ui_widget_slider(eulogium->navi, eulogium, &dials[PROC_RETRACTION_LENGTH]);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_retraction_speed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2365,7 +2372,7 @@ static void _but_retraction_speed_cb(void *data, Evas_Object *obj EINA_UNUSED, v
printf("But retraction speed\n");
content = ui_widget_slider(eulogium->navi, eulogium, &dials[PROC_RETRACTION_SPEED]);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_retraction_zhop_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2375,7 +2382,7 @@ static void _but_retraction_zhop_cb(void *data, Evas_Object *obj EINA_UNUSED, vo
printf("But retraction zhop\n");
content = ui_widget_slider(eulogium->navi, eulogium, &dials[PROC_RETRACTION_ZHOP]);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_bed_level_auto_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2408,8 +2415,8 @@ static void _but_bed_move_cb(void *data, Evas_Object *obj EINA_UNUSED, void *eve
Evas_Object *content = NULL;
printf("But bed move\n");
- content = ui_widget_spinner(eulogium->navi, eulogium, &dials[PROC_BED_MOVE]);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ content = ui_widget_spinner_add(eulogium->navi, &dials[PROC_BED_MOVE]);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_material_move_0_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2419,7 +2426,7 @@ static void _but_material_move_0_cb(void *data, Evas_Object *obj EINA_UNUSED, vo
printf("But move material 0\n");
content = ui_widget_spinner(eulogium->navi, eulogium, &dials[PROC_MATERIAL_MOVE_0]);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_material_move_1_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2429,7 +2436,7 @@ static void _but_material_move_1_cb(void *data, Evas_Object *obj EINA_UNUSED, vo
printf("But move material 1\n");
content = ui_widget_spinner(eulogium->navi, eulogium, &dials[PROC_MATERIAL_MOVE_1]);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_motion_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2439,7 +2446,7 @@ static void _but_motion_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event
printf("But menu motion\n");
content = menu_widget_list(eulogium, eulogium->navi, &menu_motion);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_jerk_xy_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2449,7 +2456,7 @@ static void _but_jerk_xy_cb(void *data, Evas_Object *obj EINA_UNUSED, void *even
printf("But jerk xy\n");
content = ui_widget_slider(eulogium->navi, eulogium, &dials[PROC_JERK_XY]);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_jerk_z_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2459,7 +2466,7 @@ static void _but_jerk_z_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event
printf("But jerk z\n");
content = ui_widget_slider(eulogium->navi, eulogium, &dials[PROC_JERK_Z]);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_current_xy_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2469,7 +2476,7 @@ static void _but_current_xy_cb(void *data, Evas_Object *obj EINA_UNUSED, void *e
printf("But current xy\n");
content = ui_widget_slider(eulogium->navi, eulogium, &dials[PROC_CURRENT_XY]);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_current_z_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2479,7 +2486,7 @@ static void _but_current_z_cb(void *data, Evas_Object *obj EINA_UNUSED, void *ev
printf("But current z\n");
content = ui_widget_slider(eulogium->navi, eulogium, &dials[PROC_CURRENT_Z]);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_current_e_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2489,7 +2496,7 @@ static void _but_current_e_cb(void *data, Evas_Object *obj EINA_UNUSED, void *ev
printf("But current e\n");
content = ui_widget_slider(eulogium->navi, eulogium, &dials[PROC_CURRENT_E]);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static char *parse_networks_for_display(struct network_data *networks)
@@ -2528,25 +2535,44 @@ static void _but_network_info_cb(void *data, Evas_Object *obj EINA_UNUSED, void
evas_object_show(_bottom);
content = eulogium_split_screen(eulogium->navi, _top, _bottom);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
-static void _but_software_version_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+static void _but_software_version_cb(void *data, Evas_Object *eo EINA_UNUSED, void *event_info EINA_UNUSED)
{
struct eulogium_data *eulogium = data;
- Evas_Object *content, *_top, *_bottom;
+ Evas_Object *content, *obj, *_top, *_bottom;
+ char hostname[HOST_NAME_MAX];
- _top = elm_label_add(eulogium->navi); /* TODO, dynamically update IPs, requires 'redrawing' of some sort */
- elm_object_text_set(_top, PACKAGE_VERSION);
+ if (gethostname(hostname, HOST_NAME_MAX) == ENAMETOOLONG)
+ EINA_LOG_WARN("Hostname too long.");
+
+ _top = elm_box_add(eulogium->navi);
+ 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_show(_top);
+ obj = elm_label_add(_top);
+ elm_object_text_set(obj, hostname);
+ elm_object_style_set(obj, "slide_bounce");
+ elm_label_slide_mode_set(obj, ELM_LABEL_SLIDE_MODE_AUTO);
+ //elm_label_slide_speed_set(obj, 2);
+ evas_object_show(obj);
+ elm_label_slide_go(obj); /* only bounce on len > width? */
+ elm_box_pack_end(_top, obj);
+
+ obj = elm_label_add(_top);
+ elm_object_text_set(obj, PACKAGE_VERSION);
+ evas_object_show(obj);
+ elm_box_pack_end(_top, obj);
+
_bottom = elm_button_add(eulogium->navi);
elm_object_text_set(_bottom, _(but_return.text)); /* not pretty using the global XXX */
evas_object_smart_callback_add(_bottom, "clicked", but_return.cb.func, but_return.cb.data);
evas_object_show(_bottom);
content = eulogium_split_screen(eulogium->navi, _top, _bottom);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_main_mathot_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2557,7 +2583,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_settings_material_1_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2568,7 +2594,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_settings_material_2_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2579,7 +2605,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_material_customize_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2590,7 +2616,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_print_tune_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2601,7 +2627,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);
- ui_stack_push(eulogium, content, PAGE_PRINTING);
+ ui_stack_push(eulogium->navi, content, PAGE_PRINTING);
}
static void _but_change_material_1_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2612,7 +2638,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_change_material_2_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2623,7 +2649,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_mathot_material_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2634,7 +2660,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_mathot_hotend_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2645,7 +2671,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_settings_hotend_1_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2656,7 +2682,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_settings_hotend_2_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2667,7 +2693,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_change_hotend_1_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2678,7 +2704,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
static void _but_change_hotend_2_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -2689,7 +2715,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);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
}
void eulogium_button_cb_set(struct button_def *button, struct button_cb *cb)
@@ -3022,7 +3048,7 @@ void eulogium_generic_error(struct eulogium_data *eulogium, uint_fast16_t error_
elm_box_pack_end(content, object);
#endif
- ui_stack_push(eulogium, content, PAGE_ERROR);
+ ui_stack_push(eulogium->navi, content, PAGE_ERROR);
}
static void _cleaned_bed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -3097,7 +3123,7 @@ static void _cb_select_wifi(void *data, Evas_Object *eo EINA_UNUSED, void *event
evas_object_show(_bottom);
content = eulogium_split_screen(navi, _top, _bottom);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL);
network_connect_wifi(network);
};
@@ -3120,14 +3146,14 @@ static void _cb_select_file(void *data, Evas_Object *obj EINA_UNUSED, void *even
new_dir->dir.path = malloc(new_dir_len); /* XXX memleak, but by copying we can free _filelist_data without worry */
strncpy(new_dir->dir.path, filepath, new_dir_len);
content = menu_widget_list(eulogium, eulogium->navi, new_dir);
- ui_stack_push(eulogium, content, PAGE_NORMAL); /* XXX We need to set the correct page type here */
+ ui_stack_push(eulogium->navi, content, PAGE_NORMAL); /* XXX We need to set the correct page type here */
} else {
Evas_Object *content;
eulogium_print_data_set(eulogium, filepath);
procedure_print_start(&eulogium->print);
content = eulogium_pre_print(eulogium->navi, eulogium);
- ui_stack_push(eulogium, content, PAGE_PRINTING);
+ ui_stack_push(eulogium->navi, content, PAGE_PRINTING);
}
}
}
@@ -3534,9 +3560,13 @@ Evas_Object *eulogium_main_menu(Evas_Object *window, struct eulogium_data *eulog
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 */
+ * instead of assuming the stack is empty | don't be stupid, we just created the navi here, so it IS empty.
+ * we need to ensure this is always initialized first (ui_init()?) */
content = eulogium_tripple_button_menu(eulogium->navi, &but_main_print, &but_main_mathot, &but_main_system);
- ui_stack_push(eulogium, content, PAGE_BOTTOM);
+ ui_stack_push(eulogium->navi, content, PAGE_BOTTOM);
+ /* XXX Test: pop a wizard at the start dev it */
+ content = wizard_add(eulogium->navi, &material_unload, 0, EINA_TRUE);
+ ui_stack_push(eulogium->navi, content, PAGE_WIZARD);
return eulogium->navi;
}
@@ -3955,7 +3985,7 @@ static void _on_get_active_procedures_ret(void *data EINA_UNUSED, const Eldbus_M
EINA_LOG_ERR("Unknown step %s in procedure %s", step, key);
return;
}
- procedure_process_step(data, procedure);
+ procedure_process_step(procedure, data);
}
}
}
@@ -3987,7 +4017,7 @@ static void _on_procedure_start_ret(void *data, const Eldbus_Message *msg)
EINA_LOG_ERR("Unknown step %s in procedure %s", step, key);
return;
}
- procedure_process_step(data, procedure);
+ procedure_process_step(procedure, data);
}
static void _on_procedure_next_step_ret(void *data EINA_UNUSED, const Eldbus_Message *msg)
@@ -4015,7 +4045,7 @@ static void _on_procedure_next_step_ret(void *data EINA_UNUSED, const Eldbus_Mes
EINA_LOG_ERR("Unknown step %s in procedure %s", step, key);
return;
}
- procedure_process_step(data, procedure);
+ procedure_process_step(procedure, data);
}
static void _on_procedure_finished_ret(void *data EINA_UNUSED, const Eldbus_Message *msg)
@@ -4040,7 +4070,7 @@ static void _on_procedure_finished_ret(void *data EINA_UNUSED, const Eldbus_Mess
}
procedure->status = PROC_FINISHED;
procedure->step_active = NULL;
- procedure_process_step(data, procedure);
+ procedure_process_step(procedure, data);
// XXX procedure_metadata_key_get(key)
}
@@ -4215,28 +4245,56 @@ static void eulogium_setup(struct eulogium_data *eulogium)
eulogium_button_cb_data_set(&but_change_hotend_1, eulogium);
eulogium_button_cb_data_set(&but_change_hotend_2, eulogium);
- procedure_meta_set(&eulogium->procedures[PROC_FIRMWARE_UPDATE], &progressbars[PROC_FIRMWARE_UPDATE]);
- procedure_meta_set(&eulogium->procedures[PROC_PRINT], &progressbars[PROC_PRINT]);
- procedure_meta_set(&eulogium->procedures[PROC_BED_MOVE], &dials[PROC_BED_MOVE]);
- 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_set(&eulogium->procedures[PROC_RETRACTION_LENGTH], &dials[PROC_RETRACTION_LENGTH]);
- procedure_meta_set(&eulogium->procedures[PROC_RETRACTION_SPEED], &dials[PROC_RETRACTION_SPEED]);
- procedure_meta_set(&eulogium->procedures[PROC_RETRACTION_ZHOP], &dials[PROC_RETRACTION_ZHOP]);
- procedure_meta_set(&eulogium->procedures[PROC_MATERIAL_MOVE_0], &dials[PROC_MATERIAL_MOVE_0]);
- procedure_meta_set(&eulogium->procedures[PROC_MATERIAL_MOVE_1], &dials[PROC_MATERIAL_MOVE_1]);
- procedure_meta_set(&eulogium->procedures[PROC_JERK_XY], &dials[PROC_JERK_XY]);
- procedure_meta_set(&eulogium->procedures[PROC_JERK_Z], &dials[PROC_JERK_Z]);
- procedure_meta_set(&eulogium->procedures[PROC_CURRENT_XY], &dials[PROC_CURRENT_XY]);
- procedure_meta_set(&eulogium->procedures[PROC_CURRENT_Z], &dials[PROC_CURRENT_Z]);
- procedure_meta_set(&eulogium->procedures[PROC_CURRENT_E], &dials[PROC_CURRENT_E]);
+ procedure_meta_set(&eulogium->procedures[PROC_FIRMWARE_UPDATE], PROC_META_PROGRESS, &progressbars[PROC_FIRMWARE_UPDATE]);
+ procedure_meta_set(&eulogium->procedures[PROC_PRINT], PROC_META_PROGRESS, &progressbars[PROC_PRINT]);
+ procedure_meta_set(&eulogium->procedures[PROC_BED_MOVE], PROC_META_SPINNER, &dials[PROC_BED_MOVE]);
+ procedure_meta_set(&eulogium->procedures[PROC_BED_HEATUP], PROC_META_SLIDER, &dials[PROC_BED_HEATUP]);
+ procedure_meta_set(&eulogium->procedures[PROC_HOTEND_HEATUP_0], PROC_META_SLIDER, &dials[PROC_HOTEND_HEATUP_0]);
+ procedure_meta_set(&eulogium->procedures[PROC_HOTEND_HEATUP_1], PROC_META_SLIDER, &dials[PROC_HOTEND_HEATUP_1]);
+ procedure_meta_set(&eulogium->procedures[PROC_PRINT_SPEED], PROC_META_SLIDER, &dials[PROC_PRINT_SPEED]);
+ procedure_meta_set(&eulogium->procedures[PROC_FAN_SPEED], PROC_META_SLIDER, &dials[PROC_FAN_SPEED]);
+ procedure_meta_set(&eulogium->procedures[PROC_FLOW_RATE], PROC_META_SLIDER, &dials[PROC_FLOW_RATE]);
+ procedure_meta_set(&eulogium->procedures[PROC_RETRACTION_LENGTH], PROC_META_SLIDER, &dials[PROC_RETRACTION_LENGTH]);
+ procedure_meta_set(&eulogium->procedures[PROC_RETRACTION_SPEED], PROC_META_SLIDER, &dials[PROC_RETRACTION_SPEED]);
+ procedure_meta_set(&eulogium->procedures[PROC_RETRACTION_ZHOP], PROC_META_SLIDER, &dials[PROC_RETRACTION_ZHOP]);
+ procedure_meta_set(&eulogium->procedures[PROC_MATERIAL_MOVE_0], PROC_META_SPINNER, &dials[PROC_MATERIAL_MOVE_0]);
+ procedure_meta_set(&eulogium->procedures[PROC_MATERIAL_MOVE_1], PROC_META_SPINNER, &dials[PROC_MATERIAL_MOVE_1]);
+ procedure_meta_set(&eulogium->procedures[PROC_JERK_XY], PROC_META_SLIDER, &dials[PROC_JERK_XY]);
+ procedure_meta_set(&eulogium->procedures[PROC_JERK_Z], PROC_META_SLIDER, &dials[PROC_JERK_Z]);
+ procedure_meta_set(&eulogium->procedures[PROC_CURRENT_XY], PROC_META_SLIDER, &dials[PROC_CURRENT_XY]);
+ procedure_meta_set(&eulogium->procedures[PROC_CURRENT_Z], PROC_META_SLIDER, &dials[PROC_CURRENT_Z]);
+ procedure_meta_set(&eulogium->procedures[PROC_CURRENT_E], PROC_META_SLIDER, &dials[PROC_CURRENT_E]);
procedure_meta_getall();
}
+void _priviledges_drop(void)
+{
+ char *env;
+ struct passwd *pwd;
+
+ if (getuid() != 0) {
+ EINA_LOG_CRIT("No privileges to drop");
+ return;
+ }
+
+ env = getenv("EULOGIUM_GROUP");
+ if (env) {
+ pwd = getpwnam(env);
+ if (setgid(pwd->pw_gid) != 0)
+ EINA_LOG_CRIT("Unable to change group privileges %s", strerror(errno));
+ } else {
+ EINA_LOG_CRIT("EULOGIUM_GROUP not set, not dropping group privileges");
+ }
+ env = getenv("EULOGIUM_USER");
+ if (env) {
+ pwd = getpwnam(env);
+ if (setuid(pwd->pw_uid) != 0)
+ EINA_LOG_CRIT("Unable to change user privileges %s", strerror(errno));
+ } else {
+ EINA_LOG_CRIT("EULOGIUM_USER not set, not dropping user privileges");
+ }
+}
+
EAPI_MAIN int elm_main(int argc, char **argv)
{
Eina_Bool quit_option = EINA_FALSE;
@@ -4269,8 +4327,6 @@ EAPI_MAIN int elm_main(int argc, char **argv)
int args;
uint_fast8_t i;
char *buf;
- Eina_List *flist, *fl;
- char *font;
struct eulogium_data eulogium = {
.mounts = NULL,
.progress_data_refresh = NULL,
@@ -4285,6 +4341,8 @@ EAPI_MAIN int elm_main(int argc, char **argv)
// Evas_Object *splash_window;
// Eina_List *engines, *l;
+ _priviledges_drop(); /* XXX hack until we no longer need root, this may be needed elsewhere. */
+
args = ecore_getopt_parse(&optdesc, values, argc, argv);
if (args < 0) {
EINA_LOG_CRIT("Could not parse arguments.");
@@ -4323,7 +4381,7 @@ EAPI_MAIN int elm_main(int argc, char **argv)
buf = malloc((strlen(elm_app_data_dir_get()) + 20) * sizeof(char));
snprintf(buf, strlen(elm_app_data_dir_get()) + 20, "%s/themes/default.edj", elm_app_data_dir_get());
elm_theme_overlay_add(NULL, buf); /* TODO let preprocessor at work here with theme subdir and theme name */
- printf("app data dir: %s\n", buf);
+ EINA_LOG_DBG("app data dir: %s", buf);
free(buf);
#if 0 /* TODO make icon */
@@ -4388,10 +4446,6 @@ EAPI_MAIN int elm_main(int argc, char **argv)
evas_object_show(window);
- flist = evas_font_available_list(evas_object_evas_get(window));
- EINA_LIST_FOREACH(flist, fl, font)
- printf("font: %s\n", font);
-
elm_run();
eldbus_connection_unref(eulogium.dbus.conn);
diff --git a/src/print_data.h b/src/print_data.h
index 5d901f3..b51252a 100644
--- a/src/print_data.h
+++ b/src/print_data.h
@@ -35,6 +35,11 @@ struct print_data { /* XXX progress data or the like, strip non-progress data */
enum procedure_key proc_key;
};
+struct extrusion_train_data {
+ uint_fast8_t id;
+ double temperature;
+};
+
enum printer_status {
UNKNOWN,
DISCONNECTED,
diff --git a/src/procedures.c b/src/procedures.c
index f4ce6f5..5bf686f 100644
--- a/src/procedures.c
+++ b/src/procedures.c
@@ -47,13 +47,18 @@
#define _PROC_BED_RAISE "RAISE_BED"
#define _PROC_BED_HOME "HOME_BED"
#define _PROC_HEAD_HOME "HOME_HEAD"
-#define _PROC_MATERIAL_MOVE_0 "MOVE_MATERIAL_0"
-#define _PROC_MATERIAL_MOVE_1 "MOVE_MATERIAL_1"
+#define __PROC_MATERIAL_MOVE(x) "MOVE_MATERIAL_" #x
+#define _PROC_MATERIAL_MOVE(x) "MOVE_MATERIAL_%u"
+#define _PROC_MATERIAL_MOVE_0 __PROC_MATERIAL_MOVE(0)
+#define _PROC_MATERIAL_MOVE_1 __PROC_MATERIAL_MOVE(0)
#define _PROC_JERK_XY "JERK_XY"
#define _PROC_JERK_Z "JERK_Z"
#define _PROC_CURRENT_XY "XY_MAX_CURRENT"
#define _PROC_CURRENT_Z "Z_MAX_CURRENT"
#define _PROC_CURRENT_E "E_CURRENT"
+#define _PROC_MATERIAL_UNLOAD "REMOVE_MATERIAL"
+#define _PROC_MATERIAL_LOAD "INSERT_MATERIAL"
+#define _PROC_MATERIAL_CHANGE "CHANGE_MATERIAL"
#define _META_CURRENT "current"
#define _META_TARGET "target"
@@ -81,9 +86,6 @@
#define _PROC_MSG_PRINTER_CLEANED "PRINTER_CLEANED"
-int EVENT_PROC_PROGRESS_PRINT = 0;
-int EVENT_PROC_PROGRESS_FIRMWARE_UPDATE = 0;
-
static Eldbus_Proxy *__proxy = NULL;
static void _container_basic_variant(Eldbus_Message_Iter *parent, int type, ...)
@@ -168,7 +170,7 @@ static void _get_meta_progress(void *data, const void *key, Eldbus_Message_Iter
}
free(var_sig);
- ecore_event_add(procedure->poll.event, NULL, NULL, procedure);
+ ecore_event_add(procedure->poll.event, progress, NULL, NULL);
}
static void _get_meta_cur_tar(void *data, const void *key, Eldbus_Message_Iter *var)
@@ -198,7 +200,7 @@ static void _get_meta_cur_tar(void *data, const void *key, Eldbus_Message_Iter *
}
free(var_sig);
- //ecore_event_add();
+ ecore_event_add(procedure->poll.event, dial_data, NULL, NULL);
}
static void _on_start_print_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
@@ -254,7 +256,7 @@ Eina_Bool _print_progress_cleanup(void *data, Elm_Object_Item *eoi EINA_UNUSED)
return EINA_TRUE;
}
-void procedure_process_step(struct eulogium_data *eulogium, struct procedure_data *procedure)
+void procedure_process_step(struct procedure_data *procedure, struct eulogium_data *eulogium)
{
Evas_Object *content = NULL;
Elm_Object_Item *navi_item = NULL;
@@ -269,7 +271,7 @@ void procedure_process_step(struct eulogium_data *eulogium, struct procedure_dat
EINA_LOG_CRIT("%s", procedure->step_active->key);
if (procedure->step_active->step == STEP_FIRMWARE_UPDATE_WRITING) {
procedure_metadata_poll(procedure, EINA_TRUE);
- content = ui_widget_progress(eulogium->navi, eulogium, procedure);
+ content = ui_widget_progress(eulogium->navi, procedure);
page_state = PAGE_NORMAL;
}
if (procedure->step_active->step == STEP_PRINTING) {
@@ -459,9 +461,31 @@ static struct procedure_step steps_hotend_active_set[] = {
}, { NULL }, /* sentinel */
};
+static struct procedure_step steps_material_unload[] = {
+ {
+ .key = _STEP_SWITCHING,
+ .step = STEP_SWITCHING,
+ }, { NULL }, /* sentinel */
+};
+
+static struct procedure_step steps_material_load[] = {
+ {
+ .key = _STEP_SWITCHING,
+ .step = STEP_SWITCHING,
+ }, { NULL }, /* sentinel */
+};
+
+static struct procedure_step steps_material_change[] = {
+ {
+ .key = _STEP_SWITCHING,
+ .step = STEP_SWITCHING,
+ }, { NULL }, /* sentinel */
+};
+
static struct procedure_data procedures[] = {
[PROC_FIRMWARE_UPDATE] = {
.key = _PROC_FIRMWARE_UPDATE,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = _get_meta_progress,
.executable = EINA_FALSE,
@@ -472,10 +496,12 @@ static struct procedure_data procedures[] = {
.poll = {
.in = 0.5,
.timer = NULL,
+ .event = 0,
},
},
[PROC_PRINT] = {
.key = _PROC_PRINT,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = _get_meta_progress,
.executable = EINA_FALSE,
@@ -485,11 +511,13 @@ static struct procedure_data procedures[] = {
.meta = NULL, /* struct print_data */
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
},
},
[PROC_BED_HEATUP] = {
.key = _PROC_BED_HEATUP,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = _get_meta_cur_tar,
.executable = EINA_FALSE,
@@ -499,11 +527,13 @@ static struct procedure_data procedures[] = {
.meta = NULL,
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
},
},
[PROC_HOTEND_HEATUP_0] = {
.key = _PROC_HOTEND_HEATUP_0,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = _get_meta_cur_tar,
.executable = EINA_FALSE,
@@ -518,6 +548,7 @@ static struct procedure_data procedures[] = {
},
[PROC_HOTEND_HEATUP_1] = {
.key = _PROC_HOTEND_HEATUP_1,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = _get_meta_cur_tar,
.executable = EINA_FALSE,
@@ -527,11 +558,13 @@ static struct procedure_data procedures[] = {
.meta = NULL,
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
},
},
[PROC_HOTEND_ACTIVE_SET] = {
.key = _PROC_HOTEND_ACTIVE_SET,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = _get_meta_cur_tar,
.executable = EINA_FALSE,
@@ -541,11 +574,13 @@ static struct procedure_data procedures[] = {
.meta = NULL,
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
},
},
[PROC_PRINT_SPEED] = {
.key = _PROC_PRINT_SPEED,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = _get_meta_cur_tar,
.executable = EINA_FALSE,
@@ -555,11 +590,13 @@ static struct procedure_data procedures[] = {
.meta = NULL,
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
},
},
[PROC_FAN_SPEED] = {
.key = _PROC_FAN_SPEED,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = _get_meta_cur_tar,
.executable = EINA_FALSE,
@@ -569,11 +606,13 @@ static struct procedure_data procedures[] = {
.meta = NULL,
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
},
},
[PROC_FLOW_RATE] = {
.key = _PROC_FLOW_RATE,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = _get_meta_cur_tar,
.executable = EINA_FALSE,
@@ -583,11 +622,13 @@ static struct procedure_data procedures[] = {
.meta = NULL,
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
},
},
[PROC_RETRACTION_LENGTH] = {
.key = _PROC_RETRACTION_LENGTH,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = _get_meta_cur_tar,
.executable = EINA_FALSE,
@@ -597,11 +638,13 @@ static struct procedure_data procedures[] = {
.meta = NULL,
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
},
},
[PROC_RETRACTION_SPEED] = {
.key = _PROC_RETRACTION_SPEED,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = _get_meta_cur_tar,
.executable = EINA_FALSE,
@@ -611,11 +654,13 @@ static struct procedure_data procedures[] = {
.meta = NULL,
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
},
},
[PROC_RETRACTION_ZHOP] = {
.key = _PROC_RETRACTION_ZHOP,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = _get_meta_cur_tar,
.executable = EINA_FALSE,
@@ -625,11 +670,13 @@ static struct procedure_data procedures[] = {
.meta = NULL,
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
},
},
[PROC_BED_LEVEL_AUTO] = {
.key = _PROC_BED_LEVEL_AUTO,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = _get_meta_cur_tar,
.executable = EINA_FALSE,
@@ -639,11 +686,13 @@ static struct procedure_data procedures[] = {
.meta = NULL,
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
},
},
[PROC_BED_RAISE] = {
.key = _PROC_BED_RAISE,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = _get_meta_cur_tar,
.executable = EINA_FALSE,
@@ -653,11 +702,13 @@ static struct procedure_data procedures[] = {
.meta = NULL,
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
},
},
[PROC_BED_HOME] = {
.key = _PROC_BED_HOME,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = _get_meta_cur_tar,
.executable = EINA_FALSE,
@@ -667,11 +718,13 @@ static struct procedure_data procedures[] = {
.meta = NULL,
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
},
},
[PROC_BED_MOVE] = {
.key = _PROC_BED_MOVE,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = NULL,
.executable = EINA_FALSE,
@@ -681,11 +734,13 @@ static struct procedure_data procedures[] = {
.meta = NULL,
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
},
},
[PROC_HEAD_HOME] = {
.key = _PROC_HEAD_HOME,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = _get_meta_cur_tar,
.executable = EINA_FALSE,
@@ -695,11 +750,13 @@ static struct procedure_data procedures[] = {
.meta = NULL,
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
},
},
[PROC_MATERIAL_MOVE_0] = {
.key = _PROC_MATERIAL_MOVE_0,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = NULL,
.executable = EINA_FALSE,
@@ -709,11 +766,13 @@ static struct procedure_data procedures[] = {
.meta = NULL,
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
},
},
[PROC_MATERIAL_MOVE_1] = {
.key = _PROC_MATERIAL_MOVE_1,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = NULL,
.executable = EINA_FALSE,
@@ -723,11 +782,13 @@ static struct procedure_data procedures[] = {
.meta = NULL,
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
},
},
[PROC_JERK_XY] = {
.key = _PROC_JERK_XY,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = _get_meta_cur_tar,
.executable = EINA_FALSE,
@@ -737,11 +798,13 @@ static struct procedure_data procedures[] = {
.meta = NULL,
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
},
},
[PROC_JERK_Z] = {
.key = _PROC_JERK_Z,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = _get_meta_cur_tar,
.executable = EINA_FALSE,
@@ -751,11 +814,13 @@ static struct procedure_data procedures[] = {
.meta = NULL,
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
},
},
[PROC_CURRENT_XY] = {
.key = _PROC_CURRENT_XY,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = _get_meta_cur_tar,
.executable = EINA_FALSE,
@@ -765,11 +830,13 @@ static struct procedure_data procedures[] = {
.meta = NULL,
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
},
},
[PROC_CURRENT_Z] = {
.key = _PROC_CURRENT_Z,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = _get_meta_cur_tar,
.executable = EINA_FALSE,
@@ -779,11 +846,13 @@ static struct procedure_data procedures[] = {
.meta = NULL,
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
},
},
[PROC_CURRENT_E] = {
.key = _PROC_CURRENT_E,
+ .wizard = EINA_FALSE,
.status = PROC_READY,
.parser = _get_meta_cur_tar,
.executable = EINA_FALSE,
@@ -793,19 +862,74 @@ static struct procedure_data procedures[] = {
.meta = NULL,
.poll = {
.in = 0.0,
- .timer = NULL
+ .timer = NULL,
+ .event = 0,
+ },
+ },
+ [PROC_MATERIAL_UNLOAD] = {
+ .key = _PROC_MATERIAL_UNLOAD,
+ .wizard = EINA_TRUE,
+ .status = PROC_READY,
+ .parser = _get_meta_progress,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_material_unload,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL,
+ .event = 0,
+ },
+ },
+ [PROC_MATERIAL_LOAD] = {
+ .key = _PROC_MATERIAL_LOAD,
+ .wizard = EINA_TRUE,
+ .status = PROC_READY,
+ .parser = _get_meta_progress,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_material_load,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL,
+ .event = 0,
+ },
+ },
+ [PROC_MATERIAL_CHANGE] = {
+ .key = _PROC_MATERIAL_CHANGE,
+ .wizard = EINA_TRUE,
+ .status = PROC_READY,
+ .parser = _get_meta_progress,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_material_change,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL,
+ .event = 0,
},
},
};
-void procedure_meta_set(struct procedure_data *procedure, void *data)
+void *procedure_meta_data_get(struct procedure_data *procedure)
{
- procedure->meta = data;
+ return procedure->meta;
}
-void *procedure_meta_get(struct procedure_data *procedure)
+enum meta_type procedure_meta_type_get(struct procedure_data *procedure)
{
- return procedure->meta;
+ return procedure->type;
+}
+
+void procedure_meta_set(struct procedure_data *procedure, enum meta_type type, void *data)
+{
+ procedure->type = type;
+ procedure->meta = data;
}
const struct procedure_step *procedure_step_get(const struct procedure_data *proc, const char *key)
@@ -958,8 +1082,9 @@ struct procedure_data *procedures_init(Eldbus_Proxy *proxy)
__proxy = proxy;
- for (i = PROC_NONE; i < PROC_LAST; i++)
+ for (i = PROC_NONE; i < PROC_LAST; i++) {
procedures[i].poll.event = ecore_event_type_new();
+ }
/* TODO: we probably should do something here to prepare all procedures and their meta data
* so that we can do the getall here and drop the function altogether.
diff --git a/src/procedures.h b/src/procedures.h
index 44d1498..4f6f48a 100644
--- a/src/procedures.h
+++ b/src/procedures.h
@@ -49,8 +49,8 @@ enum procedure_status {
PROC_FINISHED,
};
-enum procedure_key {
- PROC_NONE,
+enum procedure_key { /* XXX this will cause problems and has to change */
+ PROC_NONE = 0,
PROC_BED_MOVE,
PROC_BED_HEATUP,
PROC_HOTEND_HEATUP_0,
@@ -75,6 +75,9 @@ enum procedure_key {
PROC_CURRENT_E,
PROC_PRINT,
PROC_FIRMWARE_UPDATE,
+ PROC_MATERIAL_UNLOAD,
+ PROC_MATERIAL_LOAD,
+ PROC_MATERIAL_CHANGE,
PROC_LAST, /* sentinel */
};
@@ -117,8 +120,9 @@ struct procedure_msg {
enum meta_type {
PROC_META_NONE,
- PROC_META_PRINT,
- PROC_META_DIAL,
+ PROC_META_PROGRESS,
+ PROC_META_SLIDER,
+ PROC_META_SPINNER,
};
struct poll_data {
@@ -127,14 +131,21 @@ struct poll_data {
int event;
};
+struct meta_data {
+ enum meta_type type;
+ void *data;
+};
+
struct procedure_data {
const char *key;
enum procedure_status status;
+ Eina_Bool wizard;
const char *sig;
const char *para; /* TODO va_list to go with sig? */
Eina_Bool available;
Eina_Bool executable;
void (*parser)(void *data, const void *key, Eldbus_Message_Iter *variant);
+ enum meta_type type;
void *meta; /* TODO every proc. has meta data, some needs to be periodically updated (print_data), others on signal changes. needs enum guard to identify which meta we have. */
const struct procedure_msg *msgs;
const struct procedure_step *_steps; /* TODO optional? maybe we don't even have to know the list */
@@ -148,7 +159,7 @@ struct procedure_data *procedures_init(Eldbus_Proxy *proxy);
void procedure_meta_getall(void);
struct procedure_data *procedure_get(const char *key);
const struct procedure_step *procedure_step_get(const struct procedure_data *proc, const char *key);
-void procedure_process_step(struct eulogium_data *eulogium, struct procedure_data *procedure);
+void procedure_process_step(struct procedure_data *procedure, struct eulogium_data *eulogium);
Eldbus_Pending *procedure_message(const struct procedure_data *proc, const struct procedure_msg *msg);
struct print_data; /* XXX only here until print_start gets simplified */
@@ -156,8 +167,9 @@ Eldbus_Pending *procedure_print_start(const struct print_data *print);
Eldbus_Pending *procedure_print_printer_cleaned(void);
Eldbus_Pending *procedure_print_progress_get(struct procedure_data *procedure);
-void *procedure_meta_get(struct procedure_data *procedure);
-void procedure_meta_set(struct procedure_data *procedure, void *data);
+void *procedure_meta_data_get(struct procedure_data *procedure);
+enum meta_type procedure_meta_type_get(struct procedure_data *procedure);
+void procedure_meta_set(struct procedure_data *procedure, enum meta_type type, void *data);
Eldbus_Pending *procedure_start_simple(const enum procedure_key proc_key);
Eldbus_Pending *procedure_metadata_get(const struct procedure_data *procedure);
diff --git a/src/ui_widgets.c b/src/ui_widgets.c
index 468b082..f690fb6 100644
--- a/src/ui_widgets.c
+++ b/src/ui_widgets.c
@@ -8,65 +8,24 @@
*/
#include <Elementary.h>
-#include <stdarg.h>
#include <stdint.h>
#include "eulogium.h"
#include "gettext.h"
+#include "procedures.h"
#include "ui_input.h"
#include "ui_widgets.h"
+#include "ui_wizards.h"
-static struct wizard_screen_data material_unload = {
- .count = 0,
- .screens = {
- {
- .type = NONE,
- .text = "To remove material<br>we need to do stuff",
- .data = NULL,
- .prev_button = "Skip Wizzard!",
- .next_button = "Continue",
- }, {
- .type = NONE, /* .type = BUTTON? */
- .text = "Choose a nozzle<br>to remove material from",
- .data = NULL,
- .prev_button = "Left",
- .next_button = "Right",
- //.prev_func = ,
- //.next_func = ,
- }, { .type = END, }, /* sentinel */
- },
-};
-
-static struct wizard_screen_data material_load = {
- .count = 0,
- .screens = {
- {
- .type = NONE,
- .text = "To remove material<br>we need to do stuff",
- .data = NULL,
- .prev_button = "Skip Wizzard!",
- .next_button = "Continue",
- }, {
- .type = NONE, /* .type = BUTTON? */
- .text = "Choose a nozzle<br>to remove material from",
- .data = NULL,
- .prev_button = "Left",
- .next_button = "Right",
- //.prev_func = ,
- //.next_func = ,
- }, { .type = END, }, /* sentinel */
- },
-};
-
-Elm_Object_Item *ui_stack_push(const struct eulogium_data *eulogium, Evas_Object *content, const enum navi_page_state page_state) /* TODO replace with just the navi pointer */
+Elm_Object_Item *ui_stack_push(Evas_Object *navi, Evas_Object *content, const enum navi_page_state page_state) /* TODO replace with just the navi pointer */
{
Elm_Object_Item *navi_item;
- if ((!eulogium->navi) || (!content)) {
+ if ((!navi) || (!content)) {
EINA_LOG_CRIT("navi or content where NULL");
return NULL;
}
- navi_item = elm_naviframe_item_simple_push(eulogium->navi, content);
+ navi_item = elm_naviframe_item_simple_push(navi, content);
if (!navi_item) {
EINA_LOG_CRIT("Unable to push item onto navistack");
return NULL;
@@ -77,6 +36,15 @@ Elm_Object_Item *ui_stack_push(const struct eulogium_data *eulogium, Evas_Object
return navi_item;
}
+void _event_handler_from_navi_del(const Evas_Object *navi, const char *str)
+{
+ Ecore_Event_Handler *event;
+
+ event = evas_object_data_get(navi, str);
+ if (event)
+ ecore_event_handler_del(event);
+}
+
/* Search through the navistack in reverse order. This loop is almost always
* aborted very early on. We basically 'abuse' the loop to skip over invalid
* pages, which is actually unlikely and thus the first item of the stack
@@ -84,31 +52,35 @@ Elm_Object_Item *ui_stack_push(const struct eulogium_data *eulogium, Evas_Object
* place to not pop the very first page of the stack, as that is our
* 'main-menu'. TODO Improve doc, this is just an early note.
*/
-Eina_Bool ui_stack_pop(const struct eulogium_data *eulogium) /* TODO replace with just the navi pointer */
+Eina_Bool ui_stack_pop(const Evas_Object *navi) /* TODO replace with just the navi pointer */
{
Eina_List *navi_list, *l;
Elm_Object_Item *navi_item;
enum navi_page_state page_state;
- if (!eulogium->navi) {
+ if (!navi) {
EINA_LOG_CRIT("Naviframe was NULL");
return EINA_FALSE;
}
+ /* clean navi page event handlers */
+ _event_handler_from_navi_del(navi, "event_inc"); /* TODO possibly use an array of event handlers if we get more then 3 */
+ _event_handler_from_navi_del(navi, "event_dec"); /* TODO possibly use an array of event handlers if we get more then 3 */
+
/* FIXME: bug here, when we start eulogium and start a print job,
* eulogium restarts midway the print job, the dialog with the
* print cleaned pops up, but apparently no bottom has been generated
* yet. Make sure to call eulogium_main_menu (new name) first before
* process handling. Call moved, but we may still have init issues.
*/
- navi_item = elm_naviframe_top_item_get(eulogium->navi);
+ navi_item = elm_naviframe_top_item_get(navi);
page_state = (enum navi_page_state)(uintptr_t)elm_object_item_data_get(navi_item);
if (page_state == PAGE_BOTTOM) {
EINA_LOG_WARN("Not popping bottom frame cowboy");
return EINA_TRUE;
}
- navi_list = elm_naviframe_items_get(eulogium->navi);
+ navi_list = elm_naviframe_items_get(navi);
l = eina_list_last(navi_list);
l = eina_list_prev(l);
/* Skip the top entry, it is the currently displayed window and thus
@@ -123,7 +95,7 @@ Eina_Bool ui_stack_pop(const struct eulogium_data *eulogium) /* TODO replace wit
EINA_LOG_ERR("No item in list?!");
continue;
}
- page_state = (enum navi_page_state)(uintptr_t)elm_object_item_data_get(navi_item);
+ page_state = (enum navi_page_state)(uintptr_t)elm_object_item_data_get(navi_item); /* XXX toto, use pointer of _navi_page_state */
if (page_state == PAGE_INVALID) {
EINA_LOG_WARN("Page on stack invalid, skipping");
continue;
@@ -154,24 +126,11 @@ void ui_stack_page_invalidate(Evas_Object *navi, const enum navi_page_state page
eina_list_free(navi_list);
}
-void _event_handler_from_navi_del(Evas_Object *navi, const char *str)
-{
- Ecore_Event_Handler *event;
-
- event = evas_object_data_get(navi, str);
- if (event)
- ecore_event_handler_del(event);
-}
-
void ui_stack_pop_cb(void *data, Evas_Object *eo EINA_UNUSED, void *event_info EINA_UNUSED)
{
- struct eulogium_data *eulogium = data; /* XXX replace this with passing just the navi and event handlers */
- Evas_Object *navi = eulogium->navi;
-
- _event_handler_from_navi_del(navi, "event_inc"); /* TODO possibly use an array of event handlers if we get more then 3 */
- _event_handler_from_navi_del(navi, "event_dec"); /* TODO possibly use an array of event handlers if we get more then 3 */
+ Evas_Object *navi = data;
- ui_stack_pop(eulogium); /* XXX replace with just the navi */
+ ui_stack_pop(navi);
}
static void _dial_send_update(void *data, Evas_Object *eo, void *event_info EINA_UNUSED)
@@ -188,7 +147,7 @@ static Eina_Bool _dial_change_delay(void *data)
Evas_Object *dial = data;
evas_object_data_set(dial, "delay", NULL);
- evas_object_smart_callback_call(dial, "delay,changed", NULL);
+ evas_object_smart_callback_call(dial, "changed", NULL);
return ECORE_CALLBACK_CANCEL;
}
@@ -197,7 +156,7 @@ static Eina_Bool _spinner_change(void *data, int type, void *event_info EINA_UNU
{
struct settings_dial_data *dial_data = data;
- /* TODO we now jus tell the backend that there is a change of + or - 1 * step size.
+ /* TODO we now just tell the backend that there is a change of + or - 1 * step size.
* ideally the event_info is filled with the step size/speed of the mouse_wheel events
* giving us the step size directly.
*/
@@ -233,7 +192,7 @@ static Eina_Bool _dial_change(void *data, int type, void *event_info EINA_UNUSED
evas_object_smart_callback_call(dial, "changed", NULL);
delay = evas_object_data_get(dial, "delay");
ecore_timer_del(delay);
- delay = ecore_timer_add(0.25, _dial_change_delay, dial); /* TODO make define for 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;
@@ -315,7 +274,45 @@ Evas_Object *ui_widget_spinner(Evas_Object *parent, struct eulogium_data *eulogi
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", ui_stack_pop_cb, eulogium);
+ evas_object_smart_callback_add(_bottom, "clicked", ui_stack_pop_cb, eulogium->navi);
+ evas_object_show(_bottom);
+ /* remove handler on window destroy? */
+
+ return eulogium_split_screen(parent, _top, _bottom);
+}
+
+Evas_Object *ui_widget_spinner_add(Evas_Object *parent, struct settings_dial_data *dial_data)
+{
+ Evas_Object *obj, *_top, *_bottom;
+ Ecore_Event_Handler *handler;
+
+ _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);
+ evas_object_show(_top);
+
+ obj = elm_label_add(_top); /* TODO make label sit inverted at the top */
+ elm_object_text_set(obj, "test");
+ evas_object_size_hint_weight_set(obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(obj);
+ elm_box_pack_end(_top, obj);
+
+ obj = elm_spinner_add(parent);
+ evas_object_size_hint_weight_set(obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ //handler = ecore_event_handler_add(INPUT_MOUSE_WHEEL_UP, _spinner_change, dial_data);
+ //evas_object_data_set(parent, "event_inc", handler);
+ //handler = ecore_event_handler_add(INPUT_MOUSE_WHEEL_DOWN, _spinner_change, dial_data);
+ //evas_object_data_set(parent, "event_dec", handler); /* XXX do this better (via dial_data?) */
+ evas_object_show(obj);
+ elm_box_pack_end(_top, 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", ui_stack_pop_cb, parent);
evas_object_show(_bottom);
/* remove handler on window destroy? */
@@ -338,7 +335,7 @@ Evas_Object *ui_widget_slider(Evas_Object *parent, struct eulogium_data *eulogiu
elm_slider_value_set(_top, dial_data->value);
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, dial_data);
+ evas_object_smart_callback_add(_top, "changed", _dial_send_update, dial_data);
handler = ecore_event_handler_add(INPUT_MOUSE_WHEEL_UP, _dial_change, _top);
evas_object_data_set(parent, "event_inc", handler);
handler = ecore_event_handler_add(INPUT_MOUSE_WHEEL_DOWN, _dial_change, _top);
@@ -369,7 +366,7 @@ Evas_Object *ui_widget_slider(Evas_Object *parent, struct eulogium_data *eulogiu
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", ui_stack_pop_cb, eulogium);
+ evas_object_smart_callback_add(_bottom, "clicked", ui_stack_pop_cb, eulogium->navi);
evas_object_show(_bottom);
return eulogium_split_screen(parent, _top, _bottom);
@@ -398,7 +395,7 @@ static void _widget_progress_del(void *data, Evas *e EINA_UNUSED, Evas_Object *e
static Eina_Bool _widget_progress_update(void *data, int type EINA_UNUSED, void *event_info EINA_UNUSED)
{
struct _progress_screen_data *screen = data;
- struct print_data *progress = screen->progress_data;
+ const struct print_data *progress = screen->progress_data;
elm_object_text_set(screen->jobname, _(progress->jobname));
elm_object_text_set(screen->status, _(progress->status));
@@ -407,7 +404,7 @@ static Eina_Bool _widget_progress_update(void *data, int type EINA_UNUSED, void
return ECORE_CALLBACK_PASS_ON;
}
-Evas_Object *ui_widget_progress(Evas_Object *parent, struct eulogium_data *eulogium, const struct procedure_data *procedure)
+Evas_Object *ui_widget_progress(Evas_Object *parent, const struct procedure_data *procedure)
{
struct print_data *progress = procedure->meta; /* XXX rename to progress data | check meta_type if it is the correct type. */
Evas_Object *_top, *_bottom, *content;
@@ -423,7 +420,7 @@ Evas_Object *ui_widget_progress(Evas_Object *parent, struct eulogium_data *eulog
elm_box_homogeneous_set(_top, EINA_FALSE);
evas_object_show(_top);
- screen->title = elm_label_add(_top);
+ screen->title = elm_label_add(_top); /* TODO make label sit inverted at the top */
elm_object_text_set(screen->title, _(progress->title));
elm_label_slide_mode_set(screen->title, ELM_LABEL_SLIDE_MODE_NONE);
evas_object_size_hint_align_set(screen->title, EVAS_HINT_FILL, EVAS_HINT_FILL);
@@ -449,8 +446,13 @@ Evas_Object *ui_widget_progress(Evas_Object *parent, struct eulogium_data *eulog
screen->progressbar = elm_progressbar_add(_top);
elm_progressbar_horizontal_set(screen->progressbar, EINA_TRUE);
- elm_progressbar_pulse_set(screen->progressbar, EINA_FALSE); /* TODO: pulse = time-unknown/pause */
- elm_progressbar_pulse(screen->progressbar, EINA_FALSE);
+ if (progress->value < 0) {
+ elm_progressbar_pulse_set(screen->progressbar, EINA_TRUE);
+ elm_progressbar_pulse(screen->progressbar, EINA_TRUE);
+ } else {
+ elm_progressbar_pulse_set(screen->progressbar, EINA_FALSE);
+ elm_progressbar_pulse(screen->progressbar, EINA_FALSE);
+ }
elm_progressbar_value_set(screen->progressbar, progress->value); /* get this from the procedure meta data */
elm_progressbar_unit_format_set(screen->progressbar, "%1.1f %%");
evas_object_size_hint_align_set(screen->progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
@@ -458,6 +460,7 @@ Evas_Object *ui_widget_progress(Evas_Object *parent, struct eulogium_data *eulog
elm_box_pack_end(_top, screen->progressbar);
handler = ecore_event_handler_add(procedure->poll.event, _widget_progress_update, screen);
+ /* XXX handler add to something?; this is broken atm */
// _bottom = eulogium_dual_button_add(parent, &but_print_tune, &but_print_abort_confirm);
// evas_object_show(_bottom);
@@ -468,155 +471,7 @@ Evas_Object *ui_widget_progress(Evas_Object *parent, struct eulogium_data *eulog
return content;
}
-struct _wizard_screen_next_cb_data {
- struct eulogium_data *eulogium;
- struct wizard_screen_data *screen_data;
- uint_fast8_t pagenum;
- Eina_Bool pageindex;
-};
-
-static void _wizard_screen_next_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Evas_Object *content;
- struct eulogium_data *eulogium = ((struct _wizard_screen_next_cb_data *)data)->eulogium;
- uint_fast8_t pagenum = ((struct _wizard_screen_next_cb_data *)data)->pagenum;
- Eina_Bool pageindex = ((struct _wizard_screen_next_cb_data *)data)->pageindex;
- struct wizard_screen_data *screen_data = ((struct _wizard_screen_next_cb_data *)data)->screen_data;
-
- if (pagenum >= screen_data->count) {
- Elm_Object_Item *item;
-
- item = elm_naviframe_bottom_item_get(eulogium->navi);
- if (item)
- elm_naviframe_item_pop_to(item);
- /* XXX what else? */
- } else {
- // content = ui_window_wizard(eulogium->navi, eulogium, screen_data, pagenum, pageindex);
- ui_stack_push(eulogium, content, PAGE_NORMAL);
- /* XXX what else? */
- }
- free(data);
-}
-
-Evas_Object *ui_window_wizard(Evas_Object *parent, struct eulogium_data *eulogium, struct wizard_screen_data *screen_data, uint_fast8_t pagenum, Eina_Bool pageindex)
-{
- Evas_Object *object;
- Evas_Object *_top, *_bottom;
- struct _wizard_screen_next_cb_data *wizard_screen_next_cb_data;
- char buf[6];
-
- _top = elm_box_add(parent);
- evas_object_show(_top);
-
- if (screen_data->count == 0) {
- EINA_LOG_WARN("Tut tut, we can't have a count of 0!\n");
- return NULL;
- }
-
- if (pagenum >= screen_data->count)
- pagenum = screen_data->count - 1;
-
- if (pageindex) {
- object = elm_label_add(_top);
- snprintf(buf, sizeof(buf), "%d/%d", pagenum + 1, screen_data->count);
- elm_object_text_set(object, _(buf));
- evas_object_show(object);
- evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(object, 1.0, 0);
- elm_box_pack_end(_top, object);
- }
-
- if (screen_data->screens[pagenum].text) {
- object = elm_label_add(_top);
- elm_object_text_set(object, _(screen_data->screens[pagenum].text));
- evas_object_size_hint_align_set(object, 0.5, 0.5);
- evas_object_show(object);
- elm_box_pack_end(_top, object);
- }
-
- switch (screen_data->screens[pagenum].type) {
- Evas_Object *box; /* TODO rename to 'type' or something */
-
- case MATERIAL:
- box = elm_box_add(_top);
- elm_box_horizontal_set(box, EINA_TRUE);
- evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_show(box);
-
- object = elm_button_add(box);
- evas_object_size_hint_align_set(object, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_object_text_set(object, "PLA"); /* Materials need to be handled differently */
- //evas_object_smart_callback_add(object, "clicked", _cb_material_set, "PLA");
- evas_object_show(object);
- elm_box_pack_end(box, object);
-
- object = elm_button_add(box);
- evas_object_size_hint_align_set(object, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_object_text_set(object, "ABS");
- //evas_object_smart_callback_add(object, "clicked", _cb_material_set, "ABS");
- evas_object_show(object);
- elm_box_pack_end(box, object);
-
- elm_box_pack_end(_top, box);
- break;
- case PROGRESS:
- box = elm_progressbar_add(_top);
- elm_progressbar_horizontal_set(box, EINA_TRUE);
- elm_progressbar_pulse_set(box, EINA_FALSE); /* TODO: pulse = time-unknown/pause */
- elm_progressbar_pulse(box, EINA_FALSE);
- elm_progressbar_value_set(box, 0.5);
- elm_progressbar_unit_format_set(box, "%1.0f%%");
- evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_show(box);
- elm_box_pack_end(_top, box);
- break;
- case FUNC:
- /* call function pointer from screen_data.func */
- break;
- case END: /* fall through */
- default:
- break;
- }
-
- _bottom = elm_box_add(parent);
- elm_box_horizontal_set(_bottom, EINA_TRUE);
- evas_object_show(_bottom);
-
- wizard_screen_next_cb_data = malloc(sizeof(struct _wizard_screen_next_cb_data));
- wizard_screen_next_cb_data->eulogium = eulogium;
- wizard_screen_next_cb_data->screen_data = screen_data;
- wizard_screen_next_cb_data->pagenum = pagenum + 1;
- wizard_screen_next_cb_data->pageindex = EINA_TRUE;
-
- if (screen_data->screens[pagenum].prev_button) {
- object = elm_button_add(parent);
- evas_object_size_hint_align_set(object, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_object_text_set(object, _(screen_data->screens[pagenum].prev_button));
- // evas_object_smart_callback_add(object, "clicked", _cb_content_prev_set, eulogium);
- evas_object_show(object);
- elm_box_pack_end(_bottom, object);
- }
- if (screen_data->screens[pagenum].next_button) {
- object = elm_button_add(parent);
- evas_object_size_hint_align_set(object, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_object_text_set(object, _(screen_data->screens[pagenum].next_button));
- evas_object_smart_callback_add(object, "clicked", _wizard_screen_next_cb, wizard_screen_next_cb_data);
- evas_object_show(object);
- elm_box_pack_end(_bottom, object);
- }
-
- return eulogium_split_screen(parent, _top, _bottom);
-}
-
void ui_init(void)
{
- while (material_load.screens[material_load.count].type != END)
- material_load.count++;
- while (material_unload.screens[material_unload.count].type != END)
- material_unload.count++;
+ wizard_init_all();
}
diff --git a/src/ui_widgets.h b/src/ui_widgets.h
index d4b1524..2e4fc9d 100644
--- a/src/ui_widgets.h
+++ b/src/ui_widgets.h
@@ -23,7 +23,10 @@
struct button_cb {
void (*func)(void *data, Evas_Object *object, void *event_info);
- void *data;
+ union {
+ void *data;
+ uint_fast32_t nr;
+ };
const char *info;
};
@@ -76,50 +79,28 @@ struct screen_def {
* to never have more then a handful of states.
*/
enum navi_page_state {
- PAGE_NORMAL,
PAGE_BOTTOM,
+ PAGE_NORMAL,
+ PAGE_WIZARD,
PAGE_USB,
PAGE_FLASH,
PAGE_PRINTING,
PAGE_INVALID,
PAGE_ERROR,
-};
-
-enum screen_type {
- NONE,
- FUNC,
- MATERIAL,
- PROGRESS,
- END, /* sentinel */
-};
-
-struct wizard_screen_data {
- uint_fast8_t count;
- struct {
- enum screen_type type;
- char *text;
- void (*func)(void *data);
- void *data;
- char *prev_button;
- char *next_button;
- void (*prev_func)(void *data);
- void (*next_func)(void *data);
- /* TODO consider adding a button_def for the buttons */
- } screens[];
-};
+} _navi_page_state; /* Kind of a hack, to pass a pointer to the enum so we can pass it to functions that only take void* */
void eulogium_button_cb_set(struct button_def *button, struct button_cb *cb);
void eulogium_button_cb_data_set(struct button_def *button, void *data);
void eulogium_button_data_set(struct button_def *button, void *data);
-struct eulogium_data; /* XXX remove when we pass a navi */
-Elm_Object_Item *ui_stack_push(const struct eulogium_data *eulogium, Evas_Object *content, const enum navi_page_state page_state);
-Eina_Bool ui_stack_pop(const struct eulogium_data *eulogium);
-void ui_stack_page_invalidate(Evas_Object *navi, const enum navi_page_state page_state);
+Elm_Object_Item *ui_stack_push(Evas_Object *navi, Evas_Object *content, const enum navi_page_state page_state);
+Eina_Bool ui_stack_pop(const Evas_Object *navi);
void ui_stack_pop_cb(void *data, Evas_Object *eo EINA_UNUSED, void *event_info EINA_UNUSED);
+void ui_stack_page_invalidate(Evas_Object *navi, const enum navi_page_state page_state);
Evas_Object *ui_widget_slider(Evas_Object *parent, struct eulogium_data *eulogium, struct settings_dial_data *dial_data);
Evas_Object *ui_widget_spinner(Evas_Object *parent, struct eulogium_data *eulogium, struct settings_dial_data *dial_data);
-Evas_Object *ui_widget_progress(Evas_Object *parent, struct eulogium_data *eulogium, const struct procedure_data *procedure);
+Evas_Object *ui_widget_spinner_add(Evas_Object *parent, struct settings_dial_data *dial_data);
+Evas_Object *ui_widget_progress(Evas_Object *parent, const struct procedure_data *procedure);
void ui_init(void);
diff --git a/src/ui_wizards.c b/src/ui_wizards.c
new file mode 100644
index 0000000..5ef0b3b
--- /dev/null
+++ b/src/ui_wizards.c
@@ -0,0 +1,373 @@
+/*
+ * functions, callbacks and data types for wizards
+ *
+ * Copyright (c) 2015 Ultimaker B.V.
+ * Author: Olliver Schinagl <o.schinagl@ultimaker.com>
+ *
+ * SPDX-License-Identifier: AGPL-3.0+
+ */
+
+#include <Elementary.h>
+#include <stdint.h>
+
+#include "eulogium.h"
+#include "gettext.h"
+#include "procedures.h"
+#include "ui_wizards.h"
+
+struct _wizard_next_cb_data {
+ Evas_Object *navi;
+ struct wizard_data *wizard;
+ uint_fast8_t pagenum;
+ Eina_Bool pageindex;
+ uint_fast32_t nr; /* XXX passed now as number, replace with 'extrusion-train'-object later */
+};
+
+static void _wizard_next_cb(void *data, Evas_Object *eo EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Evas_Object *content;
+ Evas_Object *navi = ((struct _wizard_next_cb_data *)data)->navi;
+ uint_fast8_t pagenum = ((struct _wizard_next_cb_data *)data)->pagenum;
+ Eina_Bool pageindex = ((struct _wizard_next_cb_data *)data)->pageindex;
+ uint_fast32_t nr = ((struct _wizard_next_cb_data *)data)->nr;
+ struct wizard_data *wizard = ((struct _wizard_next_cb_data *)data)->wizard;
+
+ if (pagenum >= wizard->count) {
+ Elm_Object_Item *item;
+
+ item = elm_naviframe_bottom_item_get(navi);
+ if (item)
+ elm_naviframe_item_pop_to(item);
+ } else {
+ wizard->screens[pagenum].nr = nr;
+ content = wizard_add(navi, wizard, pagenum, pageindex);
+ ui_stack_push(navi, content, PAGE_WIZARD);
+ }
+ free(data);
+}
+
+static void _wizard_skip_cb(void *data, Evas_Object *eo EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Evas_Object *navi = ((struct _wizard_next_cb_data *)data)->navi;
+
+ ui_stack_page_invalidate(navi, PAGE_WIZARD);
+ ui_stack_pop(navi);
+}
+
+static void _wizard_next_del(void *data, Evas *e EINA_UNUSED, Evas_Object *eo EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct _wizard_next_cb_data *wizard_next_cb_data = data;
+
+ //free(wizard_next_cb_data); /* XXX double free?! */
+}
+
+static Eina_Bool _wizard_progress_update(void *data, int type EINA_UNUSED, void *event_info)
+{
+ Evas_Object *widget = data;
+ struct print_data *progress = event_info;
+
+ printf("\n\n\n%f\n", progress->value);
+ printf("%d\n", progress->time);
+ printf("%d\n\n\n", progress->total_time);
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static void _wizard_widget_del(void *data, Evas *e EINA_UNUSED, Evas_Object *eo EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+// Evas_Object *widget = data;
+ Ecore_Event_Handler *handler = data;
+// struct _wizard_data *wizard = data;
+
+// handler = evas_object_data_get(widget, "handler");
+
+ if (handler)
+ ecore_event_handler_del(handler);
+
+// free(screen);
+}
+
+Evas_Object *wizard_add(Evas_Object *navi, struct wizard_data *wizard, uint_fast8_t pagenum, Eina_Bool pageindex)
+{
+ Evas_Object *obj;
+ Evas_Object *_top, *_bottom;
+ Evas_Object *widget;
+ Ecore_Event_Handler *handler = NULL;
+
+ _top = elm_box_add(navi);
+ evas_object_show(_top);
+
+ if (wizard->count == 0) {
+ EINA_LOG_WARN("Tut tut, we can't have 0 wizard screens!\n");
+ return NULL;
+ }
+
+ if (pagenum >= wizard->count)
+ pagenum = wizard->count - 1;
+
+ if (pageindex || wizard->title) {
+ char buf[30];
+ Evas_Object *box;
+
+ box = elm_box_add(_top);
+ elm_box_horizontal_set(box, EINA_TRUE);
+ evas_object_size_hint_weight_set(box, 0.0, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(box, EVAS_HINT_FILL, 0.0);
+ evas_object_show(box);
+
+ if (wizard->title) {
+ obj = elm_label_add(box);
+ elm_object_text_set(obj, _(wizard->title)); /* optionally do the same as the index, but left */
+ elm_object_style_set(obj, "title");
+ evas_object_show(obj);
+ evas_object_size_hint_weight_set(obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_box_pack_start(box, obj);
+ }
+ if (pageindex) {
+ obj = elm_label_add(box);
+ snprintf(buf, sizeof(buf), "<align=right>%d/%d</align>", pagenum + 1, wizard->count);
+ elm_object_text_set(obj, buf);
+ elm_object_style_set(obj, "title");
+ evas_object_show(obj);
+ evas_object_size_hint_weight_set(obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_box_pack_end(box, obj);
+ }
+
+ elm_box_pack_end(_top, box);
+ }
+
+ if (wizard->screens[pagenum].text) {
+ obj = elm_label_add(_top);
+ elm_object_text_set(obj, _(wizard->screens[pagenum].text));
+ evas_object_size_hint_weight_set(obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(obj, 0.5, 0.5);
+ evas_object_show(obj);
+ elm_box_pack_end(_top, obj);
+ }
+
+ switch (wizard->screens[pagenum].type) {
+ case WIZARD_PROGRESS:
+ widget = elm_progressbar_add(_top);
+ elm_progressbar_pulse_set(widget, EINA_TRUE);
+ elm_progressbar_pulse(widget, EINA_TRUE);
+ elm_progressbar_horizontal_set(widget, EINA_TRUE);
+ elm_progressbar_unit_format_set(widget, "%1.0f%%");
+ evas_object_size_hint_align_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(widget);
+ elm_box_pack_end(_top, widget);
+ //handler = ecore_event_handler_add(event, _wizard_progress_update, widget);
+ evas_object_data_set(widget, "handler", handler);
+ break;
+ case WIZARD_END: /* fall through */
+ default:
+ break;
+ }
+ if (handler)
+ evas_object_event_callback_add(widget, EVAS_CALLBACK_DEL, _wizard_widget_del, handler);
+
+ if (wizard->screens[pagenum].func)
+ wizard->screens[pagenum].func(wizard->screens[pagenum].nr);
+
+ _bottom = elm_box_add(navi);
+ elm_box_horizontal_set(_bottom, EINA_TRUE);
+ evas_object_show(_bottom);
+
+ if (!wizard->screens[pagenum].prev_button.label && !wizard->screens[pagenum].next_button.label)
+ EINA_LOG_ERR("Both buttons empty, need to add an empty button here");
+ if (wizard->screens[pagenum].prev_button.label) {
+ struct _wizard_next_cb_data *wizard_next_cb_data;
+
+ wizard_next_cb_data = malloc(sizeof(struct _wizard_next_cb_data));
+ wizard_next_cb_data->navi = navi;
+ wizard_next_cb_data->wizard = wizard;
+ wizard_next_cb_data->pagenum = pagenum + 1;
+ wizard_next_cb_data->pageindex = EINA_TRUE;
+ wizard_next_cb_data->nr = wizard->screens[pagenum].prev_button.cb.nr;
+
+ obj = elm_button_add(_bottom);
+ evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_size_hint_weight_set(obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_text_set(obj, _(wizard->screens[pagenum].prev_button.label));
+ evas_object_smart_callback_add(obj, "clicked", wizard->screens[pagenum].prev_button.cb.func, wizard_next_cb_data);
+ evas_object_show(obj);
+ elm_box_pack_end(_bottom, obj);
+
+ evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _wizard_next_del, wizard_next_cb_data);
+ }
+ if (wizard->screens[pagenum].next_button.label) {
+ struct _wizard_next_cb_data *wizard_next_cb_data;
+
+ wizard_next_cb_data = malloc(sizeof(struct _wizard_next_cb_data));
+ wizard_next_cb_data->navi = navi;
+ wizard_next_cb_data->wizard = wizard;
+ wizard_next_cb_data->pagenum = pagenum + 1;
+ wizard_next_cb_data->pageindex = EINA_TRUE;
+ wizard_next_cb_data->nr = wizard->screens[pagenum].next_button.cb.nr;
+
+ obj = elm_button_add(_bottom);
+ evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_size_hint_weight_set(obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_text_set(obj, _(wizard->screens[pagenum].next_button.label));
+ evas_object_smart_callback_add(obj, "clicked", wizard->screens[pagenum].next_button.cb.func, wizard_next_cb_data);
+ evas_object_show(obj);
+ elm_box_pack_end(_bottom, obj);
+
+ evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _wizard_next_del, wizard_next_cb_data);
+ }
+
+ return eulogium_split_screen(navi, _top, _bottom);
+}
+
+void __wizard_count(struct wizard_data *wizard)
+{
+ while (wizard->screens[wizard->count].type != WIZARD_END)
+ wizard->count++;
+}
+
+void wizard_init(struct wizard_data *wizard)
+{
+ __wizard_count(wizard);
+}
+
+void wizard_init_all(void)
+{
+ wizard_init(&material_load);
+ wizard_init(&material_unload);
+}
+
+struct wizard_data material_load = {
+ .count = 0,
+ .title = N_("Insert Material"),
+ .screens = {
+ {
+ .type = WIZARD_NONE,
+ .func = NULL,
+ .text = N_("To insert material<br>we need to do stuff"),
+ .prev_button = {
+ .label = N_("Skip Wiz."),
+ .cb = {
+ .func = _wizard_skip_cb,
+ },
+ },
+ .next_button = {
+ .label = N_("Continue"),
+ .cb = {
+ .func = _wizard_next_cb,
+ },
+ },
+ }, {
+ .type = WIZARD_NONE,
+ .func = NULL,
+ .text = N_("Choose a nozzle<br>to insert<br>material into"),
+ .prev_button = {
+ .label = N_("Left"),
+ .cb = {
+ .func = _wizard_next_cb,
+ },
+ },
+ .next_button = {
+ .label = N_("Right"),
+ .cb = {
+ .func = _wizard_next_cb,
+ },
+ },
+ }, {
+ .type = WIZARD_PROGRESS,
+ .func = NULL,
+ .text = N_("Heating nozzle<br>for insertion."),
+ .prev_button = {
+ .label = N_("Abort Wiz."),
+ .cb = {
+ .func = _wizard_skip_cb,
+ },
+ },
+ .next_button = {
+ .label = NULL,
+ },
+ }, {
+ .type = WIZARD_NONE,
+ .func = NULL,
+ .text = N_("Material has<br>been inserted."),
+ .prev_button = {
+ .label = NULL,
+ },
+ .next_button = {
+ .label = N_("Continue"),
+ .cb = {
+ .func = _wizard_next_cb,
+ },
+ },
+ }, { .type = WIZARD_END, }, /* sentinel */
+ },
+};
+
+struct wizard_data material_unload = {
+ .count = 0,
+ .title = N_("Remove Material"),
+ .proc_key = PROC_MATERIAL_UNLOAD,
+ .screens = {
+ {
+ .type = WIZARD_NONE,
+ //.func = &_wizard_procedure_start,
+ .text = N_("To remove material<br>we need to do stuff"),
+ .prev_button = {
+ .label = N_("Skip Wiz."),
+ .cb = {
+ .func = _wizard_skip_cb,
+ },
+ },
+ .next_button = {
+ .label = N_("Continue"),
+ .cb = {
+ .func = _wizard_next_cb,
+ },
+ },
+ }, {
+ .type = WIZARD_NONE,
+ //.func = &_wizard_procedure_message,
+ .text = N_("Choose a nozzle<br>to remove<br>material from"),
+ .prev_button = {
+ .label = N_("Left"),
+ .cb = {
+ .func = _wizard_next_cb,
+ .nr = 0,
+ },
+ },
+ .next_button = {
+ .label = N_("Right"),
+ .cb = {
+ .func = _wizard_next_cb,
+ .nr = 1,
+ },
+ },
+ }, {
+ .type = WIZARD_PROGRESS,
+ //.func = &_wizard_procedure_message,
+ .text = N_("Heating nozzle<br>for removal."),
+ .prev_button = {
+ .label = N_("Skip Wiz."),
+ .cb = {
+ .func = _wizard_skip_cb,
+ },
+ },
+ .next_button = {
+ .label = NULL,
+ },
+ }, {
+ .type = WIZARD_NONE,
+ .func = NULL,
+ .text = N_("Material has<br>been removed."),
+ .prev_button = {
+ .label = NULL,
+ },
+ .next_button = {
+ .label = N_("Continue"),
+ .cb = {
+ .func = _wizard_next_cb,
+ },
+ },
+ }, { .type = WIZARD_END, }, /* sentinel */
+ },
+};
diff --git a/src/ui_wizards.h b/src/ui_wizards.h
new file mode 100644
index 0000000..87a43fd
--- /dev/null
+++ b/src/ui_wizards.h
@@ -0,0 +1,49 @@
+/*
+ * functions, callbacks and data types for wizards
+ *
+ * Copyright (c) 2015 Ultimaker B.V.
+ * Author: Olliver Schinagl <o.schinagl@ultimaker.com>
+ *
+ * SPDX-License-Identifier: AGPL-3.0+
+ */
+
+#ifndef _UI_WIZARDS_H
+#define _UI_WIZARDS_H
+
+#include <stdint.h>
+
+#include "procedures.h"
+
+enum wizard_type {
+ WIZARD_NONE,
+ WIZARD_PROGRESS,
+ WIZARD_END, /* sentinel */
+};
+
+struct wizard_data {
+ uint_fast8_t count; /* Calculated using wizard_init */
+ const char *title;
+ enum procedure_key proc_key;
+ struct {
+ enum wizard_type type;
+ char *text;
+ struct button_def prev_button;
+ struct button_def next_button;
+ void (*func)(uint_fast32_t nr);
+ union {
+ void *data;
+ uint_fast32_t nr; /* XXX hack until we have a extrude-train object */
+ };
+ /* TODO consider adding a button_def for the buttons */
+ } screens[];
+};
+
+extern struct wizard_data material_load;
+extern struct wizard_data material_unload;
+
+void wizard_init(struct wizard_data *wizard);
+void wizard_init_all(void);
+
+Evas_Object *wizard_add(Evas_Object *navi, struct wizard_data *wizard, uint_fast8_t pagenum, Eina_Bool pageindex);
+
+#endif /* _UI_WIZARDS_H */