summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlliver Schinagl <o.schinagl@ultimaker.com>2015-06-29 10:13:48 (GMT)
committerOlliver Schinagl <o.schinagl@ultimaker.com>2015-06-29 10:13:48 (GMT)
commitf217213dccab10e8af0953f48a7671855326c871 (patch)
tree687dd219c5a438f1c68e1f78e3c8dfb60679d681
parent8777c17ad4278f4e24c7210f827f10408731a55f (diff)
downloadeulogium-f217213dccab10e8af0953f48a7671855326c871.zip
eulogium-f217213dccab10e8af0953f48a7671855326c871.tar.gz
eulogium-f217213dccab10e8af0953f48a7671855326c871.tar.bz2
add concept tune screenelementary
Signed-off-by: Olliver Schinagl <o.schinagl@ultimaker.com>
-rw-r--r--src/eulogium.c202
-rw-r--r--src/ui_widgets.h22
2 files changed, 220 insertions, 4 deletions
diff --git a/src/eulogium.c b/src/eulogium.c
index 606743d..280e204 100644
--- a/src/eulogium.c
+++ b/src/eulogium.c
@@ -31,6 +31,9 @@
#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"),
@@ -85,6 +88,8 @@ static void _but_settings_hotend_1_offset_cb(void *data, Evas_Object *obj EINA_U
static void _but_settings_hotend_2_offset_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
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_brightness_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
/* Buttons */
static struct button_def but_return = {
@@ -435,7 +440,7 @@ static struct menu_def menu_system_settings = {
.end = NULL,
.footer = NULL,
.footer_alt = NULL,
- .func = NULL,
+ .func = _but_settings_led_cb,
.toggle_timer = NULL,
.data = NULL,
}, {
@@ -1159,6 +1164,90 @@ static struct menu_def menu_material_customize = {
.data = NULL,
};
+static struct menu_def menu_settings_led = {
+ .title = "LED SETTINGS",
+ .type = LIST_MENU,
+ .entry = {
+ {
+ .icon = "user-home",
+ .label = "Return",
+ .item = {.type = LIST_ITEM_BUTTON},
+ .footer = "Return to Main menu",
+ .footer_alt = NULL,
+ .func = _cb_content_prev_set,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Hue",
+ .item = {.type = LIST_ITEM_BUTTON},
+ .footer = "100%",
+ .footer_alt = NULL,
+ .func = _but_led_brightness_cb,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Saturation",
+ .item = {.type = LIST_ITEM_BUTTON},
+ .footer = "100%",
+ .footer_alt = NULL,
+ .func = _but_led_brightness_cb,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Brightness",
+ .item = {.type = LIST_ITEM_BUTTON},
+ .footer = "100%",
+ .footer_alt = NULL,
+ .func = _but_led_brightness_cb,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Always On",
+ .item = {
+ .type = LIST_ITEM_CHECK,
+ .state = EINA_FALSE,
+ ._widget = NULL,
+ },
+ .footer = "Always On",
+ .footer_alt = NULL,
+ .func = NULL,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Always Off",
+ .item = {
+ .type = LIST_ITEM_CHECK,
+ .state = EINA_FALSE,
+ ._widget = NULL,
+ },
+ .footer = "Always Off",
+ .footer_alt = NULL,
+ .func = NULL,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, {
+ .icon = NULL,
+ .label = "Glow on completion",
+ .item = {
+ .type = LIST_ITEM_CHECK,
+ .state = EINA_FALSE,
+ ._widget = NULL,
+ },
+ .footer = "Glow on completion",
+ .footer_alt = NULL,
+ .func = NULL,
+ .toggle_timer = NULL,
+ .data = NULL,
+ }, { NULL }, /* sentinel */
+ },
+ .data = NULL,
+};
+
static struct menu_def menu_print_tune = {
.title = "TUNE",
.type = LIST_MENU,
@@ -1603,6 +1692,26 @@ static void _but_settings_language_cb(void *data, Evas_Object *obj EINA_UNUSED,
elm_naviframe_item_simple_push(eulogium->navi, content);
}
+static void _but_settings_led_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 led settings\n");
+ content = menu_widget_list(eulogium, eulogium->navi, &menu_settings_led);
+ 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);
+ ui_stack_push(eulogium, content, PAGE_NORMAL);
+}
+
static char *parse_networks_for_display(struct network_data *networks)
{
char *buf = NULL;
@@ -1856,11 +1965,17 @@ void eulogium_print_data_set(struct eulogium_data *eulogium, char *filepath)
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)
+ if (ev->z > 0) {
elm_object_focus_next((Evas_Object *)data, ELM_FOCUS_NEXT);
- else
+ 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)
@@ -2796,6 +2911,82 @@ 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,
@@ -3557,6 +3748,9 @@ EAPI_MAIN int elm_main(int argc, char **argv)
return EXIT_FAILURE;
}
+ INPUT_MOUSE_WHEEL_UP = ecore_event_type_new();
+ INPUT_MOUSE_WHEEL_DOWN = ecore_event_type_new();
+
// elm_prefs_data_new(); /* TODO */
elm_policy_set(ELM_POLICY_QUIT, /* ELM_POLICY_QUIT_NONE */ ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
elm_app_compile_bin_dir_set(PACKAGE_BIN_DIR);
@@ -3627,7 +3821,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);
+ evas_object_event_callback_add(object, EVAS_CALLBACK_MOUSE_WHEEL, _cb_eulogium_input_wheel, 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);
diff --git a/src/ui_widgets.h b/src/ui_widgets.h
index 2cab4bc..a32eea3 100644
--- a/src/ui_widgets.h
+++ b/src/ui_widgets.h
@@ -68,6 +68,28 @@ struct menu_def {
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;
+
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);