summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlliver Schinagl <o.schinagl@ultimaker.com>2015-07-07 06:33:59 (GMT)
committerOlliver Schinagl <o.schinagl@ultimaker.com>2015-07-24 14:17:55 (GMT)
commit336af61ca23b7cb7035659922fd85a2189b068d4 (patch)
treedde90ccdbf01be3357f34cc0e9eabbc9cd34a971
parenteacd4d1dcbd0a0d06a01b757864a714ebac5f9be (diff)
downloadeulogium-336af61ca23b7cb7035659922fd85a2189b068d4.zip
eulogium-336af61ca23b7cb7035659922fd85a2189b068d4.tar.gz
eulogium-336af61ca23b7cb7035659922fd85a2189b068d4.tar.bz2
archival commit
-rw-r--r--Makefile.am34
-rw-r--r--configure.ac29
-rw-r--r--data/themes/Makefile.am2
-rw-r--r--data/themes/default/Makefile.am76
-rw-r--r--data/themes/default/colorclasses.edc15
-rw-r--r--data/themes/default/default.edc2
-rw-r--r--data/themes/default/deps.txt36
-rw-r--r--data/themes/default/edc/elm/button.edc17
-rw-r--r--data/themes/default/edc/elm/check.edc9
-rw-r--r--data/themes/default/edc/elm/failure_slider_01.edc507
-rw-r--r--data/themes/default/edc/elm/label.edc35
-rw-r--r--data/themes/default/edc/elm/naviframe.edc113
-rw-r--r--data/themes/default/edc/elm/progress.edc12
-rw-r--r--data/themes/default/edc/elm/slider.edc1033
-rw-r--r--data/themes/default/fnt/10x20.pcfbin0 -> 705368 bytes
-rw-r--r--data/themes/default/fnt/4x6.pcfbin0 -> 182056 bytes
-rw-r--r--data/themes/default/fnt/5x7.pcfbin0 -> 239800 bytes
-rw-r--r--data/themes/default/fnt/5x8.pcfbin0 -> 220992 bytes
-rw-r--r--data/themes/default/fnt/6x12.pcfbin0 -> 486116 bytes
-rw-r--r--data/themes/default/fnt/6x9.pcfbin0 -> 218148 bytes
-rw-r--r--data/themes/default/fnt/7x13.pcfbin0 -> 397192 bytes
-rw-r--r--data/themes/default/fnt/8x13.pcfbin0 -> 436328 bytes
-rw-r--r--data/themes/default/fnt/9x15.pcfbin0 -> 562732 bytes
-rw-r--r--data/themes/default/fonts.edc22
-rw-r--r--data/themes/default/img/emo-very-sorry.pngbin6371 -> 160 bytes
-rw-r--r--data/themes/default/img/slider_indicator_knob_horiz.pngbin0 -> 163 bytes
-rw-r--r--packaging/debian/Makefile.am3
-rw-r--r--packaging/debian/changelog5
-rw-r--r--[-rwxr-xr-x]packaging/debian/rules0
-rw-r--r--src/Makefile.am15
-rw-r--r--src/dbus_common.c84
-rw-r--r--src/dbus_common.h5
-rw-r--r--src/eulogium.c2241
-rw-r--r--src/eulogium.h55
-rw-r--r--src/eulogium_item_list.c17
-rw-r--r--src/eulogium_item_list.h2
-rw-r--r--src/eulogium_private.h23
-rw-r--r--src/gettext.h291
-rw-r--r--src/libgettext.h280
-rw-r--r--src/network.c38
-rw-r--r--src/network.h39
-rw-r--r--src/print_data.c22
-rw-r--r--src/print_data.h22
-rw-r--r--src/procedures.c950
-rw-r--r--src/procedures.h159
-rw-r--r--src/settings_data.h35
-rw-r--r--src/tests/Makefile.am4
-rw-r--r--src/tests/test_eulogiumbin0 -> 7664 bytes
-rw-r--r--src/tests/test_eulogium.c118
-rw-r--r--src/ui_input.c40
-rw-r--r--src/ui_input.h19
-rw-r--r--src/ui_widgets.c621
-rw-r--r--src/ui_widgets.h87
53 files changed, 4500 insertions, 2617 deletions
diff --git a/Makefile.am b/Makefile.am
index 6f5bc92..563d902 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -18,6 +18,8 @@ MAINTAINERCLEANFILES = \
m4/ltsugar.m4 \
m4/ltversion.m4 \
m4/lt~obsolete.m4 \
+ src/*~ src/lib/*~ src/bin/*~ \
+ src/*.gcda src/*.gcno src/lib/*.gcda src/lib/*.gcno src/bin/*.gcda src/bin/*gcno \
po/boldquot.sed \
po/en@boldquot.header \
po/en@quot.header \
@@ -53,38 +55,6 @@ EXTRA_DIST = \
m4/efl_compiler_flag.m4 \
m4/efl_path_max.m4
-if EFL_HAVE_LCOV
-
-lcov-reset:
- @rm -rf $(top_builddir)/coverage
- @find $(top_builddir) -name "*.gcda" -delete
- @lcov --zerocounters --directory $(top_builddir)
-
-lcov-report:
- @mkdir $(top_builddir)/coverage
- lcov --capture --compat-libtool --output-file $(top_builddir)/coverage/coverage.info --directory $(top_builddir)/src/lib --base-directory $(top_srcdir)/src/lib
- lcov --remove $(top_builddir)/coverage/coverage.info '*.h' --output-file $(top_builddir)/coverage/coverage.cleaned.info
- lcov --remove $(top_builddir)/coverage/coverage.cleaned.info '*/tests/*' --output-file $(top_builddir)/coverage/coverage.cleaned2.info
- genhtml --branch-coverage -t "$(PACKAGE_STRING)" -o $(top_builddir)/coverage/html $(top_builddir)/coverage/coverage.cleaned2.info
- @echo "Coverage Report at $(top_builddir)/coverage/html"
-
-endif
-
-if EFL_HAVE_TESTS
-
-TESTS = src/tests/eulogium_tests
-
-lcov-check:
-if EFL_HAVE_LCOV
- @$(MAKE) $(AM_MAKEFLAGS) lcov-reset
-endif
- @$(MAKE) $(AM_MAKEFLAGS) check
-if EFL_HAVE_LCOV
- @$(MAKE) $(AM_MAKEFLAGS) lcov-report
-endif
-
-endif
-
# cleaning
clean-local:
diff --git a/configure.ac b/configure.ac
index da5e488..05144d5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
-EFL_VERSION([1], [8], [5])
-AC_INIT([eulogium], [m4_esyscmd_s([git describe --always --tags --abbrev=1 --dirty])], [support@ultimaker.com], [], [http://www.ultimaker.com])
+EFL_VERSION([1], [8], [5], [0])
+AC_INIT([eulogium], [m4_esyscmd_s([git describe --always --tags --dirty --abbrev=1])], [support@ultimaker.com], [], [http://www.ultimaker.com])
AC_PREREQ([2.65])
AC_CONFIG_SRCDIR([configure.ac])
@@ -30,25 +30,14 @@ EFL_CHECK_PATH_MAX
# Check for EFL
PKG_CHECK_MODULES([EFL],
[
- ecore >= 1.8.0
- ecore-evas >= 1.8.0
- eina >= 1.8.0
- elementary >= 1.8.0
- evas >= 1.8.0
- eeze >= 1.8.0
+ ecore >= 1.8.5
+ ecore-evas >= 1.8.5
+ eina >= 1.8.5
+ elementary >= 1.8.5
+ evas >= 1.8.5
+ eeze >= 1.8.5
])
-# Check for tests and coverage
-AC_ARG_WITH([tests],
- [AC_HELP_STRING(
- [--with-tests=none|regular|coverage],
- [choose testing method: regular, coverage or none. @<:@default=none@:>@])],
- [build_tests=${withval}],
- [build_tests=auto]
-)
-
-EFL_TESTS([${build_tests}])
-
# doxygen program for documentation building
EFL_CHECK_DOXYGEN([build_doc="yes"], [build_doc="no"])
@@ -68,7 +57,6 @@ data/desktop/Makefile
data/desktop/eulogium.desktop
data/themes/Makefile
data/themes/default/Makefile
-data/themes/ulticontroller_2.0/Makefile
doc/Makefile
packaging/Makefile
packaging/slackware/Makefile
@@ -76,7 +64,6 @@ packaging/debian/Makefile
packaging/pkgbuild/Makefile
po/Makefile.in
src/Makefile
-src/tests/Makefile
doc/eulogium.1
])
AC_OUTPUT
diff --git a/data/themes/Makefile.am b/data/themes/Makefile.am
index 598c0fa..5f40636 100644
--- a/data/themes/Makefile.am
+++ b/data/themes/Makefile.am
@@ -1,3 +1,3 @@
MAINTAINERCLEANFILES = Makefile.in
-SUBDIRS = default ulticontroller_2.0
+SUBDIRS = default
diff --git a/data/themes/default/Makefile.am b/data/themes/default/Makefile.am
index 8c9ea90..c67f0a1 100644
--- a/data/themes/default/Makefile.am
+++ b/data/themes/default/Makefile.am
@@ -5,30 +5,38 @@ include ../../../Makefile_Edje_Helper.am
EDJE_CC_FLAGS += #-l $(top_srcdir)/COPYING -a $(top_srcdir)/AUTHORS
-filesdir = $(datadir)/elementary/themes
+filesdir = $(datadir)/$(PACKAGE)/themes
files_DATA = default.edj
+EDJE_CC_FLAGS += \
+-id ${top_srcdir}/data/themes/default/img \
+-fd ${top_srcdir}/data/themes/default/fnt \
+-sd ${top_srcdir}/data/themes/default/snd \
+-dd ${top_srcdir}/data/themes/default/data
+
default.edj: Makefile $(EXTRA_DIST)
$(AM_V_EDJ)$(EDJE_CC) \
- $(EDJE_CC_FLAGS) -fastdecomp \
+ $(EDJE_CC_FLAGS) -fastdecomp -w files.txt -deps deps.txt -v \
$(top_srcdir)/data/themes/default/default.edc \
$(top_builddir)/data/themes/default/default.edj
clean-local:
rm -f *.edj
-EDJE_CC_FLAGS += \
--id ${top_srcdir}/data/themes/default/img \
--fd ${top_srcdir}/data/themes/default/fnt \
--sd ${top_srcdir}/data/themes/default/snd \
--dd ${top_srcdir}/data/themes/default/data
-
EXTRA_DIST = ${images} ${fonts} ${sounds} ${data} ${edjes}
data =
fonts = \
-fnt/5x7.pcf.gz
+fnt/4x6.pcf \
+fnt/5x7.pcf \
+fnt/5x8.pcf \
+fnt/6x9.pcf \
+fnt/6x12.pcf \
+fnt/7x13.pcf \
+fnt/8x13.pcf \
+fnt/9x15.pcf \
+fnt/10x20.pcf
sounds = \
snd/kbd-tap.wav \
@@ -38,6 +46,7 @@ snd/kbd-tap4.wav \
snd/kbd-tap5.wav
edjes = \
+default.edc \
colorclasses.edc \
fonts.edc \
macros.edc \
@@ -98,4 +107,51 @@ edc/elm/tooltip.edc \
edc/elm/video.edc \
edc/elm/win.edc
-images =
+images = \
+img/slider_run_base_horiz.png \
+img/slider_run_bevel_horiz.png \
+img/slider_run_base_light_horiz.png \
+img/slider_indicator_knob_horiz.png \
+img/button_normal.png \
+img/button_outline.png \
+img/bevel_in.png \
+img/sym_check_alum.png \
+img/inset_bar_horiz_base.png \
+img/inset_bar_horiz_glow_base.png \
+img/inset_bar_horiz_glow_inv_base.png \
+img/inset_bar_horiz_glow_mid_base.png \
+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/knob_round_busy.png \
+img/glow_round_corners.png \
+img/bevel_in.png \
+img/bevel_out.png \
+img/runner_horiz.png \
+img/runner_vert.png \
+img/runner_glow_horiz.png \
+img/runner_glow_vert.png \
+img/holes_tiny_horiz.png \
+img/holes_tiny_vert.png \
+img/holes_tiny_glow_horiz.png \
+img/holes_tiny_glow_vert.png \
+img/vgrad_med_lighter.png \
+img/glow_small.png \
+img/sym_left_light_normal.png \
+img/sym_right_light_normal.png \
+img/sym_up_light_normal.png \
+img/sym_down_light_normal.png \
+img/sym_left_glow_normal.png \
+img/sym_right_glow_normal.png \
+img/sym_up_glow_normal.png \
+img/sym_down_glow_normal.png \
+img/sym_up_dark_normal.png \
+img/sym_down_dark_normal.png \
+img/sym_left_dark_normal.png \
+img/sym_right_dark_normal.png \
+img/icon_folder.png \
+img/icon_file.png \
+img/icon_home.png \
+img/icon_arrow_up.png \
+img/icon_arrow_left.png
diff --git a/data/themes/default/colorclasses.edc b/data/themes/default/colorclasses.edc
index 8ac944b..8118c65 100644
--- a/data/themes/default/colorclasses.edc
+++ b/data/themes/default/colorclasses.edc
@@ -23,6 +23,15 @@ color_classes {
color_class { name: "check_text";
color: FN_COL_DEFAULT;
}
+ color_class { name: "label_text";
+ color: FN_COL_DEFAULT;
+ }
+ color_class { name: "label_text_title";
+ color: WIN_COL_HIGHLIGHT;
+ }
+ color_class { name: "label_text_disabled";
+ color: FN_COL_DISABLE;
+ }
// widgets
color_class { name: "button_text_focus";
@@ -61,12 +70,6 @@ color_classes {
color_class { name: "entry_text_disabled";
color: FN_COL_DEFAULT_BASIC;
}
- color_class { name: "label_text";
- color: FN_COL_DEFAULT;
- }
- color_class { name: "label_text_disabled";
- color: FN_COL_DISABLE;
- }
color_class { name: "frame_base";
color: WIN_DEFAULT_BASIC;
}
diff --git a/data/themes/default/default.edc b/data/themes/default/default.edc
index d13d9e9..725867a 100644
--- a/data/themes/default/default.edc
+++ b/data/themes/default/default.edc
@@ -21,7 +21,7 @@ collections {
#include "edc/elm/label.edc"
#include "edc/elm/separator.edc"
#include "edc/elm/check.edc"
-//#include "edc/elm/slider.edc"
+#include "edc/elm/slider.edc"
//#include "edc/elm/radio.edc"
//#include "edc/elm/bubble.edc"
//#include "edc/elm/panes.edc"
diff --git a/data/themes/default/deps.txt b/data/themes/default/deps.txt
new file mode 100644
index 0000000..3d5155b
--- /dev/null
+++ b/data/themes/default/deps.txt
@@ -0,0 +1,36 @@
+../../../data/themes/default/default.edj: \
+ ../../../data/themes/default/macros.edc \
+ ../../../data/themes/default/fonts.edc \
+ ../../../data/themes/default/colorclasses.edc \
+ ../../../data/themes/default/edc/elm/bg.edc \
+ ../../../data/themes/default/edc/elm/button.edc \
+ ../../../data/themes/default/edc/elm/label.edc \
+ ../../../data/themes/default/edc/elm/separator.edc \
+ ../../../data/themes/default/edc/elm/check.edc \
+ ../../../data/themes/default/edc/elm/slider.edc \
+ ../../../data/themes/default/edc/elm/icon.edc \
+ ../../../data/themes/default/edc/elm/progress.edc \
+ ../../../data/themes/default/edc/elm/naviframe.edc \
+ ../../../data/themes/default/img/button_normal.png \
+ ../../../data/themes/default/img/button_outline.png \
+ ../../../data/themes/default/img/bevel_in.png \
+ ../../../data/themes/default/img/sym_check_alum.png \
+ ../../../data/themes/default/img/slider_run_base_horiz.png \
+ ../../../data/themes/default/img/slider_run_bevel_horiz.png \
+ ../../../data/themes/default/img/slider_run_base_light_horiz.png \
+ ../../../data/themes/default/img/slider_indicator_knob_horiz.png \
+ ../../../data/themes/default/img/icon_folder.png \
+ ../../../data/themes/default/img/icon_file.png \
+ ../../../data/themes/default/img/icon_home.png \
+ ../../../data/themes/default/img/icon_arrow_up.png \
+ ../../../data/themes/default/img/icon_arrow_left.png \
+ ../../../data/themes/default/img/inset_bar_horiz_base.png \
+ ../../../data/themes/default/img/inset_bar_horiz_glow_base.png \
+ ../../../data/themes/default/img/inset_bar_horiz_glow_inv_base.png \
+ ../../../data/themes/default/img/inset_bar_horiz_glow_mid_base.png \
+ ../../../data/themes/default/img/inset_bar_vert_base.png \
+ ../../../data/themes/default/img/inset_bar_vert_glow_base.png \
+ ../../../data/themes/default/img/inset_bar_vert_glow_inv_base.png \
+ ../../../data/themes/default/img/inset_bar_vert_glow_mid_base.png \
+ ../../../data/themes/default/img/knob_round_busy.png \
+ ../../../data/themes/default/img/glow_round_corners.png \ No newline at end of file
diff --git a/data/themes/default/edc/elm/button.edc b/data/themes/default/edc/elm/button.edc
index e34f422..260093a 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="FN" font_size=8 text_class=tb_plain color=#ffffffff align=center";
+ base: "font="FNBIG" text_class=tb_plain color=#ffffffff align=center";
FN_TAG_BR;
}
style { name: "button_style_focused";
- base: "font="FN" font_size=8 text_class=tb_plain color=#000000ff align=center";
+ base: "font="FNBIG" text_class=tb_plain color=#000000ff align=center";
FN_TAG_BR;
}
style { name: "button_style_disabled";
- base: "font="FN" font_size=8 text_class=tb_plain color=#000000ff align=center";
+ base: "font="FNBIG" 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: FN; size: 7;
+ text { font: FNBIG;
min: 0 0;
text_class: "button_text";
}
@@ -428,15 +428,15 @@ group { name: "elm/button/base/list";
}
styles {
style { name: "button_list_style_default";
- base: "font="FN" font_size=8 text_class=tb_plain color=#ffffffff align=auto";
+ base: "font="FN" text_class=tb_plain color=#ffffffff align=auto";
FN_TAG_BR;
}
style { name: "button_list_style_focused";
- base: "font="FN" font_size=8 text_class=tb_plain color=#000000ff align=auto";
+ base: "font="FN" text_class=tb_plain color=#000000ff align=auto";
FN_TAG_BR;
}
style { name: "button_list_style_disabled";
- base: "font="FN" font_size=8 text_class=tb_plain color=#000000ff align=auto";
+ base: "font="FN" text_class=tb_plain color=#000000ff align=auto";
FN_TAG_BR;
}
}
@@ -492,7 +492,7 @@ group { name: "elm/button/base/list";
scale: 1;
description { state: "default" 0.0;
visible: 0;
- text { font: FN; size: 7;
+ text { font: FN;
min: 0 0;
text_class: "button_text";
}
@@ -529,6 +529,7 @@ group { name: "elm/button/base/list";
text {
style: "button_list_style_default";
min: 0 1;
+ ellipsis: -1;
}
visible: 0;
}
diff --git a/data/themes/default/edc/elm/check.edc b/data/themes/default/edc/elm/check.edc
index 355ea62..6b06cc1 100644
--- a/data/themes/default/edc/elm/check.edc
+++ b/data/themes/default/edc/elm/check.edc
@@ -71,15 +71,15 @@ group { name: "elm/check/base/default";
}
styles {
style { name: "check_style_default";
- base: "font="FN" font_size=8 text_class=tb_plain color=#ffffffff align=auto";
+ base: "font="FN" text_class=tb_plain color=#ffffffff align=auto";
FN_TAG_BR;
}
style { name: "check_style_focused";
- base: "font="FN" font_size=8 text_class=tb_plain color=#000000ff align=auto";
+ base: "font="FN" text_class=tb_plain color=#000000ff align=auto";
FN_TAG_BR;
}
style { name: "check_style_disabled";
- base: "font="FN" font_size=8 text_class=tb_plain color=#000000ff align=auto";
+ base: "font="FN" text_class=tb_plain color=#000000ff align=auto";
FN_TAG_BR;
}
@@ -167,7 +167,7 @@ group { name: "elm/check/base/default";
scale: 1;
description { state: "default" 0.0;
visible: 0;
- text { font: FN; size: 7;
+ text { font: FN;
min: 0 0;
text_class: "check_text";
}
@@ -203,6 +203,7 @@ group { name: "elm/check/base/default";
rel2.to: "base";
text {
style: "check_style_default";
+ ellipsis: -1;
min: 0 1;
}
visible: 0;
diff --git a/data/themes/default/edc/elm/failure_slider_01.edc b/data/themes/default/edc/elm/failure_slider_01.edc
new file mode 100644
index 0000000..5aae3ad
--- /dev/null
+++ b/data/themes/default/edc/elm/failure_slider_01.edc
@@ -0,0 +1,507 @@
+group { name: "elm/slider/hidden/limit";
+ parts {
+ part { name: "elm.units.min"; type: TEXT; mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 0;
+ align: 1.0 0.5;
+ text { font: FN; size: 10;
+ text_class: "slider_text";
+ min: 1 1;
+ align: 0.0 0.5;
+ ellipsis: -1;
+ }
+ }
+ }
+ part { name: "elm.units.max"; type: TEXT; mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 0;
+ align: 1.0 0.5;
+ text { font: FN; size: 10;
+ text_class: "slider_text";
+ min: 1 1;
+ align: 0.0 0.5;
+ ellipsis: -1;
+ }
+ }
+ }
+ }
+}
+
+group { name: "elm/slider/horizontal/default";
+ alias: "elm/slider/horizontal/disabled";
+ images.image: "slider_run_base_horiz.png" COMP;
+ images.image: "slider_run_bevel_horiz.png" COMP;
+ images.image: "slider_run_base_light_horiz.png" COMP;
+ images.image: "slider_indicator_knob_horiz.png" COMP;
+#define ICON 1
+#define LABEL 2
+#define END 4
+#define UNITS 8
+#define MASK 15
+#define INVERT 16
+#define DISABLE 32
+ script {
+ public slmode;
+ public eval_mode(m) {
+ new ic = m & ICON;
+ new l = m & LABEL;
+ new e = m & END;
+ new u = m & UNITS;
+ new d = m & DISABLE;
+ new i = m & INVERT;
+ if (i) {
+ if (!d) {
+ set_state(PART:"base", "default", 0.0);
+ } else {
+ set_state(PART:"base", "disabled", 0.0);
+ }
+ } else {
+ if (!d) {
+ set_state(PART:"base", "default", 0.0);
+ } else {
+ set_state(PART:"base", "disabled", 0.0);
+ }
+ }
+ if (l) {
+ if (!d) {
+ set_state(PART:"elm.text", "visible", 0.0);
+ } else {
+ set_state(PART:"elm.text", "disabled_visible", 0.0);
+ }
+ } else {
+ set_state(PART:"elm.text", "default", 0.0);
+ }
+ if (u) {
+ if (!d) {
+ set_state(PART:"elm.units", "visible", 0.0);
+ set_state(PART:"limits", "visible", 0.0);
+ } else {
+ set_state(PART:"elm.units", "disabled_visible", 0.0);
+ set_state(PART:"limits", "disabled_visible", 0.0);
+ }
+ } else {
+ set_state(PART:"elm.units", "default", 0.0);
+ set_state(PART:"limits", "default", 0.0);
+ }
+ if (ic) {
+ set_state(PART:"elm.swallow.icon", "visible", 0.0);
+ set_state(PART:"sizer.content", "visible", 0.0);
+ } else {
+ set_state(PART:"elm.swallow.icon", "default", 0.0);
+ set_state(PART:"sizer.content", "default", 0.0);
+ }
+ if (e) {
+ set_state(PART:"elm.swallow.end", "visible", 0.0);
+ set_state(PART:"sizer.content.end", "visible", 0.0);
+ } else {
+ set_state(PART:"elm.swallow.end", "default", 0.0);
+ set_state(PART:"sizer.content.end", "default", 0.0);
+ }
+ if (!d) {
+ set_state(PART:"event", "default", 0.0);
+ set_state(PART:"dis_clip", "default", 0.0);
+ } else {
+ set_state(PART:"event", "disabled", 0.0);
+ set_state(PART:"dis_clip", "disabled", 0.0);
+ }
+ }
+ }
+ parts {
+ part { name: "elm.swallow.bar"; type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 42 14;
+ max: 99999 14;
+ align: 1.0 0.5;
+ rel1.to_x: "elm.swallow.icon";
+ rel1.relative: 1.0 0.0;
+ rel1.offset: 2 0;
+ rel2.to_x: "limits";
+ rel2.relative: 0.0 1.0;
+ rel2.offset: -3 -1;
+ }
+ }
+ part { name: "base"; mouse_events: 0;
+ description { state: "default" 0.0;
+ rel1.to: "elm.swallow.bar";
+ rel2.to: "elm.swallow.bar";
+ image.normal: "slider_run_base_horiz.png";
+ image.border: 4 4 0 0;
+ fill.smooth: 0;
+ min: 8 5;
+ max: 99999 5;
+ fixed: 0 1;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "slider_run_base_light_horiz.png";
+ }
+ }
+ part { name: "bevel"; mouse_events: 0;
+ description { state: "default" 0.0;
+ rel1.to: "base";
+ rel2.to: "base";
+ image.normal: "slider_run_bevel_horiz.png";
+ image.border: 5 5 0 0;
+ fill.smooth: 0;
+ }
+ }
+ part { name: "dis_clip"; type: RECT;
+ description { state: "default" 0.0;
+ rel1.to: "elm.swallow.icon";
+ rel2.to: "elm.swallow.end";
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ color: 255 255 255 64;
+ }
+ }
+ part { name: "elm.swallow.icon"; type: SWALLOW;
+ clip_to: "dis_clip";
+ description { state: "default" 0.0;
+ visible: 0;
+ align: 0.0 0.5;
+ rel1.offset: 0 2;
+ rel1.to_y: "elm.swallow.bar";
+ rel2.offset: -1 -3;
+ rel2.relative: 0.0 1.0;
+ rel2.to_y: "elm.swallow.bar";
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ aspect: 1.0 1.0; aspect_preference: VERTICAL;
+ rel1.offset: 2 2;
+ rel2.offset: 2 -3;
+ }
+ }
+ part { name: "sizer.content"; type: TEXT; mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ visible: 0;
+ text { font: FN; size: 10;
+ min: 0 0;
+ text_class: "slider_text";
+ }
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ rel1.to: "elm.swallow.icon";
+ rel2.to: "elm.swallow.icon";
+ text {
+ min: 1 1;
+ ellipsis: -1;
+ text: "M";
+ }
+ }
+ }
+ part { name: "elm.text"; type: TEXT; mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 0.0 0.5;
+ rel1.to_x: "elm.swallow.icon";
+ rel1.relative: 1.0 0.0;
+ rel1.offset: -1 2;
+ rel2.to_x: "elm.swallow.icon";
+ rel2.relative: 1.0 1.0;
+ rel2.offset: -1 -3;
+ color: FN_COL_DEFAULT;
+ color_class: "slider_text";
+ text { font: FN; size: 8;
+ text_class: "slider";
+ min: 0 0;
+ align: 0.0 0.5;
+ }
+ visible: 0;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ fixed: 1 0;
+ visible: 1;
+ rel1.offset: 2 2;
+ rel2.offset: 2 -3;
+ text.min: 1 1;
+ text.ellipsis: -1;
+ }
+ description { state: "disabled_visible" 0.0;
+ inherit: "visible" 0.0;
+ color_class: "slider_text_disabled";
+ color3: 255 255 255 255;
+ }
+ }
+ part { name: "elm.swallow.end"; type: SWALLOW;
+ clip_to: "dis_clip";
+ description { state: "default" 0.0;
+ visible: 0;
+ align: 1.0 0.5;
+ rel1.offset: 0 2;
+ rel1.relative: 1.0 0.0;
+ rel2.offset: -1 -3;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ aspect: 1.0 1.0;
+ aspect_preference: VERTICAL;
+ rel1.offset: -3 2;
+ rel2.offset: -3 -3;
+ }
+ }
+ part { name: "sizer.content.end"; type: TEXT; mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ visible: 0;
+ text { font: FN; size: 10;
+ min: 0 0;
+ text_class: "slider_text";
+ }
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ rel1.to: "elm.swallow.end";
+ rel2.to: "elm.swallow.end";
+ text {
+ min: 1 1;
+ ellipsis: -1;
+ text: "M";
+ }
+ }
+ }
+ alias: "elm.units.min" "limits:elm.units.min";
+ alias: "elm.units.max" "limits:elm.units.max";
+ part { name: "limits"; type: GROUP; mouse_events: 0;
+ source: "elm/slider/hidden/limit";
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 0;
+ align: 1.0 0.5;
+ min: SOURCE;
+ fixed: 1 1;
+ rel1.to_x: "elm.swallow.end";
+ rel1.relative: 0.0 0.0;
+ rel1.offset: 0 2;
+ rel2.to_x: "elm.swallow.end";
+ rel2.relative: 0.0 1.0;
+ rel2.offset: -1 -3;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ rel1.offset: -3 2;
+ rel2.offset: -3 -3;
+ }
+ }
+ part { name: "elm.units"; type: TEXT; mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 0;
+ fixed: 1 1;
+ rel1.to_x: "limits";
+ rel2.to_x: "limits";
+ color: FN_COL_DEFAULT;
+ color_class: "slider_text";
+ text { font: FN; size: 8;
+ text_class: "slider";
+ align: 1.0 0.5;
+ min: 1 1;
+ ellipsis: -1;
+ }
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description { state: "disabled_visible" 0.0;
+ inherit: "visible" 0.0;
+ color_class: "slider_text_disabled";
+ color3: 255 255 255 255;
+ }
+ }
+ part { name: "elm.dragable.slider"; type: RECT;
+ scale: 0;
+ dragable.x: 1 1 0;
+ dragable.y: 0 0 0;
+ dragable.confine: "elm.swallow.bar";
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ min: 16 16;
+ max: 16 16;
+ fixed: 1 1;
+ rel1.relative: 0.5 0.0;
+ rel1.to_x: "elm.swallow.bar";
+ rel2.relative: 0.5 1.0;
+ rel2.to_x: "elm.swallow.bar";
+ }
+ }
+ part { name: "knob";
+ scale: 0;
+ description { state: "default" 0.0;
+ image.normal: "slider_indicator_knob_horiz.png";
+ fixed: 1 1;
+ rel1.to: "elm.dragable.slider";
+ rel2.to: "elm.dragable.slider";
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ }
+ }
+ part { name: "slideevent"; type: RECT; repeat_events: 1;
+ scale: 0;
+ ignore_flags: ON_HOLD;
+ dragable.events: "elm.dragable.slider";
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ rel1.to: "elm.dragable.slider";
+ rel2.to: "elm.dragable.slider";
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "elm.track.slider"; type: SWALLOW; mouse_events: 0;
+ description { state: "default" 0.0;
+ max: 0 0;
+ rel1.to: "elm.dragable.slider";
+ rel2.to: "elm.dragable.slider";
+ }
+ }
+ part { name: "event"; type: RECT;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ visible: 0;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }
+ programs {
+ program {
+ signal: "mouse,down,1"; source: "elm.dragable.slider";
+ action: STATE_SET "clicked" 0.0;
+ target: "knob";
+ }
+ program {
+ signal: "mouse,up,1"; source: "elm.dragable.slider";
+ action: STATE_SET "default" 0.0;
+ target: "knob";
+ }
+ program {
+ signal: "elm,state,text,visible"; source: "elm";
+ script {
+ new m = get_int(slmode);
+ m |= LABEL; set_int(slmode, m);
+ eval_mode(m);
+ }
+ }
+ program {
+ signal: "elm,state,text,hidden"; source: "elm";
+ script {
+ new m = get_int(slmode);
+ m &= ~LABEL; set_int(slmode, m);
+ eval_mode(m);
+ }
+ }
+ program {
+ signal: "elm,state,icon,visible"; source: "elm";
+ script {
+ new m = get_int(slmode);
+ m |= ICON; set_int(slmode, m);
+ eval_mode(m);
+ }
+ }
+ program {
+ signal: "elm,state,icon,hidden"; source: "elm";
+ script {
+ new m = get_int(slmode);
+ m &= ~ICON; set_int(slmode, m);
+ eval_mode(m);
+ }
+ }
+ program { name: "end_show";
+ signal: "elm,state,end,visible"; source: "elm";
+ script {
+ new m = get_int(slmode);
+ m |= END; set_int(slmode, m);
+ eval_mode(m);
+ }
+ }
+ program { name: "end_hide";
+ signal: "elm,state,end,hidden"; source: "elm";
+ script {
+ new m = get_int(slmode);
+ m &= ~END; set_int(slmode, m);
+ eval_mode(m);
+ }
+ }
+ program {
+ signal: "elm,state,units,visible"; source: "elm";
+ script {
+ new m = get_int(slmode);
+ m |= UNITS; set_int(slmode, m);
+ eval_mode(m);
+ }
+ }
+// program {
+// signal: "elm,state,units,visible"; source: "elm";
+// action: SIGNAL_EMIT "limits,visible" "elm";
+// target: "limits";
+// }
+ program {
+ signal: "elm,state,units,hidden"; source: "elm";
+ action: STATE_SET "default" 0.0;
+ script {
+ new m = get_int(slmode);
+ m &= ~UNITS; set_int(slmode, m);
+ eval_mode(m);
+ }
+ }
+// program {
+// signal: "elm,state,units,hidden"; source: "elm";
+// action: SIGNAL_EMIT "limits,hide" "elm";
+// target: "limits";
+// }
+ program {
+ signal: "elm,state,inverted,on"; source: "elm";
+ script {
+ new m = get_int(slmode);
+ m |= INVERT; set_int(slmode, m);
+ eval_mode(m);
+ }
+ }
+ program {
+ signal: "elm,state,inverted,off"; source: "elm";
+ script {
+ new m = get_int(slmode);
+ m &= ~INVERT; set_int(slmode, m);
+ eval_mode(m);
+ }
+ }
+ program {
+ signal: "elm,state,disabled"; source: "elm";
+ script {
+ new m = get_int(slmode);
+ m |= DISABLE; set_int(slmode, m);
+ eval_mode(m);
+ }
+ }
+ program {
+ signal: "elm,state,enabled"; source: "elm";
+ script {
+ new m = get_int(slmode);
+ m &= ~DISABLE; set_int(slmode, m);
+ eval_mode(m);
+ }
+ }
+ }
+#undef ICON
+#undef LABEL
+#undef END
+#undef UNITS
+#undef MASK
+#undef INVERT
+#undef DISABLE
+}
diff --git a/data/themes/default/edc/elm/label.edc b/data/themes/default/edc/elm/label.edc
index e51fac8..c3183e8 100644
--- a/data/themes/default/edc/elm/label.edc
+++ b/data/themes/default/edc/elm/label.edc
@@ -1,10 +1,8 @@
group { name: "elm/label/base/default";
styles {
style { name: "label_style";
- base: "font="FN" font_size=7 text_class=tb_plain align=center color=#ffffffff style=shadow,bottom shadow_color=#00000080";
- tag: "br" "\n";
- tag: "hilight" "+ font="FNBD" text_class=tb_light";
- tag: "b" "+ font="FNBD" text_class=tb_light";
+ base: "font="FN" text_class=tb_plain align=center color=#ffffffff";
+ FN_TAG_BR;
}
}
parts {
@@ -27,10 +25,37 @@ group { name: "elm/label/base/default";
}
}
+group { name: "elm/label/base/title";
+ styles {
+ style { name: "label_style_title";
+ base: "font="FN" text_class=tb_plain align=center color=#000000ff";
+ FN_TAG_BR;
+ }
+ }
+ parts {
+ part { name: "base"; type: RECT;
+ description { state: "default" 0.0;
+ color_class: "label_text_title";
+ }
+ }
+ part { name: "elm.text"; type: TEXTBLOCK;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1.to: "base";
+ rel2.to: "base";
+ text { style: "label_style_title";
+ min: 1 1;
+ ellipsis: -1;
+ }
+ }
+ }
+ }
+}
+
group { name: "elm/label/base/marker";
styles {
style { name: "label_style2";
- base: "font="FNBD" font_size=7 text_class=tb_plain align=center color=#ffffffff style=shadow,bottom shadow_color=#00000080";
+ base: "font="FNBD" text_class=tb_plain align=center color=#ffffffff";
tag: "br" "\n";
tag: "hilight" "+ font="FNBD" color=#3399ff text_class=tb_light";
tag: "b" "+ font="FNBD" color=#3399ff text_class=tb_light";
diff --git a/data/themes/default/edc/elm/naviframe.edc b/data/themes/default/edc/elm/naviframe.edc
index 52a62e3..7a8ed23 100644
--- a/data/themes/default/edc/elm/naviframe.edc
+++ b/data/themes/default/edc/elm/naviframe.edc
@@ -7,40 +7,20 @@ group { name: "elm/naviframe/item/basic/default";
part { name: "base"; type: SPACER;
description { state: "default" 0.0;
}
- description { state: "prev" 0.0;
- inherit: "default" 0.0;
- rel1.relative: -1.0 0.0;
- rel2.relative: 0.0 1.0;
- }
- description { state: "next" 0.0;
- inherit: "default" 0.0;
- rel1.relative: 1.0 0.0;
- rel2.relative: 2.0 1.0;
- }
}
part { name: "elm.swallow.content"; type: SWALLOW;
clip_to: "clip";
description { state: "default" 0.0;
- rel1.to: "top";
- rel1.relative: 0.0 1.0;
- rel2.to: "base";
- fixed: 1 1;
- }
- description { state: "title-hidden" 0.0;
- inherit: "default" 0.0;
rel1.to: "base";
rel1.relative: 0.0 0.0;
+ rel2.to: "base";
+ fixed: 1 1;
}
}
part { name: "top"; type: RECT;
clip_to: "clip";
description { state: "default" 0.0;
rel1.to: "base";
- rel2.to_x: "base";
- visible: 0;
- }
- description { state: "title-hidden" 0.0;
- inherit: "default" 0.0;
rel2.to: "base";
rel2.relative: 1.0 0.0;
visible: 0;
@@ -49,51 +29,6 @@ group { name: "elm/naviframe/item/basic/default";
}
programs {
program {
- signal: "elm,state,title,show"; source: "elm";
- action: STATE_SET "default" 0.0;
- target: "top";
- target: "elm.swallow.content";
- }
- program {
- signal: "elm,action,title,show"; source: "elm";
- action: STATE_SET "default" 0.0;
- transition: DECELERATE 0.5;
- target: "top";
- target: "elm.swallow.content";
- after: "titleshow2";
- }
- program { name: "titleshow2";
- action: STATE_SET "default" 0.0;
- target: "top";
- after: "title_transition_finished";
- }
- program {
- signal: "elm,state,title,hide"; source: "elm";
- action: STATE_SET "title-hidden" 0.0;
- target: "top";
- target: "elm.swallow.content";
- }
- program {
- signal: "elm,action,title,hide"; source: "elm";
- action: STATE_SET "title-hidden" 0.0;
- target: "top";
- after: "titlehide2";
- }
- program { name: "titlehide2";
- action: STATE_SET "title-hidden" 0.0;
- transition: DECEL 0.5;
- target: "top";
- target: "elm.swallow.content";
- after: "title_transition_finished";
- }
- program { name: "title_transition_finished";
- action: SIGNAL_EMIT "elm,action,title,transition,finished" "elm";
- }
- program {
- signal: "mouse,clicked,1"; source: "top";
- action: SIGNAL_EMIT "elm,action,title,clicked" "elm";
- }
- program {
signal: "elm,state,visible"; source: "elm";
action: STATE_SET "default" 0.0;
target: "elm.swallow.content";
@@ -102,68 +37,24 @@ group { name: "elm/naviframe/item/basic/default";
/* current page is being pushed: [previous]<----[current] */
program {
signal: "elm,state,cur,pushed"; source: "elm";
- action: STATE_SET "default" 0.0;
- target: "base";
- after: "pushed2";
- }
- program { name: "pushed2";
- action: STATE_SET "prev" 0.0;
- transition: DECEL 0.5;
- target: "base";
- after: "pushed3";
- }
- program { name: "pushed3";
action: SIGNAL_EMIT "elm,action,pushed,finished" "elm";
}
/* current page is being popped: [current]---->[next] */
program {
signal: "elm,state,cur,popped"; source: "elm";
- action: STATE_SET "default" 0.0;
- target: "base";
- after: "popped2";
- }
- program { name: "popped2";
- action: STATE_SET "next" 0.0;
- transition: DECEL 0.5;
- target: "base";
- after: "popped3";
- }
- program { name: "popped3";
action: SIGNAL_EMIT "elm,action,popped,finished" "elm";
}
/* new page is being pushed: [current]<----[next] */
program {
signal: "elm,state,new,pushed"; source: "elm";
- action: STATE_SET "next" 0.0;
- target: "base";
- after: "pushedb2";
- }
- program { name: "pushedb2";
- action: STATE_SET "default" 0.0;
- transition: DECELERATE 0.5;
- target: "base";
- after: "pushedb3";
- }
- program { name: "pushedb3";
action: SIGNAL_EMIT "elm,action,show,finished" "elm";
}
/* previous page is being pushed: [previous]---->[current] */
program {
signal: "elm,state,prev,popped"; source: "elm";
- action: STATE_SET "prev" 0.0;
- target: "base";
- after: "poppedb2";
- }
- program { name: "poppedb2";
- action: STATE_SET "default" 0.0;
- transition: DECELERATE 0.5;
- target: "base";
- after: "poppedb3";
- }
- program { name: "poppedb3";
action: SIGNAL_EMIT "elm,action,show,finished" "elm";
}
}
diff --git a/data/themes/default/edc/elm/progress.edc b/data/themes/default/edc/elm/progress.edc
index 94cb3f0..d8b2098 100644
--- a/data/themes/default/edc/elm/progress.edc
+++ b/data/themes/default/edc/elm/progress.edc
@@ -89,7 +89,7 @@ group { name: "elm/progressbar/horizontal/default";
description { state: "default" 0.0;
fixed: 1 1;
visible: 0;
- text { font: FN; size: 6;
+ text { font: FN;
min: 0 0;
text_class: "progressbar_text";
}
@@ -118,7 +118,7 @@ group { name: "elm/progressbar/horizontal/default";
rel2.offset: -1 -3;
color: FN_COL_DEFAULT;
color_class: "progressbar_text";
- text { font: FN; size: 6;
+ text { font: FN;
text_class: "progressbar";
min: 0 0;
align: 0.0 0.5;
@@ -292,7 +292,7 @@ group { name: "elm/progressbar/horizontal/default";
rel2.to: "inside";
color_class: "progress_status";
align: 1.0 0.5;
- text { font: FN; size: 6;
+ text { font: FN;
min: 0 1;
text_class: "progress_status";
align: 1.0 0.5;
@@ -522,7 +522,7 @@ group { name: "elm/progressbar/vertical/default";
description { state: "default" 0.0;
fixed: 1 1;
visible: 0;
- text { font: FN; size: 6;
+ text { font: FN;
min: 0 0;
text_class: "progressbar_text";
}
@@ -551,7 +551,7 @@ group { name: "elm/progressbar/vertical/default";
rel2.offset: -3 -1;
color: FN_COL_DEFAULT;
color_class: "progressbar_text";
- text { font: FN; size: 6;
+ text { font: FN;
text_class: "progressbar";
min: 0 0;
align: 0.5 0.0;
@@ -741,7 +741,7 @@ group { name: "elm/progressbar/vertical/default";
rel2.to: "statbox";
color_class: "progress_status";
align: 1.0 0.5;
- text { font: FN; size: 6;
+ text { font: FN;
min: 0 1;
text_class: "progress_status";
align: 1.0 0.5;
diff --git a/data/themes/default/edc/elm/slider.edc b/data/themes/default/edc/elm/slider.edc
index b39a680..1b1c324 100644
--- a/data/themes/default/edc/elm/slider.edc
+++ b/data/themes/default/edc/elm/slider.edc
@@ -5,7 +5,7 @@ group { name: "elm/slider/hidden/limit";
description { state: "default" 0.0;
visible: 0;
align: 1.0 0.5;
- text { font: FN; size: 10;
+ text { font: FN;
text_class: "slider_text";
min: 1 1;
align: 0.0 0.5;
@@ -18,7 +18,7 @@ group { name: "elm/slider/hidden/limit";
description { state: "default" 0.0;
visible: 0;
align: 1.0 0.5;
- text { font: FN; size: 10;
+ text { font: FN;
text_class: "slider_text";
min: 1 1;
align: 0.0 0.5;
@@ -31,31 +31,10 @@ group { name: "elm/slider/hidden/limit";
group { name: "elm/slider/horizontal/default";
alias: "elm/slider/horizontal/disabled";
- alias: "elm/slider/horizontal/media_player/position/default";
- alias: "elm/slider/horizontal/media_player/position/flush";
- alias: "elm/slider/horizontal/media_player/volume/default";
- alias: "elm/slider/horizontal/media_player/volume/flush";
images.image: "slider_run_base_horiz.png" COMP;
images.image: "slider_run_bevel_horiz.png" COMP;
images.image: "slider_run_base_light_horiz.png" COMP;
- images.image: "horiz_glow_run.png" COMP;
- images.image: "horiz_glow_run_rev.png" COMP;
- images.image: "knob_round_small_normal.png" COMP;
- images.image: "knob_round_small_selected.png" COMP;
- set { name: "knob";
- // XXX: add more sizes (at least up to 128x128)
- image { image: "knob_sz_24.png" COMP; size: 31 31 32 32; }
- image { image: "knob_sz_22.png" COMP; size: 29 29 30 30; }
- image { image: "knob_sz_20.png" COMP; size: 27 27 28 28; }
- image { image: "knob_sz_18.png" COMP; size: 25 25 26 26; }
- image { image: "knob_sz_16.png" COMP; size: 23 23 24 24; }
- image { image: "knob_sz_14.png" COMP; size: 21 21 22 22; }
- image { image: "knob_sz_12.png" COMP; size: 19 19 20 20; }
- image { image: "knob_sz_10.png" COMP; size: 17 17 18 18; }
- image { image: "knob_sz_08.png" COMP; size: 15 15 16 16; }
- image { image: "knob_sz_06.png" COMP; size: 13 13 14 14; }
- image { image: "knob_sz_04.png" COMP; size: 0 0 12 12; }
- }
+ images.image: "slider_indicator_knob_horiz.png" COMP;
#define ICON 1
#define LABEL 2
#define END 4
@@ -75,18 +54,14 @@ group { name: "elm/slider/horizontal/default";
if (i) {
if (!d) {
set_state(PART:"base", "default", 0.0);
- set_state(PART:"glow", "inverted", 0.0);
} else {
set_state(PART:"base", "disabled", 0.0);
- set_state(PART:"glow", "disabled_inverted", 0.0);
}
} else {
if (!d) {
set_state(PART:"base", "default", 0.0);
- set_state(PART:"glow", "default", 0.0);
} else {
set_state(PART:"base", "disabled", 0.0);
- set_state(PART:"glow", "disabled", 0.0);
}
}
if (l) {
@@ -137,10 +112,10 @@ group { name: "elm/slider/horizontal/default";
part { name: "elm.swallow.bar"; type: SWALLOW;
scale: 1;
description { state: "default" 0.0;
- min: 42 21;
- max: 99999 21;
+ min: 42 14;
+ max: 99999 14;
align: 1.0 0.5;
- rel1.to_x: "elm.text";
+ rel1.to_x: "elm.swallow.icon";
rel1.relative: 1.0 0.0;
rel1.offset: 2 0;
rel2.to_x: "limits";
@@ -164,36 +139,6 @@ group { name: "elm/slider/horizontal/default";
image.normal: "slider_run_base_light_horiz.png";
}
}
- part { name: "glow"; mouse_events: 0;
- description { state: "default" 0.0;
- image.normal: "horiz_glow_run.png";
- rel1.offset: 1 1;
- rel1.to: "base";
- rel2.relative: 0.5 1.0;
- rel2.offset: -1 -2;
- rel2.to_x: "button";
- rel2.to_y: "base";
- image.border: 0 4 0 0;
- }
- description { state: "disabled" 0.0;
- inherit: "default" 0.0;
- color: 255 255 255 64;
- }
- description { state: "inverted" 0.0;
- image.normal: "horiz_glow_run_rev.png";
- rel1.relative: 0.5 0.0;
- rel1.offset: 0 1;
- rel1.to_x: "button";
- rel1.to_y: "base";
- rel2.offset: -2 -2;
- rel2.to: "base";
- image.border: 4 0 0 0;
- }
- description { state: "disabled_inverted" 0.0;
- inherit: "inverted" 0.0;
- color: 255 255 255 64;
- }
- }
part { name: "bevel"; mouse_events: 0;
description { state: "default" 0.0;
rel1.to: "base";
@@ -220,8 +165,9 @@ group { name: "elm/slider/horizontal/default";
align: 0.0 0.5;
rel1.offset: 0 2;
rel1.to_y: "elm.swallow.bar";
+ rel1.relative: 0.0 (1/3);
rel2.offset: -1 -3;
- rel2.relative: 0.0 1.0;
+ rel2.relative: 0.0 (2/3);
rel2.to_y: "elm.swallow.bar";
}
description { state: "visible" 0.0;
@@ -237,7 +183,7 @@ group { name: "elm/slider/horizontal/default";
description { state: "default" 0.0;
fixed: 1 1;
visible: 0;
- text { font: FN; size: 10;
+ text { font: FN;
min: 0 0;
text_class: "slider_text";
}
@@ -254,20 +200,15 @@ group { name: "elm/slider/horizontal/default";
}
}
part { name: "elm.text"; type: TEXT; mouse_events: 0;
- effect: SHADOW BOTTOM;
scale: 1;
description { state: "default" 0.0;
fixed: 1 1;
- align: 0.0 0.5;
- rel1.to_x: "elm.swallow.icon";
- rel1.relative: 1.0 0.0;
- rel1.offset: -1 2;
- rel2.to_x: "elm.swallow.icon";
- rel2.relative: 1.0 1.0;
- rel2.offset: -1 -3;
+ align: 0.0 0.0;
+ rel1.relative: 0.0 (0/3);
+ rel2.relative: 0.0 (1/3);
color: FN_COL_DEFAULT;
color_class: "slider_text";
- text { font: FN; size: 10;
+ text { font: FN;
text_class: "slider";
min: 0 0;
align: 0.0 0.5;
@@ -289,45 +230,6 @@ group { name: "elm/slider/horizontal/default";
color3: 255 255 255 255;
}
}
- part { name: "elm.swallow.end"; type: SWALLOW;
- clip_to: "dis_clip";
- description { state: "default" 0.0;
- visible: 0;
- align: 1.0 0.5;
- rel1.offset: 0 2;
- rel1.relative: 1.0 0.0;
- rel2.offset: -1 -3;
- }
- description { state: "visible" 0.0;
- inherit: "default" 0.0;
- visible: 1;
- aspect: 1.0 1.0;
- aspect_preference: VERTICAL;
- rel1.offset: -3 2;
- rel2.offset: -3 -3;
- }
- }
- part { name: "sizer.content.end"; type: TEXT; mouse_events: 0;
- scale: 1;
- description { state: "default" 0.0;
- fixed: 1 1;
- visible: 0;
- text { font: FN; size: 10;
- min: 0 0;
- text_class: "slider_text";
- }
- }
- description { state: "visible" 0.0;
- inherit: "default" 0.0;
- rel1.to: "elm.swallow.end";
- rel2.to: "elm.swallow.end";
- text {
- min: 1 1;
- ellipsis: -1;
- text: "M";
- }
- }
- }
alias: "elm.units.min" "limits:elm.units.min";
alias: "elm.units.max" "limits:elm.units.max";
part { name: "limits"; type: GROUP; mouse_events: 0;
@@ -351,644 +253,41 @@ group { name: "elm/slider/horizontal/default";
rel2.offset: -3 -3;
}
}
- part { name: "elm.units"; type: TEXT; mouse_events: 0;
- effect: SHADOW BOTTOM;
+ part { name: "sizer.content.values"; type: TEXT; mouse_events: 0;
scale: 1;
- description { state: "default" 0.0;
+ description { state: "default" 0.0;
visible: 0;
- fixed: 1 1;
- rel1.to_x: "limits";
- rel2.to_x: "limits";
- color: FN_COL_DEFAULT;
- color_class: "slider_text";
- text { font: FN; size: 10;
- text_class: "slider";
- align: 1.0 0.5;
+ fixed: 1 1;
+ rel1.relative: 0.0 (2/3);
+ rel2.relative: 1.0 (3/3);
+ text {
min: 1 1;
- ellipsis: -1;
- }
- }
- description { state: "visible" 0.0;
- inherit: "default" 0.0;
- visible: 1;
- }
- description { state: "disabled_visible" 0.0;
- inherit: "visible" 0.0;
- color_class: "slider_text_disabled";
- color3: 255 255 255 255;
- }
- }
- part { name: "button"; type: GROUP; mouse_events: 0;
- source: "elm/slider/horizontal/indicator/default";
- description { state: "default" 0.0;
- fixed: 1 1;
- rel1.to: "elm.dragable.slider";
- rel2.to: "elm.dragable.slider";
- }
- description { state: "hidden" 0.0;
- inherit: "default" 0.0;
- visible: 0;
- }
- }
- part { name: "elm.dragable.slider"; type: RECT;
- scale: 1;
- dragable.x: 1 1 0;
- dragable.y: 0 0 0;
- dragable.confine: "elm.swallow.bar";
- description { state: "default" 0.0;
- color: 0 0 0 0;
- min: 16 16;
- max: 16 16;
- fixed: 1 1;
- rel1.relative: 0.5 0.0;
- rel1.to_x: "elm.swallow.bar";
- rel2.relative: 0.5 1.0;
- rel2.to_x: "elm.swallow.bar";
- }
- }
- part { name: "knob";
- description { state: "default" 0.0;
- image.normal: "knob";
- fixed: 1 1;
- min: 12 12;
- step: 2 2;
- max: 32 32; // XXX allow bigger sizes with more knob images
- rel1.to: "elm.dragable.slider";
- rel1.offset: -4 -4;
- rel2.to: "elm.dragable.slider";
- rel2.offset: 3 3;
- }
- description { state: "clicked" 0.0;
- inherit: "default" 0.0;
- }
- }
- part { name: "slideevent"; type: RECT; repeat_events: 1;
- scale: 1;
- ignore_flags: ON_HOLD;
- dragable.events: "elm.dragable.slider";
- description { state: "default" 0.0;
- fixed: 1 1;
- rel1.to: "elm.dragable.slider";
- rel2.to: "elm.dragable.slider";
- color: 0 0 0 0;
- }
- }
- part { name: "elm.track.slider"; type: SWALLOW; mouse_events: 0;
- description { state: "default" 0.0;
- max: 0 0;
- rel1.to: "elm.dragable.slider";
- rel2.to: "elm.dragable.slider";
- }
- }
- part { name: "event"; type: RECT;
- description { state: "default" 0.0;
- color: 0 0 0 0;
- visible: 0;
- }
- description { state: "disabled" 0.0;
- inherit: "default" 0.0;
- visible: 1;
- }
- }
- }
- programs {
- program {
- signal: "mouse,down,1"; source: "elm.dragable.slider";
- action: STATE_SET "clicked" 0.0;
- target: "knob";
- }
- program {
- signal: "mouse,up,1"; source: "elm.dragable.slider";
- action: STATE_SET "default" 0.0;
- target: "knob";
- }
- program {
- signal: "elm,state,indicator,show"; source: "elm";
- action: SIGNAL_EMIT "elm,popup,show" "elm";
- after: "popup_show2";
- }
- program {
- signal: "elm,state,indicator,hide"; source: "elm";
- action: SIGNAL_EMIT "elm,popup,hide" "elm";
- after: "popup_hide2";
- }
- program {
- signal: "mouse,down,1"; source: "slideevent";
- action: SIGNAL_EMIT "elm,popup,show" "elm";
- after: "popup_show2";
- }
- program { name: "popup_show2";
- action: STATE_SET "hidden" 0.0;
- target: "button";
- }
- program {
- signal: "mouse,up,1"; source: "slideevent";
- action: SIGNAL_EMIT "elm,popup,hide" "elm";
- after: "popup_hide2";
- }
- program { name: "popup_hide2";
- action: STATE_SET "default" 0.0;
- target: "button";
- }
- program {
- signal: "elm,state,text,visible"; source: "elm";
- script {
- new m = get_int(slmode);
- m |= LABEL; set_int(slmode, m);
- eval_mode(m);
- }
- }
- program {
- signal: "elm,state,text,hidden"; source: "elm";
- script {
- new m = get_int(slmode);
- m &= ~LABEL; set_int(slmode, m);
- eval_mode(m);
- }
- }
- program {
- signal: "elm,state,icon,visible"; source: "elm";
- script {
- new m = get_int(slmode);
- m |= ICON; set_int(slmode, m);
- eval_mode(m);
- }
- }
- program {
- signal: "elm,state,icon,hidden"; source: "elm";
- script {
- new m = get_int(slmode);
- m &= ~ICON; set_int(slmode, m);
- eval_mode(m);
- }
- }
- program { name: "end_show";
- signal: "elm,state,end,visible"; source: "elm";
- script {
- new m = get_int(slmode);
- m |= END; set_int(slmode, m);
- eval_mode(m);
- }
- }
- program { name: "end_hide";
- signal: "elm,state,end,hidden"; source: "elm";
- script {
- new m = get_int(slmode);
- m &= ~END; set_int(slmode, m);
- eval_mode(m);
- }
- }
- program {
- signal: "elm,state,units,visible"; source: "elm";
- script {
- new m = get_int(slmode);
- m |= UNITS; set_int(slmode, m);
- eval_mode(m);
- }
- }
- program {
- signal: "elm,state,units,visible"; source: "elm";
- action: SIGNAL_EMIT "limits,visible" "elm";
- target: "limits";
- }
- program {
- signal: "elm,state,units,hidden"; source: "elm";
- action: STATE_SET "default" 0.0;
- script {
- new m = get_int(slmode);
- m &= ~UNITS; set_int(slmode, m);
- eval_mode(m);
- }
- }
- program {
- signal: "elm,state,units,hidden"; source: "elm";
- action: SIGNAL_EMIT "limits,hide" "elm";
- target: "limits";
- }
- program {
- signal: "elm,state,inverted,on"; source: "elm";
- script {
- new m = get_int(slmode);
- m |= INVERT; set_int(slmode, m);
- eval_mode(m);
- }
- }
- program {
- signal: "elm,state,inverted,off"; source: "elm";
- script {
- new m = get_int(slmode);
- m &= ~INVERT; set_int(slmode, m);
- eval_mode(m);
- }
- }
- program {
- signal: "elm,state,disabled"; source: "elm";
- script {
- new m = get_int(slmode);
- m |= DISABLE; set_int(slmode, m);
- eval_mode(m);
- }
- }
- program {
- signal: "elm,state,enabled"; source: "elm";
- script {
- new m = get_int(slmode);
- m &= ~DISABLE; set_int(slmode, m);
- eval_mode(m);
- }
- }
- }
-#undef ICON
-#undef LABEL
-#undef END
-#undef UNITS
-#undef MASK
-#undef INVERT
-#undef DISABLE
-}
-
-group { name: "elm/slider/horizontal/indicator/default";
- alias: "elm/slider/horizontal/indicator/disabled";
- alias: "elm/slider/horizontal/popup/default";
- alias: "elm/slider/horizontal/indicator/media_player/position/default";
- alias: "elm/slider/horizontal/indicator/media_player/position/flush";
- alias: "elm/slider/horizontal/indicator/media_player/volume/default";
- alias: "elm/slider/horizontal/indicator/media_player/volume/flush";
- images.image: "darken_rounded_square.png" COMP;
- parts {
- part { name: "base"; type: SPACER;
- scale: 1;
- description { state: "default" 0.0;
- fixed: 1 1;
- min: 16 16;
- }
- }
- part { name: "clip"; type: RECT;
- description { state: "default" 0.0;
- fixed: 1 1;
- rel1.to: "elm.indicator";
- rel1.offset: -100 -100;
- rel2.to: "elm.indicator";
- rel2.offset: 99 99;
- visible: 0;
- }
- description { state: "visible" 0.0;
- inherit: "default" 0.0;
- visible: 1;
- }
- }
- part { name: "bevel"; mouse_events: 0;
- clip_to: "clip";
- description { state: "default" 0.0;
- rel1.offset: -12 -12;
- rel1.to: "elm.indicator";
- rel2.offset: 11 11;
- rel2.to: "elm.indicator";
- image.normal: "darken_rounded_square.png";
- image.border: 15 15 15 15;
- fill.smooth: 0;
- visible: 0;
- }
- description { state: "visible" 0.0;
- inherit: "default" 0.0;
- visible: 1;
- }
- }
- part { name: "elm.indicator"; type: TEXT; mouse_events: 0;
- clip_to: "clip";
- effect: SHADOW BOTTOM;
- scale: 1;
- description { state: "default" 0.0;
- fixed: 1 1;
- align: 0.5 1.0;
- rel1.to: "base";
- rel1.relative: 0.0 -0.1;
- rel1.offset: 0 -12;
- rel2.to: "base";
- rel2.relative: 1.0 -0.1;
- rel2.offset: -1 -12;
- color_class: "slider_indicator";
- color: FN_COL_DEFAULT;
- text { font: FNBD; size: 10;
- min: 1 1;
- align: 0.5 1.0;
- text_class: "slider_indicator";
- ellipsis: -1;
- }
- visible: 0;
- }
- description { state: "visible" 0.0;
- inherit: "default" 0.0;
- visible: 1;
- }
- }
- }
- programs {
- program {
- signal: "elm,popup,show"; source: "elm";
- action: STATE_SET "visible" 0.0;
- target: "elm.indicator";
- target: "bevel";
- }
- program {
- signal: "elm,popup,hide"; source: "elm";
- action: STATE_SET "default" 0.0;
- target: "elm.indicator";
- target: "bevel";
- }
- program {
- signal: "elm,popup,hide"; source: "elm";
- action: SIGNAL_EMIT "elm,popup,hide,done" "elm";
- }
- program {
- signal: "elm,state,val,show"; source: "elm";
- action: STATE_SET "visible" 0.0;
- target: "clip";
+ ellipsis: -1;
+ text: "M";
+ }
+ }
}
- program {
- signal: "elm,state,val,hide"; source: "elm";
- action: STATE_SET "default" 0.0;
- target: "clip";
- }
- program {
- signal: "elm,state,indicator,show"; source: "elm";
- action: STATE_SET "visible" 0.0;
- target: "elm.indicator";
- target: "bevel";
- }
- program {
- signal: "elm,state,indicator,hide"; source: "elm";
- action: STATE_SET "visible" 0.0;
- target: "elm.indicator";
- target: "bevel";
- }
- program {
- signal: "elm,state,disabled"; source: "elm";
- action: STATE_SET "disabled" 0.0;
- target: "base";
- }
- program {
- signal: "elm,state,enabled"; source: "elm";
- action: STATE_SET "default" 0.0;
- target: "base";
- }
- }
-}
-
-group { name: "elm/slider/vertical/default";
- alias: "elm/slider/vertical/disabled";
- alias: "elm/slider/vertical/media_player/position/default";
- alias: "elm/slider/vertical/media_player/position/flush";
- alias: "elm/slider/vertical/media_player/volume/default";
- alias: "elm/slider/vertical/media_player/volume/flush";
- images.image: "slider_run_base_vert.png" COMP;
- images.image: "slider_run_bevel_vert.png" COMP;
- images.image: "slider_run_base_light_vert.png" COMP;
- images.image: "vert_glow_run.png" COMP;
- images.image: "vert_glow_run_rev.png" COMP;
- images.image: "knob_round_small_normal.png" COMP;
- images.image: "knob_round_small_selected.png" COMP;
- set { name: "knob";
- // XXX: add more sizes (at least up to 128x128)
- image { image: "knob_sz_24.png" COMP; size: 31 31 32 32; }
- image { image: "knob_sz_22.png" COMP; size: 29 29 30 30; }
- image { image: "knob_sz_20.png" COMP; size: 27 27 28 28; }
- image { image: "knob_sz_18.png" COMP; size: 25 25 26 26; }
- image { image: "knob_sz_16.png" COMP; size: 23 23 24 24; }
- image { image: "knob_sz_14.png" COMP; size: 21 21 22 22; }
- image { image: "knob_sz_12.png" COMP; size: 19 19 20 20; }
- image { image: "knob_sz_10.png" COMP; size: 17 17 18 18; }
- image { image: "knob_sz_08.png" COMP; size: 15 15 16 16; }
- image { image: "knob_sz_06.png" COMP; size: 13 13 14 14; }
- image { image: "knob_sz_04.png" COMP; size: 0 0 12 12; }
- }
-#define ICON 1
-#define LABEL 2
-#define END 4
-#define UNITS 8
-#define MASK 15
-#define INVERT 16
-#define DISABLE 32
- script {
- public slmode;
- public eval_mode(m) {
- new ic = m & ICON;
- new l = m & LABEL;
- new e = m & END;
- new u = m & UNITS;
- new d = m & DISABLE;
- new i = m & INVERT;
- if (i) {
- if (!d) {
- set_state(PART:"base", "default", 0.0);
- set_state(PART:"glow", "inverted", 0.0);
- } else {
- set_state(PART:"base", "disabled", 0.0);
- set_state(PART:"glow", "disabled_inverted", 0.0);
- }
- } else {
- if (!d) {
- set_state(PART:"base", "default", 0.0);
- set_state(PART:"glow", "default", 0.0);
- } else {
- set_state(PART:"base", "disabled", 0.0);
- set_state(PART:"glow", "disabled", 0.0);
- }
- }
- if (l) {
- if (!d) {
- set_state(PART:"elm.text", "visible", 0.0);
- } else {
- set_state(PART:"elm.text", "disabled_visible", 0.0);
- }
- } else {
- set_state(PART:"elm.text", "default", 0.0);
- }
- if (u) {
- if (!d) {
- set_state(PART:"elm.units", "visible", 0.0);
- set_state(PART:"limits", "visible", 0.0);
- } else {
- set_state(PART:"elm.units", "disabled_visible", 0.0);
- set_state(PART:"limits", "disabled_visible", 0.0);
- }
- } else {
- set_state(PART:"elm.units", "default", 0.0);
- set_state(PART:"limits", "default", 0.0);
- }
- if (ic) {
- set_state(PART:"elm.swallow.icon", "visible", 0.0);
- set_state(PART:"sizer.content", "visible", 0.0);
- } else {
- set_state(PART:"elm.swallow.icon", "default", 0.0);
- set_state(PART:"sizer.content", "default", 0.0);
- }
- if (e) {
- set_state(PART:"elm.swallow.end", "visible", 0.0);
- set_state(PART:"sizer.content.end", "visible", 0.0);
- } else {
- set_state(PART:"elm.swallow.end", "default", 0.0);
- set_state(PART:"sizer.content.end", "default", 0.0);
- }
- if (!d) {
- set_state(PART:"event", "default", 0.0);
- set_state(PART:"dis_clip", "default", 0.0);
- } else {
- set_state(PART:"event", "disabled", 0.0);
- set_state(PART:"dis_clip", "disabled", 0.0);
- }
- }
- }
- parts {
- part { name: "elm.swallow.bar"; type: SWALLOW;
+ part { name: "elm.units"; type: TEXT; mouse_events: 0;
scale: 1;
description { state: "default" 0.0;
- min: 21 42;
- max: 21 99999;
- align: 0.5 1.0;
- rel1.to_y: "elm.text";
- rel1.relative: 0.0 1.0;
- rel1.offset: 0 2;
- rel2.to_y: "limits";
- rel2.relative: 1.0 0.0;
- rel2.offset: -1 -3;
- }
- }
- part { name: "base"; mouse_events: 0;
- description { state: "default" 0.0;
- rel1.to: "elm.swallow.bar";
- rel2.to: "elm.swallow.bar";
- image.normal: "slider_run_base_vert.png";
- image.border: 0 0 4 4;
- fill.smooth: 0;
- min: 5 8;
- max: 5 99999;
- fixed: 1 0;
- }
- description { state: "disabled" 0.0;
- inherit: "default" 0.0;
- image.normal: "slider_run_base_light_vert.png";
- }
- }
- part { name: "glow"; mouse_events: 0;
- description { state: "default" 0.0;
- image.normal: "vert_glow_run.png";
- rel1.offset: 1 1;
- rel1.to: "base";
- rel2.relative: 1.0 0.5;
- rel2.offset: -2 -1;
- rel2.to_y: "button";
- rel2.to_x: "base";
- image.border: 0 0 0 4;
- }
- description { state: "disabled" 0.0;
- inherit: "default" 0.0;
- color: 255 255 255 64;
- }
- description { state: "inverted" 0.0;
- image.normal: "vert_glow_run_rev.png";
- rel1.relative: 0.0 0.5;
- rel1.offset: 1 0;
- rel1.to_y: "button";
- rel1.to_x: "base";
- rel2.offset: -2 -2;
- rel2.to: "base";
- image.border: 0 0 4 0;
- }
- description { state: "disabled_inverted" 0.0;
- inherit: "inverted" 0.0;
- color: 255 255 255 64;
- }
- }
- part { name: "bevel"; mouse_events: 0;
- description { state: "default" 0.0;
- rel1.to: "base";
- rel2.to: "base";
- image.normal: "slider_run_bevel_vert.png";
- image.border: 0 0 5 5;
- fill.smooth: 0;
- }
- }
- part { name: "dis_clip"; type: RECT;
- description { state: "default" 0.0;
- rel1.to: "elm.swallow.icon";
- rel2.to: "elm.swallow.end";
- }
- description { state: "disabled" 0.0;
- inherit: "default" 0.0;
- color: 255 255 255 64;
- }
- }
- part { name: "elm.swallow.icon"; type: SWALLOW;
- clip_to: "dis_clip";
- description { state: "default" 0.0;
visible: 0;
- align: 0.5 0.0;
- rel1.offset: 2 0;
- rel1.to_x: "elm.swallow.bar";
- rel2.offset: -3 -1;
- rel2.relative: 1.0 0.0;
- rel2.to_x: "elm.swallow.bar";
- }
- description { state: "visible" 0.0;
- inherit: "default" 0.0;
- visible: 1;
- aspect: 1.0 1.0; aspect_preference: VERTICAL;
- rel1.offset: 2 2;
- rel2.offset: -3 2;
- }
- }
- part { name: "sizer.content"; type: TEXT; mouse_events: 0;
- scale: 1;
- description { state: "default" 0.0;
fixed: 1 1;
- visible: 0;
- text { font: FN; size: 10;
- min: 0 0;
- text_class: "slider_text";
- }
- }
- description { state: "visible" 0.0;
- inherit: "default" 0.0;
- rel1.to: "elm.swallow.icon";
- rel2.to: "elm.swallow.icon";
- text {
- min: 1 1;
- ellipsis: -1;
- text: "M";
- }
- }
- }
- part { name: "elm.text"; type: TEXT; mouse_events: 0;
- effect: SHADOW BOTTOM;
- scale: 1;
- description { state: "default" 0.0;
- fixed: 0 1;
- align: 0.5 0.0;
- rel1.to_y: "elm.swallow.icon";
- rel1.relative: 0.0 1.0;
- rel1.offset: 2 -1;
- rel2.to_y: "elm.swallow.icon";
- rel2.relative: 1.0 1.0;
- rel2.offset: -3 -1;
+ //rel1.to_x: "limits";
+ //rel2.to_x: "limits";
+ rel1.relative: 0.0 (2/3);
+ rel2.relative: 0.0 (3/3);
color: FN_COL_DEFAULT;
color_class: "slider_text";
- text { font: FN; size: 10;
+ text { font: FN;
text_class: "slider";
- min: 1 0;
+ align: 1.0 0.5;
+ min: 1 1;
ellipsis: -1;
- align: 0.5 0.0;
}
- visible: 0;
}
description { state: "visible" 0.0;
inherit: "default" 0.0;
visible: 1;
- rel1.offset: 2 2;
- rel2.offset: -3 2;
- text.min: 1 1;
- text.ellipsis: -1;
-
}
description { state: "disabled_visible" 0.0;
inherit: "visible" 0.0;
@@ -1000,17 +299,17 @@ group { name: "elm/slider/vertical/default";
clip_to: "dis_clip";
description { state: "default" 0.0;
visible: 0;
- align: 0.5 1.0;
- rel1.offset: 2 0;
- rel1.relative: 0.0 1.0;
- rel2.offset: -3 -1;
+ align: 1.0 0.5;
+ // TODO move this to hug the 'units' element
+ rel1.relative: 1.0 (2/3);
+ rel2.relative: 1.0 (3/3);
}
description { state: "visible" 0.0;
inherit: "default" 0.0;
visible: 1;
aspect: 1.0 1.0;
aspect_preference: VERTICAL;
- rel2.offset: 2 -3;
+ rel1.offset: -3 2;
rel2.offset: -3 -3;
}
}
@@ -1019,7 +318,7 @@ group { name: "elm/slider/vertical/default";
description { state: "default" 0.0;
fixed: 1 1;
visible: 0;
- text { font: FN; size: 10;
+ text { font: FN;
min: 0 0;
text_class: "slider_text";
}
@@ -1035,104 +334,36 @@ group { name: "elm/slider/vertical/default";
}
}
}
- alias: "elm.units.min" "limits:elm.units.min";
- alias: "elm.units.max" "limits:elm.units.max";
- part { name: "limits"; type: GROUP; mouse_events: 0;
- source: "elm/slider/hidden/limit";
- scale: 1;
- description { state: "default" 0.0;
- align: 0.5 1.0;
- fixed: 1 1;
- max: 0 0;
- rel1.to_y: "elm.swallow.end";
- rel1.relative: 0.0 0.0;
- rel1.offset: 2 1;
- rel2.to_y: "elm.swallow.end";
- rel2.relative: 1.0 0.0;
- rel2.offset: -3 0;
- }
- description { state: "visible" 0.0;
- inherit: "default" 0.0;
- min: SOURCE;
- rel1.offset: 2 -3;
- rel2.offset: -3 -3;
- }
- }
- part { name: "elm.units"; type: TEXT; mouse_events: 0;
- effect: SHADOW BOTTOM;
- scale: 1;
- description { state: "default" 0.0;
- visible: 0;
- fixed: 1 1;
- rel1.to_y: "limits";
- rel2.to_y: "limits";
- color: FN_COL_DEFAULT;
- color_class: "slider_text";
- text { font: FN; size: 10;
- text_class: "slider";
- min: 0 0;
- align: 0.5 1.0;
- ellipsis: -1;
- }
- }
- description { state: "visible" 0.0;
- inherit: "default" 0.0;
- visible: 1;
- text.min: 1 1;
- text.ellipsis: -1;
- }
- description { state: "disabled_visible" 0.0;
- inherit: "visible" 0.0;
- color_class: "slider_text_disabled";
- color3: 255 255 255 255;
- }
- }
- part { name: "button"; type: GROUP; mouse_events: 0;
- source: "elm/slider/vertical/indicator/default";
- description { state: "default" 0.0;
- fixed: 1 1;
- rel1.to: "elm.dragable.slider";
- rel2.to: "elm.dragable.slider";
- }
- description { state: "hidden" 0.0;
- inherit: "default" 0.0;
- visible: 0;
- }
- }
part { name: "elm.dragable.slider"; type: RECT;
- scale: 1;
- dragable.x: 0 0 0;
- dragable.y: 1 1 0;
+ scale: 0;
+ dragable.x: 1 1 0;
+ dragable.y: 0 0 0;
dragable.confine: "elm.swallow.bar";
description { state: "default" 0.0;
color: 0 0 0 0;
min: 16 16;
max: 16 16;
fixed: 1 1;
- rel1.relative: 0.0 0.5;
+ rel1.relative: 0.5 0.0;
rel1.to_x: "elm.swallow.bar";
- rel2.relative: 1.0 0.5;
+ rel2.relative: 0.5 1.0;
rel2.to_x: "elm.swallow.bar";
}
}
part { name: "knob";
+ scale: 0;
description { state: "default" 0.0;
- image.normal: "knob";
+ image.normal: "slider_indicator_knob_horiz.png";
fixed: 1 1;
- min: 12 12;
- step: 2 2;
- max: 32 32; // XXX allow bigger sizes with more knob images
rel1.to: "elm.dragable.slider";
- rel1.offset: -4 -4;
rel2.to: "elm.dragable.slider";
- rel2.offset: 3 3;
}
description { state: "clicked" 0.0;
inherit: "default" 0.0;
}
}
part { name: "slideevent"; type: RECT; repeat_events: 1;
- scale: 1;
+ scale: 0;
ignore_flags: ON_HOLD;
dragable.events: "elm.dragable.slider";
description { state: "default" 0.0;
@@ -1172,34 +403,6 @@ group { name: "elm/slider/vertical/default";
target: "knob";
}
program {
- signal: "elm,state,indicator,show"; source: "elm";
- action: SIGNAL_EMIT "elm,popup,show" "elm";
- after: "popup_show2";
- }
- program {
- signal: "elm,state,indicator,hide"; source: "elm";
- action: SIGNAL_EMIT "elm,popup,hide" "elm";
- after: "popup_hide2";
- }
- program {
- signal: "mouse,down,1"; source: "slideevent";
- action: SIGNAL_EMIT "elm,popup,show" "elm";
- after: "popup_show2";
- }
- program { name: "popup_show2";
- action: STATE_SET "hidden" 0.0;
- target: "button";
- }
- program {
- signal: "mouse,up,1"; source: "slideevent";
- action: SIGNAL_EMIT "elm,popup,hide" "elm";
- after: "popup_hide2";
- }
- program { name: "popup_hide2";
- action: STATE_SET "default" 0.0;
- target: "button";
- }
- program {
signal: "elm,state,text,visible"; source: "elm";
script {
new m = get_int(slmode);
@@ -1255,10 +458,11 @@ group { name: "elm/slider/vertical/default";
eval_mode(m);
}
}
- program {
- signal: "elm,state,units,visible"; source: "elm";
- action: SIGNAL_EMIT "limits:limits,visible" "elm";
- }
+// program {
+// signal: "elm,state,units,visible"; source: "elm";
+// action: SIGNAL_EMIT "limits,visible" "elm";
+// target: "limits";
+// }
program {
signal: "elm,state,units,hidden"; source: "elm";
action: STATE_SET "default" 0.0;
@@ -1268,10 +472,11 @@ group { name: "elm/slider/vertical/default";
eval_mode(m);
}
}
- program {
- signal: "elm,state,units,hidden"; source: "elm";
- action: SIGNAL_EMIT "limits:limits,hide" "elm";
- }
+// program {
+// signal: "elm,state,units,hidden"; source: "elm";
+// action: SIGNAL_EMIT "limits,hide" "elm";
+// target: "limits";
+// }
program {
signal: "elm,state,inverted,on"; source: "elm";
script {
@@ -1313,131 +518,3 @@ group { name: "elm/slider/vertical/default";
#undef INVERT
#undef DISABLE
}
-
-group { name: "elm/slider/vertical/indicator/default";
- alias: "elm/slider/vertical/indicator/disabled";
- alias: "elm/slider/vertical/popup/default";
- alias: "elm/slider/vertical/indicator/media_player/position/default";
- alias: "elm/slider/vertical/indicator/media_player/position/flush";
- alias: "elm/slider/vertical/indicator/media_player/volume/default";
- alias: "elm/slider/vertical/indicator/media_player/volume/flush";
- images.image: "darken_rounded_square.png" COMP;
- parts {
- part { name: "base"; type: SPACER;
- scale: 1;
- description { state: "default" 0.0;
- fixed: 1 1;
- min: 16 16;
- }
- }
- part { name: "clip"; type: RECT;
- description { state: "default" 0.0;
- fixed: 1 1;
- rel1.to: "elm.indicator";
- rel1.offset: -100 -100;
- rel2.to: "elm.indicator";
- rel2.offset: 99 99;
- visible: 0;
- }
- description { state: "visible" 0.0;
- inherit: "default" 0.0;
- visible: 1;
- }
- }
- part { name: "bevel"; mouse_events: 0;
- clip_to: "clip";
- description { state: "default" 0.0;
- rel1.offset: -12 -12;
- rel1.to: "elm.indicator";
- rel2.offset: 11 11;
- rel2.to: "elm.indicator";
- image.normal: "darken_rounded_square.png";
- image.border: 15 15 15 15;
- fill.smooth: 0;
- visible: 0;
- }
- description { state: "visible" 0.0;
- inherit: "default" 0.0;
- visible: 1;
- }
- }
- part { name: "elm.indicator"; type: TEXT; mouse_events: 0;
- clip_to: "clip";
- effect: SHADOW BOTTOM;
- scale: 1;
- description { state: "default" 0.0;
- fixed: 1 1;
- align: 0.0 0.5;
- rel1.to: "base";
- rel1.relative: 1.1 0.0;
- rel1.offset: 11 0;
- rel2.to: "base";
- rel2.relative: 1.1 1.0;
- rel2.offset: 11 -1;
- color_class: "slider_indicator";
- color: FN_COL_DEFAULT;
- text { font: FNBD; size: 10;
- min: 1 1;
- align: 0.0 0.5;
- text_class: "slider_indicator";
- ellipsis: -1;
- }
- visible: 0;
- }
- description { state: "visible" 0.0;
- inherit: "default" 0.0;
- visible: 1;
- }
- }
- }
- programs {
- program {
- signal: "elm,popup,show"; source: "elm";
- action: STATE_SET "visible" 0.0;
- target: "elm.indicator";
- target: "bevel";
- }
- program {
- signal: "elm,popup,hide"; source: "elm";
- action: STATE_SET "default" 0.0;
- target: "elm.indicator";
- target: "bevel";
- }
- program {
- signal: "elm,popup,hide"; source: "elm";
- action: SIGNAL_EMIT "elm,popup,hide,done" "elm";
- }
- program {
- signal: "elm,state,val,show"; source: "elm";
- action: STATE_SET "visible" 0.0;
- target: "clip";
- }
- program {
- signal: "elm,state,val,hide"; source: "elm";
- action: STATE_SET "default" 0.0;
- target: "clip";
- }
- program {
- signal: "elm,state,indicator,show"; source: "elm";
- action: STATE_SET "visible" 0.0;
- target: "elm.indicator";
- target: "bevel";
- }
- program {
- signal: "elm,state,indicator,hide"; source: "elm";
- action: STATE_SET "visible" 0.0;
- target: "elm.indicator";
- target: "bevel";
- }
- program {
- signal: "elm,state,disabled"; source: "elm";
- action: STATE_SET "disabled" 0.0;
- target: "base";
- }
- program {
- signal: "elm,state,enabled"; source: "elm";
- action: STATE_SET "default" 0.0;
- target: "base";
- }
- }
-}
diff --git a/data/themes/default/fnt/10x20.pcf b/data/themes/default/fnt/10x20.pcf
new file mode 100644
index 0000000..039010f
--- /dev/null
+++ b/data/themes/default/fnt/10x20.pcf
Binary files differ
diff --git a/data/themes/default/fnt/4x6.pcf b/data/themes/default/fnt/4x6.pcf
new file mode 100644
index 0000000..bccd0a2
--- /dev/null
+++ b/data/themes/default/fnt/4x6.pcf
Binary files differ
diff --git a/data/themes/default/fnt/5x7.pcf b/data/themes/default/fnt/5x7.pcf
new file mode 100644
index 0000000..6da1702
--- /dev/null
+++ b/data/themes/default/fnt/5x7.pcf
Binary files differ
diff --git a/data/themes/default/fnt/5x8.pcf b/data/themes/default/fnt/5x8.pcf
new file mode 100644
index 0000000..06d74f2
--- /dev/null
+++ b/data/themes/default/fnt/5x8.pcf
Binary files differ
diff --git a/data/themes/default/fnt/6x12.pcf b/data/themes/default/fnt/6x12.pcf
new file mode 100644
index 0000000..a49ea7e
--- /dev/null
+++ b/data/themes/default/fnt/6x12.pcf
Binary files differ
diff --git a/data/themes/default/fnt/6x9.pcf b/data/themes/default/fnt/6x9.pcf
new file mode 100644
index 0000000..0fc174b
--- /dev/null
+++ b/data/themes/default/fnt/6x9.pcf
Binary files differ
diff --git a/data/themes/default/fnt/7x13.pcf b/data/themes/default/fnt/7x13.pcf
new file mode 100644
index 0000000..6b7e1ad
--- /dev/null
+++ b/data/themes/default/fnt/7x13.pcf
Binary files differ
diff --git a/data/themes/default/fnt/8x13.pcf b/data/themes/default/fnt/8x13.pcf
new file mode 100644
index 0000000..4eb4752
--- /dev/null
+++ b/data/themes/default/fnt/8x13.pcf
Binary files differ
diff --git a/data/themes/default/fnt/9x15.pcf b/data/themes/default/fnt/9x15.pcf
new file mode 100644
index 0000000..8705640
--- /dev/null
+++ b/data/themes/default/fnt/9x15.pcf
Binary files differ
diff --git a/data/themes/default/fonts.edc b/data/themes/default/fonts.edc
index c89ece8..f913bf3 100644
--- a/data/themes/default/fonts.edc
+++ b/data/themes/default/fonts.edc
@@ -1,19 +1,9 @@
-/*fonts {
- font: "PT_Sans-Web-Regular.ttf" "PTSans";
- font: "PT_Sans-Web-Bold.ttf" "PTSans-Bold";
- font: "PT_Sans-Web-Italic.ttf" "PTSans-Italic";
- font: "PT_Sans-Web-BoldItalic.ttf" "PTSans-BoldItalic";
-}
-
-#define FN "PTSans"
-#define FNBD "PTSans-Bold"
-#define FNIT "PTSans-Italic"
-#define FNBDIT "PTSans-BoldItalic"
-*/
-#define FN "6x9.pcf"
-#define FNBD "Sans:style=Bold"
-#define FNIT "Sans:style=Oblique"
-#define FNBDIT "Sans:style=Bold Italic"
+/* 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 FNBD "/usr/share/fonts/X11/misc/6x13B.pcf.gz"
+#define FNIT "/usr/share/fonts/X11/misc/6x130.pcf.gz"
#define FN_COL_DEFAULT_BASIC 0 0 0 255
/* fonts.edc not sure if this one is neccesary */
diff --git a/data/themes/default/img/emo-very-sorry.png b/data/themes/default/img/emo-very-sorry.png
index 10c4736..667a30d 100644
--- a/data/themes/default/img/emo-very-sorry.png
+++ b/data/themes/default/img/emo-very-sorry.png
Binary files differ
diff --git a/data/themes/default/img/slider_indicator_knob_horiz.png b/data/themes/default/img/slider_indicator_knob_horiz.png
new file mode 100644
index 0000000..b619fb7
--- /dev/null
+++ b/data/themes/default/img/slider_indicator_knob_horiz.png
Binary files differ
diff --git a/packaging/debian/Makefile.am b/packaging/debian/Makefile.am
index 4c3ea39..cdf960e 100644
--- a/packaging/debian/Makefile.am
+++ b/packaging/debian/Makefile.am
@@ -1,6 +1,3 @@
MAINTAINERCLEANFILES = Makefile.in
EXTRA_DIST = changelog compat control copyright Makefile.am rules source/format
-dist-hook:
- chmod u+w $(distdir)/changelog
- printf "eulogium (${VERSION}) UNRELEASED; urgency=low\n\n * Initial release.\n\n -- Olliver Schinagl <o.schinagl@ultimaker.com> `date -R`\n" date -R > changelog
diff --git a/packaging/debian/changelog b/packaging/debian/changelog
index e69de29..b7d8483 100644
--- a/packaging/debian/changelog
+++ b/packaging/debian/changelog
@@ -0,0 +1,5 @@
+eulogium (0.0.1-0) UNRELEASED; urgency=low
+
+ * Initial release.
+
+ -- Olliver Schinagl <o.schinagl@ultimaker.com> Tue, 14 Jul 2015 09:54:16 +0200
diff --git a/packaging/debian/rules b/packaging/debian/rules
index 7f478e0..7f478e0 100755..100644
--- a/packaging/debian/rules
+++ b/packaging/debian/rules
diff --git a/src/Makefile.am b/src/Makefile.am
index 824e23b..0d0174f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,18 +1,23 @@
MAINTAINERCLEANFILES = Makefile.in
-SUBDIRS = tests
+SUBDIRS =
bin_PROGRAMS = eulogium
AM_CPPFLAGS = -DPACKAGE_BIN_DIR=\"$(bindir)/\" \
-DPACKAGE_LIB_DIR=\"$(bindir)/\" \
-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
--I$(top_builddir)/src/ \
--I$(top_srcdir)/src/ \
-@EFL_CFLAGS@
+ -I$(top_builddir)/src/ \
+ -I$(top_srcdir)/src/ \
+ @EFL_CFLAGS@
eulogium_SOURCES = eulogium.c eulogium_item_list.c procedures.c \
- dbus_common.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 \
+ dbus_common.h print_data.h network.h ui_widgets.h \
+ ui_input.h settings_data.h gettext.h
+
eulogium_LDADD = @EFL_LIBS@
localedir = $(datadir)/locale
diff --git a/src/dbus_common.c b/src/dbus_common.c
index dd3bae5..6e05524 100644
--- a/src/dbus_common.c
+++ b/src/dbus_common.c
@@ -12,40 +12,60 @@
#include "dbus_common.h"
#include "eulogium.h"
#include "eulogium_item_list.h"
+#include "procedures.h"
-void on_method_generic_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
+void on_method_generic_ret(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
{
+ const char *errname, *errmsg;
- struct list_item *item = data;
+ if (eldbus_message_error_get(msg, &errname, &errmsg)) {
+ EINA_LOG_ERR("%s %s", errname, errmsg);
+ return;
+ }
+}
+
+void on_method_generic_bool_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
+{
const char *errname, *errmsg;
- Eina_Bool state;
+ Eina_Bool ret;
if (eldbus_message_error_get(msg, &errname, &errmsg)) {
EINA_LOG_ERR("%s %s", errname, errmsg);
return;
}
+ if (!eldbus_message_arguments_get(msg, "b", &ret)) {
+ EINA_LOG_ERR("Signature mismatch, \"b\".");
+ return;
+ }
+ if (ret)
+ EINA_LOG_INFO("Ran %s successfully.", (char *)data);
+ else
+ EINA_LOG_WARN("%s failed to run.", (char *)data);
}
+#define _TECH_ETHERNET "ethernet"
+#define _TECH_WIFI "wifi"
void on_method_get_network_info_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
{
struct eulogium_data *eulogium = data; /* TODO replace this by making networks direct via ** */
struct network_data *networks = NULL;
const char *errname, *errmsg;
- Eldbus_Message_Iter *array, *net_struct;
- char *obj_path, *tech, *ipv4, *ipv6, *ssid, *dummy;
+ Eldbus_Message_Iter *array, *array_security, *net_struct;
+ char *obj_path, *state, *error, *ssid, *tech, *ipv4, *ipv6, *security;
+ uint8_t strength, favorite, immutable, autoconnect;
uint_fast16_t i = 0;
if (eldbus_message_error_get(msg, &errname, &errmsg)) {
EINA_LOG_ERR("%s %s", errname, errmsg);
return;
}
- if (!eldbus_message_arguments_get(msg, "a(osssss)", &array)) {
- EINA_LOG_ERR("Message content does not match expected \"a(osssss)\" signature. (%s)", eldbus_message_signature_get(msg));
+ if (!eldbus_message_arguments_get(msg, "a(ossssybbbssas)", &array)) {
+ EINA_LOG_ERR("Message content does not match expected \"a(ossssybbbssas)\" signature. (%s)", eldbus_message_signature_get(msg));
return;
}
- while (eldbus_message_iter_get_and_next(array, 'r', &net_struct))
- if (!eldbus_message_iter_arguments_get(net_struct, "osssss", &obj_path, &tech, &ipv4, &ipv6, &ssid, &dummy)) {
- EINA_LOG_ERR("Message content does not match expected \"osssss\" signature. (%s)", eldbus_message_signature_get(msg));
+ while (eldbus_message_iter_get_and_next(array, 'r', &net_struct)) {
+ if (!eldbus_message_iter_arguments_get(net_struct, "ossssybbbssas", &obj_path, &state, &error, &ssid, &tech, &strength, &favorite, &immutable, &autoconnect, &ipv4, &ipv6, &array_security)) {
+ EINA_LOG_ERR("Message content does not match expected \"ossssybbbssas\" signature. (%s)", eldbus_message_signature_get(msg));
break;
} else {
networks = realloc(networks, (i + 2) * sizeof(struct network_data));
@@ -60,25 +80,59 @@ void on_method_get_network_info_ret(void *data, const Eldbus_Message *msg, Eldbu
else
strncpy(networks[i].obj_path, obj_path, obj_pathsize);
- networks[i].tech = UNKNOWN;
- if (strcmp(tech, _TECH_ETHERNET))
+ networks[i].tech = TECH_UNKNOWN;
+ if (!strcmp(tech, _TECH_ETHERNET))
networks[i].tech = TECH_ETHERNET;
- if (strcmp(tech, _TECH_WIFI))
+ if (!strcmp(tech, _TECH_WIFI))
networks[i].tech = TECH_WIFI;
strncpy(networks[i].ipv4, ipv4, IPV4_MAX_LEN);
strncpy(networks[i].ipv6, ipv6, IPV6_MAX_LEN);
strncpy(networks[i].ssid, ssid, SSID_MAX_LEN);
+ while (eldbus_message_iter_get_and_next(array_security, 's', &security))
+ /* noop */;
}
i++;
}
+ }
+ if (i < 1)
+ return;
+
networks[i].obj_path = NULL; /* sentinel */
eulogium->networks = networks;
}
-void on_signal_network_info_changed_ret(void *data, const Eldbus_Message *msg)
+void on_signal_network_info_changed_ret(void *data, const Eldbus_Message *msg EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+
+ /* XXX TODO: Right now we ignore the received message and just assume data
+ * has changed and we request a new array. The received object path is thus also ignored.
+ */
+ eldbus_proxy_call(eulogium->dbus.proxy[NETWORK], "getNetworkServicesInfo", on_method_get_network_info_ret, eulogium, -1, "b", 1);
+}
+
+void on_method_get_procedure_metadata_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
+{
+ const struct procedure_data *proc = data;
+ const char *errname, *errmsg;
+ Eldbus_Message_Iter *array;
+
+ if (eldbus_message_error_get(msg, &errname, &errmsg)) {
+ EINA_LOG_ERR("%s %s", errname, errmsg); /* XXX do these need to be free'ed? FIXME! YES! They do */
+ return;
+ }
+ if (!eldbus_message_arguments_get(msg, "a{sv}", &array)) {
+ EINA_LOG_ERR("Message content does not match expected \"a{sv}\" signature. (%s)", eldbus_message_signature_get(msg)); /* XXX this return value may need to be freed actually!! Yep they do.*/
+ return;
+ }
+ eldbus_message_iter_dict_iterate(array, "sv", proc->parser, proc);
+}
+
+/* XXX we are likely not getting a signal, but will deal with this on procedure start and procedure finished. */
+void on_signal_procedure_metadata_changed_ret(void *data, const Eldbus_Message *msg)
{
- on_method_get_network_info_ret(data, msg, NULL);
+ on_method_get_procedure_metadata_ret(data, msg, NULL);
}
void on_method_is_network_powered_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
diff --git a/src/dbus_common.h b/src/dbus_common.h
index fc3af51..95f1e30 100644
--- a/src/dbus_common.h
+++ b/src/dbus_common.h
@@ -24,10 +24,13 @@ struct dbus_handle {
void *set_data;
};
-void on_method_generic_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED);
+void on_method_generic_ret(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED);
+void on_method_generic_bool_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED);
void on_method_get_network_info_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED);
void on_signal_network_info_changed_ret(void *data, const Eldbus_Message *msg);
void on_method_is_network_powered_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED);
void on_signal_network_power_changed_ret(void *data, const Eldbus_Message *msg);
+void on_method_get_procedure_metadata_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED);
+void on_signal_procedure_metadata_changed_ret(void *data, const Eldbus_Message *msg);
#endif /* _DBUS_COMMON_H */
diff --git a/src/eulogium.c b/src/eulogium.c
index 280e204..973965e 100644
--- a/src/eulogium.c
+++ b/src/eulogium.c
@@ -16,40 +16,26 @@
#include "dbus_common.h"
#include "eulogium.h"
#include "eulogium_item_list.h"
-#include "eulogium_private.h"
#include "gettext.h"
+#include "network.h"
+#include "print_data.h"
#include "procedures.h"
+#include "settings_data.h"
+#include "ui_input.h"
#include "ui_widgets.h"
#define COPYRIGHT "Copyright © 2015 Olliver Schinagl <o.schinagl@ultimaker.com> and various contributors (see AUTHORS)."
-#define SECOND 1UL
-#define MINUTE (60UL * SECOND)
-#define HOUR (60UL * MINUTE)
-#define DAY (24UL * HOUR)
-#define WEEK (7UL * DAY)
-#define MONTH (4UL * WEEK)
-#define YEAR (52UL * WEEK)
-
-int INPUT_MOUSE_WHEEL_UP = 0; /* For custom ecore_event handling */
-int INPUT_MOUSE_WHEEL_DOWN = 0; /* For custom ecore_event handling */
-
-/* TODO this LUT can be much improved */
-char *griffin_print_status[] = {
- gettext_noop("Unknown"),
- gettext_noop("Disconnected"),
- gettext_noop("Error"),
- gettext_noop("First Run Wizard"),
- gettext_noop("IDLE"),
- gettext_noop("Slicing"),
- gettext_noop("Heating"),
- gettext_noop("Printing"),
- gettext_noop("Cooling down"),
- gettext_noop("Wait for Removal"),
- gettext_noop("Paused"),
-};
+#define SECOND 1L
+#define MINUTE (60L * SECOND)
+#define HOUR (60L * MINUTE)
+#define DAY (24L * HOUR)
+#define WEEK (7L * DAY)
+#define MONTH (4L * WEEK)
+#define YEAR (52L * WEEK)
/* TODO Create def for a menu/screen to house all the buttons */
+/* BTN is better then but-sex. */
static void _on_print_abort_ret(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED);
static void _cb_content_prev_set(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
@@ -82,6 +68,7 @@ static void _but_settings_hotend_2_cb(void *data, Evas_Object *object EINA_UNUSE
static void _but_change_hotend_1_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED);
static void _but_change_hotend_2_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED);
static void _but_network_info_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_software_version_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED);
static void _but_settings_network_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
static void _but_settings_language_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
static void _but_settings_hotend_1_offset_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
@@ -89,13 +76,39 @@ static void _but_settings_hotend_2_offset_cb(void *data, Evas_Object *obj EINA_U
static void _but_material_customize_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
static void _but_print_tune_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
static void _but_settings_led_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_led_hue_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_led_saturation_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
static void _but_led_brightness_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_bed_heatup_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_hotend_heatup_0_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_hotend_heatup_1_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_print_speed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_fan_speed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_flow_rate_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_retraction_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_retraction_length_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_retraction_speed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_retraction_zhop_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_bed_level_auto_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_bed_raise_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_bed_move_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_bed_home_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_head_home_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_material_move_0_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_material_move_1_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_motion_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_jerk_xy_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_jerk_z_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_current_xy_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_current_z_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_current_e_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
+static void _but_hotend_active_set_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
/* Buttons */
static struct button_def but_return = {
- .text = gettext_noop("RETURN"),
+ .text = N_("RETURN"),
.cb = {
- .func = _cb_content_prev_set,
+ .func = &_cb_content_prev_set,
.data = NULL,
.info = "return button pressed",
},
@@ -105,7 +118,7 @@ static struct button_def but_return = {
static struct button_def but_print_abort_confirm = {
.text = "ABORT",
.cb = {
- .func = _print_abort_confirm_cb,
+ .func = &_print_abort_confirm_cb,
.data = NULL,
.info = "print abort confirm button pressed",
},
@@ -115,7 +128,7 @@ static struct button_def but_print_abort_confirm = {
static struct button_def but_print_abort = {
.text = "Yes",
.cb = {
- .func = _print_abort_cb,
+ .func = &_print_abort_cb,
.data = NULL,
.info = "print abort button pressed",
},
@@ -125,7 +138,7 @@ static struct button_def but_print_abort = {
static struct button_def but_print_tune = {
.text = "TUNE",
.cb = {
- .func = _but_print_tune_cb,
+ .func = &_but_print_tune_cb,
.data = NULL,
.info = "tune progress button pressed",
},
@@ -135,7 +148,7 @@ static struct button_def but_print_tune = {
static struct button_def but_main_print = {
.text = "PRINT",
.cb = {
- .func = _cb_button_main_print,
+ .func = &_cb_button_main_print,
.data = NULL,
.info = "print button pressed",
},
@@ -145,7 +158,7 @@ static struct button_def but_main_print = {
static struct button_def but_print_ignore = {
.text = "IGNORE THIS JOB",
.cb = {
- .func = _print_ignore_cb,
+ .func = &_print_ignore_cb,
.data = NULL,
.info = "print ignore button pressed",
},
@@ -155,7 +168,7 @@ static struct button_def but_print_ignore = {
static struct button_def but_print_local = {
.text = "LOCAL",
.cb = {
- .func = _but_print_local_cb,
+ .func = &_but_print_local_cb,
.data = NULL,
.info = "local storage button pressed",
},
@@ -165,7 +178,7 @@ static struct button_def but_print_local = {
static struct button_def but_print_mmc = {
.text = "SD",
.cb = {
- .func = _but_print_usb_cb,
+ .func = &_but_print_usb_cb,
.data = NULL,
.info = "usb storage button pressed",
},
@@ -175,7 +188,7 @@ static struct button_def but_print_mmc = {
static struct button_def but_print_usb = {
.text = "USB",
.cb = {
- .func = _but_print_usb_cb,
+ .func = &_but_print_usb_cb,
.data = NULL,
.info = "usb storage button pressed",
},
@@ -185,7 +198,7 @@ static struct button_def but_print_usb = {
static struct button_def but_main_mathot = {
.text = "MATERIAL<br>/HOT END",
.cb = {
- .func = _but_main_mathot_cb,
+ .func = &_but_main_mathot_cb,
.data = NULL,
.info = "material / hot-end button pressed",
},
@@ -195,7 +208,7 @@ static struct button_def but_main_mathot = {
static struct button_def but_mathot_material = {
.text = "MATERIAL",
.cb = {
- .func = _but_mathot_material_cb,
+ .func = &_but_mathot_material_cb,
.data = NULL,
.info = "material button pressed",
},
@@ -205,7 +218,7 @@ static struct button_def but_mathot_material = {
static struct button_def but_mathot_hotend = {
.text = "HOT END",
.cb = {
- .func = _but_mathot_hotend_cb,
+ .func = &_but_mathot_hotend_cb,
.data = NULL,
.info = "hot-end button pressed",
},
@@ -215,7 +228,7 @@ static struct button_def but_mathot_hotend = {
static struct button_def but_main_system = {
.text = "SYSTEM",
.cb = {
- .func = _but_main_system_cb,
+ .func = &_but_main_system_cb,
.data = NULL,
.info = "system button pressed",
},
@@ -225,7 +238,7 @@ static struct button_def but_main_system = {
static struct button_def but_system_maintenance = {
.text = "MAINTE-<br>NANCE",
.cb = {
- .func = _but_system_maintenance_cb,
+ .func = &_but_system_maintenance_cb,
.data = NULL,
.info = "maintenance button pressed",
},
@@ -235,7 +248,7 @@ static struct button_def but_system_maintenance = {
static struct button_def but_system_settings = {
.text = "SETTINGS",
.cb = {
- .func = _but_system_settings_cb,
+ .func = &_but_system_settings_cb,
.data = NULL,
},
.data = NULL,
@@ -244,7 +257,7 @@ static struct button_def but_system_settings = {
static struct button_def but_material_change = {
.text = "CHANGE",
.cb = {
- .func = _but_material_change_cb,
+ .func = &_but_material_change_cb,
.data = NULL,
},
.data = NULL,
@@ -253,7 +266,7 @@ static struct button_def but_material_change = {
static struct button_def but_material_settings = {
.text = "SETTINGS",
.cb = {
- .func = _but_material_settings_cb,
+ .func = &_but_material_settings_cb,
.data = NULL,
},
.data = NULL,
@@ -262,7 +275,7 @@ static struct button_def but_material_settings = {
static struct button_def but_settings_material_1 = {
.text = "MATERIAL 1",
.cb = {
- .func = _but_settings_material_1_cb, /* XXX we should make 1/2 a var */
+ .func = &_but_settings_material_1_cb, /* XXX we should make 1/2 a var */
.data = NULL,
},
.data = NULL,
@@ -271,7 +284,7 @@ static struct button_def but_settings_material_1 = {
static struct button_def but_settings_material_2 = {
.text = "MATERIAL 2",
.cb = {
- .func = _but_settings_material_2_cb, /* XXX we should make 1/2 a var */
+ .func = &_but_settings_material_2_cb, /* XXX we should make 1/2 a var */
.data = NULL,
},
.data = NULL,
@@ -280,7 +293,7 @@ static struct button_def but_settings_material_2 = {
static struct button_def but_change_material_1 = {
.text = "MATERIAL 1",
.cb = {
- .func = _but_change_material_1_cb, /* XXX we should make 1/2 a var */
+ .func = &_but_change_material_1_cb, /* XXX we should make 1/2 a var */
.data = NULL,
},
.data = NULL,
@@ -289,7 +302,7 @@ static struct button_def but_change_material_1 = {
static struct button_def but_change_material_2 = {
.text = "MATERIAL 2",
.cb = {
- .func = _but_change_material_2_cb, /* XXX we should make 1/2 a var */
+ .func = &_but_change_material_2_cb, /* XXX we should make 1/2 a var */
.data = NULL,
},
.data = NULL,
@@ -298,7 +311,7 @@ static struct button_def but_change_material_2 = {
static struct button_def but_hotend_change = {
.text = "CHANGE",
.cb = {
- .func = _but_hotend_change_cb,
+ .func = &_but_hotend_change_cb,
.data = NULL,
},
.data = NULL,
@@ -307,7 +320,7 @@ static struct button_def but_hotend_change = {
static struct button_def but_hotend_settings = {
.text = "SETTINGS",
.cb = {
- .func = _but_hotend_settings_cb,
+ .func = &_but_hotend_settings_cb,
.data = NULL,
},
.data = NULL,
@@ -316,7 +329,7 @@ static struct button_def but_hotend_settings = {
static struct button_def but_settings_hotend_1 = {
.text = "HOT END 1",
.cb = {
- .func = _but_settings_hotend_1_cb, /* XXX we should make 1/2 a var */
+ .func = &_but_settings_hotend_1_cb, /* XXX we should make 1/2 a var */
.data = NULL,
},
.data = NULL,
@@ -325,7 +338,7 @@ static struct button_def but_settings_hotend_1 = {
static struct button_def but_settings_hotend_2 = {
.text = "HOT END 2",
.cb = {
- .func = _but_settings_hotend_2_cb, /* XXX we should make 1/2 a var */
+ .func = &_but_settings_hotend_2_cb, /* XXX we should make 1/2 a var */
.data = NULL,
},
.data = NULL,
@@ -334,7 +347,7 @@ static struct button_def but_settings_hotend_2 = {
static struct button_def but_change_hotend_1 = {
.text = "HOT END 1",
.cb = {
- .func = _but_change_hotend_1_cb, /* XXX we should make 1/2 a var */
+ .func = &_but_change_hotend_1_cb, /* XXX we should make 1/2 a var */
.data = NULL,
},
.data = NULL,
@@ -343,7 +356,7 @@ static struct button_def but_change_hotend_1 = {
static struct button_def but_change_hotend_2 = {
.text = "HOT END 2",
.cb = {
- .func = _but_change_hotend_2_cb, /* XXX we should make 1/2 a var */
+ .func = &_but_change_hotend_2_cb, /* XXX we should make 1/2 a var */
.data = NULL,
},
.data = NULL,
@@ -355,11 +368,11 @@ static struct menu_def menu_system_settings = {
.entry = {
{
.icon = "user-home",
- .label = gettext_noop("Return"),
+ .label = N_("Return"),
.item = {.type = LIST_ITEM_BUTTON},
- .footer = gettext_noop("Return to Main menu"),
+ .footer = N_("Return to Main menu"),
.footer_alt = NULL,
- .func = _cb_content_prev_set,
+ .func = &_cb_content_prev_set,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -368,7 +381,7 @@ static struct menu_def menu_system_settings = {
.item = {.type = LIST_ITEM_BUTTON},
.footer = "Change language",
.footer_alt = NULL,
- .func = _but_settings_language_cb,
+ .func = &_but_settings_language_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -377,7 +390,7 @@ static struct menu_def menu_system_settings = {
.item = {.type = LIST_ITEM_BUTTON},
.footer = "Manage connectivity",
.footer_alt = "WiFi &amp; Ethernet",
- .func = _but_settings_network_cb,
+ .func = &_but_settings_network_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -386,7 +399,7 @@ static struct menu_def menu_system_settings = {
.item = {.type = LIST_ITEM_BUTTON},
.footer = "Adjust offset",
.footer_alt = NULL,
- .func = _but_settings_hotend_1_offset_cb,
+ .func = &_but_settings_hotend_1_offset_cb,
.toggle_timer = NULL,
.data = NULL, /* hot end 1 pointer? */
}, {
@@ -395,19 +408,10 @@ static struct menu_def menu_system_settings = {
.end = NULL,
.footer = "Adjust offset",
.footer_alt = NULL,
- .func = _but_settings_hotend_2_offset_cb,
+ .func = &_but_settings_hotend_2_offset_cb,
.toggle_timer = NULL,
.data = NULL, /* hot end 2 pointer? */
- }, {
- .icon = NULL,
- .label = "Feeder power",
- .end = NULL,
- .footer = "Adjust power ",
- .footer_alt = NULL,
- .func = NULL,
- .toggle_timer = NULL,
- .data = NULL,
- }, {
+ }, {/*
.icon = NULL,
.label = "Filament detection",
.end = NULL,
@@ -416,16 +420,16 @@ static struct menu_def menu_system_settings = {
.func = NULL,
.toggle_timer = NULL,
.data = NULL,
- }, {
+ }, {*/
.icon = NULL,
.label = "Camera",
.end = NULL,
.footer = NULL,
.footer_alt = NULL,
- .func = NULL,
+ .func = NULL, /* Menu to rfkill */
.toggle_timer = NULL,
.data = NULL,
- }, {
+ }, {/*
.icon = NULL,
.label = "Internal storage",
.end = NULL,
@@ -434,13 +438,13 @@ static struct menu_def menu_system_settings = {
.func = NULL,
.toggle_timer = NULL,
.data = NULL,
- }, {
+ }, {*/
.icon = NULL,
.label = "LED settings",
.end = NULL,
.footer = NULL,
.footer_alt = NULL,
- .func = _but_settings_led_cb,
+ .func = &_but_settings_led_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -449,16 +453,16 @@ static struct menu_def menu_system_settings = {
.end = NULL,
.footer = NULL,
.footer_alt = NULL,
- .func = NULL,
+ .func = &_but_retraction_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
.icon = NULL,
- .label = "Motion",
+ .label = "Motion settings",
.end = NULL,
.footer = NULL,
.footer_alt = NULL,
- .func = NULL,
+ .func = &_but_motion_cb,
.data = NULL,
}, {
.icon = NULL,
@@ -466,7 +470,7 @@ static struct menu_def menu_system_settings = {
.end = NULL,
.footer = NULL,
.footer_alt = NULL,
- .func = NULL,
+ .func = &_but_software_version_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -493,25 +497,25 @@ static struct menu_def menu_settings_network = {
.item = {.type = LIST_ITEM_BUTTON},
.footer = "Return to Main menu",
.footer_alt = NULL,
- .func = _cb_content_prev_set,
+ .func = &_cb_content_prev_set,
.toggle_timer = NULL,
.data = NULL,
}, {
.icon = NULL,
.label = "Network info",
- .end = NULL,
+ .item = {.type = LIST_ITEM_BUTTON},
.footer = NULL,
.footer_alt = NULL,
- .func = _but_network_info_cb,
+ .func = &_but_network_info_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
.icon = NULL,
.label = "Manage WiFi",
- .end = NULL,
+ .item = {.type = LIST_ITEM_BUTTON},
.footer = "Connect or forget",
.footer_alt = NULL,
- .func = _network_wifi_manage_cb,
+ .func = &_network_wifi_manage_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -525,16 +529,16 @@ static struct menu_def menu_settings_network = {
.dbus = {
/* .proxy = NULL; TODO keep a link to the proxy that is responsible for this item. */
.signal = "EthernetPowerChanged",
- .sig_cb = on_signal_network_power_changed_ret,
+ .sig_cb = &on_signal_network_power_changed_ret,
.get = "isEthernetPowered",
- .get_cb = on_method_is_network_powered_ret,
+ .get_cb = &on_method_is_network_powered_ret,
.set = "setEthernetPower",
- .set_cb = on_method_generic_ret,
+ .set_cb = &on_method_generic_ret,
},
.end = NULL,
.footer = NULL,
.footer_alt = NULL,
- .func = _set_ethernet_power_cb, /* TODO _set_network_power can be possible */
+ .func = &_set_ethernet_power_cb, /* TODO _set_network_power can be possible */
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -547,16 +551,16 @@ static struct menu_def menu_settings_network = {
},
.dbus = {
.signal = "WifiPowerChanged",
- .sig_cb = on_signal_network_power_changed_ret,
+ .sig_cb = &on_signal_network_power_changed_ret,
.get = "isWifiPowered",
- .get_cb = on_method_is_network_powered_ret,
+ .get_cb = &on_method_is_network_powered_ret,
.set = "setWifiPower",
- .set_cb = on_method_generic_ret,
+ .set_cb = &on_method_generic_ret,
},
.end = NULL,
.footer = NULL,
.footer_alt = NULL,
- .func = _set_wifi_power_cb,
+ .func = &_set_wifi_power_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -568,17 +572,17 @@ static struct menu_def menu_settings_network = {
._widget = NULL,
},
.dbus = {
- .signal = "HotspotPowerChanged",
- .sig_cb = on_signal_network_power_changed_ret,
- .get = "isHotspotPowered",
- .get_cb = on_method_is_network_powered_ret,
- .set = "setHotspotPower",
- .set_cb = on_method_generic_ret,
+ .signal = "HotspotEnabledChanged",
+ .sig_cb = &on_signal_network_power_changed_ret,
+ .get = "isHotspotEnabled",
+ .get_cb = &on_method_is_network_powered_ret,
+ .set = "setHotspotEnable",
+ .set_cb = &on_method_generic_ret,
},
.footer = NULL,
.footer_alt = NULL,
.end = NULL,
- .func = _set_hotspot_power_cb,
+ .func = &_set_hotspot_power_cb,
.toggle_timer = NULL,
.data = NULL,
}, { NULL }, /* sentinel */
@@ -594,21 +598,129 @@ static struct menu_def menu_settings_language = {
{
.icon = "user-home",
.label = "Return",
- .end = NULL,
+ .item = {.type = LIST_ITEM_BUTTON},
.footer = "Return to Main menu",
.footer_alt = NULL,
- .func = _cb_content_prev_set,
+ .func = &_cb_content_prev_set,
.toggle_timer = NULL,
.data = NULL,
}, {
.icon = NULL,
.label = "English",
- .end = NULL,
+ .item = {.type = LIST_ITEM_BUTTON},
.footer = "Welcome",
.footer_alt = NULL,
.func = NULL,
.toggle_timer = NULL,
.data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Nederlands",
+ .item = {.type = LIST_ITEM_BUTTON},
+ .footer = "Welkom",
+ .footer_alt = NULL,
+ .func = NULL,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Turkish",
+ .item = {.type = LIST_ITEM_BUTTON},
+ .footer = "Hoşgeldin",
+ .footer_alt = NULL,
+ .func = NULL,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Croatian",
+ .item = {.type = LIST_ITEM_BUTTON},
+ .footer = "dobrodošli",
+ .footer_alt = NULL,
+ .func = NULL,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Hungarian",
+ .item = {.type = LIST_ITEM_BUTTON},
+ .footer = "Üdvözöljük",
+ .footer_alt = NULL,
+ .func = NULL,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Russian",
+ .item = {.type = LIST_ITEM_BUTTON},
+ .footer = "добро пожаловать",
+ .footer_alt = NULL,
+ .func = NULL,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Greek",
+ .item = {.type = LIST_ITEM_BUTTON},
+ .footer = "καλωσόρισμα",
+ .footer_alt = NULL,
+ .func = NULL,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Hebrew",
+ .item = {.type = LIST_ITEM_BUTTON},
+ .footer = "ברוכים הבאים",
+ .footer_alt = NULL,
+ .func = NULL,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Arabic",
+ .item = {.type = LIST_ITEM_BUTTON},
+ .footer = "أهلا بك",
+ .footer_alt = NULL,
+ .func = NULL,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Hindi",
+ .item = {.type = LIST_ITEM_BUTTON},
+ .footer = "स्वागत",
+ .footer_alt = NULL,
+ .func = NULL,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Chinese (traditional)",
+ .item = {.type = LIST_ITEM_BUTTON},
+ .footer = "歡迎",
+ .footer_alt = NULL,
+ .func = NULL,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Thai",
+ .item = {.type = LIST_ITEM_BUTTON},
+ .footer = "ยินดีต้อนรับ",
+ .footer_alt = NULL,
+ .func = NULL,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Georgian",
+ .item = {.type = LIST_ITEM_BUTTON},
+ .footer = "კეთილი",
+ .footer_alt = NULL,
+ .func = NULL,
+ .toggle_timer = NULL,
+ .data = NULL,
}, { NULL }, /* sentinel */
},
.data = NULL,
@@ -624,7 +736,7 @@ static struct menu_def menu_settings_hotend_1_offset = {
.end = NULL,
.footer = "Return to Main menu",
.footer_alt = NULL,
- .func = _cb_content_prev_set,
+ .func = &_cb_content_prev_set,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -696,7 +808,7 @@ static struct menu_def menu_settings_hotend_2_offset = {
.end = NULL,
.footer = "Return to Main menu",
.footer_alt = NULL,
- .func = _cb_content_prev_set,
+ .func = &_cb_content_prev_set,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -768,7 +880,7 @@ static struct menu_def menu_system_maintenance = {
.end = NULL,
.footer = "Return to Main menu",
.footer_alt = NULL,
- .func = _cb_content_prev_set,
+ .func = &_cb_content_prev_set,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -782,11 +894,20 @@ static struct menu_def menu_system_maintenance = {
.data = NULL,
}, {
.icon = NULL,
- .label = "Level buildplate",
+ .label = "Speed",
+ .end = NULL,
+ .footer = "100 %",
+ .footer_alt = NULL,
+ .func = &_but_print_speed_cb,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Auto Level buildplate",
.end = NULL,
.footer = NULL,
.footer_alt = NULL,
- .func = NULL,
+ .func = &_but_bed_level_auto_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -795,7 +916,7 @@ static struct menu_def menu_system_maintenance = {
.end = NULL,
.footer = NULL,
.footer_alt = NULL,
- .func = NULL,
+ .func = &_but_bed_heatup_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -804,7 +925,7 @@ static struct menu_def menu_system_maintenance = {
.end = NULL,
.footer = NULL,
.footer_alt = NULL,
- .func = NULL,
+ .func = &_but_bed_home_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -813,25 +934,25 @@ static struct menu_def menu_system_maintenance = {
.end = NULL,
.footer = NULL,
.footer_alt = NULL,
- .func = NULL,
+ .func = &_but_bed_raise_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
.icon = NULL,
- .label = "Home head",
+ .label = "Move buildplate",
.end = NULL,
.footer = NULL,
.footer_alt = NULL,
- .func = NULL,
+ .func = &_but_bed_move_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
.icon = NULL,
- .label = "Printhead tray",
+ .label = "Home head",
.end = NULL,
.footer = NULL,
.footer_alt = NULL,
- .func = NULL,
+ .func = &_but_head_home_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -840,7 +961,7 @@ static struct menu_def menu_system_maintenance = {
.end = NULL,
.footer = NULL,
.footer_alt = NULL,
- .func = NULL,
+ .func = &_but_hotend_heatup_0_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -849,25 +970,69 @@ static struct menu_def menu_system_maintenance = {
.end = NULL,
.footer = NULL,
.footer_alt = NULL,
- .func = NULL,
+ .func = &_but_hotend_heatup_1_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
.icon = NULL,
- .label = "Set fan speed",
+ .label = "Switch active hotend",
+ .end = NULL,
+ .footer = "Hotend 1 active",
+ .footer_alt = NULL,
+ .func = &_but_hotend_active_set_cb,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Fan speed",
.end = NULL,
.footer = NULL,
.footer_alt = NULL,
- .func = NULL,
+ .func = &_but_fan_speed_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
.icon = NULL,
- .label = "Move material",
+ .label = "Material flow",
.end = NULL,
.footer = NULL,
.footer_alt = NULL,
- .func = NULL,
+ .func = &_but_flow_rate_cb,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Retraction material",
+ .end = NULL,
+ .footer = "Length/Speed/ZHop",
+ .footer_alt = NULL,
+ .func = &_but_retraction_cb,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Motion settings",
+ .end = NULL,
+ .footer = NULL,
+ .footer_alt = NULL,
+ .func = &_but_motion_cb,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Move material left feeder",
+ .end = NULL,
+ .footer = NULL,
+ .footer_alt = NULL,
+ .func = &_but_material_move_0_cb,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Move material right feeder",
+ .end = NULL,
+ .footer = NULL,
+ .footer_alt = NULL,
+ .func = &_but_material_move_1_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -904,7 +1069,7 @@ static struct menu_def menu_material_1 = {
.end = NULL,
.footer = "Return to Main menu",
.footer_alt = NULL,
- .func = _cb_content_prev_set,
+ .func = &_cb_content_prev_set,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -994,7 +1159,7 @@ static struct menu_def menu_material_2 = {
.end = NULL,
.footer = "Return to Main menu",
.footer_alt = NULL,
- .func = _cb_content_prev_set,
+ .func = &_cb_content_prev_set,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -1084,7 +1249,7 @@ static struct menu_def menu_material_customize = {
.end = NULL,
.footer = "Return to Main menu",
.footer_alt = NULL,
- .func = _cb_content_prev_set,
+ .func = &_cb_content_prev_set,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -1174,7 +1339,7 @@ static struct menu_def menu_settings_led = {
.item = {.type = LIST_ITEM_BUTTON},
.footer = "Return to Main menu",
.footer_alt = NULL,
- .func = _cb_content_prev_set,
+ .func = &_cb_content_prev_set,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -1183,7 +1348,7 @@ static struct menu_def menu_settings_led = {
.item = {.type = LIST_ITEM_BUTTON},
.footer = "100%",
.footer_alt = NULL,
- .func = _but_led_brightness_cb,
+ .func = _but_led_hue_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -1192,7 +1357,7 @@ static struct menu_def menu_settings_led = {
.item = {.type = LIST_ITEM_BUTTON},
.footer = "100%",
.footer_alt = NULL,
- .func = _but_led_brightness_cb,
+ .func = _but_led_saturation_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -1255,19 +1420,19 @@ static struct menu_def menu_print_tune = {
{
.icon = "user-home",
.label = "Return",
- .end = NULL,
+ .item = {.type = LIST_ITEM_BUTTON},
.footer = "Return to print",
.footer_alt = NULL,
- .func = _cb_content_prev_set,
+ .func = &_cb_content_prev_set,
.toggle_timer = NULL,
.data = NULL,
}, {
.icon = NULL,
.label = "Networking",
- .end = NULL,
+ .item = {.type = LIST_ITEM_BUTTON},
.footer = "IP: ",
.footer_alt = NULL,
- .func = _but_settings_network_cb,
+ .func = &_but_settings_network_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -1276,16 +1441,25 @@ static struct menu_def menu_print_tune = {
.end = NULL,
.footer = "100 %",
.footer_alt = NULL,
- .func = NULL,
+ .func = &_but_print_speed_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
.icon = NULL,
- .label = "Hotend temperature",
+ .label = "Hotend 1 temperature",
.end = NULL,
.footer = "210 °C",
.footer_alt = NULL,
- .func = NULL,
+ .func = &_but_hotend_heatup_0_cb,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Hotend 2 temperature",
+ .end = NULL,
+ .footer = "210 °C",
+ .footer_alt = NULL,
+ .func = &_but_hotend_heatup_1_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -1294,7 +1468,7 @@ static struct menu_def menu_print_tune = {
.end = NULL,
.footer = "60 °C",
.footer_alt = NULL,
- .func = NULL,
+ .func = &_but_bed_heatup_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -1303,7 +1477,7 @@ static struct menu_def menu_print_tune = {
.end = NULL,
.footer = "100 %",
.footer_alt = NULL,
- .func = NULL,
+ .func = &_but_fan_speed_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -1312,34 +1486,133 @@ static struct menu_def menu_print_tune = {
.end = NULL,
.footer = "100 %",
.footer_alt = NULL,
- .func = NULL,
+ .func = &_but_flow_rate_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
.icon = NULL,
- .label = "Retraction hotend",
+ .label = "Retraction material",
.end = NULL,
- .footer = "Up",
+ .footer = "Length/Speed",
.footer_alt = NULL,
- .func = NULL,
+ .func = &_but_retraction_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
.icon = NULL,
- .label = "LED Brightness",
+ .label = "LED Settings",
.end = NULL,
- .footer = "100 %",
+ .footer = "Change led settings",
.footer_alt = NULL,
- .func = NULL,
+ .func = &_but_settings_led_cb,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, { NULL }, /* sentinel */
+ },
+ .data = NULL,
+};
+
+static struct menu_def menu_retraction = {
+ .title = "RETRACTION",
+ .type = LIST_MENU,
+ .entry = {
+ {
+ .icon = "user-home",
+ .label = "Return",
+ .end = NULL,
+ .footer = "Return to Main menu",
+ .footer_alt = NULL,
+ .func = &_cb_content_prev_set,
.toggle_timer = NULL,
.data = NULL,
}, {
.icon = NULL,
- .label = "Material/Nozzle",
+ .label = "Retraction length",
.end = NULL,
- .footer = "PLA | PVA",
- .footer_alt = "RVS | Bronze",
- .func = NULL,
+ .footer = " mm",
+ .footer_alt = NULL,
+ .func = &_but_retraction_length_cb,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Retraction speed",
+ .end = NULL,
+ .footer = " mm / sec",
+ .footer_alt = NULL,
+ .func = &_but_retraction_speed_cb,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Retraction Z-hop",
+ .end = NULL,
+ .footer = " mm",
+ .footer_alt = NULL,
+ .func = &_but_retraction_zhop_cb,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, { NULL }, /* sentinel */
+ },
+ .data = NULL,
+};
+
+static struct menu_def menu_motion = {
+ .title = "MOTION",
+ .type = LIST_MENU,
+ .entry = {
+ {
+ .icon = "user-home",
+ .label = "Return",
+ .end = NULL,
+ .footer = "Return to Main menu",
+ .footer_alt = NULL,
+ .func = &_cb_content_prev_set,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "X/Y Jerk",
+ .end = NULL,
+ .footer = " mm",
+ .footer_alt = NULL,
+ .func = &_but_jerk_xy_cb,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Z Jerk",
+ .end = NULL,
+ .footer = " mm",
+ .footer_alt = NULL,
+ .func = &_but_jerk_z_cb,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "X/Y axis current",
+ .end = NULL,
+ .footer = " mA",
+ .footer_alt = NULL,
+ .func = &_but_current_xy_cb, /* TODO needs bitwise id for x/y/z */
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Z axis current",
+ .end = NULL,
+ .footer = " mA",
+ .footer_alt = NULL,
+ .func = &_but_current_z_cb,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Extruder current",
+ .end = NULL,
+ .footer = " mA",
+ .footer_alt = NULL,
+ .func = &_but_current_e_cb, /* XXX needs field with bitwise id for hotend/extruder */
.toggle_timer = NULL,
.data = NULL,
}, { NULL }, /* sentinel */
@@ -1359,7 +1632,7 @@ static struct menu_def menu_ = {
.end = NULL,
.footer = "Return to Main menu",
.footer_alt = NULL,
- .func = _cb_content_prev_set,
+ .func = &_cb_content_prev_set,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -1377,7 +1650,315 @@ static struct menu_def menu_ = {
};
#endif
-static void eulogium_print_data_clear(struct eulogium_data *eulogium)
+static struct settings_dial_data dial_led_hue = {
+ .label = N_("Hue"),
+ .step = 1.0,
+ .min = 0.0,
+ .max = 100.0,
+ .value = 12.3,
+ .value_end = 25.0,
+ .format = "%1.0f",
+ .format_end = " | %1.0f%s",
+ .unit = "%",
+ //.method_set = "SetHue",
+ //.method_get = "GetHue",
+};
+
+static struct settings_dial_data dial_led_saturation = {
+ .label = N_("Saturation"),
+ .step = 1.0,
+ .min = 0.0,
+ .max = 100.0,
+ .value = 4.56,
+ .value_end = 25.0,
+ .format = "%1.0f",
+ .format_end = " | %1.0f%s",
+ .unit = "%",
+ //.method_set = "SetSaturation",
+ //.method_get = "GetSaturation",
+};
+
+static struct settings_dial_data dial_led_brightness = {
+ .label = N_("Brightness"),
+ .step = 1.0,
+ .min = 0.0,
+ .max = 100.0,
+ .value = 7.89,
+ .value_end = 25.0,
+ .format = "%1.0f",
+ .format_end = " | %1.0f%s",
+ .unit = "%",
+ //.method_set = "SetBrightness",
+ //.method_get = "GetBrightness",
+};
+
+static struct print_data progressbars[] = {
+ [PROC_PRINT] = {
+ .title = LABEL_PROC_PRINT,
+ .status = NULL,
+ .jobname = NULL,
+ .time = 0,
+ .total_time = 0,
+ .value = 0.0,
+ .proc_key = PROC_PRINT,
+ },
+ [PROC_FIRMWARE_UPDATE] = {
+ .title = LABEL_PROC_FIRMWARE_UPDATE,
+ .status = NULL,
+ .jobname = NULL,
+ .time = 0,
+ .total_time = 0,
+ .value = 0.0,
+ .proc_key = PROC_FIRMWARE_UPDATE,
+ },
+};
+
+static struct settings_dial_data dials[] = {
+ /* TODO maybe use a title and label, where label is generally NULL */
+ [PROC_BED_MOVE] = {
+ .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 */
+ .value = 0.0,
+ .value_end = 0.0, /* Unused with this dial */
+ .format = "", /* Unused with this dial */
+ .format_end = "", /* Unused with this dial */
+ .unit = "", /* Unused with this dial */
+ .method_set = &procedure_target_set,
+ .method_get = &procedure_metadata_key_get,
+ .proc_key = PROC_BED_MOVE,
+ },
+ [PROC_BED_HEATUP] = {
+ .label = N_("Buildplate temperature"),
+ .step = 1.0,
+ .min = 0.0,
+ .max = 60.0,
+ .value = 0.0,
+ .value_end = 0.0,
+ .format = "%1.1f",
+ .format_end = " | %1.0f%s",
+ .unit = " °C",
+ .method_set = &procedure_target_set,
+ .method_get = &procedure_metadata_key_get,
+ .proc_key = PROC_BED_HEATUP,
+ },
+ [PROC_HOTEND_HEATUP_0] = {
+ .label = N_("Hotend 1 temperature"),
+ .step = 1.0,
+ .min = 0.0,
+ .max = 300.0,
+ .value = 0.0,
+ .value_end = 0.0,
+ .format = "%1.1f",
+ .format_end = " | %1.0f%s",
+ .unit = " °C",
+ .method_set = &procedure_target_set, /* XXX use ampersant improve of functions */
+ .method_get = &procedure_metadata_key_get,
+ .proc_key = PROC_HOTEND_HEATUP_0,
+ },
+ [PROC_HOTEND_HEATUP_1] = {
+ .label = N_("Hotend 2 temperature"),
+ .step = 1.0,
+ .min = 0.0,
+ .max = 300.0,
+ .value = 0.0,
+ .value_end = 0.0,
+ .format = "%1.1f",
+ .format_end = " | %1.0f%s",
+ .unit = " °C",
+ .method_set = &procedure_target_set, /* XXX use ampersant improve of functions */
+ .method_get = &procedure_metadata_key_get,
+ .proc_key = PROC_HOTEND_HEATUP_1,
+ },
+ [PROC_PRINT_SPEED] = {
+ .label = N_("Print speed"),
+ .step = 10.0,
+ .min = 10.0,
+ .max = 1000.0,
+ .value = 0.0,
+ .value_end = 0.0,
+ .format = "%1.1f",
+ .format_end = " | %1.0f%s",
+ .unit = "%",
+ .method_set = &procedure_target_set,
+ .method_get = &procedure_metadata_key_get,
+ .proc_key = PROC_PRINT_SPEED,
+ },
+ [PROC_FAN_SPEED] = {
+ .label = N_("Fan speed"),
+ .step = 1.0,
+ .min = 0.0,
+ .max = 100.0,
+ .value = 0.0,
+ .value_end = 0.0,
+ .format = "%1.0f",
+ .format_end = " | %1.0f%s",
+ .unit = "%",
+ .method_set = &procedure_target_set,
+ .method_get = &procedure_metadata_key_get,
+ .proc_key = PROC_FAN_SPEED,
+ },
+ [PROC_FLOW_RATE] = {
+ .label = N_("Material flow rate"),
+ .step = 1.0,
+ .min = 0.0,
+ .max = 100.0,
+ .value = 0.0,
+ .value_end = 0.0,
+ .format = "%1.0f",
+ .format_end = " | %1.0f%s",
+ .unit = "%",
+ .method_set = &procedure_target_set,
+ .method_get = &procedure_metadata_key_get,
+ .proc_key = PROC_FLOW_RATE,
+ },
+ [PROC_RETRACTION_LENGTH] = {
+ .label = N_("Retraction length"),
+ .step = 0.1,
+ .min = 3.0,
+ .max = 20.0,
+ .value = 0.0,
+ .value_end = 0.0,
+ .format = "%1.1f",
+ .format_end = " | %1.0f%s",
+ .unit = " mm",
+ .method_set = &procedure_target_set,
+ .method_get = &procedure_metadata_key_get,
+ .proc_key = PROC_RETRACTION_LENGTH,
+ },
+ [PROC_RETRACTION_SPEED] = {
+ .label = N_("Retraction speed"),
+ .step = 1.0,
+ .min = 1.0,
+ .max = 150.0,
+ .value = 0.0,
+ .value_end = 0.0,
+ .format = "%1.1f",
+ .format_end = " | %1.0f%s",
+ .unit = " mm / s",
+ .method_set = &procedure_target_set,
+ .method_get = &procedure_metadata_key_get,
+ .proc_key = PROC_RETRACTION_SPEED,
+ },
+ [PROC_RETRACTION_ZHOP] = {
+ .label = N_("Retraction Z-hop"),
+ .step = 0.1,
+ .min = 0.0,
+ .max = 10.0,
+ .value = 0.0,
+ .value_end = 0.0,
+ .format = "%1.1f",
+ .format_end = " | %1.0f%s",
+ .unit = " mm",
+ .method_set = &procedure_target_set,
+ .method_get = &procedure_metadata_key_get,
+ .proc_key = PROC_RETRACTION_ZHOP,
+ },
+ [PROC_MATERIAL_MOVE_0] = {
+ /* TODO maybe use a title and label, where label is generally NULL */
+ .label = N_("Move material<br>Rotate the knob<br>CW to feed<br>CCW to retract"),
+ .step = 1.0,
+ .min = 0.0, /* Unused with this dial */
+ .max = 0.0, /* Unused with this dial */
+ .value = 0.0,
+ .value_end = 0.0, /* Unused with this dial */
+ .format = "", /* Unused with this dial */
+ .format_end = "", /* Unused with this dial */
+ .unit = "", /* Unused with this dial */
+ .method_set = &procedure_target_set,
+ .method_get = NULL,
+ .proc_key = PROC_MATERIAL_MOVE_0,
+ },
+ [PROC_MATERIAL_MOVE_1] = {
+ /* TODO maybe use a title and label, where label is generally NULL */
+ .label = N_("Move material<br>Rotate the knob<br>CW to feed<br>CCW to retract"),
+ .step = 1.0,
+ .min = 0.0, /* Unused with this dial */
+ .max = 0.0, /* Unused with this dial */
+ .value = 0.0,
+ .value_end = 0.0, /* Unused with this dial */
+ .format = "", /* Unused with this dial */
+ .format_end = "", /* Unused with this dial */
+ .unit = "", /* Unused with this dial */
+ .method_set = &procedure_target_set,
+ .method_get = NULL,
+ .proc_key = PROC_MATERIAL_MOVE_1,
+ },
+ [PROC_JERK_XY] = {
+ .label = N_("X/Y jerk"),
+ .step = 1.0,
+ .min = 0.0,
+ .max = 100.0,
+ .value = 0.0,
+ .value_end = 0.0,
+ .format = "%1.0f",
+ .format_end = " | %1.0f%s",
+ .unit = " mm",
+ .method_set = &procedure_target_set,
+ .method_get = &procedure_metadata_key_get,
+ .proc_key = PROC_JERK_XY,
+ },
+ [PROC_JERK_Z] = {
+ .label = N_("Z jerk"),
+ .step = 1.0,
+ .min = 0.0,
+ .max = 100.0,
+ .value = 0.0,
+ .value_end = 0.0,
+ .format = "%1.0f",
+ .format_end = " | %1.0f%s",
+ .unit = " mm",
+ .method_set = &procedure_target_set,
+ .method_get = &procedure_metadata_key_get,
+ .proc_key = PROC_JERK_Z,
+ },
+ [PROC_CURRENT_XY] = {
+ .label = N_("X/Y axis current"),
+ .step = 1.0,
+ .min = 0.0,
+ .max = 100.0,
+ .value = 0.0,
+ .value_end = 0.0,
+ .format = "%1.0f",
+ .format_end = " | %1.0f%s",
+ .unit = " mm",
+ .method_set = &procedure_target_set,
+ .method_get = &procedure_metadata_key_get,
+ .proc_key = PROC_CURRENT_XY,
+ },
+ [PROC_CURRENT_Z] = {
+ .label = N_("Z axis current"),
+ .step = 1.0,
+ .min = 0.0,
+ .max = 100.0,
+ .value = 0.0,
+ .value_end = 0.0,
+ .format = "%1.0f",
+ .format_end = " | %1.0f%s",
+ .unit = " mm",
+ .method_set = &procedure_target_set,
+ .method_get = &procedure_metadata_key_get,
+ .proc_key = PROC_CURRENT_Z,
+ },
+ [PROC_CURRENT_E] = {
+ .label = N_("Extruder current"),
+ .step = 1.0,
+ .min = 0.0,
+ .max = 100.0,
+ .value = 0.0,
+ .value_end = 0.0,
+ .format = "%1.0f",
+ .format_end = " | %1.0f%s",
+ .unit = " mm",
+ .method_set = &procedure_target_set,
+ .method_get = &procedure_metadata_key_get,
+ .proc_key = PROC_CURRENT_E,
+ }, { NULL }, /* sentinel */
+};
+
+void eulogium_print_data_clear(struct eulogium_data *eulogium)
{
if (eulogium->progress_data_refresh)
ecore_timer_del(eulogium->progress_data_refresh);
@@ -1389,15 +1970,12 @@ static void eulogium_print_data_clear(struct eulogium_data *eulogium)
// if (eulogium->print.name)
// free(eulogium->print.name);
- eulogium->print.name = NULL;
- eulogium->print.name_changed = EINA_FALSE;
+ eulogium->print.jobname = NULL;
+ print_clear(eulogium->procedures[PROC_PRINT].meta);
// if (eulogium->print.file)
// free(eulogium->print.file);
eulogium->print.url = NULL;
- eulogium->print.time = 0;
- eulogium->print.material = 0;
- eulogium->print.progress = 0;
eulogium->print.flags = "";
}
@@ -1425,15 +2003,7 @@ static void _on_print_abort_ret(void *data, const Eldbus_Message *msg, Eldbus_Pe
static void _cb_content_prev_set(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
- struct eulogium_data *eulogium = data;
- uint_fast8_t list_size;
-
- printf("prev ret\n");
- list_size = eina_list_count(elm_naviframe_items_get(eulogium->navi));
- if (list_size < 2)
- printf("Not popping last item cowboy\n"); /* TODO, use proper debug construct */
- else
- elm_naviframe_item_pop(eulogium->navi);
+ ui_stack_pop_cb(data, obj, event_info); /* XXX replace content_prev calls with ui_stack_pop */
}
static void _print_abort_confirm_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1441,10 +2011,8 @@ static void _print_abort_confirm_cb(void *data, Evas_Object *obj EINA_UNUSED, vo
struct eulogium_data *eulogium = data;
Evas_Object *content;
- content = eulogium_menu_confirm(eulogium->navi, gettext_noop("<br>Abort the print?"), "No", &but_print_abort);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ content = eulogium_menu_confirm(eulogium->navi, N_("<br>Abort the print?"), "No", &but_print_abort);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _print_abort_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1470,9 +2038,7 @@ static void _but_system_maintenance_cb(void *data, Evas_Object *obj EINA_UNUSED,
printf("But sys maint\n");
content = menu_widget_list(eulogium, eulogium->navi, &menu_system_maintenance);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _but_material_change_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1482,9 +2048,7 @@ static void _but_material_change_cb(void *data EINA_UNUSED, Evas_Object *obj EIN
printf("But material change\n");
content = eulogium_tripple_button_menu(eulogium->navi, &but_change_material_1, &but_change_material_2, &but_return);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _but_material_settings_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1494,9 +2058,7 @@ static void _but_material_settings_cb(void *data EINA_UNUSED, Evas_Object *obj E
printf("But material settings\n");
content = eulogium_tripple_button_menu(eulogium->navi, &but_settings_material_1, &but_settings_material_2, &but_return);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _but_hotend_change_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1506,9 +2068,7 @@ static void _but_hotend_change_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_
printf("But hotend change\n");
content = eulogium_tripple_button_menu(eulogium->navi, &but_change_hotend_1, &but_change_hotend_2, &but_return);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _but_hotend_settings_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1518,9 +2078,7 @@ static void _but_hotend_settings_cb(void *data EINA_UNUSED, Evas_Object *obj EIN
printf("But hotend settings\n");
content = eulogium_tripple_button_menu(eulogium->navi, &but_settings_hotend_1, &but_settings_hotend_2, &but_return);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _but_main_system_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1530,45 +2088,38 @@ static void _but_main_system_cb(void *data, Evas_Object *object EINA_UNUSED, voi
printf("Button system pressed\n");
content = eulogium_tripple_button_menu(eulogium->navi, &but_system_settings, &but_system_maintenance, &but_return);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
-}
-
-static void menu_widget_list_push(struct eulogium_data *eulogium, struct menu_def *file)
-{
- Evas_Object *content;
-
- content = menu_widget_list(eulogium, eulogium->navi, file);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void menu_wifi_list(struct eulogium_data *eulogium)
{
+ Evas_Object *content;
struct menu_def *wifi_list;
wifi_list = malloc(sizeof(struct menu_def)); /* XXX memleak here. free on pop */
wifi_list->title = _("Wifi Networks");
wifi_list->type = LIST_WIFI;
- menu_widget_list_push(eulogium, wifi_list);
+ content = menu_widget_list(eulogium, eulogium->navi, wifi_list);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void menu_internal_storage(struct eulogium_data *eulogium)
{
+ Evas_Object *content;
struct menu_def *menu_internal_storage;
menu_internal_storage = malloc(sizeof(struct menu_def)); /* XXX meamleak here. This needs to be free-ed when we pop this screen */
menu_internal_storage->title = "Internal storage";
menu_internal_storage->type = LIST_FILE;
menu_internal_storage->dir.path = "/home"; /* TODO, use variable for internal storage */
- menu_widget_list_push(eulogium, menu_internal_storage);
+ content = menu_widget_list(eulogium, eulogium->navi, menu_internal_storage);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void menu_usb_storage(struct eulogium_data *eulogium)
{
+ Evas_Object *content;
struct menu_def *menu_usb_storage;
struct mount_data *mount;
char *mount_point;
@@ -1589,7 +2140,8 @@ static void menu_usb_storage(struct eulogium_data *eulogium)
menu_usb_storage->type = LIST_FILE;
menu_usb_storage->dir.path = malloc(mount_len);
strncpy(menu_usb_storage->dir.path, mount_point, mount_len);
- menu_widget_list_push(eulogium, menu_usb_storage);
+ content = menu_widget_list(eulogium, eulogium->navi, menu_usb_storage);
+ ui_stack_push(eulogium, content, PAGE_USB);
}
static void _network_wifi_manage_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1625,9 +2177,7 @@ static void _cb_button_main_print(void *data, Evas_Object *object EINA_UNUSED, v
content = eulogium_tripple_button_menu(eulogium->navi, &but_print_local, &but_print_mmc, &but_return);
if (eeze_disk_type_get(mount->disk) == EEZE_DISK_TYPE_USB)
content = eulogium_tripple_button_menu(eulogium->navi, &but_print_local, &but_print_usb, &but_return);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
}
@@ -1639,9 +2189,7 @@ static void _but_settings_network_cb(void *data, Evas_Object *obj EINA_UNUSED, v
printf("But settings network settings\n");
content = menu_widget_list(eulogium, eulogium->navi, &menu_settings_network);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _but_system_settings_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1651,9 +2199,7 @@ static void _but_system_settings_cb(void *data, Evas_Object *obj EINA_UNUSED, vo
printf("But system settings settings\n");
content = menu_widget_list(eulogium, eulogium->navi, &menu_system_settings);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _but_settings_hotend_1_offset_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1663,9 +2209,7 @@ static void _but_settings_hotend_1_offset_cb(void *data, Evas_Object *obj EINA_U
printf("But settings hotend 1 offset settings\n");
content = menu_widget_list(eulogium, eulogium->navi, &menu_settings_hotend_1_offset);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _but_settings_hotend_2_offset_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1675,9 +2219,7 @@ static void _but_settings_hotend_2_offset_cb(void *data, Evas_Object *obj EINA_U
printf("But settings hotend 2 offset settings\n");
content = menu_widget_list(eulogium, eulogium->navi, &menu_settings_hotend_2_offset);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _but_settings_language_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1687,9 +2229,7 @@ static void _but_settings_language_cb(void *data, Evas_Object *obj EINA_UNUSED,
printf("But menu language settings\n");
content = menu_widget_list(eulogium, eulogium->navi, &menu_settings_language);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _but_settings_led_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1702,13 +2242,253 @@ static void _but_settings_led_cb(void *data, Evas_Object *obj EINA_UNUSED, void
ui_stack_push(eulogium, content, PAGE_NORMAL);
}
+static void _but_led_hue_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content;
+
+ printf("Button led_hue pressed\n");
+ content = ui_widget_dial(eulogium->navi, eulogium, &dial_led_hue);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+}
+
+static void _but_led_saturation_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content;
+
+ printf("Button led_saturation pressed\n");
+ content = ui_widget_dial(eulogium->navi, eulogium, &dial_led_saturation);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+}
+
static void _but_led_brightness_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
{
struct eulogium_data *eulogium = data;
Evas_Object *content;
printf("Button led_brightness pressed\n");
- content = eulogium_settings_dial(eulogium->navi, eulogium);
+ content = ui_widget_dial(eulogium->navi, eulogium, &dial_led_brightness);
+ ui_stack_push(eulogium, content, PAGE_PRINTING);
+}
+
+static void _but_bed_heatup_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content;
+
+ printf("Button bed temperature pressed\n");
+ content = ui_widget_dial(eulogium->navi, eulogium, &dials[PROC_BED_HEATUP]);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+}
+
+static void _but_hotend_heatup_0_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content;
+
+ printf("Button hotend 1 temperature pressed\n");
+ content = ui_widget_dial(eulogium->navi, eulogium, &dials[PROC_HOTEND_HEATUP_0]);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+}
+
+static void _but_hotend_heatup_1_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content;
+
+ printf("Button hotend 2 temperature pressed\n");
+ content = ui_widget_dial(eulogium->navi, eulogium, &dials[PROC_HOTEND_HEATUP_1]);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+}
+
+static void _but_hotend_active_set_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ printf("But hotend_active_set\n");
+ procedure_start_simple(PROC_HOTEND_ACTIVE_SET);
+}
+
+static void _but_print_speed_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content;
+
+ printf("Button print speed pressed\n");
+ content = ui_widget_dial(eulogium->navi, eulogium, &dials[PROC_PRINT_SPEED]);
+ ui_stack_push(eulogium, content, PAGE_PRINTING);
+}
+
+static void _but_fan_speed_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content;
+
+ printf("Button fan speed pressed\n");
+ content = ui_widget_dial(eulogium->navi, eulogium, &dials[PROC_FAN_SPEED]);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+}
+
+static void _but_flow_rate_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content;
+
+ printf("Button material flow pressed\n");
+ content = ui_widget_dial(eulogium->navi, eulogium, &dials[PROC_FLOW_RATE]);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+}
+
+static void _but_retraction_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content = NULL;
+
+ printf("But menu retraction\n");
+ content = menu_widget_list(eulogium, eulogium->navi, &menu_retraction);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+}
+
+static void _but_retraction_length_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content = NULL;
+
+ printf("But retraction length\n");
+ content = ui_widget_dial(eulogium->navi, eulogium, &dials[PROC_RETRACTION_LENGTH]);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+}
+
+static void _but_retraction_speed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content = NULL;
+
+ printf("But retraction speed\n");
+ content = ui_widget_dial(eulogium->navi, eulogium, &dials[PROC_RETRACTION_SPEED]);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+}
+
+static void _but_retraction_zhop_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content = NULL;
+
+ printf("But retraction zhop\n");
+ content = ui_widget_dial(eulogium->navi, eulogium, &dials[PROC_RETRACTION_ZHOP]);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+}
+
+static void _but_bed_level_auto_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ printf("But bed level auto\n");
+ procedure_start_simple(PROC_BED_LEVEL_AUTO);
+}
+
+static void _but_bed_raise_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ printf("But bed raise\n");
+ procedure_start_simple(PROC_BED_RAISE);
+}
+
+static void _but_bed_home_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ printf("But bed home\n");
+ procedure_start_simple(PROC_BED_HOME);
+}
+
+static void _but_head_home_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ printf("But head home\n");
+ procedure_start_simple(PROC_HEAD_HOME);
+}
+
+static void _but_bed_move_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content = NULL;
+
+ printf("But bed move\n");
+ content = ui_widget_rotator(eulogium->navi, eulogium, &dials[PROC_BED_MOVE]);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+}
+
+static void _but_material_move_0_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content = NULL;
+
+ printf("But move material 0\n");
+ content = ui_widget_rotator(eulogium->navi, eulogium, &dials[PROC_MATERIAL_MOVE_0]);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+}
+
+static void _but_material_move_1_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content = NULL;
+
+ printf("But move material 1\n");
+ content = ui_widget_rotator(eulogium->navi, eulogium, &dials[PROC_MATERIAL_MOVE_1]);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+}
+
+static void _but_motion_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content = NULL;
+
+ printf("But menu motion\n");
+ content = menu_widget_list(eulogium, eulogium->navi, &menu_motion);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+}
+
+static void _but_jerk_xy_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content = NULL;
+
+ printf("But jerk xy\n");
+ content = ui_widget_dial(eulogium->navi, eulogium, &dials[PROC_JERK_XY]);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+}
+
+static void _but_jerk_z_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content = NULL;
+
+ printf("But jerk z\n");
+ content = ui_widget_dial(eulogium->navi, eulogium, &dials[PROC_JERK_Z]);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+}
+
+static void _but_current_xy_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content = NULL;
+
+ printf("But current xy\n");
+ content = ui_widget_dial(eulogium->navi, eulogium, &dials[PROC_CURRENT_XY]);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+}
+
+static void _but_current_z_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content = NULL;
+
+ printf("But current z\n");
+ content = ui_widget_dial(eulogium->navi, eulogium, &dials[PROC_CURRENT_Z]);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+}
+
+static void _but_current_e_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content = NULL;
+
+ printf("But current e\n");
+ content = ui_widget_dial(eulogium->navi, eulogium, &dials[PROC_CURRENT_E]);
ui_stack_push(eulogium, content, PAGE_NORMAL);
}
@@ -1721,10 +2501,11 @@ static char *parse_networks_for_display(struct network_data *networks)
if (!networks)
return NULL;
- for (i = 0; networks[i].obj_path; i++) {
- buf = realloc(buf, pos + 34 * sizeof(char *));
- pos += sprintf(buf + pos, "%s%s IP: %s", i == 0 ? "": "<br>", (networks[i].tech == TECH_ETHERNET) ? "Ethernet" : (networks[i].tech == TECH_WIFI) ? "WiFi" : "", networks[i].ipv4);
- }
+ for (i = 0; networks[i].obj_path; i++)
+ if (networks[i].ipv4) { // TODO || networks[i].ipv6) /* XXX if ipv4 exists, but is '', this will still print an empty field. */
+ buf = realloc(buf, pos + 34 * sizeof(char *));
+ pos += sprintf(buf + pos, "%s%s IP: %s", i == 0 ? "": "<br>", (networks[i].tech == TECH_ETHERNET) ? "Ethernet" : (networks[i].tech == TECH_WIFI) ? "WiFi" : "", networks[i].ipv4);
+ }
return buf;
}
@@ -1735,11 +2516,7 @@ static void _but_network_info_cb(void *data, Evas_Object *obj EINA_UNUSED, void
Evas_Object *content, *_top, *_bottom;
char *buf;
- /* XXX Quick hack to make the adv feature a little more useful, this needs to be made much better! */
- _top = elm_box_add(eulogium->navi);
- evas_object_show(_top);
-
- _top = elm_label_add(eulogium->navi); /* TODO, dynamically update IPs */
+ _top = elm_label_add(eulogium->navi); /* TODO, dynamically update IPs, requires 'redrawing' of some sort */
buf = parse_networks_for_display(eulogium->networks);
elm_object_text_set(_top, buf);
free(buf);
@@ -1750,10 +2527,26 @@ static void _but_network_info_cb(void *data, Evas_Object *obj EINA_UNUSED, void
evas_object_smart_callback_add(_bottom, "clicked", but_return.cb.func, but_return.cb.data);
evas_object_show(_bottom);
-// elm_naviframe_item_simple_push(eulogium->navi, box);
content = eulogium_split_screen(eulogium->navi, _top, _bottom);
- if (content)
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+}
+
+static void _but_software_version_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = data;
+ Evas_Object *content, *_top, *_bottom;
+
+ _top = elm_label_add(eulogium->navi); /* TODO, dynamically update IPs, requires 'redrawing' of some sort */
+ elm_object_text_set(_top, PACKAGE_VERSION);
+ evas_object_show(_top);
+
+ _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);
}
static void _but_main_mathot_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1764,9 +2557,7 @@ static void _but_main_mathot_cb(void *data, Evas_Object *object EINA_UNUSED, voi
printf("Button matts pressed\n");
content = eulogium_tripple_button_menu(eulogium->navi, &but_mathot_material, &but_mathot_hotend, &but_return);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _but_settings_material_1_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1777,9 +2568,7 @@ static void _but_settings_material_1_cb(void *data, Evas_Object *object EINA_UNU
printf("Button matts settings 1 pressed\n");
content = menu_widget_list(eulogium, eulogium->navi, &menu_material_1);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _but_settings_material_2_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1790,9 +2579,7 @@ static void _but_settings_material_2_cb(void *data, Evas_Object *object EINA_UNU
printf("Button matts settings 2 pressed\n");
content = menu_widget_list(eulogium, eulogium->navi, &menu_material_2);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _but_material_customize_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1803,9 +2590,7 @@ static void _but_material_customize_cb(void *data, Evas_Object *object EINA_UNUS
printf("Button matts customize pressed\n");
content = menu_widget_list(eulogium, eulogium->navi, &menu_material_customize);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _but_print_tune_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1816,9 +2601,7 @@ static void _but_print_tune_cb(void *data, Evas_Object *object EINA_UNUSED, void
printf("Button print tune pressed\n");
content = menu_widget_list(eulogium, eulogium->navi, &menu_print_tune);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_PRINTING);
}
static void _but_change_material_1_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1829,9 +2612,7 @@ static void _but_change_material_1_cb(void *data, Evas_Object *object EINA_UNUSE
printf("Button matts change 1 pressed\n");
content = eulogium_tripple_button_menu(eulogium->navi, &but_return, &but_return, &but_return);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _but_change_material_2_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1842,9 +2623,7 @@ static void _but_change_material_2_cb(void *data, Evas_Object *object EINA_UNUSE
printf("Button matts change 2 pressed\n");
content = eulogium_tripple_button_menu(eulogium->navi, &but_return, &but_return, &but_return);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _but_mathot_material_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1855,9 +2634,7 @@ static void _but_mathot_material_cb(void *data, Evas_Object *object EINA_UNUSED,
printf("Button mathot material pressed\n");
content = eulogium_tripple_button_menu(eulogium->navi, &but_material_change, &but_material_settings, &but_return);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _but_mathot_hotend_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1868,9 +2645,7 @@ static void _but_mathot_hotend_cb(void *data, Evas_Object *object EINA_UNUSED, v
printf("Button mathot hotend pressed\n");
content = eulogium_tripple_button_menu(eulogium->navi, &but_hotend_change, &but_hotend_settings, &but_return);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _but_settings_hotend_1_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1881,9 +2656,7 @@ static void _but_settings_hotend_1_cb(void *data, Evas_Object *object EINA_UNUSE
printf("Button hotend settings 1 pressed\n");
content = menu_widget_list(eulogium, eulogium->navi, &menu_settings_hotend_1_offset);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _but_settings_hotend_2_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1894,9 +2667,7 @@ static void _but_settings_hotend_2_cb(void *data, Evas_Object *object EINA_UNUSE
printf("Button hotend settings 2 pressed\n");
content = menu_widget_list(eulogium, eulogium->navi, &menu_settings_hotend_1_offset);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _but_change_hotend_1_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1907,9 +2678,7 @@ static void _but_change_hotend_1_cb(void *data, Evas_Object *object EINA_UNUSED,
printf("Button hotend change 1 pressed\n");
content = eulogium_tripple_button_menu(eulogium->navi, &but_return, &but_return, &but_return);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
static void _but_change_hotend_2_cb(void *data, Evas_Object *object EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -1920,9 +2689,7 @@ static void _but_change_hotend_2_cb(void *data, Evas_Object *object EINA_UNUSED,
printf("Button matts change 2 pressed\n");
content = eulogium_tripple_button_menu(eulogium->navi, &but_return, &but_return, &but_return);
- if (!content)
- return;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
}
void eulogium_button_cb_set(struct button_def *button, struct button_cb *cb)
@@ -1955,29 +2722,12 @@ void eulogium_print_data_set(struct eulogium_data *eulogium, char *filepath)
buf = malloc(buf_size); /* TODO: remember to free this later! */
snprintf(buf, buf_size, "file://%s", filepath);
eulogium->print.url = buf;
- eulogium->print.name = ecore_file_strip_ext(ecore_file_file_get(filepath));
+ eulogium->print.jobname = ecore_file_strip_ext(ecore_file_file_get(filepath));
eulogium->print.flags = "";
eulogium->print.material = 100.23; /* TODO */
eulogium->print.time = 12;
}
-/* Function to make the Z-axis of any wheel focus the next/previous focusable widget */
-static void _cb_eulogium_input_wheel(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
-{
- Evas_Event_Mouse_Wheel *ev = event_info;
- Ecore_Event *event = NULL;
-
- if (ev->z > 0) {
- elm_object_focus_next((Evas_Object *)data, ELM_FOCUS_NEXT);
- event = ecore_event_add(INPUT_MOUSE_WHEEL_DOWN, NULL, NULL, NULL);
- } else {
- elm_object_focus_next((Evas_Object *)data, ELM_FOCUS_PREVIOUS);
- event = ecore_event_add(INPUT_MOUSE_WHEEL_UP, NULL, NULL, NULL);
- }
- if (!event)
- EINA_LOG_ERR("Wheel event failed to queue.");
-}
-
static void _cb_eulogium_exit(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
elm_exit();
@@ -2015,117 +2765,33 @@ struct _status_msg {
char *s;
};
-static void eulogium_printer_status_set(struct eulogium_data *eulogium, struct _status_msg *status);
-
-static void _on_get_status_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
-{
- const char *errname, *errmsg;
- struct eulogium_data *eulogium = data;
- char *state;
- struct _status_msg status;
-
- if (eldbus_message_error_get(msg, &errname, &errmsg)) {
- EINA_LOG_ERR("%s %s", errname, errmsg);
- status.i = ERROR;
- status.s = griffin_print_status[ERROR];
- } else if (!eldbus_message_arguments_get(msg, "s", &state)) {
- EINA_LOG_ERR("Message content does not match expected \"s\" signature.");
- status.i = ERROR;
- status.s = griffin_print_status[ERROR];
- } else if (!strncmp(state, "DISCONNECTED", 12)) { /* XXX replace this with something better and maintainable, function, LUT etc */
- status.i = DISCONNECTED;
- status.s = griffin_print_status[DISCONNECTED];
- } else if (!strncmp(state, "ERROR", 5)) {
- status.i = ERROR;
- status.s = griffin_print_status[ERROR];
- } else if (!strncmp(state, "FIRST_RUN_WIZZARD", 17)) {
- status.i = FIRST_RUN_WIZZARD;
- status.s = griffin_print_status[FIRST_RUN_WIZZARD];
- } else if (!strncmp(state, "IDLE", 4)) {
- status.i = IDLE;
- status.s = griffin_print_status[IDLE];
- } else if (!strncmp(state, "SLICING", 7)) {
- status.i = SLICING;
- status.s = griffin_print_status[SLICING];
- } else if (!strncmp(state, "HEATING", 7)) {
- status.i = HEATING;
- status.s = griffin_print_status[HEATING];
- } else if (!strncmp(state, "PRINTING", 8)) {
- status.i = PRINTING;
- status.s = griffin_print_status[PRINTING];
- } else if (!strncmp(state, "COOLING", 7)) {
- status.i = COOLING;
- status.s = griffin_print_status[COOLING];
- } else if (!strncmp(state, "WAIT_FOR_REMOVAL", 16)) {
- status.i = WAIT_FOR_REMOVAL;
- status.s = griffin_print_status[WAIT_FOR_REMOVAL];
- } else if (!strncmp(state, "PAUSED", 6)) {
- status.i = PAUSED;
- status.s = griffin_print_status[PAUSED];
- } else {
- status.i = UNKNOWN;
- status.s = griffin_print_status[UNKNOWN];
- }
- eulogium_printer_status_set(eulogium, &status);
-}
-
-static void _on_get_progress_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
-{
- const char *errname, *errmsg;
- double *progress = data;
-
- if (eldbus_message_error_get(msg, &errname, &errmsg)) {
- EINA_LOG_ERR("%s %s", errname, errmsg);
- return;
- }
- if (!eldbus_message_arguments_get(msg, "d", progress)) {
- EINA_LOG_ERR("Failed to get print progress.");
- return;
- }
-}
-
-static void _on_get_time_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
-{
- const char *errname, *errmsg;
- uint_fast32_t *time = data;
-
- if (eldbus_message_error_get(msg, &errname, &errmsg)) {
- EINA_LOG_ERR("%s %s", errname, errmsg);
- return;
- }
- if (!eldbus_message_arguments_get(msg, "u", time)) {
- EINA_LOG_ERR("Failed to get remaining print time.");
- return;
- }
-}
-
static Eina_Bool _timer_progress_data_update_cb(void *data)
{
struct eulogium_data *eulogium = data;
static enum printer_status status = -1;
- static double progress = 0;
+ static double value = 0;
static double time = -1;
- //eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getProgress", _on_get_progress_ret, &eulogium->print.progress, 2, "");
- //eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getTime", _on_get_time_ret, &eulogium->print.time, 2, "");
+ procedure_metadata_key_get(PROC_PRINT);
+ /* XXX This is an ugly hack that doesn't even work to abort the timer, we need to refactor this into something sensible
+ * Basically we want to stop this time whenever the item gets removed from the stack via the
+ * clean/free callback. */
+ if ((!eulogium->status) && (!eulogium->progress) && (!eulogium->name) && (!eulogium->time))
+ return ECORE_CALLBACK_CANCEL;
if (eulogium->printer.status != status) {
- elm_object_text_set(eulogium->status, _(griffin_print_status[eulogium->printer.status]));
+ elm_object_text_set(eulogium->status, "TODO (step key)");
if (eulogium->printer.status == COOLING)
elm_progressbar_inverted_set(eulogium->progress, EINA_TRUE);
status = eulogium->printer.status;
}
- if (eulogium->print.progress != progress) {
- elm_progressbar_value_set(eulogium->progress, eulogium->print.progress);
- progress = eulogium->print.progress;
- }
- if (eulogium->print.name_changed == EINA_TRUE) {
- elm_object_text_set(eulogium->name, _(eulogium->print.name));
- eulogium->print.name_changed = EINA_FALSE;
+ if (eulogium->print.value != value) {
+ elm_progressbar_value_set(eulogium->progress, eulogium->print.value);
+ value = eulogium->print.value;
}
if (eulogium->print.time != time) {
char buf[255], *str;
- uint_fast32_t time = 0;
+ int_fast32_t time = 0;
if (eulogium->print.time < 1) {
str = "Print time unknown";
@@ -2195,7 +2861,7 @@ static Eina_Bool _timer_print_unblock_cb(void *data)
}
}
-Evas_Object *eulogium_print_ignore(struct eulogium_data *eulogium)
+Evas_Object *eulogium_print_ignore(struct eulogium_data *eulogium) /* TODO pass print_data struct */
{
Evas_Object *_top, *_bottom;
@@ -2218,7 +2884,7 @@ Evas_Object *eulogium_print_ignore(struct eulogium_data *eulogium)
evas_object_show(eulogium->time);
elm_box_pack_end(_top, eulogium->time);
- eulogium->progress = elm_progressbar_add(_top); /* TODO: depending on i18n sig, change inverted */
+ eulogium->progress = elm_progressbar_add(_top);
elm_progressbar_horizontal_set(eulogium->progress, EINA_TRUE);
elm_progressbar_pulse_set(eulogium->progress, EINA_FALSE);
elm_progressbar_pulse(eulogium->progress, EINA_FALSE);
@@ -2238,17 +2904,52 @@ Evas_Object *eulogium_print_ignore(struct eulogium_data *eulogium)
return eulogium_split_screen(eulogium->navi, _top, _bottom);
}
-Evas_Object *eulogium_print_progress(struct eulogium_data *eulogium)
+Evas_Object *eulogium_pre_print(Evas_Object *parent, struct eulogium_data *eulogium)
+{
+ Evas_Object *_top, *_bottom, *obj;
+
+ _top = elm_box_add(parent);
+ evas_object_size_hint_weight_set(_top, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(_top, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_box_homogeneous_set(_top, EINA_FALSE);
+ evas_object_show(_top);
+
+ obj = elm_label_add(_top);
+ elm_object_text_set(obj, _("Preparing printer ..."));
+ elm_label_slide_mode_set(obj, ELM_LABEL_SLIDE_MODE_NONE);
+ evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(obj);
+ elm_box_pack_end(_top, obj);
+
+ /* Pulse progress */
+
+ _bottom = eulogium_dual_button_add(eulogium->navi, &but_print_tune, &but_print_abort_confirm);
+ _bottom = elm_button_add(parent);
+ evas_object_size_hint_weight_set(_bottom, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(_bottom, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_object_text_set(_bottom, _(but_print_abort_confirm.text));
+ evas_object_smart_callback_add(_bottom, "clicked", but_print_abort_confirm.cb.func, but_print_abort_confirm.cb.data);
+ evas_object_show(obj);
+ evas_object_show(_bottom);
+
+ return eulogium_split_screen(eulogium->navi, _top, _bottom);
+}
+
+Evas_Object *eulogium_print_progress(Evas_Object *parent, struct eulogium_data *eulogium, const struct print_data *print) /* TODO pass timer var to store timer in */
{
Evas_Object *_top, *_bottom;
+ /* TODO maybe this timer needs to be split into twofold update the widgets locally here,
+ * emit a signal/tell the metadata cb to start gathering meta data */
+ /* this needs to be done, so that we can pass the proper parameters. For now, just hackishly split them.
+ */
eulogium->progress_data_refresh = ecore_timer_add(0.5, _timer_progress_data_update_cb, eulogium);
if (!eulogium->progress_data_refresh) { /* TODO make define for the timeout */
EINA_LOG_CRIT("Unable to create progress update timer");
return NULL;
}
- _top = elm_box_add(eulogium->navi);
+ _top = elm_box_add(parent);
evas_object_size_hint_weight_set(_top, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(_top, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_homogeneous_set(_top, EINA_FALSE);
@@ -2269,7 +2970,7 @@ Evas_Object *eulogium_print_progress(struct eulogium_data *eulogium)
elm_box_pack_end(_top, eulogium->status);
eulogium->name = elm_label_add(_top);
- elm_object_text_set(eulogium->name, eulogium->print.name);
+ elm_object_text_set(eulogium->name, print->jobname);
elm_label_slide_mode_set(eulogium->name, ELM_LABEL_SLIDE_MODE_AUTO);
//elm_label_slide_speed_set(object, 2);
elm_label_slide_go(eulogium->name);
@@ -2282,74 +2983,57 @@ Evas_Object *eulogium_print_progress(struct eulogium_data *eulogium)
elm_progressbar_horizontal_set(eulogium->progress, EINA_TRUE);
elm_progressbar_pulse_set(eulogium->progress, EINA_FALSE); /* TODO: pulse = time-unknown/pause */
elm_progressbar_pulse(eulogium->progress, EINA_FALSE);
- elm_progressbar_value_set(eulogium->progress, eulogium->print.progress);
+ elm_progressbar_value_set(eulogium->progress, print->value);
elm_progressbar_unit_format_set(eulogium->progress, "%1.1f %%");
evas_object_size_hint_align_set(eulogium->progress, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(eulogium->progress);
elm_box_pack_end(_top, eulogium->progress);
- _bottom = eulogium_dual_button_add(eulogium->navi, &but_print_tune, &but_print_abort_confirm);
+ _bottom = eulogium_dual_button_add(parent, &but_print_tune, &but_print_abort_confirm);
evas_object_show(_bottom);
- return eulogium_split_screen(eulogium->navi, _top, _bottom);
+ return eulogium_split_screen(parent, _top, _bottom);
}
-Evas_Object *eulogium_generic_error(struct eulogium_data *eulogium, uint8_t eulogium_error)
+void eulogium_generic_error(struct eulogium_data *eulogium, uint_fast16_t error_code, const char *error_msg)
{
- Evas_Object *box, *object;
- char buf[] = "Printer error -255.<br>Please contact support via<br>http://ultimaker.com/support.";
+ Evas_Object *content, *object;
+ char buf[250]; /* 250 characters should be enough for everyone XXX (find the max number of chars we can actually print) */
/* TODO, replace with define of strings to collect all strings centrally */
- box = elm_box_add(eulogium->navi);
- evas_object_show(box);
+ content = elm_box_add(eulogium->navi);
+ evas_object_show(content);
object = elm_label_add(eulogium->navi);
- snprintf(buf, sizeof(buf), "Printer error %d.<br>Please contact support via<br>http://ultimaker.com/support.", eulogium_error);
+ snprintf(buf, sizeof(buf), "Printer error %u.<br>%s", (unsigned int)error_code,
+ strlen(error_msg) > 0 ? error_msg : "Please contact support via<br>http://ultimaker.com/support.");
elm_object_text_set(object, _(buf));
evas_object_show(object);
- elm_box_pack_end(box, object);
+ elm_box_pack_end(content, object);
-#if 0
+#if 1
/* XXX what to do here, reboot? make support notice via wget? */
object = elm_button_add(eulogium->navi);
- elm_object_text_set(object, _("ABORT")); /* TODO create abort button */
- evas_object_size_hint_align_set(object, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_object_text_set(object, _("IGNORE")); /* TODO create abort button */
+ evas_object_size_hint_align_set(object, EVAS_HINT_FILL, 1.0);
evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_smart_callback_add(object, "clicked", _print_abort_cb, eulogium); /* TODO what button to use here? */
+ evas_object_smart_callback_add(object, "clicked", &_cb_content_prev_set, eulogium); /* TODO what button to use here? */
evas_object_show(object);
- elm_box_pack_end(box, object);
+ elm_box_pack_end(content, object);
#endif
- return box;
+ ui_stack_push(eulogium, content, PAGE_ERROR);
}
-static void _on_cleared_printer_ret(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
-{
- const char *errname, *errmsg;
- Eina_Bool cleared_bed = EINA_FALSE;
-
- if (eldbus_message_error_get(msg, &errname, &errmsg)) {
- EINA_LOG_ERR("%s %s", errname, errmsg);
- return;
- }
- if (!eldbus_message_arguments_get(msg, "b", &cleared_bed)) {
- EINA_LOG_ERR("Failed to get bed clear status.");
- return;
- }
- if (cleared_bed == EINA_TRUE)
- EINA_LOG_INFO("Bed has been successfully Cleared");
- else
- EINA_LOG_WARN("Unable to clear printer bed");
-}
-
-static void _cleared_bed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+static void _cleaned_bed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
struct eulogium_data *eulogium = data;
- //eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "clearedPrinter", _on_cleared_printer_ret, eulogium, -1, "");
+ procedure_print_printer_cleaned();
+ _cb_content_prev_set(eulogium, obj, event_info); /* replace with ui_pop_stack */
}
-Evas_Object *eulogium_clear_print_bed(struct eulogium_data *eulogium)
+Evas_Object *eulogium_clean_print_bed(struct eulogium_data *eulogium)
{
Evas_Object *_top, *_bottom, *obj;
@@ -2363,12 +3047,17 @@ Evas_Object *eulogium_clear_print_bed(struct eulogium_data *eulogium)
_bottom = elm_button_add(eulogium->navi);
elm_object_text_set(_bottom, _("Print removed"));
- evas_object_smart_callback_add(_bottom, "clicked", _cleared_bed_cb, eulogium);
+ evas_object_smart_callback_add(_bottom, "clicked", _cleaned_bed_cb, eulogium);
evas_object_show(_bottom);
return eulogium_split_screen(eulogium->navi, _top, _bottom);
}
+struct _wifilist_data {
+ struct eulogium_data *eulogium;
+ struct network_data *network;
+};
+
struct _filelist_data {
struct eulogium_data *eulogium;
struct dir_entry_def *dir;
@@ -2380,6 +3069,39 @@ struct _filelist_entry_data {
char *filepath;
};
+static void _cb_select_wifi(void *data, Evas_Object *eo EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct eulogium_data *eulogium = ((struct _wifilist_data *)data)->eulogium;
+ Evas_Object *navi = eulogium->navi;
+ const struct network_data *network = ((struct _wifilist_data *)data)->network;
+ Evas_Object *content, *_top, *_bottom, *obj;
+
+ /* TODO replace with generic dialog code */
+ _top = elm_box_add(navi);
+ evas_object_show(_top);
+
+ obj = elm_label_add(_top);
+ elm_object_text_set(obj, _("Attempting to connect to Wifi:"));
+ evas_object_show(obj);
+ elm_box_pack_end(_top, obj);
+
+ obj = elm_label_add(_top);
+ elm_object_text_set(obj, network->ssid);
+ evas_object_show(obj);
+ elm_box_pack_end(_top, obj);
+ /* TODO add animation and 'connection finished' signal handler */
+
+ _bottom = elm_button_add(navi);
+ elm_object_text_set(_bottom, _("Ok"));
+ evas_object_smart_callback_add(_bottom, "clicked", _cb_content_prev_set, eulogium);
+ evas_object_show(_bottom);
+
+ content = eulogium_split_screen(navi, _top, _bottom);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+
+ network_connect_wifi(network);
+};
+
static void _cb_select_file(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
struct eulogium_data *eulogium = ((struct _filelist_entry_data *)data)->filelist->eulogium;
@@ -2387,6 +3109,7 @@ static void _cb_select_file(void *data, Evas_Object *obj EINA_UNUSED, void *even
if (filepath) {
if (ecore_file_is_dir(filepath)) {
+ Evas_Object *content;
struct menu_def *new_dir;
uint_fast16_t new_dir_len;
@@ -2396,10 +3119,15 @@ static void _cb_select_file(void *data, Evas_Object *obj EINA_UNUSED, void *even
new_dir->type = LIST_FILE;
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);
- menu_widget_list_push(eulogium, new_dir);
+ 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 */
} else {
+ Evas_Object *content;
+
eulogium_print_data_set(eulogium, filepath);
- procedure_start_print(eulogium->dbus.proxy[PRINTER], &eulogium->print);
+ procedure_print_start(&eulogium->print);
+ content = eulogium_pre_print(eulogium->navi, eulogium);
+ ui_stack_push(eulogium, content, PAGE_PRINTING);
}
}
}
@@ -2465,10 +3193,10 @@ static void _cb_populate_filelist(const char *name, const char *path, void *data
ext = ecore_file_ext_get(name);
if (!ext)
return;
- if (!filelist->eulogium->printer.file_handlers)
- return;
- for (i = 0; filelist->eulogium->printer.file_handlers[i] != NULL; i++)
- if (strncmp(ext, filelist->eulogium->printer.file_handlers[i], strlen(ext)) == 0)
+// if (!filelist->eulogium->printer.file_handlers)
+// return;
+// for (i = 0; filelist->eulogium->printer.file_handlers[i] != NULL; i++)
+ if (strncmp(ext, /*filelist->eulogium->printer.file_handlers[i] */"gcode", strlen(ext)) == 0)
valid_ext++;
if (!valid_ext)
return;
@@ -2483,7 +3211,7 @@ static void _cb_populate_filelist(const char *name, const char *path, void *data
elm_image_resizable_set(icon, EINA_FALSE, EINA_FALSE);
evas_object_show(icon);
- filelist_entry = malloc(sizeof(struct _filelist_entry_data));
+ filelist_entry = malloc(sizeof(struct _filelist_entry_data)); /* XXX free on destroy */
filelist_entry->filelist = filelist;
filelist_entry->filepath = filepath;
eulogium_item_list_sorted_insert(filelist->list, icon, name, NULL, _cb_select_file, filelist_entry, _cb_dirfile_sort);
@@ -2555,12 +3283,38 @@ static void _set_hotspot_power_cb(void *data, Evas_Object *obj, void *event_info
{
struct eulogium_data *eulogium = data;
- eldbus_proxy_call(eulogium->dbus.proxy[NETWORK], "setHotspotPower", on_method_generic_ret, NULL, -1, "b", elm_check_state_get(obj));
+ eldbus_proxy_call(eulogium->dbus.proxy[NETWORK], "setHotspotEnabled", on_method_generic_ret, NULL, -1, "b", elm_check_state_get(obj));
}
-static void _menu_generate_wifilist(struct eulogium_data *eulogium, Evas_Object *list, struct wifi_def *wifi)
+static void network_wifi_list(struct eulogium_data *eulogium, Evas_Object *list, struct network_data *networks)
{
Evas_Object *icon;
+ uint_fast16_t i = 0;
+
+ if (!networks)
+ return;
+
+
+ icon = elm_icon_add(list);
+ elm_icon_standard_set(icon, "wifi-wpa-icon");
+ evas_object_show(icon);
+ for (i = 0; networks[i].obj_path; i++)
+ if (networks[i].tech == TECH_WIFI) {
+ struct _wifilist_data *wifilist;
+
+ wifilist = malloc(sizeof(struct _wifilist_data)); /* XXX free on destroy */
+ wifilist->eulogium = eulogium;
+ wifilist->network = &networks[i];
+
+ eulogium_item_list_append(list, NULL, networks[i].ssid, NULL, _cb_select_wifi, wifilist);
+ }
+}
+
+static void _menu_generate_wifilist(struct eulogium_data *eulogium, Evas_Object *list, struct network_data *networks)
+{
+ Evas_Object *icon;
+
+ network_wifi_list(eulogium, list, networks);
icon = elm_icon_add(list);
elm_icon_standard_set(icon, "user-home");
@@ -2621,6 +3375,8 @@ Evas_Object *menu_widget_list(struct eulogium_data *eulogium, Evas_Object *paren
obj = elm_label_add(box);
elm_object_text_set(obj, _(menu->title)); /* XXX THIS IS NOT ALWAYS IN DATA! */
+ elm_object_style_set(obj, "title");
+ evas_object_anti_alias_set(obj, EINA_FALSE);
evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(obj);
elm_box_pack_start(box, obj);
@@ -2637,7 +3393,7 @@ Evas_Object *menu_widget_list(struct eulogium_data *eulogium, Evas_Object *paren
if (menu->type == LIST_FILE)
_menu_generate_filelist(eulogium, list, &menu->dir);
if (menu->type == LIST_WIFI)
- _menu_generate_wifilist(eulogium, list, NULL);
+ _menu_generate_wifilist(eulogium, list, eulogium->networks);
eulogium_item_list_go(list);
evas_object_show(list);
elm_box_pack_end(box, list);
@@ -2657,157 +3413,11 @@ Evas_Object *menu_widget_list(struct eulogium_data *eulogium, Evas_Object *paren
return box;
}
-struct _multi_screen_next_cb_data {
- struct eulogium_data *eulogium;
- struct multi_screen_data *screen_data;
- uint_fast8_t pagenum;
- Eina_Bool pageindex;
-};
-
-static void _eulogium_multi_screen_next_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
- Evas_Object *content;
- struct eulogium_data *eulogium = ((struct _multi_screen_next_cb_data *)data)->eulogium;
- uint_fast8_t pagenum = ((struct _multi_screen_next_cb_data *)data)->pagenum;
- Eina_Bool pageindex = ((struct _multi_screen_next_cb_data *)data)->pageindex;
- struct multi_screen_data *screen_data = ((struct _multi_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 = eulogium_multi_screen_menu(eulogium, eulogium->navi, screen_data, pagenum, pageindex);
- if (content)
- elm_naviframe_item_simple_push(eulogium->navi, content);
- /* XXX what else? */
- }
- free(data);
-}
-
static void _cb_material_set(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
printf("Material: %s selected\n", (char *)data);
}
-Evas_Object *eulogium_multi_screen_menu(struct eulogium_data *eulogium, Evas_Object *parent, struct multi_screen_data *screen_data, uint_fast8_t pagenum, Eina_Bool pageindex) /* TODO swap parent/eulogium */
-{
- Evas_Object *object;
- Evas_Object *_top, *_bottom;
- struct _multi_screen_next_cb_data *multi_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->screen[pagenum].text) {
- object = elm_label_add(_top);
- elm_object_text_set(object, _(screen_data->screen[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->screen[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);
-
- multi_screen_next_cb_data = malloc(sizeof(struct _multi_screen_next_cb_data));
- multi_screen_next_cb_data->eulogium = eulogium;
- multi_screen_next_cb_data->screen_data = screen_data;
- multi_screen_next_cb_data->pagenum = pagenum + 1;
- multi_screen_next_cb_data->pageindex = EINA_TRUE;
-
- if (screen_data->screen[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->screen[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->screen[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->screen[pagenum].next_button));
- evas_object_smart_callback_add(object, "clicked", _eulogium_multi_screen_next_cb, multi_screen_next_cb_data);
- evas_object_show(object);
- elm_box_pack_end(_bottom, object);
- }
-
- return eulogium_split_screen(parent, _top, _bottom);
-}
-
Evas_Object *eulogium_menu_confirm(Evas_Object *parent, const char *msg, const char *prev,
const struct button_def *next)
{
@@ -2911,130 +3521,6 @@ Evas_Object *eulogium_tripple_button_menu(Evas_Object *parent, const struct butt
return eulogium_split_screen(parent, _top, _bottom);
}
-static Eina_Bool _dial_change_delay(void *data)
-{
- Evas_Object *dial = data;
- Ecore_Timer *delay;
-
- evas_object_data_set(dial, "delay", NULL);
- evas_object_smart_callback_call(dial, "delay,changed", NULL);
-
- return ECORE_CALLBACK_CANCEL;
-}
-
-static Eina_Bool _dial_change(void *data, int type, void *event_info EINA_UNUSED)
-{
- Evas_Object *dial = data;
- Ecore_Timer *delay;
- double value, step;
-
-/* TODO XXX we call this dirty little hack because debian's v1.8 of elm does not offer us to actually call drag,left
- * evas_object_smart_callback_call(dial, "drag,left", NULL); would have been much cleaner and we didn't need to do
- * the val+step get/set thing and thus also benefit from delay,changed which we now 'fake' badly.
- */
- value = elm_slider_value_get(dial);
- step = elm_slider_step_get(dial);
- if (type == INPUT_MOUSE_WHEEL_UP)
- elm_slider_value_set(dial, value + step);
- if (type == INPUT_MOUSE_WHEEL_DOWN)
- elm_slider_value_set(dial, value - step);
- evas_object_smart_callback_call(dial, "changed", NULL);
- delay = evas_object_data_get(dial, "delay");
- ecore_timer_del(delay);
- delay = ecore_timer_add(0.5, _dial_change_delay, dial); /* TODO make define for delay */
- evas_object_data_set(dial, "delay", delay);
-
- return ECORE_CALLBACK_PASS_ON;
-}
-
-static void _dial_send_update(void *data, Evas_Object *eo, void *event_info EINA_UNUSED)
-{
- Eldbus_Proxy *proxy = data;
-
- eldbus_proxy_call(proxy, "setBrightness", NULL, NULL, -1, "d", elm_slider_value_get(eo));
-}
-
-Evas_Object *eulogium_settings_dial(Evas_Object *parent, struct eulogium_data *eulogium)
-{
- Evas_Object *_top, *_bottom, *obj;
-
- /* if type is tar/cur do something different TODO */
- _top = elm_slider_add(parent);
- elm_object_text_set(_top, "Brightness:");
- elm_object_focus_allow_set(_top, EINA_FALSE);
- elm_slider_unit_format_set(_top, "%1.0f%");
- elm_slider_min_max_set(_top, 0, 100);
- elm_slider_step_set(_top, 1.0);
- evas_object_size_hint_weight_set(_top, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(_top, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_smart_callback_add(_top, "delay,changed", _dial_send_update, eulogium->dbus.proxy[LED]);
- eulogium->event_inc = ecore_event_handler_add(INPUT_MOUSE_WHEEL_UP, _dial_change, _top);
- eulogium->event_dec = ecore_event_handler_add(INPUT_MOUSE_WHEEL_DOWN, _dial_change, _top);
- evas_object_show(_top);
-
- obj = elm_label_add(_top);
- elm_object_text_set(obj, "100%");
- evas_object_show(obj);
- elm_object_part_content_set(_top, "end", obj);
-
- _bottom = elm_button_add(parent);
- elm_object_text_set(_bottom, _("Click when done")); /* TODO, make define for this text */
- evas_object_size_hint_weight_set(_bottom, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(_bottom, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_smart_callback_add(_bottom, "clicked", _cb_content_prev_set, eulogium);
- evas_object_show(_bottom);
-
- return eulogium_split_screen(parent, _top, _bottom);
-}
-
-static struct multi_screen screen[] = {
- {
- .type = NONE,
- .text = "Welcome<br>to your new Ultimaker",
- .func = NULL,
- .data = NULL,
- .prev_button = "Skip Wizzard!",
- .next_button = "Continue",
- },
- {
- .type = MATERIAL,
- .text = "Choose material",
- .func = NULL,
- .data = NULL,
- .prev_button = "Skip Wizzard!",
- .next_button = "Continue",
- },
- {
- .type = FUNC,
- .text = "Level bed",
- .func = NULL,
- .data = "Bed leveling call",
- .prev_button = "Skip Wizzard!",
- .next_button = "Continue",
- },
- {
- .type = PROGRESS,
- .text = "Heating ...",
- .func = NULL,
- .data = "progress object",
- .prev_button = "Skip Wizzard!",
- .next_button = "Continue",
- },
- {
- .type = NONE,
- .text = "Lets print!",
- .func = NULL,
- .data = NULL,
- .prev_button = NULL,
- .next_button = "Let's Print!",
- },
- { .type = END, /* sentinel */ },
-};
-
-static struct multi_screen_data screen_data = {
- .screen = &screen[0],
-};
-
Evas_Object *eulogium_main_menu(Evas_Object *window, struct eulogium_data *eulogium)
{
Evas_Object *content;
@@ -3042,74 +3528,25 @@ Evas_Object *eulogium_main_menu(Evas_Object *window, struct eulogium_data *eulog
eulogium->navi = elm_naviframe_add(window);
if (!eulogium->navi)
return NULL;
- elm_naviframe_prev_btn_auto_pushed_set(eulogium->navi, EINA_FALSE); /* We removed this from the theme, enabling it causes errors */
+ /* We removed the prev button from the theme, enabling it causes errors */
+ elm_naviframe_prev_btn_auto_pushed_set(eulogium->navi, EINA_FALSE);
+ /* Except the first frame, never safe any frames after pop */
+ elm_naviframe_content_preserve_on_pop_set(eulogium->navi, EINA_FALSE);
+ /* The main menu should be drawn first, consider changing this to 'get bottom, insert before bottom, pop_to
+ * instead of assuming the stack is empty */
content = eulogium_tripple_button_menu(eulogium->navi, &but_main_print, &but_main_mathot, &but_main_system);
- if (!content)
- return NULL;
- elm_naviframe_item_simple_push(eulogium->navi, content);
+ ui_stack_push(eulogium, content, PAGE_BOTTOM);
return eulogium->navi;
}
-static void eulogium_setup(struct eulogium_data *eulogium)
-{
- while (screen_data.screen[screen_data.count].type != END)
- screen_data.count++;
-
- /* This is silly, barding redonkylous and will get fixed in the refactoring */
- eulogium->procedures = procedures_init();
- eulogium_button_cb_data_set(&but_return, eulogium);
- eulogium_button_cb_data_set(&but_print_abort_confirm, eulogium);
- eulogium_button_cb_data_set(&but_print_abort, eulogium);
- eulogium_button_cb_data_set(&but_print_tune, eulogium);
- eulogium_button_cb_data_set(&but_main_print, eulogium);
- eulogium_button_cb_data_set(&but_print_ignore, eulogium);
- eulogium_button_cb_data_set(&but_print_local, eulogium);
- eulogium_button_cb_data_set(&but_print_usb, eulogium);
- eulogium_button_cb_data_set(&but_main_mathot, eulogium);
- eulogium_button_cb_data_set(&but_main_system, eulogium);
- eulogium_button_cb_data_set(&but_system_maintenance, eulogium);
- eulogium_button_cb_data_set(&but_system_settings, eulogium);
- eulogium_button_cb_data_set(&but_material_change, eulogium);
- eulogium_button_cb_data_set(&but_material_settings, eulogium);
- eulogium_button_cb_data_set(&but_settings_material_1, eulogium);
- eulogium_button_cb_data_set(&but_settings_material_2, eulogium);
- eulogium_button_cb_data_set(&but_change_material_1, eulogium);
- eulogium_button_cb_data_set(&but_change_material_2, eulogium);
- eulogium_button_cb_data_set(&but_mathot_material, eulogium);
- eulogium_button_cb_data_set(&but_mathot_hotend, eulogium);
- eulogium_button_cb_data_set(&but_hotend_change, eulogium);
- eulogium_button_cb_data_set(&but_hotend_settings, eulogium);
- eulogium_button_cb_data_set(&but_settings_hotend_1, eulogium);
- eulogium_button_cb_data_set(&but_settings_hotend_2, eulogium);
- eulogium_button_cb_data_set(&but_change_hotend_1, eulogium);
- eulogium_button_cb_data_set(&but_change_hotend_2, eulogium);
-}
-
-static void _on_get_print_name_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
-{
- struct eulogium_data *eulogium = data;
- const char *errname, *errmsg;
-
- if (eldbus_message_error_get(msg, &errname, &errmsg)) {
- EINA_LOG_ERR("%s %s", errname, errmsg);
- return;
- }
- if (!eldbus_message_arguments_get(msg, "s", &eulogium->print.name)) {
- EINA_LOG_ERR("Failed to get printName message.");
- return;
- }
- eulogium->print.name_changed = EINA_TRUE;
- EINA_LOG_INFO("Printer name updated");
- /* TODO Call generic error screen in case of trouble here? */
-}
-
+#if 0
static void eulogium_printer_status_set(struct eulogium_data *eulogium, struct _status_msg *status)
{
Evas_Object *content = NULL;
- EINA_LOG_WARN("Printer status: %s", status->s);
+ EINA_LOG_ERR("Printer status: %s", status->s);
if (eulogium->printer.status != status->i) {
switch (status->i) {
@@ -3180,6 +3617,7 @@ static void eulogium_printer_status_set(struct eulogium_data *eulogium, struct _
eulogium->printer.status = status->i;
}
}
+#endif
static void _on_get_file_handlers_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
{
@@ -3212,14 +3650,10 @@ static void _on_get_file_handlers_ret(void *data, const Eldbus_Message *msg, Eld
strncpy(file_handlers[i], file_handler, fhandler_size);
}
file_handlers[i] = NULL; /* sentinel */
- eulogium->printer.file_handlers = file_handlers;
-}
-
-static void _on_status_changed_ret(void *data, const Eldbus_Message *msg)
-{
- _on_get_status_ret(data, msg, NULL);
+ eulogium->printer.file_handlers = file_handlers; /* TODO do directly, only pass **file_handlers as data */
}
+/* XXX TODO: this is being called somewhere where it shouldn't, making only hotplug usb events work */
static void eulogium_disk_free(struct mount_data *mount)
{
eeze_disk_free(mount->disk);
@@ -3227,7 +3661,6 @@ static void eulogium_disk_free(struct mount_data *mount)
free(mount->id);
eldbus_proxy_unref(mount->proxy);
free(mount);
- mount = NULL;
}
static void _on_where_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
@@ -3253,18 +3686,17 @@ static void _on_where_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending
return;
/* Never use a medium that is mounted under dev, proc, run or sys. */
- if (!(strncmp(where, "/dev/", 5) &&
- strncmp(where, "/proc/", 6) &&
- strncmp(where, "/run/", 5) &&
- strncmp(where, "/sys/", 5)))
+ if (!(strncmp(where, "/dev/", sizeof("/dev/") - 1) &&
+ strncmp(where, "/proc/", sizeof("/proc/") - 1) &&
+ strncmp(where, "/run/", sizeof("/run/") - 1) &&
+ strncmp(where, "/sys/", sizeof("/sys/") - 1)))
return;
mount->disk = eeze_disk_new_from_mount(where);
eeze_disk_scan(mount->disk);
EINA_LOG_ERR("Medium mounted at %s of type %d", where, eeze_disk_type_get(mount->disk));
- if (eeze_disk_type_get(mount->disk) == EEZE_DISK_TYPE_USB)
- *mount->mounts = eina_list_append(*mount->mounts, mount);
- if ((eeze_disk_type_get(mount->disk) == EEZE_DISK_TYPE_FLASH) &&
+ if (((eeze_disk_type_get(mount->disk) == EEZE_DISK_TYPE_USB) ||
+ (eeze_disk_type_get(mount->disk) == EEZE_DISK_TYPE_FLASH)) &&
(!strstr(eeze_disk_devpath_get(mount->disk), "mmcblk0"))) /* XXX skip using mmcblk0 as that is our root fs for now. This may be handled by udev making it invisible. */
*mount->mounts = eina_list_append(*mount->mounts, mount);
else
@@ -3316,7 +3748,7 @@ static void _on_unit_new_ret(void *data, const Eldbus_Message *msg)
return;
}
ext = ecore_file_ext_get(id);
- if (strncmp(ext, "mount", 5))
+ if (strcmp(ext, "mount"))
return;
obj = eldbus_object_get(eulogium->dbus.conn, "org.freedesktop.systemd1", unit);
@@ -3338,13 +3770,14 @@ static void _on_unit_new_ret(void *data, const Eldbus_Message *msg)
}
strncpy(mount->id, id, id_len);
mount->proxy = eldbus_proxy_get(obj, "org.freedesktop.systemd1.Mount");
- mount->mounts = &eulogium->mounts;
if (!mount->proxy) {
EINA_LOG_WARN("Could not get dbus proxy for (%s).", id);
free(mount->id);
free(mount);
return;
}
+ eldbus_proxy_ref(mount->proxy);
+ mount->mounts = &eulogium->mounts;
EINA_LOG_ERR("Medium inserted (%s)", id);
eldbus_proxy_property_get(mount->proxy, "Result", _on_result_ret, mount);
}
@@ -3397,6 +3830,7 @@ static void _on_list_units_ret(void *data, const Eldbus_Message *msg, Eldbus_Pen
free(mount);
break;
}
+ eldbus_proxy_ref(mount->proxy);
mount->mounts = &eulogium->mounts;
EINA_LOG_ERR("Medium detected (%s)", id);
eldbus_proxy_property_get(mount->proxy, "Result", _on_result_ret, mount);
@@ -3432,7 +3866,7 @@ static void _on_unit_removed_ret(void *data, const Eldbus_Message *msg)
return;
}
ext = ecore_file_ext_get(id);
- if (strncmp(ext, "mount", 5))
+ if (strcmp(ext, "mount"))
return;
obj = eldbus_object_get(eulogium->dbus.conn, "org.freedesktop.systemd1", unit);
@@ -3449,6 +3883,12 @@ static void _on_unit_removed_ret(void *data, const Eldbus_Message *msg)
eulogium_disk_free(mount);
eulogium->mounts = eina_list_remove_list(eulogium->mounts, list);
}
+ /* XXX if usb/local selection screen is up, pop it from stack and show a 'media removed' popup,
+ * and show the local without popup instead.
+ * If we are in the file-selection list, pop the whole stack up until the selection dialog.
+ * Use PAGE_USB for example to indicate what to pop from the stack.
+ * ui_stack_page_invalidate(eulogium->navi, PAGE_USB); // XXX Yes, we only support 1 usb mount at a time
+ */
/* TODO: UI Stuff/signals */
}
@@ -3472,8 +3912,8 @@ static void _on_get_available_procedures_ret(void *data, const Eldbus_Message *m
if (eldbus_message_iter_arguments_get(avail_proc_struct, "sb", &key, &executable)) {
uint_fast16_t i;
- for (i = 0; eulogium->procedures[i].key ; i++) {
- if (strncmp(key, eulogium->procedures[i].key, eulogium->procedures[i].keylen)) {
+ for (i = 0; eulogium->procedures[i].key ; i++) { /* XXX use enum/null rather then i to iterate over array */
+ if (strcmp(key, eulogium->procedures[i].key)) {
eulogium->procedures[i].executable = executable;
eulogium->procedures[i].available = EINA_TRUE;
} else {
@@ -3484,10 +3924,9 @@ static void _on_get_available_procedures_ret(void *data, const Eldbus_Message *m
}
}
-static void _on_get_active_procedures_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
+static void _on_get_active_procedures_ret(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
{
const char *errname, *errmsg;
- struct eulogium_data *eulogium = data;
Eldbus_Message_Iter *array, *act_proc_struct;
char *key, *step;
@@ -3496,28 +3935,36 @@ static void _on_get_active_procedures_ret(void *data, const Eldbus_Message *msg,
return;
}
if (!eldbus_message_arguments_get(msg, "a(ss)", &array)) {
- EINA_LOG_ERR("Message content does not match expected \"a(ss)\" signature.");
+ EINA_LOG_ERR("Message content does not match expected \"a(ss)\" signature."); /* TODO make macro/function of this as we re-use it often */
return;
}
while (eldbus_message_iter_get_and_next(array, 'r', &act_proc_struct)) {
if (eldbus_message_iter_arguments_get(act_proc_struct, "ss", &key, &step)) {
- uint_fast16_t i;
+ struct procedure_data *procedure;
- for (i = 0; eulogium->procedures[i].key ; i++) {
- if (strncmp(key, eulogium->procedures[i].key, eulogium->procedures[i].keylen)) {
- printf("Step: %s\n", step);
- } else {
- EINA_LOG_WARN("Procedure not found: '%s'", key);
- }
+ EINA_LOG_ERR("Key '%s' step '%s'", key, step);
+ procedure = procedure_get(key);
+ if (!procedure) {
+ EINA_LOG_ERR("Unknown procedure %s", key);
+ return;
+ }
+ procedure->status = PROC_ACTIVE;
+ procedure->step_active = procedure_step_get(procedure, step);
+
+ if (!procedure->step_active) {
+ EINA_LOG_ERR("Unknown step %s in procedure %s", step, key);
+ return;
}
+ procedure_process_step(data, procedure);
}
}
}
-static void _on_procedure_start_ret(void *data EINA_UNUSED, const Eldbus_Message *msg)
+static void _on_procedure_start_ret(void *data, const Eldbus_Message *msg)
{
const char *errname, *errmsg;
const char *key, *step;
+ struct procedure_data *procedure;
if (eldbus_message_error_get(msg, &errname, &errmsg)) {
EINA_LOG_ERR("%s %s", errname, errmsg);
@@ -3527,13 +3974,27 @@ static void _on_procedure_start_ret(void *data EINA_UNUSED, const Eldbus_Message
EINA_LOG_ERR("Message content does not match expected \"ss\" signature. (%s)", eldbus_message_signature_get(msg));
return;
}
- EINA_LOG_ERR("Key '%s' step %s", key, step);
+ EINA_LOG_ERR("Key '%s' step '%s'", key, step);
+ procedure = procedure_get(key);
+ if (!procedure) {
+ EINA_LOG_ERR("Unknown procedure %s", key);
+ return;
+ }
+ procedure->status = PROC_ACTIVE;
+ procedure->step_active = procedure_step_get(procedure, step);
+
+ if (!procedure->step_active) {
+ EINA_LOG_ERR("Unknown step %s in procedure %s", step, key);
+ return;
+ }
+ procedure_process_step(data, procedure);
}
static void _on_procedure_next_step_ret(void *data EINA_UNUSED, const Eldbus_Message *msg)
{
const char *errname, *errmsg;
const char *key, *step;
+ struct procedure_data *procedure;
if (eldbus_message_error_get(msg, &errname, &errmsg)) {
EINA_LOG_ERR("%s %s", errname, errmsg);
@@ -3543,13 +4004,25 @@ static void _on_procedure_next_step_ret(void *data EINA_UNUSED, const Eldbus_Mes
EINA_LOG_ERR("Message content does not match expected \"ss\" signature. (%s)", eldbus_message_signature_get(msg));
return;
}
- EINA_LOG_ERR("next: Key '%s' step %s", key, step);
+ EINA_LOG_ERR("next: Key '%s' step '%s'", key, step);
+ procedure = procedure_get(key);
+ if (!procedure) {
+ EINA_LOG_WARN("Unknown procedure, %s.", key);
+ return;
+ }
+ procedure->step_active = procedure_step_get(procedure, step);
+ if (!procedure->step_active) {
+ EINA_LOG_ERR("Unknown step %s in procedure %s", step, key);
+ return;
+ }
+ procedure_process_step(data, procedure);
}
static void _on_procedure_finished_ret(void *data EINA_UNUSED, const Eldbus_Message *msg)
{
const char *errname, *errmsg;
const char *key;
+ struct procedure_data *procedure;
if (eldbus_message_error_get(msg, &errname, &errmsg)) {
EINA_LOG_ERR("%s %s", errname, errmsg);
@@ -3560,22 +4033,37 @@ static void _on_procedure_finished_ret(void *data EINA_UNUSED, const Eldbus_Mess
return;
}
EINA_LOG_ERR("finshed Key '%s'", key);
+ procedure = procedure_get(key);
+ if (!procedure) {
+ EINA_LOG_ERR("Unknown procedure %s", key);
+ return;
+ }
+ procedure->status = PROC_FINISHED;
+ procedure->step_active = NULL;
+ procedure_process_step(data, procedure);
+ // XXX procedure_metadata_key_get(key)
}
-static void _on_get_error_ret(void *data EINA_UNUSED, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
+static void _on_get_error_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
{
- const char *errname, *errmsg, *errormsg;
+ struct eulogium_data *eulogium = data;
+ const char *errname, *errmsg, *error_msg;
+ uint8_t error_level;
+ uint16_t error_code;
if (eldbus_message_error_get(msg, &errname, &errmsg)) {
EINA_LOG_ERR("%s %s", errname, errmsg);
return;
}
- if (!eldbus_message_arguments_get(msg, "s", &errormsg)) {
- EINA_LOG_ERR("Message content does not match expected \"s\" signature. (%s)", eldbus_message_signature_get(msg));
+ if (!eldbus_message_arguments_get(msg, "yqs", &error_level, &error_code, &error_msg)) {
+ EINA_LOG_ERR("Message content does not match expected \"yqs\" signature. (%s)", eldbus_message_signature_get(msg));
return;
}
- if (strlen(errormsg) > 0)
- EINA_LOG_ERR("Printer Error '%s' received", errormsg);
+ EINA_LOG_ERR("Printer Error %u '%s' received (level %u)", error_code, error_msg, error_level);
+ if (error_level > 254) /* TODO: enum */
+ return;
+
+ eulogium_generic_error(eulogium, error_code, error_msg);
/* TODO Call generic error screen in case of trouble here? */
}
@@ -3598,6 +4086,7 @@ static uint_fast16_t _dbus_members_map(Eldbus_Proxy *proxy, struct menu_entry_de
return i;
}
+/* move this to dbus_common */
static int eulogium_dbus_init(struct eulogium_data *eulogium)
{
Eldbus_Object *obj;
@@ -3657,10 +4146,35 @@ static int eulogium_dbus_init(struct eulogium_data *eulogium)
EINA_LOG_WARN("Could not get dbus network proxy.");
return -EFAULT;
}
+
+ /* Find a nice home for these */
+ eldbus_proxy_signal_handler_add(proxy, "UnitNew", _on_unit_new_ret, eulogium);
+ eldbus_proxy_signal_handler_add(proxy, "UnitRemoved", _on_unit_removed_ret, eulogium);
+ msg = eldbus_proxy_method_call_new(proxy, "ListUnitsFiltered");
+ iter = eldbus_message_iter_get(msg);
+ array = eldbus_message_iter_container_new(iter, 'a', "s");
+ if (!array)
+ EINA_LOG_ERR("Empty container");
+ eldbus_message_iter_basic_append(array, 's', "mounted");
+ eldbus_message_iter_container_close(iter, array);
+ eldbus_proxy_send(proxy, msg, _on_list_units_ret, eulogium, -1);
+ /* eldbus_proxy_call(proxy, "ListUnitsFiltered", _on_list_units_ret, eulogium, -1, "as", "{mounted}"); */
+
+ return 0;
+}
+
+static void eulogium_setup(struct eulogium_data *eulogium)
+{
+ /* This is silly, barding redonkylous and will get fixed in the refactoring */
+ if (eulogium_dbus_init(eulogium))
+ EINA_LOG_CRIT("Griffin D-Bus initialization failed!");
+ eulogium->procedures = procedures_init(eulogium->dbus.proxy[PRINTER]);
+ network_init(eulogium->dbus.proxy[NETWORK]);
+
_dbus_members_map(eulogium->dbus.proxy[NETWORK], menu_settings_network.entry);
/* TODO: put signal/method name strings in macro/LUT */
- eldbus_proxy_call(eulogium->dbus.proxy[NETWORK], "getNetworkInfo", on_method_get_network_info_ret, eulogium, -1, "");
- eldbus_proxy_signal_handler_add(eulogium->dbus.proxy[NETWORK], "NetworkInfoChanged", on_signal_network_info_changed_ret, eulogium);
+ eldbus_proxy_call(eulogium->dbus.proxy[NETWORK], "getNetworkServicesInfo", on_method_get_network_info_ret, eulogium, -1, "b", 1);
+ eldbus_proxy_signal_handler_add(eulogium->dbus.proxy[NETWORK], "networkServiceInfoChanged", on_signal_network_info_changed_ret, eulogium);
eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getError", _on_get_error_ret, eulogium, -1, "");
eldbus_proxy_signal_handler_add(eulogium->dbus.proxy[PRINTER], "onError", _on_error_ret, eulogium);
@@ -3672,26 +4186,61 @@ static int eulogium_dbus_init(struct eulogium_data *eulogium)
//eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getFileHandlers", _on_get_file_handlers_ret, eulogium, -1, "");
//eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getStatus", _on_get_status_ret, eulogium, -1, "");
//eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getPrintName", _on_get_print_name_ret, eulogium, -1, "");
- //eldbus_proxy_signal_handler_add(eulogium->dbus.proxy[PRINTER], "statusChanged", _on_status_changed_ret, eulogium);
+ eldbus_proxy_call(eulogium->dbus.proxy[PRINTER], "getProcedureMetaData", on_method_get_procedure_metadata_ret, &eulogium->procedures[PROC_PRINT], -1, "s", eulogium->procedures[PROC_PRINT].key);
- eldbus_proxy_signal_handler_add(proxy, "UnitNew", _on_unit_new_ret, eulogium);
- eldbus_proxy_signal_handler_add(proxy, "UnitRemoved", _on_unit_removed_ret, eulogium);
- msg = eldbus_proxy_method_call_new(proxy, "ListUnitsFiltered");
- iter = eldbus_message_iter_get(msg);
- array = eldbus_message_iter_container_new(iter, 'a', "s");
- if (!array)
- EINA_LOG_ERR("Empty container");
- eldbus_message_iter_basic_append(array, 's', "mounted");
- eldbus_message_iter_container_close(iter, array);
- eldbus_proxy_send(proxy, msg, _on_list_units_ret, eulogium, -1);
- /* eldbus_proxy_call(proxy, "ListUnitsFiltered", _on_list_units_ret, eulogium, -1, "as", "{mounted}"); */
+ eulogium_button_cb_data_set(&but_return, eulogium);
+ eulogium_button_cb_data_set(&but_print_abort_confirm, eulogium);
+ eulogium_button_cb_data_set(&but_print_abort, eulogium);
+ eulogium_button_cb_data_set(&but_print_tune, eulogium);
+ eulogium_button_cb_data_set(&but_main_print, eulogium);
+ eulogium_button_cb_data_set(&but_print_ignore, eulogium);
+ eulogium_button_cb_data_set(&but_print_local, eulogium);
+ eulogium_button_cb_data_set(&but_print_usb, eulogium);
+ eulogium_button_cb_data_set(&but_main_mathot, eulogium);
+ eulogium_button_cb_data_set(&but_main_system, eulogium);
+ eulogium_button_cb_data_set(&but_system_maintenance, eulogium);
+ eulogium_button_cb_data_set(&but_system_settings, eulogium);
+ eulogium_button_cb_data_set(&but_material_change, eulogium);
+ eulogium_button_cb_data_set(&but_material_settings, eulogium);
+ eulogium_button_cb_data_set(&but_settings_material_1, eulogium);
+ eulogium_button_cb_data_set(&but_settings_material_2, eulogium);
+ eulogium_button_cb_data_set(&but_change_material_1, eulogium);
+ eulogium_button_cb_data_set(&but_change_material_2, eulogium);
+ eulogium_button_cb_data_set(&but_mathot_material, eulogium);
+ eulogium_button_cb_data_set(&but_mathot_hotend, eulogium);
+ eulogium_button_cb_data_set(&but_hotend_change, eulogium);
+ eulogium_button_cb_data_set(&but_hotend_settings, eulogium);
+ eulogium_button_cb_data_set(&but_settings_hotend_1, eulogium);
+ eulogium_button_cb_data_set(&but_settings_hotend_2, eulogium);
+ eulogium_button_cb_data_set(&but_change_hotend_1, eulogium);
+ eulogium_button_cb_data_set(&but_change_hotend_2, eulogium);
- return 0;
+ 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_getall();
}
EAPI_MAIN int elm_main(int argc, char **argv)
{
Eina_Bool quit_option = EINA_FALSE;
+ Eina_Bool verbose = EINA_FALSE;
static const Ecore_Getopt optdesc = {
PACKAGE_NAME,
"%prog [options]",
@@ -3701,6 +4250,7 @@ EAPI_MAIN int elm_main(int argc, char **argv)
"eulogium program",
0,
{
+ ECORE_GETOPT_STORE_TRUE('v', "verbose", "Enable debug output"),
ECORE_GETOPT_LICENSE('L', "license"),
ECORE_GETOPT_COPYRIGHT('C', "copyright"),
ECORE_GETOPT_VERSION('V', "version"),
@@ -3709,6 +4259,7 @@ EAPI_MAIN int elm_main(int argc, char **argv)
}
};
Ecore_Getopt_Value values[] = {
+ ECORE_GETOPT_VALUE_BOOL(verbose),
ECORE_GETOPT_VALUE_BOOL(quit_option),
ECORE_GETOPT_VALUE_BOOL(quit_option),
ECORE_GETOPT_VALUE_BOOL(quit_option),
@@ -3717,39 +4268,40 @@ 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,
- .print = {
- .name = NULL,
- .url = NULL,
- .block = EINA_TRUE,
- .block_active = EINA_FALSE,
- },
.printer = {
.status = DISCONNECTED,
.file_handlers = NULL,
},
+ .networks = NULL,
.footer = NULL,
};
Evas_Object *window, *object;
// Evas_Object *splash_window;
// Eina_List *engines, *l;
- eeze_init();
- eeze_disk_function();
- if (!(eeze_disk_can_mount() && eeze_disk_can_unmount()))
- EINA_LOG_ERR("No disk (u)mount support available");
- elm_need_eldbus();
-
args = ecore_getopt_parse(&optdesc, values, argc, argv);
if (args < 0) {
EINA_LOG_CRIT("Could not parse arguments.");
return EXIT_FAILURE;
}
- INPUT_MOUSE_WHEEL_UP = ecore_event_type_new();
- INPUT_MOUSE_WHEEL_DOWN = ecore_event_type_new();
+ /* TODO: Fix logging domain stuff */
+ if (verbose)
+ eina_log_domain_level_set(PACKAGE_NAME, EINA_LOG_LEVEL_DBG);
+ else
+ eina_log_domain_level_set(PACKAGE_NAME, EINA_LOG_LEVEL_INFO);
+
+ eeze_init();
+ eeze_disk_function();
+ elm_need_eldbus();
+
+ input_init();
// elm_prefs_data_new(); /* TODO */
elm_policy_set(ELM_POLICY_QUIT, /* ELM_POLICY_QUIT_NONE */ ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
@@ -3766,10 +4318,13 @@ EAPI_MAIN int elm_main(int argc, char **argv)
textdomain(PACKAGE);
#endif
elm_app_info_set(NULL, PACKAGE, NULL); /* TODO */
-#if (ELM_VERSION_MAJOR > 1) || (ELM_VERSION_MINOR >= 10)
- elm_config_accel_preference_set("accel");
-#endif
- elm_theme_overlay_add(NULL, "./default.edj");
+// elm_app_info_set(elm_main, PACKAGE, "themes/default.edj");
+
+ 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);
+ free(buf);
#if 0 /* TODO make icon */
icon = evas_object_image_add(evas_object_evas_get(win));
@@ -3777,12 +4332,14 @@ EAPI_MAIN int elm_main(int argc, char **argv)
evas_object_image_file_set(o, buf, NULL);
elm_win_icon_object_set(win, o);
#endif
+#if (ELM_VERSION_MAJOR > 1) || (ELM_VERSION_MINOR >= 10)
+ elm_config_accel_preference_set("accel");
+#endif
elm_config_focus_highlight_enabled_set(EINA_FALSE);
elm_config_focus_highlight_animate_set(EINA_FALSE);
elm_config_softcursor_mode_set(ELM_SOFTCURSOR_MODE_OFF);
- if (eulogium_dbus_init(&eulogium))
- EINA_LOG_CRIT("Griffin D-Bus initialization failed!");
+ ui_init();
/* TODO: move into its own init */
window = elm_win_add(NULL, PACKAGE_NAME, ELM_WIN_BASIC);
@@ -3793,6 +4350,8 @@ EAPI_MAIN int elm_main(int argc, char **argv)
evas_object_repeat_events_set(window, EINA_TRUE);
elm_win_autodel_set(window, EINA_TRUE);
evas_object_smart_callback_add(window, "delete,request", _cb_eulogium_exit, NULL);
+ elm_win_focus_highlight_enabled_set(window, EINA_FALSE);
+ elm_win_focus_highlight_animate_set(window, EINA_FALSE);
object = elm_bg_add(window);
if (!object)
@@ -3821,7 +4380,7 @@ EAPI_MAIN int elm_main(int argc, char **argv)
evas_object_size_hint_weight_set(object, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_color_set(object, 0, 0, 0, 0);
evas_object_repeat_events_set(object, EINA_TRUE);
- evas_object_event_callback_add(object, EVAS_CALLBACK_MOUSE_WHEEL, _cb_eulogium_input_wheel, window); /* TODO elm_obj_ev? event propagation issues? */
+ evas_object_event_callback_add(object, EVAS_CALLBACK_MOUSE_WHEEL, input_mouse_wheel_cb, window); /* TODO elm_obj_ev? event propagation issues? */
/* TODO: don't these two input events repeat/fall through, everything else, may/should. */
evas_object_show(object);
elm_win_resize_object_add(window, object);
@@ -3829,6 +4388,10 @@ 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);
@@ -3838,6 +4401,8 @@ EAPI_MAIN int elm_main(int argc, char **argv)
free(eulogium.printer.file_handlers[i]);
free(eulogium.printer.file_handlers); /* TODO: Cleanup function? */
+ procedures_shutdown();
+
elm_shutdown();
eeze_shutdown();
diff --git a/src/eulogium.h b/src/eulogium.h
index ea16cbd..fa11711 100644
--- a/src/eulogium.h
+++ b/src/eulogium.h
@@ -16,21 +16,12 @@
#include <stdint.h>
#include "eulogium_item_list.h"
+#include "network.h"
+#include "print_data.h"
#include "procedures.h"
-
-#define IPV4_MAX_LEN 16 /* 255.255.255.255\0 */
-#define IPV6_MAX_LEN 40 /* ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff\0 */
-#define SSID_MAX_LEN 33 /* Section 7.3.2.1 SSID element of IEE802.11-2007 + \0 */
+#include "settings_data.h"
#include "ui_widgets.h"
-enum screen_type {
- NONE,
- FUNC,
- MATERIAL,
- PROGRESS,
- END, /* sentinel */
-};
-
struct printer_data {
enum printer_status status;
char **file_handlers;
@@ -61,22 +52,6 @@ struct mount_data {
Eina_List **mounts;
};
-#define _TECH_ETHERNET "ethernet"
-#define _TECH_WIFI "wifi"
-
-enum network_tech {
- ETHERNET,
- WIFI,
-};
-
-struct network_data {
- char *obj_path;
- enum network_tech tech;
- char ipv4[IPV4_MAX_LEN];
- char ipv6[IPV6_MAX_LEN];
- char ssid[SSID_MAX_LEN];
-};
-
struct eulogium_data {
Evas_Object *navi;
Evas_Object *time;
@@ -100,22 +75,7 @@ struct multi_text {
const char *text[];
};
-struct multi_screen {
- enum screen_type type;
- char *text;
- void (*func)(void *data);
- void *data;
- char *prev_button;
- char *next_button;
- /* TODO consider adding a button_def for the buttons */
-};
-
-struct multi_screen_data {
- uint_fast8_t count;
- struct multi_screen *screen;
-};
-
-Evas_Object *eulogium_generic_error(struct eulogium_data *eulogium, uint8_t eulogium_error);
+void eulogium_generic_error(struct eulogium_data *eulogium, uint_fast16_t error_code, const char *error_msg);
void eulogium_print_data_set(struct eulogium_data *eulogium, char *filepath);
@@ -125,10 +85,13 @@ Evas_Object *eulogium_tripple_button_menu(Evas_Object *parent, const struct butt
Evas_Object *eulogium_dual_button_add(Evas_Object *parent, const struct button_def *left, const struct button_def *right);
Evas_Object *eulogium_print_menu(struct eulogium_data *eulogium, char *filepath);
Evas_Object *eulogium_print_ignore(struct eulogium_data *eulogium);
-Evas_Object *eulogium_print_progress(struct eulogium_data *eulogium);
+Evas_Object *eulogium_print_progress(Evas_Object *parent, struct eulogium_data *eulogium, const struct print_data *print);
+Evas_Object *eulogium_pre_print(Evas_Object *parent, struct eulogium_data *eulogium);
+Evas_Object *eulogium_settings_dial(Evas_Object *parent, struct eulogium_data *eulogium, struct settings_dial_data *dial_data);
Evas_Object *eulogium_multi_text_menu(struct eulogium_data *eulogium, Evas_Object *parent, struct button_def *button, struct multi_text *data, const uint_fast8_t pagenum, Eina_Bool pageindex);
Evas_Object *menu_widget_list(struct eulogium_data *eulogium, Evas_Object *parent, struct menu_def *menu);
-Evas_Object *eulogium_multi_screen_menu(struct eulogium_data *eulogium, Evas_Object *parent, struct multi_screen_data *screen_data, const uint_fast8_t pagenum, Eina_Bool pageindex);
Evas_Object *eulogium_menu_confirm(Evas_Object *parent, const char *msg, const char *prev, const struct button_def *next);
+Evas_Object *eulogium_clean_print_bed(struct eulogium_data *eulogium);
+void eulogium_print_data_clear(struct eulogium_data *eulogium);
#endif /* _EULOGIUM_H */
diff --git a/src/eulogium_item_list.c b/src/eulogium_item_list.c
index 2cf62a1..8d25e55 100644
--- a/src/eulogium_item_list.c
+++ b/src/eulogium_item_list.c
@@ -11,7 +11,6 @@
#include <libintl.h>
#include "eulogium_item_list.h"
-#include "eulogium_private.h"
#include "gettext.h"
@@ -39,7 +38,8 @@ static void _item_destroy_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj E
}
static Evas_Object *_item_new(Evas_Object *parent, Evas_Object *icon, char const *label,
- struct list_item *item, Evas_Smart_Cb func, const void *data)
+ struct list_item *item, Evas_Object *item_group,
+ Evas_Smart_Cb func, const void *data)
{
Evas_Object *it;
const char *cb = "changed";
@@ -51,8 +51,11 @@ static Evas_Object *_item_new(Evas_Object *parent, Evas_Object *icon, char const
switch (item->type) {
case LIST_ITEM_RADIO:
it = elm_radio_add(parent);
- /* elm_radio_pointer_set(it, &item->state); */
- /* elm_object_style_set(it, "list"); */
+ if (item_group)
+ elm_radio_group_add(it, item_group);
+ elm_radio_value_pointer_set(it, &item->radio_value);
+ elm_object_style_set(it, "list");
+ break;
case LIST_ITEM_CHECK:
it = elm_check_add(parent);
elm_check_state_pointer_set(it, &item->state);
@@ -103,7 +106,7 @@ Evas_Object *eulogium_item_list_prepend(Evas_Object *list, Evas_Object *icon,
if ((!box) && (!list))
return NULL;
- it = _item_new(box, icon, label, item, func, data);
+ it = _item_new(box, icon, label, item, NULL, func, data);
if (!it)
return NULL;
@@ -127,7 +130,7 @@ Evas_Object *eulogium_item_list_append(Evas_Object *list, Evas_Object *icon,
if ((!box) && (!list))
return NULL;
- it = _item_new(box, icon, label, item, func, data);
+ it = _item_new(box, icon, label, item, NULL, func, data);
if (!it)
return NULL;
@@ -152,7 +155,7 @@ Evas_Object *eulogium_item_list_sorted_insert(Evas_Object *list, Evas_Object *ic
if ((!box) && (!list))
return NULL;
- it = _item_new(box, icon, label, item, func, data);
+ it = _item_new(box, icon, label, item, NULL, func, data);
if (!it)
return NULL;
diff --git a/src/eulogium_item_list.h b/src/eulogium_item_list.h
index 77e40d8..23125e2 100644
--- a/src/eulogium_item_list.h
+++ b/src/eulogium_item_list.h
@@ -22,7 +22,7 @@ struct list_item {
enum item_type type;
union {
Eina_Bool state;
- int value;
+ int radio_value;
};
Evas_Object *_widget;
};
diff --git a/src/eulogium_private.h b/src/eulogium_private.h
deleted file mode 100644
index 3735b70..0000000
--- a/src/eulogium_private.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * eulogium_private, some common private helpers
- *
- * Copyright (c) 2015 Ultimaker B.V.
- * Author: Olliver Schinagl <o.schinagl@ultimaker.com>
- *
- * SPDX-License-Identifier: AGPL-3.0+
- */
-
-#ifndef _EULOGIUM_PRIVATE_H
-#define _EULOGIUM_PRIVATE_H
-
-#include <libintl.h>
-
-#include "gettext.h"
-
-#if HAVE_GETTEXT && ENABLE_NLS
-#define _(string) gettext(string)
-#else
-#define _(string) (string)
-#endif
-
-#endif /* _EULOGIUM_PRIVATE_H */
diff --git a/src/gettext.h b/src/gettext.h
index e76b592..549565c 100644
--- a/src/gettext.h
+++ b/src/gettext.h
@@ -1,280 +1,25 @@
-/* Convenience header for conditional use of GNU <libintl.h>.
- Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009 Free Software Foundation, Inc.
+/*
+ * gettext helpers
+ *
+ * Copyright (c) 2015 Ultimaker B.V.
+ * Author: Olliver Schinagl <o.schinagl@ultimaker.com>
+ *
+ * SPDX-License-Identifier: AGPL-3.0+
+ */
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 3, or (at your option)
- any later version.
+#ifndef _GETTEXT_H
+#define _GETTEXT_H
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
+#include <libintl.h>
- You should have received a copy of the GNU General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- USA. */
+#include "libgettext.h"
-#ifndef _LIBGETTEXT_H
-#define _LIBGETTEXT_H 1
-
-/* NLS can be disabled through the configure --disable-nls option. */
-#if ENABLE_NLS
-
-/* Get declarations of GNU message catalog functions. */
-# include <libintl.h>
-
-/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by
- the gettext() and ngettext() macros. This is an alternative to calling
- textdomain(), and is useful for libraries. */
-# ifdef DEFAULT_TEXT_DOMAIN
-# undef gettext
-# define gettext(Msgid) \
- dgettext (DEFAULT_TEXT_DOMAIN, Msgid)
-# undef ngettext
-# define ngettext(Msgid1, Msgid2, N) \
- dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N)
-# endif
-
-#else
-
-/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
- chokes if dcgettext is defined as a macro. So include it now, to make
- later inclusions of <locale.h> a NOP. We don't include <libintl.h>
- as well because people using "gettext.h" will not include <libintl.h>,
- and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
- is OK. */
-#if defined(__sun)
-# include <locale.h>
-#endif
-
-/* Many header files from the libstdc++ coming with g++ 3.3 or newer include
- <libintl.h>, which chokes if dcgettext is defined as a macro. So include
- it now, to make later inclusions of <libintl.h> a NOP. */
-#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3)
-# include <cstdlib>
-# if (__GLIBC__ >= 2) || _GLIBCXX_HAVE_LIBINTL_H
-# include <libintl.h>
-# endif
-#endif
-
-/* Disabled NLS.
- The casts to 'const char *' serve the purpose of producing warnings
- for invalid uses of the value returned from these functions.
- On pre-ANSI systems without 'const', the config.h file is supposed to
- contain "#define const". */
-# undef gettext
-# define gettext(Msgid) ((const char *) (Msgid))
-# undef dgettext
-# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid))
-# undef dcgettext
-# define dcgettext(Domainname, Msgid, Category) \
- ((void) (Category), dgettext (Domainname, Msgid))
-# undef ngettext
-# define ngettext(Msgid1, Msgid2, N) \
- ((N) == 1 \
- ? ((void) (Msgid2), (const char *) (Msgid1)) \
- : ((void) (Msgid1), (const char *) (Msgid2)))
-# undef dngettext
-# define dngettext(Domainname, Msgid1, Msgid2, N) \
- ((void) (Domainname), ngettext (Msgid1, Msgid2, N))
-# undef dcngettext
-# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
- ((void) (Category), dngettext(Domainname, Msgid1, Msgid2, N))
-# undef textdomain
-# define textdomain(Domainname) ((const char *) (Domainname))
-# undef bindtextdomain
-# define bindtextdomain(Domainname, Dirname) \
- ((void) (Domainname), (const char *) (Dirname))
-# undef bind_textdomain_codeset
-# define bind_textdomain_codeset(Domainname, Codeset) \
- ((void) (Domainname), (const char *) (Codeset))
-
-#endif
-
-/* A pseudo function call that serves as a marker for the automated
- extraction of messages, but does not call gettext(). The run-time
- translation is done at a different place in the code.
- The argument, String, should be a literal string. Concatenated strings
- and other string expressions won't work.
- The macro's expansion is not parenthesized, so that it is suitable as
- initializer for static 'char[]' or 'const char[]' variables. */
-#define gettext_noop(String) String
-
-/* The separator between msgctxt and msgid in a .mo file. */
-#define GETTEXT_CONTEXT_GLUE "\004"
-
-/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a
- MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be
- short and rarely need to change.
- The letter 'p' stands for 'particular' or 'special'. */
-#ifdef DEFAULT_TEXT_DOMAIN
-# define pgettext(Msgctxt, Msgid) \
- pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
-#else
-# define pgettext(Msgctxt, Msgid) \
- pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
-#endif
-#define dpgettext(Domainname, Msgctxt, Msgid) \
- pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
-#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \
- pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category)
-#ifdef DEFAULT_TEXT_DOMAIN
-# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
- npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
-#else
-# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
- npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
-#endif
-#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
- npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
-#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \
- npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category)
-
-#ifdef __GNUC__
-__inline
-#else
-#ifdef __cplusplus
-inline
-#endif
-#endif
-static const char *
-pgettext_aux (const char *domain,
- const char *msg_ctxt_id, const char *msgid,
- int category)
-{
- const char *translation = dcgettext (domain, msg_ctxt_id, category);
- if (translation == msg_ctxt_id)
- return msgid;
- else
- return translation;
-}
-
-#ifdef __GNUC__
-__inline
-#else
-#ifdef __cplusplus
-inline
-#endif
-#endif
-static const char *
-npgettext_aux (const char *domain,
- const char *msg_ctxt_id, const char *msgid,
- const char *msgid_plural, unsigned long int n,
- int category)
-{
- const char *translation =
- dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
- if (translation == msg_ctxt_id || translation == msgid_plural)
- return (n == 1 ? msgid : msgid_plural);
- else
- return translation;
-}
-
-/* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID
- can be arbitrary expressions. But for string literals these macros are
- less efficient than those above. */
-
-#include <string.h>
-
-#define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \
- (((__GNUC__ >= 3 || __GNUG__ >= 2) && !__STRICT_ANSI__) \
- /* || __STDC_VERSION__ >= 199901L */ )
-
-#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
-#include <stdlib.h>
-#endif
-
-#define pgettext_expr(Msgctxt, Msgid) \
- dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES)
-#define dpgettext_expr(Domainname, Msgctxt, Msgid) \
- dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES)
-
-#ifdef __GNUC__
-__inline
+#if HAVE_GETTEXT && ENABLE_NLS
+#define _(string) gettext(string)
+#define N_(string) gettext_noop(string)
#else
-#ifdef __cplusplus
-inline
-#endif
-#endif
-static const char *
-dcpgettext_expr (const char *domain,
- const char *msgctxt, const char *msgid,
- int category)
-{
- size_t msgctxt_len = strlen (msgctxt) + 1;
- size_t msgid_len = strlen (msgid) + 1;
- const char *translation;
-#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
- char msg_ctxt_id[msgctxt_len + msgid_len];
-#else
- char buf[1024];
- char *msg_ctxt_id =
- (msgctxt_len + msgid_len <= sizeof (buf)
- ? buf
- : (char *) malloc (msgctxt_len + msgid_len));
- if (msg_ctxt_id != NULL)
-#endif
- {
- memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
- msg_ctxt_id[msgctxt_len - 1] = '\004';
- memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
- translation = dcgettext (domain, msg_ctxt_id, category);
-#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
- if (msg_ctxt_id != buf)
- free (msg_ctxt_id);
-#endif
- if (translation != msg_ctxt_id)
- return translation;
- }
- return msgid;
-}
-
-#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \
- dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
-#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
- dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
-
-#ifdef __GNUC__
-__inline
-#else
-#ifdef __cplusplus
-inline
-#endif
-#endif
-static const char *
-dcnpgettext_expr (const char *domain,
- const char *msgctxt, const char *msgid,
- const char *msgid_plural, unsigned long int n,
- int category)
-{
- size_t msgctxt_len = strlen (msgctxt) + 1;
- size_t msgid_len = strlen (msgid) + 1;
- const char *translation;
-#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
- char msg_ctxt_id[msgctxt_len + msgid_len];
-#else
- char buf[1024];
- char *msg_ctxt_id =
- (msgctxt_len + msgid_len <= sizeof (buf)
- ? buf
- : (char *) malloc (msgctxt_len + msgid_len));
- if (msg_ctxt_id != NULL)
-#endif
- {
- memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
- msg_ctxt_id[msgctxt_len - 1] = '\004';
- memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
- translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
-#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
- if (msg_ctxt_id != buf)
- free (msg_ctxt_id);
+#define _(string) (string)
+#define N_(string) (string)
#endif
- if (!(translation == msg_ctxt_id || translation == msgid_plural))
- return translation;
- }
- return (n == 1 ? msgid : msgid_plural);
-}
-#endif /* _LIBGETTEXT_H */
+#endif /* _GETTEXT_H */
diff --git a/src/libgettext.h b/src/libgettext.h
new file mode 100644
index 0000000..e76b592
--- /dev/null
+++ b/src/libgettext.h
@@ -0,0 +1,280 @@
+/* Convenience header for conditional use of GNU <libintl.h>.
+ Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+ USA. */
+
+#ifndef _LIBGETTEXT_H
+#define _LIBGETTEXT_H 1
+
+/* NLS can be disabled through the configure --disable-nls option. */
+#if ENABLE_NLS
+
+/* Get declarations of GNU message catalog functions. */
+# include <libintl.h>
+
+/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by
+ the gettext() and ngettext() macros. This is an alternative to calling
+ textdomain(), and is useful for libraries. */
+# ifdef DEFAULT_TEXT_DOMAIN
+# undef gettext
+# define gettext(Msgid) \
+ dgettext (DEFAULT_TEXT_DOMAIN, Msgid)
+# undef ngettext
+# define ngettext(Msgid1, Msgid2, N) \
+ dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N)
+# endif
+
+#else
+
+/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
+ chokes if dcgettext is defined as a macro. So include it now, to make
+ later inclusions of <locale.h> a NOP. We don't include <libintl.h>
+ as well because people using "gettext.h" will not include <libintl.h>,
+ and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
+ is OK. */
+#if defined(__sun)
+# include <locale.h>
+#endif
+
+/* Many header files from the libstdc++ coming with g++ 3.3 or newer include
+ <libintl.h>, which chokes if dcgettext is defined as a macro. So include
+ it now, to make later inclusions of <libintl.h> a NOP. */
+#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3)
+# include <cstdlib>
+# if (__GLIBC__ >= 2) || _GLIBCXX_HAVE_LIBINTL_H
+# include <libintl.h>
+# endif
+#endif
+
+/* Disabled NLS.
+ The casts to 'const char *' serve the purpose of producing warnings
+ for invalid uses of the value returned from these functions.
+ On pre-ANSI systems without 'const', the config.h file is supposed to
+ contain "#define const". */
+# undef gettext
+# define gettext(Msgid) ((const char *) (Msgid))
+# undef dgettext
+# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid))
+# undef dcgettext
+# define dcgettext(Domainname, Msgid, Category) \
+ ((void) (Category), dgettext (Domainname, Msgid))
+# undef ngettext
+# define ngettext(Msgid1, Msgid2, N) \
+ ((N) == 1 \
+ ? ((void) (Msgid2), (const char *) (Msgid1)) \
+ : ((void) (Msgid1), (const char *) (Msgid2)))
+# undef dngettext
+# define dngettext(Domainname, Msgid1, Msgid2, N) \
+ ((void) (Domainname), ngettext (Msgid1, Msgid2, N))
+# undef dcngettext
+# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
+ ((void) (Category), dngettext(Domainname, Msgid1, Msgid2, N))
+# undef textdomain
+# define textdomain(Domainname) ((const char *) (Domainname))
+# undef bindtextdomain
+# define bindtextdomain(Domainname, Dirname) \
+ ((void) (Domainname), (const char *) (Dirname))
+# undef bind_textdomain_codeset
+# define bind_textdomain_codeset(Domainname, Codeset) \
+ ((void) (Domainname), (const char *) (Codeset))
+
+#endif
+
+/* A pseudo function call that serves as a marker for the automated
+ extraction of messages, but does not call gettext(). The run-time
+ translation is done at a different place in the code.
+ The argument, String, should be a literal string. Concatenated strings
+ and other string expressions won't work.
+ The macro's expansion is not parenthesized, so that it is suitable as
+ initializer for static 'char[]' or 'const char[]' variables. */
+#define gettext_noop(String) String
+
+/* The separator between msgctxt and msgid in a .mo file. */
+#define GETTEXT_CONTEXT_GLUE "\004"
+
+/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a
+ MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be
+ short and rarely need to change.
+ The letter 'p' stands for 'particular' or 'special'. */
+#ifdef DEFAULT_TEXT_DOMAIN
+# define pgettext(Msgctxt, Msgid) \
+ pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#else
+# define pgettext(Msgctxt, Msgid) \
+ pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#endif
+#define dpgettext(Domainname, Msgctxt, Msgid) \
+ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \
+ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category)
+#ifdef DEFAULT_TEXT_DOMAIN
+# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
+ npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#else
+# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
+ npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#endif
+#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
+ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \
+ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+pgettext_aux (const char *domain,
+ const char *msg_ctxt_id, const char *msgid,
+ int category)
+{
+ const char *translation = dcgettext (domain, msg_ctxt_id, category);
+ if (translation == msg_ctxt_id)
+ return msgid;
+ else
+ return translation;
+}
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+npgettext_aux (const char *domain,
+ const char *msg_ctxt_id, const char *msgid,
+ const char *msgid_plural, unsigned long int n,
+ int category)
+{
+ const char *translation =
+ dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
+ if (translation == msg_ctxt_id || translation == msgid_plural)
+ return (n == 1 ? msgid : msgid_plural);
+ else
+ return translation;
+}
+
+/* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID
+ can be arbitrary expressions. But for string literals these macros are
+ less efficient than those above. */
+
+#include <string.h>
+
+#define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \
+ (((__GNUC__ >= 3 || __GNUG__ >= 2) && !__STRICT_ANSI__) \
+ /* || __STDC_VERSION__ >= 199901L */ )
+
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+#include <stdlib.h>
+#endif
+
+#define pgettext_expr(Msgctxt, Msgid) \
+ dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES)
+#define dpgettext_expr(Domainname, Msgctxt, Msgid) \
+ dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+dcpgettext_expr (const char *domain,
+ const char *msgctxt, const char *msgid,
+ int category)
+{
+ size_t msgctxt_len = strlen (msgctxt) + 1;
+ size_t msgid_len = strlen (msgid) + 1;
+ const char *translation;
+#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+ char msg_ctxt_id[msgctxt_len + msgid_len];
+#else
+ char buf[1024];
+ char *msg_ctxt_id =
+ (msgctxt_len + msgid_len <= sizeof (buf)
+ ? buf
+ : (char *) malloc (msgctxt_len + msgid_len));
+ if (msg_ctxt_id != NULL)
+#endif
+ {
+ memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
+ msg_ctxt_id[msgctxt_len - 1] = '\004';
+ memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
+ translation = dcgettext (domain, msg_ctxt_id, category);
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+ if (msg_ctxt_id != buf)
+ free (msg_ctxt_id);
+#endif
+ if (translation != msg_ctxt_id)
+ return translation;
+ }
+ return msgid;
+}
+
+#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \
+ dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
+#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
+ dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+dcnpgettext_expr (const char *domain,
+ const char *msgctxt, const char *msgid,
+ const char *msgid_plural, unsigned long int n,
+ int category)
+{
+ size_t msgctxt_len = strlen (msgctxt) + 1;
+ size_t msgid_len = strlen (msgid) + 1;
+ const char *translation;
+#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+ char msg_ctxt_id[msgctxt_len + msgid_len];
+#else
+ char buf[1024];
+ char *msg_ctxt_id =
+ (msgctxt_len + msgid_len <= sizeof (buf)
+ ? buf
+ : (char *) malloc (msgctxt_len + msgid_len));
+ if (msg_ctxt_id != NULL)
+#endif
+ {
+ memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
+ msg_ctxt_id[msgctxt_len - 1] = '\004';
+ memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
+ translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+ if (msg_ctxt_id != buf)
+ free (msg_ctxt_id);
+#endif
+ if (!(translation == msg_ctxt_id || translation == msgid_plural))
+ return translation;
+ }
+ return (n == 1 ? msgid : msgid_plural);
+}
+
+#endif /* _LIBGETTEXT_H */
diff --git a/src/network.c b/src/network.c
new file mode 100644
index 0000000..639b8d0
--- /dev/null
+++ b/src/network.c
@@ -0,0 +1,38 @@
+/*
+ * functions and data types for networking calls
+ *
+ * Copyright (c) 2015 Ultimaker B.V.
+ * Author: Olliver Schinagl <o.schinagl@ultimaker.com>
+ *
+ * SPDX-License-Identifier: AGPL-3.0+
+ */
+
+#include <Eldbus.h>
+
+#include "dbus_common.h"
+#include "network.h"
+
+#define _TECH_ETHERNET "ethernet"
+#define _TECH_WIFI "wifi"
+
+static Eldbus_Proxy *__proxy;
+
+Eldbus_Pending *network_connect_wifi(const struct network_data *network)
+{
+ if (!network)
+ return NULL;
+ if (!network->obj_path)
+ return NULL;
+
+ return eldbus_proxy_call(__proxy, "connectWifiNetwork", on_method_generic_bool_ret, "connectWifiNetwork", -1, "os", network->obj_path, "");
+}
+
+void network_init(Eldbus_Proxy *proxy)
+{
+ __proxy = proxy;
+};
+
+void network_shutdown(void)
+{
+ eldbus_proxy_unref(__proxy);
+};
diff --git a/src/network.h b/src/network.h
new file mode 100644
index 0000000..db95412
--- /dev/null
+++ b/src/network.h
@@ -0,0 +1,39 @@
+/*
+ * functions and data types for networking calls
+ *
+ * Copyright (c) 2015 Ultimaker B.V.
+ * Author: Olliver Schinagl <o.schinagl@ultimaker.com>
+ *
+ * SPDX-License-Identifier: AGPL-3.0+
+ */
+
+#ifndef _NETWORK_H
+#define _NETWORK_H
+
+#include <Eina.h>
+#include <Eldbus.h>
+#include <stdint.h>
+
+#define IPV4_MAX_LEN 16 /* 255.255.255.255\0 */
+#define IPV6_MAX_LEN 40 /* ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff\0 */
+#define SSID_MAX_LEN 33 /* Section 7.3.2.1 SSID element of IEE802.11-2007 + \0 */
+
+enum network_tech {
+ TECH_UNKNOWN,
+ TECH_ETHERNET,
+ TECH_WIFI,
+};
+
+struct network_data {
+ char *obj_path;
+ enum network_tech tech;
+ char ipv4[IPV4_MAX_LEN];
+ char ipv6[IPV6_MAX_LEN];
+ char ssid[SSID_MAX_LEN];
+};
+
+Eldbus_Pending *network_connect_wifi(const struct network_data *network);
+void network_init(Eldbus_Proxy *proxy);
+void network_shutdown(void);
+
+#endif /* _NETWORK_H */
diff --git a/src/print_data.c b/src/print_data.c
new file mode 100644
index 0000000..0a88610
--- /dev/null
+++ b/src/print_data.c
@@ -0,0 +1,22 @@
+/*
+ * function and data types for print information
+ *
+ * Copyright (c) 2015 Ultimaker B.V.
+ * Author: Olliver Schinagl <o.schinagl@ultimaker.com>
+ *
+ * SPDX-License-Identifier: AGPL-3.0+
+ */
+
+#include <Eina.h>
+
+#include "print_data.h"
+
+void print_clear(struct print_data *print)
+{
+ free(print->jobname);
+ print->jobname = NULL;
+
+ print->time = 0;
+ print->total_time = 0;
+ print->value = 0.0;
+}
diff --git a/src/print_data.h b/src/print_data.h
index adebb20..5d901f3 100644
--- a/src/print_data.h
+++ b/src/print_data.h
@@ -11,18 +11,28 @@
#define _PRINT_DATA_H
#include <Eina.h>
+#include <Eldbus.h>
#include <stdint.h>
-struct print_data {
- uint_fast32_t time;
- double progress;
+#include "procedures.h"
+#include "settings_data.h"
+#include "ui_widgets.h"
+
+struct print_data { /* XXX progress data or the like, strip non-progress data */
+ const char *title;
+ const char *status;
+ char *jobname;
char *url;
- char *name;
- Eina_Bool name_changed;
+ int_fast32_t time;
+ int_fast32_t total_time;
+ double value; /* progress */
char *flags;
double material;
Eina_Bool block;
Eina_Bool block_active;
+ Eldbus_Pending *(*method_set)(struct settings_dial_data *dial_data);
+ Eldbus_Pending *(*method_get)(struct procedure_data *procedure);
+ enum procedure_key proc_key;
};
enum printer_status {
@@ -39,4 +49,6 @@ enum printer_status {
PAUSED,
};
+void print_clear(struct print_data *print);
+
#endif /* _PRINT_DATA_H */
diff --git a/src/procedures.c b/src/procedures.c
index be3ab5e..f4ce6f5 100644
--- a/src/procedures.c
+++ b/src/procedures.c
@@ -1,4 +1,5 @@
/*
+ * TODO: rename this to dbus_procedures.c
* eulogium_procedures, available procedures
*
* Copyright (c) 2015 Ultimaker B.V.
@@ -11,57 +12,194 @@
#include <Eldbus.h>
#include <stdint.h>
-#include "procedures.h"
-
#include "dbus_common.h"
+#include "eulogium.h"
#include "print_data.h"
+#include "procedures.h"
+#include "settings_data.h"
+#include "ui_widgets.h"
+
+#define _PROC_FIRMWARE_UPDATE "FIRMWARE_UPDATE"
#define _PROC_PRINT "PRINT"
-#define _PROC_HEATUP_HOTEND "HEATUP_HOTEND"
+#define _META_PROGRESS_JOBNAME "jobname"
+#define _META_PROGRESS_TIME "time"
+#define _META_PROGRESS_TIME_TOTAL "time_total"
+#define _META_PROGRESS "progress"
+
#define _PROC_POST_PRINT "POST_PRINT"
#define _PROC_PRE_PRINT_SETUP "PRE_PRINT_SETUP"
+#define _PROC_RUN_PRE_PRINT_SETUP "RUN_PRE_PRINT_SETUP"
+#define _PROC_WAIT_FOR_CLEANUP "WAIT_FOR_CLEANUP"
+
+#define _PROC_BED_HEATUP "HEATUP_BED"
+#define _PROC_BED_MOVE "MOVE_BED"
+#define _PROC_HOTEND_HEATUP_0 "HEATUP_HOTEND_0"
+#define _PROC_HOTEND_HEATUP_1 "HEATUP_HOTEND_1"
+#define _PROC_HOTEND_ACTIVE_SET "SWITCH_ACTIVE_HOTEND"
+#define _PROC_PRINT_SPEED "PRINT_SPEED"
+#define _PROC_FAN_SPEED "FAN_SPEED"
+#define _PROC_FLOW_RATE "MATERIAL_FLOW"
+#define _PROC_RETRACTION_LENGTH "RETRACTION_LENGTH"
+#define _PROC_RETRACTION_SPEED "RETRACTION_SPEED"
+#define _PROC_RETRACTION_ZHOP "RETRACTION_ZHOP"
+#define _PROC_BED_LEVEL_AUTO "AUTO_LEVEL_BED"
+#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_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 _META_CURRENT "current"
+#define _META_TARGET "target"
+
+#define _STEP_FIRMWARE_UPDATE_CHECKING "FIRMWARE_UPDATE_CHECKING"
+#define _STEP_FIRMWARE_UPDATE_WRITING "FIRMWARE_UPDATE_WRITING"
+#define _STEP_FIRMWARE_UPDATE_VERIFYING "FIRMWARE_UPDATE_VERIFYING"
+#define _STEP_WAITING "WAITING"
+#define _STEP_PRINTING "PRINTING"
+#define _STEP_PRINT_SPEEDING "PRINT_SPEEDING"
+#define _STEP_MOVING "MOVING"
+#define _STEP_HOMEING "HOMEING"
+#define _STEP_HOTEND_HEATING "HOTEND_HEATING"
+#define _STEP_BED_HEATING "BED_HEATING"
+#define _STEP_FAN_SPEEDING "FAN_SPEEDING"
+#define _STEP_MATERIAL_FLOWING "MATERIAL_FLOWING"
+#define _STEP_RETRACTION_SPEEDING "RETRACTION_SPEEDING"
+#define _STEP_RETRACTION_LENGTHENING "RETRACTION_LENGTHENING"
+#define _STEP_RETRACTION_HOPPING "RETRACTION_HOPPING"
+#define _STEP_AUTOMATIC_BED_LEVELING "AUTOMATIC_BED_LEVELING"
+#define _STEP_RAISING "RAISING"
+#define _STEP_CURRENTING "CURRENTING"
+#define _STEP_JERKING "JERKING"
+#define _STEP_SWITCHING "SWITCHING"
+
+#define _PROC_MSG_PRINTER_CLEANED "PRINTER_CLEANED"
-void _container_basic_variant(Eldbus_Message_Iter *parent, const char type, void *data)
+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, ...)
{
Eldbus_Message_Iter *child;
+ va_list value;
char sig[2] = { '\0' };
sig[0] = type;
child = eldbus_message_iter_container_new(parent, 'v', sig);
- eldbus_message_iter_basic_append(child, type, data);
+ va_start(value, type);
+ eldbus_message_iter_arguments_vappend(child, sig, value);
+ va_end(value);
eldbus_message_iter_container_close(parent, child);
}
-static struct procedure_data procedures[] = {
- {
- .key = _PROC_PRINT,
- .keylen = sizeof(_PROC_PRINT),
- .executable = EINA_FALSE,
- .available = EINA_FALSE,
- }, {
- .key = _PROC_HEATUP_HOTEND,
- .keylen = sizeof(_PROC_HEATUP_HOTEND),
- .executable = EINA_FALSE,
- .available = EINA_FALSE,
- }, {
- .key = _PROC_POST_PRINT,
- .keylen = sizeof(_PROC_POST_PRINT),
- .executable = EINA_FALSE,
- .available = EINA_FALSE,
- }, {
- .key = _PROC_PRE_PRINT_SETUP,
- .keylen = sizeof(_PROC_PRE_PRINT_SETUP),
- .executable = EINA_FALSE,
- .available = EINA_FALSE,
- }, {
- NULL /* sentinel */
+static void _container_dict_basic_variant_append(Eldbus_Message_Iter *array, int type, const char *key, ...) /* TODO rename something key/value */
+{
+ Eldbus_Message_Iter *value, *dict;
+ va_list ap;
+ char sig[2] = { '\0' };
+
+ sig[0] = type;
+
+ dict = eldbus_message_iter_container_new(array, 'e', NULL); /* { */
+ eldbus_message_iter_basic_append(dict, 's', key); /* s (key) */
+ value = eldbus_message_iter_container_new(dict, 'v', sig); /* start variant */
+ va_start(ap, key);
+ eldbus_message_iter_arguments_vappend(value, sig, ap); /* v (value) */
+ va_end(ap);
+ eldbus_message_iter_container_close(dict, value); /* end variant */
+ eldbus_message_iter_container_close(array, dict); /* } */
+}
+
+static void _get_meta_progress(void *data, const void *key, Eldbus_Message_Iter *var)
+{
+ struct procedure_data *procedure = data;
+ struct print_data *progress = procedure->meta; /* XXX rename to progress data | check meta_type if it is the correct type. */
+ const char *skey = key;
+ char *var_sig;
+
+ if (!progress) {
+ EINA_LOG_ERR("dial_data should not be null");
+ return;
}
-};
-struct procedure_data *procedures_init(void)
+ var_sig = eldbus_message_iter_signature_get(var);
+ if (!strcmp(skey, _META_PROGRESS_JOBNAME)) {
+ char *value = NULL;
+
+ if (!eldbus_message_iter_arguments_get(var, "s", &value)) {/* TODO: check if value is leaking mem here */
+ EINA_LOG_ERR("Message signature does not match \"s\", got %s", var_sig);
+ } else {
+ uint_fast16_t value_size = strlen(value) + 1;
+
+ progress->jobname = realloc(progress->jobname, value_size);
+ strncpy(progress->jobname, value, value_size);
+ }
+
+ } else if (!strcmp(skey, _META_PROGRESS_TIME)) {
+ int32_t value = 0;
+
+ if (!eldbus_message_iter_arguments_get(var, "i", &value))
+ EINA_LOG_ERR("Message signature does not match \"i\", got %s", var_sig);
+ else
+ progress->time = value;
+ } else if (!strcmp(skey, _META_PROGRESS_TIME_TOTAL)) {
+ int32_t value = 0;
+
+ if (!eldbus_message_iter_arguments_get(var, "i", &value))
+ EINA_LOG_ERR("Message signature does not match \"i\", got %s", var_sig);
+ else
+ progress->total_time = value;
+ }
+ if (!strcmp(skey, _META_PROGRESS)) {
+ double value = 0.0;
+
+ if (!eldbus_message_iter_arguments_get(var, "d", &value))
+ EINA_LOG_ERR("Message signature does not match \"d\", got %s", var_sig);
+ else
+ progress->value = value;
+ }
+ free(var_sig);
+
+ ecore_event_add(procedure->poll.event, NULL, NULL, procedure);
+}
+
+static void _get_meta_cur_tar(void *data, const void *key, Eldbus_Message_Iter *var)
{
- return procedures;
-};
+ struct procedure_data *procedure = data;
+ struct settings_dial_data *dial_data = procedure->meta;
+ const char *skey = key;
+ char *var_sig;
+ double value;
+
+ if (!dial_data) {
+ EINA_LOG_ERR("dial_data should not be null");
+ return;
+ }
+
+ var_sig = eldbus_message_iter_signature_get(var);
+ if (!strcmp(skey, _META_TARGET)) {
+ if (!eldbus_message_iter_arguments_get(var, "d", &value))
+ EINA_LOG_ERR("Message signature does not match \"d\", got %s", var_sig);
+ else
+ dial_data->value = value;
+ } else if (!strcmp(skey, _META_CURRENT)) {
+ if (!eldbus_message_iter_arguments_get(var, "d", &value))
+ EINA_LOG_ERR("Message signature does not match \"d\", got %s", var_sig);
+ else
+ dial_data->value_end = value;
+ }
+ free(var_sig);
+
+ //ecore_event_add();
+}
static void _on_start_print_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
{
@@ -74,7 +212,7 @@ static void _on_start_print_ret(void *data, const Eldbus_Message *msg, Eldbus_Pe
return;
}
if (!eldbus_message_arguments_get(msg, "b", &print_started)) {
- EINA_LOG_ERR("Failed to start print.");
+ EINA_LOG_ERR("Signature mistmatch, \"b\".");
return;
}
if (print_started == EINA_TRUE) {
@@ -82,32 +220,754 @@ static void _on_start_print_ret(void *data, const Eldbus_Message *msg, Eldbus_Pe
print->block = EINA_FALSE;
} else {
EINA_LOG_ERR("Unable to start print");
+ /* TODO, if print start failed, invalidate all PRINTING pages */
+ //ui_stack_page_invalidate(eulogium->navi, PAGE_PRINTING);
+ }
+}
+
+static void _on_start_dial_ret(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending EINA_UNUSED)
+{
+ char *label = data;
+ const char *errname, *errmsg;
+ Eina_Bool procedure_started = EINA_FALSE;
+
+ if (eldbus_message_error_get(msg, &errname, &errmsg)) {
+ EINA_LOG_ERR("%s %s", errname, errmsg);
+ return;
+ }
+ if (!eldbus_message_arguments_get(msg, "b", &procedure_started)) {
+ EINA_LOG_ERR("Signature mistmatch, \"b\".");
+ return;
+ }
+ if (procedure_started == EINA_TRUE) {
+ EINA_LOG_INFO("Procedure %s has been successfully started", label);
+ } else {
+ EINA_LOG_ERR("Unable to start procedure %s", label);
+ /* TODO, if tuning failed .. */
+ }
+}
+
+Eina_Bool _print_progress_cleanup(void *data, Elm_Object_Item *eoi EINA_UNUSED)
+{
+ eulogium_print_data_clear(data);
+
+ return EINA_TRUE;
+}
+
+void procedure_process_step(struct eulogium_data *eulogium, struct procedure_data *procedure)
+{
+ Evas_Object *content = NULL;
+ Elm_Object_Item *navi_item = NULL;
+ enum navi_page_state page_state = PAGE_NORMAL;
+
+ if (!procedure)
+ return;
+ if (!procedure->step_active)
+ return;
+
+ /* XXX TODO build 'remember previous screen so we don't redraw the same' */
+ 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);
+ page_state = PAGE_NORMAL;
+ }
+ if (procedure->step_active->step == STEP_PRINTING) {
+ content = eulogium_print_progress(eulogium->navi, eulogium, (struct print_data *)procedure->meta);
+ page_state = PAGE_PRINTING;
+ }
+ if (procedure->step_active->step == PROC_WAIT_FOR_CLEANUP) {
+ ui_stack_page_invalidate(eulogium->navi, PAGE_PRINTING);
+ content = eulogium_clean_print_bed(eulogium);
+ }
+
+ if (!content)
+ return;
+
+ navi_item = elm_naviframe_item_simple_push(eulogium->navi, content);
+ elm_object_item_data_set(navi_item, (void *)page_state);
+ if (page_state == PAGE_PRINTING)
+ elm_naviframe_item_pop_cb_set(navi_item, _print_progress_cleanup, eulogium);
+}
+
+static struct procedure_msg print_msgs[] = {
+ {
+ .key = _PROC_MSG_PRINTER_CLEANED,
+ .msg = PROC_MSG_PRINTER_CLEANED,
+ }, { NULL }, /* sentinel */
+};
+
+static struct procedure_step steps_firmware_update[] = {
+ {
+ .key = _STEP_FIRMWARE_UPDATE_CHECKING,
+ .step = STEP_FIRMWARE_UPDATE_CHECKING,
+ }, {
+ .key = _STEP_FIRMWARE_UPDATE_WRITING,
+ .step = STEP_FIRMWARE_UPDATE_WRITING,
+ }, {
+ .key = _STEP_FIRMWARE_UPDATE_VERIFYING,
+ .step = STEP_FIRMWARE_UPDATE_VERIFYING,
+ }, { NULL }, /* sentinel */
+};
+
+static struct procedure_step steps_print[] = {
+ {
+ .key = _PROC_RUN_PRE_PRINT_SETUP,
+ .step = PROC_RUN_PRE_PRINT_SETUP,
+ }, {
+ .key = _STEP_PRINTING,
+ .step = STEP_PRINTING,
+ }, {
+ .key = _PROC_POST_PRINT,
+ .step = PROC_POST_PRINT,
+ }, {
+ .key = _PROC_WAIT_FOR_CLEANUP,
+ .step = PROC_WAIT_FOR_CLEANUP,
+ }, { NULL }, /* sentinel */
+};
+
+static struct procedure_step steps_bed_temp_set[] = {
+ {
+ .key = _STEP_BED_HEATING,
+ .step = STEP_HEATING,
+ }, { NULL }, /* sentinel */
+};
+
+static struct procedure_step steps_hotend_temp_set[] = {
+ {
+ .key = _STEP_HOTEND_HEATING,
+ .step = STEP_HEATING,
+ }, { NULL }, /* sentinel */
+};
+
+static struct procedure_step steps_fan_speed_set[] = {
+ {
+ .key = _STEP_FAN_SPEEDING,
+ .step = STEP_SPEEDING,
+ }, { NULL }, /* sentinel */
+};
+
+static struct procedure_step steps_flow_rate_set[] = {
+ {
+ .key = _STEP_MATERIAL_FLOWING,
+ .step = STEP_SPEEDING,
+ }, { NULL }, /* sentinel */
+};
+
+static struct procedure_step steps_print_speed_set[] = {
+ {
+ .key = _STEP_PRINT_SPEEDING,
+ .step = STEP_SPEEDING,
+ }, { NULL }, /* sentinel */
+};
+
+static struct procedure_step steps_retraction_length_set[] = {
+ {
+ .key = _STEP_RETRACTION_LENGTHENING,
+ .step = STEP_LENGTHENING,
+ }, { NULL }, /* sentinel */
+};
+
+static struct procedure_step steps_retraction_speed_set[] = {
+ {
+ .key = _STEP_RETRACTION_SPEEDING,
+ .step = STEP_SPEEDING,
+ }, { NULL }, /* sentinel */
+};
+
+static struct procedure_step steps_retraction_zhop_set[] = {
+ {
+ .key = _STEP_RETRACTION_HOPPING,
+ .step = STEP_HOPPING,
+ }, { NULL }, /* sentinel */
+};
+
+static struct procedure_step steps_bed_level_auto[] = {
+ {
+ .key = _STEP_HOMEING,
+ .step = STEP_HOMEING,
+ }, {
+ .key = _STEP_AUTOMATIC_BED_LEVELING,
+ .step = STEP_AUTOMATIC_BED_LEVELING,
+ }, {
+ .key = _STEP_WAITING,
+ .step = STEP_WAITING,
+ }, { NULL }, /* sentinel */
+};
+
+static struct procedure_step steps_bed_raise[] = {
+ {
+ .key = _STEP_HOMEING,
+ .step = STEP_HOMEING,
+ }, {
+ .key = _STEP_RAISING,
+ .step = STEP_RAISING,
+ }, {
+ .key = _STEP_WAITING,
+ .step = STEP_WAITING,
+ }, { NULL }, /* sentinel */
+};
+
+static struct procedure_step steps_bed_home[] = {
+ {
+ .key = _STEP_HOMEING,
+ .step = STEP_HOMEING,
+ }, {
+ .key = _STEP_WAITING,
+ .step = STEP_WAITING,
+ }, { NULL }, /* sentinel */
+};
+
+static struct procedure_step steps_head_home[] = {
+ {
+ .key = _STEP_HOMEING,
+ .step = STEP_HOMEING,
+ }, {
+ .key = _STEP_WAITING,
+ .step = STEP_WAITING,
+ }, { NULL }, /* sentinel */
+};
+
+static struct procedure_step steps_move[] = {
+ {
+ .key = _STEP_MOVING,
+ .step = STEP_MOVING,
+ }, {
+ .key = _STEP_WAITING,
+ .step = STEP_WAITING,
+ }, { NULL }, /* sentinel */
+};
+
+static struct procedure_step steps_jerk_xyz_set[] = {
+ {
+ .key = _STEP_JERKING,
+ .step = STEP_JERKING,
+ }, { NULL }, /* sentinel */
+};
+
+static struct procedure_step steps_current_xyze_set[] = {
+ {
+ .key = _STEP_CURRENTING,
+ .step = STEP_CURRENTING,
+ }, { NULL }, /* sentinel */
+};
+
+static struct procedure_step steps_hotend_active_set[] = {
+ {
+ .key = _STEP_SWITCHING,
+ .step = STEP_SWITCHING,
+ }, { NULL }, /* sentinel */
+};
+
+static struct procedure_data procedures[] = {
+ [PROC_FIRMWARE_UPDATE] = {
+ .key = _PROC_FIRMWARE_UPDATE,
+ .status = PROC_READY,
+ .parser = _get_meta_progress,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_firmware_update,
+ .step_active = NULL,
+ .meta = NULL, /* struct progress_data */
+ .poll = {
+ .in = 0.5,
+ .timer = NULL,
+ },
+ },
+ [PROC_PRINT] = {
+ .key = _PROC_PRINT,
+ .status = PROC_READY,
+ .parser = _get_meta_progress,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_print,
+ .step_active = NULL,
+ .meta = NULL, /* struct print_data */
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_BED_HEATUP] = {
+ .key = _PROC_BED_HEATUP,
+ .status = PROC_READY,
+ .parser = _get_meta_cur_tar,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_bed_temp_set,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_HOTEND_HEATUP_0] = {
+ .key = _PROC_HOTEND_HEATUP_0,
+ .status = PROC_READY,
+ .parser = _get_meta_cur_tar,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_hotend_temp_set,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_HOTEND_HEATUP_1] = {
+ .key = _PROC_HOTEND_HEATUP_1,
+ .status = PROC_READY,
+ .parser = _get_meta_cur_tar,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_hotend_temp_set,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_HOTEND_ACTIVE_SET] = {
+ .key = _PROC_HOTEND_ACTIVE_SET,
+ .status = PROC_READY,
+ .parser = _get_meta_cur_tar,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_hotend_active_set,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_PRINT_SPEED] = {
+ .key = _PROC_PRINT_SPEED,
+ .status = PROC_READY,
+ .parser = _get_meta_cur_tar,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_print_speed_set,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_FAN_SPEED] = {
+ .key = _PROC_FAN_SPEED,
+ .status = PROC_READY,
+ .parser = _get_meta_cur_tar,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_fan_speed_set,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_FLOW_RATE] = {
+ .key = _PROC_FLOW_RATE,
+ .status = PROC_READY,
+ .parser = _get_meta_cur_tar,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_flow_rate_set,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_RETRACTION_LENGTH] = {
+ .key = _PROC_RETRACTION_LENGTH,
+ .status = PROC_READY,
+ .parser = _get_meta_cur_tar,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_retraction_length_set,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_RETRACTION_SPEED] = {
+ .key = _PROC_RETRACTION_SPEED,
+ .status = PROC_READY,
+ .parser = _get_meta_cur_tar,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_retraction_speed_set,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_RETRACTION_ZHOP] = {
+ .key = _PROC_RETRACTION_ZHOP,
+ .status = PROC_READY,
+ .parser = _get_meta_cur_tar,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_retraction_zhop_set,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_BED_LEVEL_AUTO] = {
+ .key = _PROC_BED_LEVEL_AUTO,
+ .status = PROC_READY,
+ .parser = _get_meta_cur_tar,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_bed_level_auto,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_BED_RAISE] = {
+ .key = _PROC_BED_RAISE,
+ .status = PROC_READY,
+ .parser = _get_meta_cur_tar,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_bed_raise,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_BED_HOME] = {
+ .key = _PROC_BED_HOME,
+ .status = PROC_READY,
+ .parser = _get_meta_cur_tar,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_bed_home,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_BED_MOVE] = {
+ .key = _PROC_BED_MOVE,
+ .status = PROC_READY,
+ .parser = NULL,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_move,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_HEAD_HOME] = {
+ .key = _PROC_HEAD_HOME,
+ .status = PROC_READY,
+ .parser = _get_meta_cur_tar,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_head_home,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_MATERIAL_MOVE_0] = {
+ .key = _PROC_MATERIAL_MOVE_0,
+ .status = PROC_READY,
+ .parser = NULL,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_move,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_MATERIAL_MOVE_1] = {
+ .key = _PROC_MATERIAL_MOVE_1,
+ .status = PROC_READY,
+ .parser = NULL,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_move,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_JERK_XY] = {
+ .key = _PROC_JERK_XY,
+ .status = PROC_READY,
+ .parser = _get_meta_cur_tar,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_jerk_xyz_set,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_JERK_Z] = {
+ .key = _PROC_JERK_Z,
+ .status = PROC_READY,
+ .parser = _get_meta_cur_tar,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_jerk_xyz_set,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_CURRENT_XY] = {
+ .key = _PROC_CURRENT_XY,
+ .status = PROC_READY,
+ .parser = _get_meta_cur_tar,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_current_xyze_set,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_CURRENT_Z] = {
+ .key = _PROC_CURRENT_Z,
+ .status = PROC_READY,
+ .parser = _get_meta_cur_tar,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_current_xyze_set,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+ [PROC_CURRENT_E] = {
+ .key = _PROC_CURRENT_E,
+ .status = PROC_READY,
+ .parser = _get_meta_cur_tar,
+ .executable = EINA_FALSE,
+ .available = EINA_FALSE,
+ ._steps = steps_current_xyze_set,
+ .step_active = NULL,
+ .meta = NULL,
+ .poll = {
+ .in = 0.0,
+ .timer = NULL
+ },
+ },
+};
+
+void procedure_meta_set(struct procedure_data *procedure, void *data)
+{
+ procedure->meta = data;
+}
+
+void *procedure_meta_get(struct procedure_data *procedure)
+{
+ return procedure->meta;
+}
+
+const struct procedure_step *procedure_step_get(const struct procedure_data *proc, const char *key)
+{
+ uint_fast16_t i;
+
+ if (!proc)
+ return NULL;
+
+ for (i = 0; proc->_steps[i].key; i++) {
+ if (!strcmp(proc->_steps[i].key, key))
+ return &proc->_steps[i];
+ }
+
+ return NULL;
+};
+
+struct procedure_data *procedure_get(const char *key)
+{
+ enum procedure_key i;
+
+ for (i = PROC_PRINT; procedures[i].key; i++) {
+ if (!strcmp(procedures[i].key, key))
+ return &procedures[i];
}
+
+ return NULL;
+};
+
+Eldbus_Pending *procedure_message(const struct procedure_data *proc, const struct procedure_msg *msg)
+{
+ return eldbus_proxy_call(__proxy, "messageProcedure", NULL, NULL, -1, "ss", proc->key, msg->key);
+}
+
+Eldbus_Pending *procedure_led_brightness_set(const Evas_Object *dial)
+{
+ //struct settings_dial_data *dial_data;
+
+// dial_data = evas_object_data_get(dial, "dial_data");
+// eldbus_proxy_call(dial_data->proxy, "SetBrightness", _on_dial_units_update_ret, dial, -1, "");
+}
+
+Eldbus_Pending *procedure_print_printer_cleaned(void) /* XXX pass procedure step? */
+{
+ return eldbus_proxy_call(__proxy, "messageProcedure", on_method_generic_bool_ret, NULL, -1, "ss", _PROC_PRINT, _PROC_MSG_PRINTER_CLEANED);
+}
+
+Eldbus_Pending *procedure_start_simple(const enum procedure_key proc_key)
+{
+ Eldbus_Message *msg;
+ Eldbus_Message_Iter *iter, *array;
+
+ msg = eldbus_proxy_method_call_new(__proxy, "startProcedure");
+ iter = eldbus_message_iter_get(msg);
+
+ /* Compose msg sa{sv} */
+ eldbus_message_iter_basic_append(iter, 's', procedures[proc_key].key);
+ array = eldbus_message_iter_container_new(iter, 'a', "{sv}");
+
+ _container_dict_basic_variant_append(array, 's', "dummy", "");
+
+ eldbus_message_iter_container_close(iter, array);
+
+ return eldbus_proxy_send(__proxy, msg, on_method_generic_bool_ret, NULL, -1);
}
-Eldbus_Pending *procedure_start_print(Eldbus_Proxy *proxy, struct print_data *print)
+/* TODO half of the content of this procedure is generic and could be gotten from the procedure if it where a parameter. This can be made much more generic. */
+Eldbus_Pending *procedure_print_start(const struct print_data *print)
{
Eldbus_Message *msg;
- Eldbus_Message_Iter *iter, *dict, *array;
+ Eldbus_Message_Iter *iter, *array;
- msg = eldbus_proxy_method_call_new(proxy, "startProcedure");
+ msg = eldbus_proxy_method_call_new(__proxy, "startProcedure");
iter = eldbus_message_iter_get(msg);
/* Compose msg sa{sv} */
eldbus_message_iter_basic_append(iter, 's', "PRINT");
array = eldbus_message_iter_container_new(iter, 'a', "{sv}");
- dict = eldbus_message_iter_container_new(array, 'e', NULL);
- eldbus_message_iter_basic_append(dict, 's', "name");
- _container_basic_variant(dict, 's', print->name);
- eldbus_message_iter_container_close(array, dict);
+ _container_dict_basic_variant_append(array, 's', "name", print->jobname);
+ _container_dict_basic_variant_append(array, 's', "url", print->url);
+
+ eldbus_message_iter_container_close(iter, array);
+
+ return eldbus_proxy_send(__proxy, msg, _on_start_print_ret, print, -1);
+}
+
+/* TODO, add resend/retry if actual value does not match current value */
+// XXX procedure_start_target(const enum procedure_key proc_key);
+Eldbus_Pending *procedure_target_set(const enum procedure_key proc_key)
+{
+ Eldbus_Message *msg;
+ Eldbus_Message_Iter *iter, *array;
+ struct procedure_data *procedure = &procedures[proc_key];
+ struct settings_dial_data *dial_data = procedure->meta;
+
+ msg = eldbus_proxy_method_call_new(__proxy, "startProcedure");
+ iter = eldbus_message_iter_get(msg);
+
+ /* Compose msg sa{sv} */
+ printf("Prockey: %s\n", procedure->key);
+ eldbus_message_iter_basic_append(iter, 's', procedure->key);
+ array = eldbus_message_iter_container_new(iter, 'a', "{sv}");
- dict = eldbus_message_iter_container_new(array, 'e', NULL);
- eldbus_message_iter_basic_append(dict, 's', "url");
- _container_basic_variant(dict, 's', print->url);
- eldbus_message_iter_container_close(array, dict);
+ _container_dict_basic_variant_append(array, 'd', "target", dial_data->value);
eldbus_message_iter_container_close(iter, array);
- return eldbus_proxy_send(proxy, msg, &_on_start_print_ret, print, -1);
+ return eldbus_proxy_send(__proxy, msg, _on_start_dial_ret, dial_data->label, -1);
+}
+
+void procedure_metadata_poll(struct procedure_data *procedure, Eina_Bool polling)
+{
+ if (polling)
+ if (procedure->poll.timer)
+ return; /* Timer already running */
+ // procedure->poll.timer = ecore_timer_add(procedure->poll.in, procedure->poll.func, procedure);
+ if (!procedure->poll.timer) {
+ EINA_LOG_CRIT("Unable to create metadata polling timer");
+ } else {
+ if (procedure->poll.timer)
+ ecore_timer_del(procedure->poll.timer);
+ else
+ EINA_LOG_CRIT("Unable to delete non-existing timer");
+ }
+}
+
+Eldbus_Pending *procedure_metadata_get(const struct procedure_data *procedure)
+{
+ return eldbus_proxy_call(__proxy, "getProcedureMetaData", on_method_get_procedure_metadata_ret, procedure, -1, "s", procedure->key);
}
+
+Eldbus_Pending *procedure_metadata_key_get(enum procedure_key proc_key)
+{
+ return eldbus_proxy_call(__proxy, "getProcedureMetaData", on_method_get_procedure_metadata_ret, &procedures[proc_key], -1, "s", procedures[proc_key].key);
+}
+
+void procedure_meta_getall(void)
+{
+ enum procedure_key i;
+
+ for (i = PROC_NONE; i < PROC_LAST; i++)
+ if (procedures[i].meta)
+ procedure_metadata_key_get(i);
+};
+
+struct procedure_data *procedures_init(Eldbus_Proxy *proxy)
+{
+ enum procedure_key i;
+
+ __proxy = proxy;
+
+ 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.
+ */
+ return procedures;
+};
+
+void procedures_shutdown(void)
+{
+ eldbus_proxy_unref(__proxy);
+};
diff --git a/src/procedures.h b/src/procedures.h
index 79e23eb..44d1498 100644
--- a/src/procedures.h
+++ b/src/procedures.h
@@ -1,5 +1,5 @@
/*
- * eulogium_procedures, available procedures
+ * procedures, available procedures
*
* Copyright (c) 2015 Ultimaker B.V.
* Author: Olliver Schinagl <o.schinagl@ultimaker.com>
@@ -7,23 +7,164 @@
* SPDX-License-Identifier: AGPL-3.0+
*/
-#ifndef _EULOGIUM_PROCEDURES_H
-#define _EULOGIUM_PROCEDURES_H
+#ifndef _PROCEDURES_H
+#define _PROCEDURES_H
+#include <Ecore.h>
#include <Eina.h>
#include <Eldbus.h>
#include <stdint.h>
-#include "print_data.h"
+#include "gettext.h"
+
+#define LABEL_PROC_NONE N_("None")
+#define LABEL_PROC_BED_MOVE N_("Moving buildplate")
+#define LABEL_PROC_BED_HEATUP N_("Heating buildplate")
+#define LABEL_PROC_HOTEND_HEATUP_0 N_("Heating left hotend")
+#define LABEL_PROC_HOTEND_HEATUP_1 N_("Heating right hotend")
+#define LABEL_PROC_HOTEND_ACTIVE_SET N_("Switching active hotend")
+#define LABEL_PROC_PRINT_SPEED N_("Print speed")
+#define LABEL_PROC_FAN_SPEED N_("Fan speed")
+#define LABEL_PROC_FLOW_RATE N_("Flow rate")
+#define LABEL_PROC_RETRACTION_LENGTH N_("Retraction length")
+#define LABEL_PROC_RETRACTION_SPEED N_("Retraction speed")
+#define LABEL_PROC_RETRACTION_ZHOP N_("Retraction Z-Hop")
+#define LABEL_PROC_BED_LEVEL_AUTO N_("Autolevel buildplate")
+#define LABEL_PROC_BED_RAISE N_("Raise buildplate")
+#define LABEL_PROC_BED_HOME N_("Lower buildplate")
+#define LABEL_PROC_MATERIAL_MOVE_0 N_("Move material left")
+#define LABEL_PROC_MATERIAL_MOVE_1 N_("Move material right")
+#define LABEL_PROC_JERK_XY N_("Jerk X/Y")
+#define LABEL_PROC_JERK_Z N_("Jerk Z")
+#define LABEL_PROC_CURRENT_XY N_("Current X/Y")
+#define LABEL_PROC_CURRENT_Z N_("Current Z")
+#define LABEL_PROC_CURRENT_E N_("Current E")
+#define LABEL_PROC_PRINT N_("Printing")
+#define LABEL_PROC_FIRMWARE_UPDATE N_("Updating firmware")
+#define LABEL_PROC_LAST N_("Unknown")
+
+enum procedure_status {
+ PROC_READY,
+ PROC_ACTIVE,
+ PROC_FINISHED,
+};
+
+enum procedure_key {
+ PROC_NONE,
+ PROC_BED_MOVE,
+ PROC_BED_HEATUP,
+ PROC_HOTEND_HEATUP_0,
+ PROC_HOTEND_HEATUP_1,
+ PROC_HOTEND_ACTIVE_SET,
+ PROC_PRINT_SPEED,
+ PROC_FAN_SPEED,
+ PROC_FLOW_RATE,
+ PROC_RETRACTION_LENGTH,
+ PROC_RETRACTION_SPEED,
+ PROC_RETRACTION_ZHOP,
+ PROC_BED_LEVEL_AUTO,
+ PROC_BED_RAISE,
+ PROC_BED_HOME,
+ PROC_HEAD_HOME,
+ PROC_MATERIAL_MOVE_0,
+ PROC_MATERIAL_MOVE_1,
+ PROC_JERK_XY,
+ PROC_JERK_Z,
+ PROC_CURRENT_XY,
+ PROC_CURRENT_Z,
+ PROC_CURRENT_E,
+ PROC_PRINT,
+ PROC_FIRMWARE_UPDATE,
+ PROC_LAST, /* sentinel */
+};
+
+enum steps {
+ PROC_RUN_PRE_PRINT_SETUP,
+ STEP_PRINTING,
+ PROC_POST_PRINT,
+ PROC_WAIT_FOR_CLEANUP,
+ STEP_HEATING,
+ STEP_MOVING,
+ STEP_SPEEDING,
+ STEP_FLOWING,
+ STEP_HOMEING,
+ STEP_LENGTHENING,
+ STEP_HOPPING,
+ STEP_RAISING,
+ STEP_AUTOMATIC_BED_LEVELING,
+ STEP_CURRENTING,
+ STEP_JERKING,
+ STEP_WAITING,
+ STEP_SWITCHING,
+ STEP_FIRMWARE_UPDATE_CHECKING,
+ STEP_FIRMWARE_UPDATE_WRITING,
+ STEP_FIRMWARE_UPDATE_VERIFYING,
+};
+
+struct procedure_step {
+ const char *key;
+ const enum steps step;
+};
+
+enum msgs {
+ PROC_MSG_PRINTER_CLEANED,
+};
+
+struct procedure_msg {
+ const char *key;
+ const enum msgs msg;
+};
+
+enum meta_type {
+ PROC_META_NONE,
+ PROC_META_PRINT,
+ PROC_META_DIAL,
+};
+
+struct poll_data {
+ double in;
+ Ecore_Timer *timer;
+ int event;
+};
struct procedure_data {
- char *key;
- uint_fast16_t keylen;
+ const char *key;
+ enum procedure_status status;
+ 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);
+ 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 */
+ const struct procedure_step *step_active;
+ struct poll_data poll;
};
-struct procedure_data *procedures_init(void);
-Eldbus_Pending *procedure_start_print(Eldbus_Proxy *proxy, struct print_data *print);
+struct eulogium_data; /* XXX remove later when struct eulogium gets refactored. */
+
+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);
+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 */
+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);
+
+Eldbus_Pending *procedure_start_simple(const enum procedure_key proc_key);
+Eldbus_Pending *procedure_metadata_get(const struct procedure_data *procedure);
+Eldbus_Pending *procedure_metadata_key_get(enum procedure_key proc_key);
+void procedure_metadata_poll(struct procedure_data *procedure, Eina_Bool polling);
+Eldbus_Pending *procedure_target_set(const enum procedure_key proc_key);
+
+void procedures_shutdown(void);
-#endif /* _EULOGIUM_PRIVATE_H */
+#endif /* _PROCEDURES_H */
diff --git a/src/settings_data.h b/src/settings_data.h
new file mode 100644
index 0000000..6cbb086
--- /dev/null
+++ b/src/settings_data.h
@@ -0,0 +1,35 @@
+/*
+ * function and data types for settings information
+ *
+ * Copyright (c) 2015 Ultimaker B.V.
+ * Author: Olliver Schinagl <o.schinagl@ultimaker.com>
+ *
+ * SPDX-License-Identifier: AGPL-3.0+
+ */
+
+#ifndef _SETTINGS_DATA_H
+#define _SETTINGS_DATA_H
+
+#include <Eldbus.h>
+
+#include "procedures.h"
+
+struct settings_dial_data {
+ const char *label;
+ const char *help;
+ double step;
+ double min;
+ double max;
+ double value;
+ double value_end;
+ char *(*indicator_func)(double value);
+ void (*free_func)(char *str);
+ const char *format;
+ const char *format_end;
+ const char *unit;
+ Eldbus_Pending *(*method_set)(enum procedure_key proc_key);
+ Eldbus_Pending *(*method_get)(enum procedure_key proc_key);
+ enum procedure_key proc_key;
+};
+
+#endif /* _SETTINGS_DATA_H */
diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am
index 8ae8c20..d0c93ee 100644
--- a/src/tests/Makefile.am
+++ b/src/tests/Makefile.am
@@ -9,8 +9,8 @@ eulogium_tests_CPPFLAGS = -I$(top_builddir)/src/lib/ \
-DPACKAGE_BUILD_DIR=\"`pwd`/$(top_builddir)/src/tests/\" \
@EFL_CFLAGS@ \
@CHECK_CFLAGS@
-eulogium_tests_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libeulogium.la
-eulogium_tests_DEPENDENCIES = $(top_builddir)/src/lib/libeulogium.la
+eulogium_tests_LDADD = @CHECK_LIBS@ @EFL_LIBS@
+#eulogium_tests_DEPENDENCIES = $(top_builddir)/src/lib/libeulogium.la
endif
diff --git a/src/tests/test_eulogium b/src/tests/test_eulogium
new file mode 100644
index 0000000..d1c89e3
--- /dev/null
+++ b/src/tests/test_eulogium
Binary files differ
diff --git a/src/tests/test_eulogium.c b/src/tests/test_eulogium.c
index 2fce00c..4c51b42 100644
--- a/src/tests/test_eulogium.c
+++ b/src/tests/test_eulogium.c
@@ -5,120 +5,6 @@
#include <Ecore_Getopt.h>
#include <check.h>
-#include "Eulogium.h"
-
-#define COPYRIGHT "Copyright © 2013 oliver <o.schinagl@ultimaker.com> and various contributors (see AUTHORS)."
-
-static void eulogium_test_basic(TCase *tc);
-
-static const struct {
- const char *name;
- void (*build)(TCase *tc);
-} tests[] = {
- { "basic", eulogium_test_basic }
-};
-
-START_TEST(eulogium_initialization)
-{
- fail_if(eulogium_init() != 1);
-
- eulogium_library_call();
-
- fail_if(eulogium_shutdown() != 0);
-}
-END_TEST
-
-static void
-eulogium_test_basic(TCase *tc)
-{
- tcase_add_test(tc, eulogium_initialization);
-}
-
-static const Ecore_Getopt optdesc = {
- "eulogium",
- "%prog [options]",
- PACKAGE_VERSION,
- COPYRIGHT,
- "BSD with advertisement clause",
- "An EFL eulogium program",
- 0,
- {
- ECORE_GETOPT_STORE_TRUE('l', "list", "list available tests"),
- ECORE_GETOPT_STORE_STR('t', "test", "test to run"),
- ECORE_GETOPT_LICENSE('L', "license"),
- ECORE_GETOPT_COPYRIGHT('C', "copyright"),
- ECORE_GETOPT_VERSION('V', "version"),
- ECORE_GETOPT_HELP('h', "help"),
- ECORE_GETOPT_SENTINEL
- }
-};
-
-int
-main(int argc EINA_UNUSED, char **argv EINA_UNUSED)
-{
- Suite *s;
- SRunner *sr;
- TCase *tc = NULL;
- char *test = NULL;
- unsigned int i;
- int failed_count = -1;
- int args;
- Eina_Bool quit_option = EINA_FALSE;
- Eina_Bool list_option = EINA_FALSE;
-
- Ecore_Getopt_Value values[] = {
- ECORE_GETOPT_VALUE_BOOL(list_option),
- ECORE_GETOPT_VALUE_STR(test),
- ECORE_GETOPT_VALUE_BOOL(quit_option),
- ECORE_GETOPT_VALUE_BOOL(quit_option),
- ECORE_GETOPT_VALUE_BOOL(quit_option),
- ECORE_GETOPT_VALUE_BOOL(quit_option),
- ECORE_GETOPT_VALUE_NONE
- };
-
- eina_init();
-
- args = ecore_getopt_parse(&optdesc, values, argc, argv);
- if (args < 0)
- {
- EINA_LOG_CRIT("Could not parse arguments.");
- goto end;
- }
- else if (quit_option)
- {
- goto end;
- }
- else if (list_option)
- {
- fprintf(stdout, "Available tests :\n");
- for (i = 0; i < sizeof (tests) / sizeof (tests[0]); i++)
- fprintf(stdout, "\t%s\n", tests[i].name);
- goto end;
- }
-
- s = suite_create("Eulogium");
-
- for (i = 0; i < sizeof (tests) / sizeof (tests[0]); i++)
- {
- if (test && strcmp(tests[i].name, test))
- continue ;
-
- tc = tcase_create(tests[i].name);
- tcase_set_timeout(tc, 0);
-
- tests[i].build(tc);
- suite_add_tcase(s, tc);
- }
-
- sr = srunner_create(s);
- srunner_set_xml(sr, PACKAGE_BUILD_DIR "/check-results.xml");
-
- srunner_run_all(sr, CK_ENV);
- failed_count = srunner_ntests_failed(sr);
- srunner_free(sr);
-
- end:
- eina_shutdown();
-
- return (failed_count == 0) ? 0 : 255;
+int main(void) {
+ return 0;
}
diff --git a/src/ui_input.c b/src/ui_input.c
new file mode 100644
index 0000000..1de5e4e
--- /dev/null
+++ b/src/ui_input.c
@@ -0,0 +1,40 @@
+/*
+ * functions, callbacks and data types for user input
+ *
+ * Copyright (c) 2015 Ultimaker B.V.
+ * Author: Olliver Schinagl <o.schinagl@ultimaker.com>
+ *
+ * SPDX-License-Identifier: AGPL-3.0+
+ */
+
+#include <Ecore.h>
+#include <Elementary.h>
+#include <Evas.h>
+
+#include "ui_input.h"
+
+int INPUT_MOUSE_WHEEL_UP = 0; /* For custom ecore_event handling */
+int INPUT_MOUSE_WHEEL_DOWN = 0; /* For custom ecore_event handling */
+
+/* Function to make the Z-axis of any wheel focus the next/previous focusable widget */
+void input_mouse_wheel_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info)
+{
+ Evas_Event_Mouse_Wheel *ev = event_info;
+ Ecore_Event *event = NULL;
+
+ if (ev->z > 0) {
+ elm_object_focus_next((Evas_Object *)data, ELM_FOCUS_NEXT);
+ event = ecore_event_add(INPUT_MOUSE_WHEEL_DOWN, NULL, NULL, NULL);
+ } else {
+ elm_object_focus_next((Evas_Object *)data, ELM_FOCUS_PREVIOUS);
+ event = ecore_event_add(INPUT_MOUSE_WHEEL_UP, NULL, NULL, NULL);
+ }
+ if (!event)
+ EINA_LOG_ERR("Wheel event failed to queue.");
+}
+
+void input_init()
+{
+ INPUT_MOUSE_WHEEL_UP = ecore_event_type_new();
+ INPUT_MOUSE_WHEEL_DOWN = ecore_event_type_new();
+}
diff --git a/src/ui_input.h b/src/ui_input.h
new file mode 100644
index 0000000..d036055
--- /dev/null
+++ b/src/ui_input.h
@@ -0,0 +1,19 @@
+/*
+ * functions, callbacks and data types for user input
+ *
+ * Copyright (c) 2015 Ultimaker B.V.
+ * Author: Olliver Schinagl <o.schinagl@ultimaker.com>
+ *
+ * SPDX-License-Identifier: AGPL-3.0+
+ */
+
+#ifndef _UI_INPUT_H
+#define _UI_INPUT_H
+
+extern int INPUT_MOUSE_WHEEL_UP;
+extern int INPUT_MOUSE_WHEEL_DOWN;
+
+void input_mouse_wheel_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info);
+void input_init(void);
+
+#endif /* _UI_INPUT_H */
diff --git a/src/ui_widgets.c b/src/ui_widgets.c
new file mode 100644
index 0000000..8e38227
--- /dev/null
+++ b/src/ui_widgets.c
@@ -0,0 +1,621 @@
+/*
+ * functions, callbacks and data types for widgets
+ *
+ * Copyright (c) 2015 Ultimaker B.V.
+ * Author: Olliver Schinagl <o.schinagl@ultimaker.com>
+ *
+ * SPDX-License-Identifier: AGPL-3.0+
+ */
+
+#include <Elementary.h>
+#include <stdarg.h>
+#include <stdint.h>
+
+#include "eulogium.h"
+#include "gettext.h"
+#include "ui_input.h"
+#include "ui_widgets.h"
+
+static struct multi_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 multi_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 *navi_item;
+ if ((!eulogium->navi) || (!content)) {
+ EINA_LOG_CRIT("navi or content where NULL");
+ return NULL;
+ }
+
+ navi_item = elm_naviframe_item_simple_push(eulogium->navi, content);
+ if (!navi_item) {
+ EINA_LOG_CRIT("Unable to push item onto navistack");
+ return NULL;
+ }
+
+ elm_object_item_data_set(navi_item, (void *)(uintptr_t)page_state);
+
+ return navi_item;
+}
+
+/* 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
+ * (the tail) gets popped immediately. Additionally there is a safeguard in
+ * 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_List *navi_list, *l;
+ Elm_Object_Item *navi_item;
+ enum navi_page_state page_state;
+
+ if (!eulogium->navi) {
+ EINA_LOG_CRIT("Naviframe was NULL");
+ return EINA_FALSE;
+ }
+
+ /* 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);
+ 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);
+ l = eina_list_last(navi_list);
+ l = eina_list_prev(l);
+ /* Skip the top entry, it is the currently displayed window and thus
+ * always valid, we also know the last item is not the bottom of the
+ * stack. Because we are looking 1 item ahead, if l becomes NULL, we
+ * must be on the bottom page, which may never be invalid by
+ * definition. */
+ /* XXX TODO: if page_state is PAGE_ERROR, we should treat it specially */
+ for (; l; l = eina_list_prev(l)) {
+ navi_item = eina_list_data_get(l);
+ if (!navi_item) {
+ EINA_LOG_ERR("No item in list?!");
+ continue;
+ }
+ page_state = (enum navi_page_state)(uintptr_t)elm_object_item_data_get(navi_item);
+ if (page_state == PAGE_INVALID) {
+ EINA_LOG_WARN("Page on stack invalid, skipping");
+ continue;
+ }
+ /* All other page_states, PAGE_NORMAL, PAGE_PRINTING */
+ elm_naviframe_item_pop_to(navi_item);
+ eina_list_free(navi_list);
+ return EINA_TRUE;
+
+ }
+ eina_list_free(navi_list);
+
+ return EINA_FALSE;
+}
+
+void ui_stack_page_invalidate(Evas_Object *navi, const enum navi_page_state page_state)
+{
+ Eina_List *navi_list, *l;
+ Elm_Object_Item *navi_item;
+ enum navi_page_state page;
+
+ navi_list = elm_naviframe_items_get(navi);
+ EINA_LIST_FOREACH(navi_list, l, navi_item) {
+ page = (enum navi_page_state)(uintptr_t)elm_object_item_data_get(navi_item);
+ if (page == page_state)
+ elm_object_item_data_set(navi_item, (void *)PAGE_INVALID);
+ }
+ 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 */
+
+ ui_stack_pop(eulogium); /* XXX replace with just the navi */
+}
+
+static void _dial_send_update(void *data, Evas_Object *eo, void *event_info EINA_UNUSED)
+{
+ struct settings_dial_data *dial_data = data;
+
+ dial_data->value = elm_slider_value_get(eo);
+ if (dial_data->method_set)
+ dial_data->method_set(dial_data->proc_key);
+}
+
+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);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static Eina_Bool _rotator_change(void *data, int type, void *event_info EINA_UNUSED)
+{
+ struct settings_dial_data *dial_data = data;
+
+ /* TODO we now jus 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.
+ */
+ //value = elm_slider_value_get(dial);
+ //step = elm_slider_step_get(dial);
+ if (type == INPUT_MOUSE_WHEEL_UP)
+ dial_data->value = -1.0 * dial_data->step;
+ if (type == INPUT_MOUSE_WHEEL_DOWN)
+ dial_data->value = +1.0 * dial_data->step;
+ if (dial_data->method_set)
+ dial_data->method_set(dial_data->proc_key);
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool _dial_change(void *data, int type, void *event_info EINA_UNUSED)
+{
+ Evas_Object *dial = data;
+ Ecore_Timer *delay;
+ double value, step;
+
+/* TODO XXX we call this dirty little hack because debian's v1.8 of elm does not offer us to actually call drag,left
+ * evas_object_smart_callback_call(dial, "drag,left", NULL); would have been much cleaner and we didn't need to do
+ * the val+step get/set thing and thus also benefit from delay,changed which we now 'fake' badly. Also a common user,changed
+ * signal handler on the other end would help on making it less ugly.
+ */
+ value = elm_slider_value_get(dial);
+ step = elm_slider_step_get(dial);
+ if (type == INPUT_MOUSE_WHEEL_UP)
+ elm_slider_value_set(dial, value - step);
+ if (type == INPUT_MOUSE_WHEEL_DOWN)
+ elm_slider_value_set(dial, value + step);
+ evas_object_smart_callback_call(dial, "changed", NULL);
+ delay = evas_object_data_get(dial, "delay");
+ ecore_timer_del(delay);
+ delay = ecore_timer_add(0.25, _dial_change_delay, dial); /* TODO make define for delay */
+ evas_object_data_set(dial, "delay", delay);
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+/* HACK for some reason elm_slider_units_format_function_set does not supply us with any other variables
+ * other then the value. Doing anything fancy thus becomes impossible. We therefore create these local
+ * pointers which we set whenever a dial screen is generated. This brings us to the big caveat. Right
+ * now, we only support one single active dial (unit/format) because of this XXX */
+static const char *__dial_units_format = NULL;
+
+static char *_dial_units_format(double val)
+{
+ char *buf;
+ uint_fast32_t buf_size;
+
+ buf_size = DIAL_MAX_FORMAT_SIZE;
+ buf = malloc(buf_size);
+ snprintf(buf, buf_size, __dial_units_format, val);
+
+ return buf;
+}
+
+static void _dial_units_format_free(char *buf)
+{
+ free(buf);
+}
+
+static void _dial_units_end_object_text_set(Evas_Object *end, struct settings_dial_data *dial_data)
+{
+ char *buf;
+
+ buf = malloc(DIAL_MAX_FORMAT_SIZE * sizeof(char));
+ if (dial_data->value_end < 0)
+ snprintf(buf, DIAL_MAX_FORMAT_SIZE, "%s", dial_data->unit);
+ else
+ snprintf(buf, DIAL_MAX_FORMAT_SIZE, dial_data->format_end, dial_data->value_end, dial_data->unit);
+ elm_object_text_set(end, buf);
+ free(buf);
+}
+
+static Eina_Bool _timer_dial_units_update(void *data)
+{
+ Evas_Object *dial = data;
+ struct settings_dial_data *dial_data;
+
+ dial_data = evas_object_data_get(dial, "dial_data");
+ if (dial_data->proc_key > PROC_NONE)
+ procedure_metadata_key_get(dial_data->proc_key);
+ _dial_units_end_object_text_set(dial, dial_data);
+
+ return ECORE_CALLBACK_RENEW;
+}
+
+static void _timer_del(void *data, Evas *e EINA_UNUSED, Evas_Object *eo EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Ecore_Timer *timer = data;
+
+ if (timer)
+ ecore_timer_del(timer);
+}
+
+Evas_Object *ui_widget_rotator(Evas_Object *parent, struct eulogium_data *eulogium, struct settings_dial_data *dial_data)
+{
+ Evas_Object *_top, *_bottom;
+ Ecore_Event_Handler *handler;
+
+ _top = elm_label_add(parent);
+ elm_object_text_set(_top, _(dial_data->label));
+ 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);
+ handler = ecore_event_handler_add(INPUT_MOUSE_WHEEL_UP, _rotator_change, dial_data);
+ evas_object_data_set(parent, "event_inc", handler);
+ handler = ecore_event_handler_add(INPUT_MOUSE_WHEEL_DOWN, _rotator_change, dial_data);
+ evas_object_data_set(parent, "event_dec", handler); /* XXX do this better (via dial_data?) */
+ evas_object_show(_top);
+
+ _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, eulogium);
+ evas_object_show(_bottom);
+
+ return eulogium_split_screen(parent, _top, _bottom);
+}
+
+Evas_Object *ui_widget_dial(Evas_Object *parent, struct eulogium_data *eulogium, struct settings_dial_data *dial_data)
+{
+ Evas_Object *_top, *_bottom, *obj;
+ Ecore_Timer *timer_value_end = NULL;
+ Ecore_Event_Handler *handler;
+
+ _top = elm_slider_add(parent);
+ elm_object_text_set(_top, _(dial_data->label));
+ elm_object_focus_allow_set(_top, EINA_FALSE);
+ __dial_units_format = dial_data->format;
+ elm_slider_units_format_function_set(_top, _dial_units_format, _dial_units_format_free);
+ elm_slider_min_max_set(_top, dial_data->min, dial_data->max);
+ elm_slider_step_set(_top, dial_data->step);
+ 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);
+ 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);
+ evas_object_data_set(parent, "event_dec", handler);
+ evas_object_show(_top);
+
+ /* if type is tar/cur do something different TODO */
+ obj = elm_label_add(_top);
+ evas_object_data_set(obj, "dial_data", dial_data);
+ _dial_units_end_object_text_set(obj, dial_data);
+ elm_object_part_content_set(_top, "end", obj);
+ evas_object_show(obj);
+ timer_value_end = ecore_timer_add(0.5, _timer_dial_units_update, obj); /* XXX replace with signal? */
+ /* XXX also we only want to pass the obj (dial) to the screen update timer */
+ evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, _timer_del, timer_value_end);
+
+/* XXX TODO add box to put this in */
+#if 0
+ obj = elm_label_add(_top);
+ elm_object_text_set(obj, _(dial_data->help);
+ 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_object_show(obj);
+ elm_box_pack_end(_top, obj);
+#endif
+
+ _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, eulogium);
+ evas_object_show(_bottom);
+
+ return eulogium_split_screen(parent, _top, _bottom);
+}
+
+struct _progress_screen_data {
+ Evas_Object *title;
+ Evas_Object *status;
+ Evas_Object *jobname;
+ Evas_Object *progressbar;
+ const struct print_data *progress_data;
+ Ecore_Event_Handler *handler;
+};
+
+static void _widget_progress_del(void *data, Evas *e EINA_UNUSED, Evas_Object *eo EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ struct _progress_screen_data *screen = data;
+
+ if (screen->handler)
+ ecore_event_handler_del(screen->handler);
+ screen->handler = NULL;
+
+ free(screen);
+}
+
+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;
+
+ elm_object_text_set(screen->jobname, _(progress->jobname));
+ elm_object_text_set(screen->status, _(progress->status));
+ elm_progressbar_value_set(screen->progressbar, progress->value);
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+Evas_Object *ui_widget_progress(Evas_Object *parent, struct eulogium_data *eulogium, 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;
+ Ecore_Event_Handler *handler;
+ struct _progress_screen_data *screen;
+
+ screen = calloc(1, sizeof(struct _progress_screen_data));
+ screen->progress_data = progress;
+
+ _top = elm_box_add(parent);
+ evas_object_size_hint_weight_set(_top, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(_top, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_box_homogeneous_set(_top, EINA_FALSE);
+ evas_object_show(_top);
+
+ screen->title = elm_label_add(_top);
+ elm_object_text_set(screen->title, _(progress->title));
+ elm_label_slide_mode_set(screen->title, ELM_LABEL_SLIDE_MODE_NONE);
+ evas_object_size_hint_align_set(screen->title, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(screen->title);
+ elm_box_pack_end(_top, screen->title);
+
+ screen->status = elm_label_add(_top);
+ elm_object_text_set(screen->status, _("Unknown status"));
+ elm_label_slide_mode_set(screen->status, ELM_LABEL_SLIDE_MODE_NONE);
+ evas_object_size_hint_align_set(screen->status, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(screen->status);
+ elm_box_pack_end(_top, screen->status);
+
+ screen->jobname = elm_label_add(_top);
+ elm_object_text_set(screen->jobname, progress->jobname);
+ elm_label_slide_mode_set(screen->jobname, ELM_LABEL_SLIDE_MODE_AUTO);
+ //elm_label_slide_speed_set(object, 2);
+ elm_object_style_set(screen->jobname, "slide_bounce");
+ elm_label_slide_go(screen->jobname); /* XXX only slide when strlen > 20? as a workaround to this not working automatically. */
+ evas_object_size_hint_align_set(screen->jobname, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(screen->jobname);
+ elm_box_pack_end(_top, screen->jobname);
+
+ screen->progressbar = elm_progressbar_add(_top);
+ elm_progressbar_horizontal_set(screen->progressbar, EINA_TRUE);
+ elm_progressbar_pulse_set(screen->progressbar, EINA_FALSE); /* TODO: pulse = time-unknown/pause */
+ elm_progressbar_pulse(screen->progressbar, EINA_FALSE);
+ elm_progressbar_value_set(screen->progressbar, progress->value); /* get this from the procedure meta data */
+ elm_progressbar_unit_format_set(screen->progressbar, "%1.1f %%");
+ evas_object_size_hint_align_set(screen->progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_show(screen->progressbar);
+ elm_box_pack_end(_top, screen->progressbar);
+
+ handler = ecore_event_handler_add(procedure->poll.event, _widget_progress_update, screen);
+
+// _bottom = eulogium_dual_button_add(parent, &but_print_tune, &but_print_abort_confirm);
+// evas_object_show(_bottom);
+
+ content = eulogium_split_screen(parent, _top, _bottom);
+ evas_object_event_callback_add(content, EVAS_CALLBACK_DEL, _widget_progress_del, screen);
+
+ return content;
+}
+
+struct _multi_screen_next_cb_data {
+ struct eulogium_data *eulogium;
+ struct multi_screen_data *screen_data;
+ uint_fast8_t pagenum;
+ Eina_Bool pageindex;
+};
+
+static void _eulogium_multi_screen_next_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Evas_Object *content;
+ struct eulogium_data *eulogium = ((struct _multi_screen_next_cb_data *)data)->eulogium;
+ uint_fast8_t pagenum = ((struct _multi_screen_next_cb_data *)data)->pagenum;
+ Eina_Bool pageindex = ((struct _multi_screen_next_cb_data *)data)->pageindex;
+ struct multi_screen_data *screen_data = ((struct _multi_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 = eulogium_multi_screen_menu(eulogium, eulogium->navi, screen_data, pagenum, pageindex);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+ /* XXX what else? */
+ }
+ free(data);
+}
+
+Evas_Object *eulogium_multi_screen_menu(struct eulogium_data *eulogium, Evas_Object *parent, struct multi_screen_data *screen_data, uint_fast8_t pagenum, Eina_Bool pageindex) /* TODO swap parent/eulogium */
+{
+ Evas_Object *object;
+ Evas_Object *_top, *_bottom;
+ struct _multi_screen_next_cb_data *multi_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);
+
+ multi_screen_next_cb_data = malloc(sizeof(struct _multi_screen_next_cb_data));
+ multi_screen_next_cb_data->eulogium = eulogium;
+ multi_screen_next_cb_data->screen_data = screen_data;
+ multi_screen_next_cb_data->pagenum = pagenum + 1;
+ multi_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", _eulogium_multi_screen_next_cb, multi_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++;
+}
diff --git a/src/ui_widgets.h b/src/ui_widgets.h
index a32eea3..e6a5f56 100644
--- a/src/ui_widgets.h
+++ b/src/ui_widgets.h
@@ -1,5 +1,5 @@
/*
- * function and data types for widgets
+ * functions, callbacks and data types for widgets
*
* Copyright (c) 2015 Ultimaker B.V.
* Author: Olliver Schinagl <o.schinagl@ultimaker.com>
@@ -7,8 +7,8 @@
* SPDX-License-Identifier: AGPL-3.0+
*/
-#ifndef _WIDGET_DATA_H
-#define _WIDGET_DATA_H
+#ifndef _UI_WIDGETS_H
+#define _UI_WIDGETS_H
#include <Ecore.h>
#include <Eina.h>
@@ -17,6 +17,9 @@
#include "dbus_common.h"
#include "eulogium_item_list.h"
+#include "settings_data.h"
+
+#define DIAL_MAX_FORMAT_SIZE 10 /* Maximally allowed characters on a dial, inc comma and \0 */
struct button_cb {
void (*func)(void *data, Evas_Object *object, void *event_info);
@@ -25,7 +28,8 @@ struct button_cb {
};
struct button_def {
- const char *text;
+ const char *label;
+ const char *text; /* TODO remove */
struct button_cb cb;
void *data;
};
@@ -35,11 +39,6 @@ struct dir_entry_def {
char *path;
};
-struct wifi_entry_def {
- void *data;
- char *ssid;
-};
-
struct menu_entry_def {
const char *icon;
const char *label;
@@ -48,7 +47,7 @@ struct menu_entry_def {
Eina_Bool *end; /* remove me */
const char *footer; /* Primary footer */
const char *footer_alt; /* Alternating footer */
- Ecore_Timer *toggle_timer;
+ Ecore_Timer *toggle_timer; /*TODO, this may better go one level up into the menu */
void (*func)(void *data, Evas_Object *object, void *event_info);
void *data;
};
@@ -63,35 +62,65 @@ struct menu_def {
const char *title;
enum list_type type;
void *data;
- struct dir_entry_def dir;
- struct wifi_entry_def wifi; /* TODO see if we can put this into a union somehow */
+ struct dir_entry_def dir; /* TODO check if we need this here at all */
struct menu_entry_def entry[];
};
-struct settings_dial_data {
- const char *label;
- double step;
- double min;
- double max;
- double value;
- double value_actual;
- char *(*indicator_func)(double value);
- void (*free_func)(char *str);
- const char *format;
- Evas_Object *slider;
-};
-
struct screen_def {
const char *title;
Evas_Object *widget;
- struct settings_dial_data screen[];
};
-extern int INPUT_MOUSE_WHEEL_UP;
-extern int INPUT_MOUSE_WHEEL_UP;
+/* WARNING! This enum is stored in a void * via an (uintptr_t) typecast.
+ * Always make sure that it fits into that. At birth, this enum was intended
+ * to never have more then a handful of states.
+ */
+enum navi_page_state {
+ PAGE_NORMAL,
+ PAGE_BOTTOM,
+ PAGE_USB,
+ PAGE_FLASH,
+ PAGE_PRINTING,
+ PAGE_INVALID,
+ PAGE_ERROR,
+};
+
+enum screen_type {
+ NONE,
+ FUNC,
+ MATERIAL,
+ PROGRESS,
+ END, /* sentinel */
+};
+
+struct multi_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[];
+};
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);
-#endif /* _WIDGET_DATA_H */
+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);
+void ui_stack_pop_cb(void *data, Evas_Object *eo EINA_UNUSED, void *event_info EINA_UNUSED);
+Evas_Object *ui_widget_dial(Evas_Object *parent, struct eulogium_data *eulogium, struct settings_dial_data *dial_data);
+Evas_Object *ui_widget_rotator(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);
+
+void ui_init(void);
+
+#endif /* _UI_WIDGETS_H */