hermet pushed a commit to branch master. http://git.enlightenment.org/tools/enventor.git/commit/?id=48e56a4c4cf04f57ab1f89c960244fdd4b115f05
commit 48e56a4c4cf04f57ab1f89c960244fdd4b115f05 Author: Jaehyun Cho <[email protected]> Date: Tue Dec 16 09:08:15 2014 +0900 ctxpopup: Change slider candidate style to contain type and entry. Summary: Change slider candidate style to contain value type and entry. @feature Reviewers: Hermet Differential Revision: https://phab.enlightenment.org/D1743 --- data/themes/default/images.edc | 12 +-- data/themes/default/images/minus.png | Bin 201 -> 0 bytes data/themes/default/images/plus.png | Bin 207 -> 0 bytes data/themes/default/layout_common.edc | 173 +++++++++++++++++++++++++++++++--- src/lib/ctxpopup.c | 158 ++++++++++++++++++++++++++----- src/lib/edc_parser.c | 63 +++++++++++++ 6 files changed, 362 insertions(+), 44 deletions(-) diff --git a/data/themes/default/images.edc b/data/themes/default/images.edc index ac8ca4a..e152e28 100644 --- a/data/themes/default/images.edc +++ b/data/themes/default/images.edc @@ -1,6 +1,6 @@ images { - image: "plus.png" COMP; - image: "minus.png" COMP; + image: "sym_up_light_normal.png" COMP; + image: "sym_down_light_normal.png" COMP; image: "menu.png" COMP; image: "find.png" COMP; image: "highlight.png" COMP; @@ -106,23 +106,23 @@ group { name: "swallow_s"; } } -group { name: "plus"; +group { name: "up"; parts { part { name: "img"; type: IMAGE; description { state: "default" 0.0; - image.normal: "plus.png"; + image.normal: "sym_up_light_normal.png"; } } } } -group { name: "minus"; +group { name: "down"; parts { part { name: "img"; type: IMAGE; description { state: "default" 0.0; - image.normal: "minus.png"; + image.normal: "sym_down_light_normal.png"; } } } diff --git a/data/themes/default/images/minus.png b/data/themes/default/images/minus.png deleted file mode 100644 index a2d9ce5..0000000 Binary files a/data/themes/default/images/minus.png and /dev/null differ diff --git a/data/themes/default/images/plus.png b/data/themes/default/images/plus.png deleted file mode 100644 index fe02207..0000000 Binary files a/data/themes/default/images/plus.png and /dev/null differ diff --git a/data/themes/default/layout_common.edc b/data/themes/default/layout_common.edc index b4afd73..4399ea1 100644 --- a/data/themes/default/layout_common.edc +++ b/data/themes/default/layout_common.edc @@ -1561,37 +1561,182 @@ group { name: "preview_layout"; group { name: "slider_layout"; parts { - part { name: "elm.swallow.plus"; - type: SWALLOW; + part { name: "base"; + type: RECT; + scale: 1; description { state: "default" 0.0; - min: 24 24; + min: 278 52; + color: 56 56 56 255; + } + description { state: "odd" 0.0; + inherit: "default" 0.0; + color: 64 64 64 255; + } + } + part { name: "text_base"; + type: SPACER; + scale: 1; + description { state: "default" 0.0; + rel1.to: "base"; + rel2.to: "base"; + rel2.relative: 0.0 1.0; + align: 0.0 0.5; + min: 50 0; + fixed: 1 0; + } + } + part { name: "elm.text.type"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + rel1.to: "text_base"; + rel2.to: "text_base"; + align: 0.0 0.5; + fixed: 1 0; + text { + font: FN; + size: 12; + align: 0.0 0.5; + min: 1 0; + ellipsis: -1; + } + color: COL_NM; + } + } + part { name: "padding1"; + type: SPACER; + scale: 1; + description { state: "default" 0.0; + rel1.to: "text_base"; + rel1.relative: 1.0 0.0; + rel2.to: "text_base"; + align: 0.0 0.5; + min: 10 0; + fixed: 1 0; + } + } + part { name: "elm.text.slider_min"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + rel1.to: "padding1"; + rel1.relative: 1.0 0.0; + rel2.to: "padding1"; + rel2.relative: 1.0 0.0; + align: 0.0 0.0; fixed: 1 1; - align: 0 0.5; - rel1.relative: 0.0 0.5; - rel2.relative: 0.0 0.5; + text { + font: FN; + size: 10; + align: 0.0 0.0; + min: 1 1; + ellipsis: -1; + } + color: COL_NM; + } + } + part { name: "elm.text.slider_max"; + type: TEXT; + scale: 1; + description { state: "default" 0.0; + rel1.to: "padding2"; + rel1.relative: 0.0 0.0; + rel2.to: "padding2"; + rel2.relative: 0.0 0.0; + align: 1.0 0.0; + fixed: 1 1; + text { + font: FN; + size: 10; + align: 0.0 0.5; + min: 1 1; + ellipsis: -1; + } + color: COL_NM; } } - part { name: "elm.swallow.minus"; + part { name: "elm.swallow.slider"; type: SWALLOW; + scale: 1; + description { state: "default" 0.0; + rel1.to_x: "padding1"; + rel1.to_y: "elm.text.slider_min"; + rel1.relative: 1.0 1.0; + rel2.to: "padding2"; + rel2.relative: 0.0 1.0; + } + } + part { name: "padding2"; + type: SPACER; + scale: 1; + description { state: "default" 0.0; + rel1.to_x: "entry_base"; + rel1.to_y: "base"; + rel2.to_x: "entry_base"; + rel2.to_y: "base"; + rel2.relative: 0.0 1.0; + align: 1.0 0.5; + min: 10 0; + fixed: 1 0; + } + } + part { name: "entry_base"; + type: SPACER; + scale: 1; + description { state: "default" 0.0; + min: 40 0; + fixed: 1 0; + align: 1.0 0.5; + rel1.to_x: "elm.swallow.up"; + rel1.to_y: "base"; + rel2.to_x: "elm.swallow.down"; + rel2.to_y: "base"; + rel2.relative: 0.0 1.0; + } + } + part { name: "elm.swallow.entry"; + type: SWALLOW; + scale: 1; + description { state: "default" 0.0; + rel1.to: "entry_base"; + rel2.to: "entry_base"; + } + } + part { name: "elm.swallow.up"; + type: SWALLOW; + scale: 1; description { state: "default" 0.0; min: 24 24; fixed: 1 1; - align: 0 0.5; - rel1.to: "elm.swallow.plus"; - rel2.to: "elm.swallow.plus"; + align: 1.0 1.0; + rel1.to: "base"; rel1.relative: 1.0 0.5; + rel2.to: "base"; rel2.relative: 1.0 0.5; } } - part { name: "elm.swallow.slider"; + part { name: "elm.swallow.down"; type: SWALLOW; + scale: 1; description { state: "default" 0.0; - rel1.to_x: "elm.swallow.minus"; - rel1.relative: 1 0; - rel1.offset: 5 0; + min: 24 24; + fixed: 1 1; + align: 1.0 0.0; + rel1.to: "base"; + rel1.relative: 1.0 0.5; + rel2.to: "base"; + rel2.relative: 1.0 0.5; } } } + programs { + program { name: "odd_item_set"; + signal: "odd,item,set"; + source: ""; + action: STATE_SET "odd" 0.0; + target: "base"; + } + } } group { name: "statusbar_layout"; diff --git a/src/lib/ctxpopup.c b/src/lib/ctxpopup.c index 637685d..66463c7 100644 --- a/src/lib/ctxpopup.c +++ b/src/lib/ctxpopup.c @@ -19,27 +19,47 @@ typedef struct ctxpopup_data_s { /*****************************************************************************/ static void -btn_plus_cb(void *data, Evas_Object *obj EINA_UNUSED, +btn_up_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - Evas_Object *slider = data; + Evas_Object *layout = data; + Evas_Object *slider = elm_object_part_content_get(layout, + "elm.swallow.slider"); + Evas_Object *entry = elm_object_part_content_get(layout, + "elm.swallow.entry"); attr_value *attr = evas_object_data_get(slider, "attr"); + Eina_Bool integer = (Eina_Bool)(int) evas_object_data_get(slider, "integer"); double value = elm_slider_value_get(slider); + char buf[128]; + + if (attr->type & ATTR_VALUE_INTEGER) value += 1; + else value += 0.01; - if (attr->type & ATTR_VALUE_INTEGER) elm_slider_value_set(slider, value + 1); - else elm_slider_value_set(slider, value + 0.01); + if (integer) snprintf(buf, sizeof(buf), "%1.0f", value); + else snprintf(buf, sizeof(buf), "%1.2f", value); + elm_object_text_set(entry, buf); } static void -btn_minus_cb(void *data, Evas_Object *obj EINA_UNUSED, +btn_down_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - Evas_Object *slider = data; + Evas_Object *layout = data; + Evas_Object *slider = elm_object_part_content_get(layout, + "elm.swallow.slider"); + Evas_Object *entry = elm_object_part_content_get(layout, + "elm.swallow.entry"); attr_value *attr = evas_object_data_get(slider, "attr"); + Eina_Bool integer = (Eina_Bool)(int) evas_object_data_get(slider, "integer"); double value = elm_slider_value_get(slider); + char buf[128]; - if (attr->type & ATTR_VALUE_INTEGER) elm_slider_value_set(slider, value - 1); - else elm_slider_value_set(slider, value - 0.01); + if (attr->type & ATTR_VALUE_INTEGER) value -= 1; + else value -= 0.01; + + if (integer) snprintf(buf, sizeof(buf), "%1.0f", value); + else snprintf(buf, sizeof(buf), "%1.2f", value); + elm_object_text_set(entry, buf); } static void @@ -113,47 +133,136 @@ ctxpopup_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, free(data); } +static void +slider_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *entry = data; + double val = elm_slider_value_get(obj); + char buf[128]; + Eina_Bool integer = (Eina_Bool)(int) evas_object_data_get(obj, "integer"); + + if (integer) snprintf(buf, sizeof(buf), "%1.0f", val); + else snprintf(buf, sizeof(buf), "%1.2f", val); + elm_object_text_set(entry, buf); +} + +static void +entry_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *slider = data; + double text_val, val, min_val, max_val; + char buf[128]; + Eina_Bool integer = (Eina_Bool)(int) evas_object_data_get(slider, "integer"); + + text_val = atof(elm_object_text_get(obj)); + elm_slider_min_max_get(slider, &min_val, &max_val); + + if (text_val < min_val) val = min_val; + else if (text_val > max_val) val = max_val; + else val = text_val; + + if (val != text_val) + { + if (integer) snprintf(buf, sizeof(buf), "%1.0f", val); + else snprintf(buf, sizeof(buf), "%1.2f", val); + elm_object_text_set(obj, buf); + } + else + elm_slider_value_set(slider, val); +} + static Evas_Object * slider_layout_create(Evas_Object *parent, attr_value *attr, - double slider_val, Eina_Bool integer) + const char *type, double slider_val, Eina_Bool integer) { //Layout Evas_Object *layout = elm_layout_add(parent); elm_layout_file_set(layout, EDJE_PATH, "slider_layout"); evas_object_show(layout); + //Type + if (type) + elm_object_part_text_set(layout, "elm.text.type", type); + //Slider Evas_Object *slider = elm_slider_add(layout); - if (integer) elm_slider_unit_format_set(slider, "%1.0f"); - else elm_slider_unit_format_set(slider, "%1.2f"); elm_slider_span_size_set(slider, 120); elm_slider_indicator_show_set(slider, EINA_FALSE); elm_slider_min_max_set(slider, attr->min, attr->max); elm_slider_value_set(slider, slider_val); evas_object_data_set(slider, "attr", attr); + evas_object_data_set(slider, "integer", (void *)(int) integer); + + char slider_min[16]; + char slider_max[16]; + if (integer) + { + snprintf(slider_min, sizeof(slider_min), "%1.0f", attr->min); + snprintf(slider_max, sizeof(slider_max), "%1.0f", attr->max); + } + else + { + snprintf(slider_min, sizeof(slider_min), "%1.2f", attr->min); + snprintf(slider_max, sizeof(slider_max), "%1.2f", attr->max); + } + elm_object_part_text_set(layout, "elm.text.slider_min", slider_min); + elm_object_part_text_set(layout, "elm.text.slider_max", slider_max); elm_object_part_content_set(layout, "elm.swallow.slider", slider); + //Entry + char buf[128]; + Evas_Object *entry = elm_entry_add(layout); + elm_entry_context_menu_disabled_set(entry, EINA_TRUE); + elm_entry_single_line_set(entry, EINA_TRUE); + evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + if (integer) snprintf(buf, sizeof(buf), "%1.0f", slider_val); + else snprintf(buf, sizeof(buf), "%1.2f", slider_val); + elm_object_text_set(entry, buf); + elm_object_part_content_set(layout, "elm.swallow.entry", entry); + + Elm_Entry_Filter_Accept_Set digits_filter_data; + Elm_Entry_Filter_Limit_Size limit_filter_data; + if (integer) + { + digits_filter_data.accepted = "0123456789"; + digits_filter_data.rejected = NULL; + limit_filter_data.max_char_count = 4; + } + else + { + digits_filter_data.accepted = ".0123456789"; + digits_filter_data.rejected = NULL; + limit_filter_data.max_char_count = 5; + } + elm_entry_markup_filter_append(entry, elm_entry_filter_accept_set, + &digits_filter_data); + elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, + &limit_filter_data); + + evas_object_smart_callback_add(slider, "changed", slider_changed_cb, entry); + evas_object_smart_callback_add(entry, "changed", entry_changed_cb, slider); + Evas_Object *btn; Evas_Object *img; - //Minus Button + //Up Button btn = elm_button_add(layout); - evas_object_smart_callback_add(btn, "clicked", btn_minus_cb, slider); - elm_object_part_content_set(layout, "elm.swallow.minus", btn); + evas_object_smart_callback_add(btn, "clicked", btn_up_cb, layout); + elm_object_part_content_set(layout, "elm.swallow.up", btn); - //Minus Image + //Up Image img = elm_image_add(btn); - elm_image_file_set(img, EDJE_PATH, "minus"); + elm_image_file_set(img, EDJE_PATH, "up"); elm_object_content_set(btn, img); - //Plus Button + //Down Button btn = elm_button_add(layout); - evas_object_smart_callback_add(btn, "clicked", btn_plus_cb, slider); - elm_object_part_content_set(layout, "elm.swallow.plus", btn); + evas_object_smart_callback_add(btn, "clicked", btn_down_cb, layout); + elm_object_part_content_set(layout, "elm.swallow.down", btn); - //Plus Image + //Down Image img = elm_image_add(btn); - elm_image_file_set(img, EDJE_PATH, "plus"); + elm_image_file_set(img, EDJE_PATH, "down"); elm_object_content_set(btn, img); return layout; @@ -164,7 +273,7 @@ slider_layout_set(Evas_Object *ctxpopup, attr_value *attr, Eina_Bool integer) { Eina_Stringshare *type; Eina_Array_Iterator itr; - int i; + unsigned int i; //Box Evas_Object *box = elm_box_add(ctxpopup); @@ -175,9 +284,10 @@ slider_layout_set(Evas_Object *ctxpopup, attr_value *attr, Eina_Bool integer) //Layout Evas_Object *layout; - for (i = 0; i < attr->cnt; i++) + EINA_ARRAY_ITER_NEXT(attr->strs, i, type, itr) { - layout = slider_layout_create(box, attr, attr->val[i], integer); + layout = slider_layout_create(box, attr, type, attr->val[i], integer); + if (i % 2) elm_object_signal_emit(layout, "odd,item,set", ""); elm_box_pack_end(box, layout); } diff --git a/src/lib/edc_parser.c b/src/lib/edc_parser.c index 77059f3..a5df883 100644 --- a/src/lib/edc_parser.c +++ b/src/lib/edc_parser.c @@ -393,8 +393,15 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) eina_inarray_push(td->attrs, &attr); //Type: Integer + Eina_Array *rgba = eina_array_new(4); + eina_array_push(rgba, eina_stringshare_add("R:")); + eina_array_push(rgba, eina_stringshare_add("G:")); + eina_array_push(rgba, eina_stringshare_add("B:")); + eina_array_push(rgba, eina_stringshare_add("A:")); + memset(&attr, 0x00, sizeof(parser_attr)); attr.keyword = eina_stringshare_add("color"); + attr.value.strs = rgba; attr.value.cnt = 4; attr.value.min = 0; attr.value.max = 255; @@ -403,8 +410,15 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) attr.value.append_str = ATTR_APPEND_SEMICOLON; eina_inarray_push(td->attrs, &attr); + rgba = eina_array_new(4); + eina_array_push(rgba, eina_stringshare_add("R:")); + eina_array_push(rgba, eina_stringshare_add("G:")); + eina_array_push(rgba, eina_stringshare_add("B:")); + eina_array_push(rgba, eina_stringshare_add("A:")); + memset(&attr, 0x00, sizeof(parser_attr)); attr.keyword = eina_stringshare_add("color2"); + attr.value.strs = rgba; attr.value.cnt = 4; attr.value.min = 0; attr.value.max = 255; @@ -413,8 +427,15 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) attr.value.append_str = ATTR_APPEND_SEMICOLON; eina_inarray_push(td->attrs, &attr); + rgba = eina_array_new(4); + eina_array_push(rgba, eina_stringshare_add("R:")); + eina_array_push(rgba, eina_stringshare_add("G:")); + eina_array_push(rgba, eina_stringshare_add("B:")); + eina_array_push(rgba, eina_stringshare_add("A:")); + memset(&attr, 0x00, sizeof(parser_attr)); attr.keyword = eina_stringshare_add("color3"); + attr.value.strs = rgba; attr.value.cnt = 4; attr.value.min = 0; attr.value.max = 255; @@ -423,8 +444,12 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) attr.value.append_str = ATTR_APPEND_SEMICOLON; eina_inarray_push(td->attrs, &attr); + Eina_Array *scale = eina_array_new(1); + eina_array_push(scale, eina_stringshare_add("Scale:")); + memset(&attr, 0x00, sizeof(parser_attr)); attr.keyword = eina_stringshare_add("scale"); + attr.value.strs = scale; attr.value.cnt = 1; attr.value.min = 0; attr.value.max = 1; @@ -433,8 +458,13 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) attr.value.append_str = ATTR_APPEND_SEMICOLON; eina_inarray_push(td->attrs, &attr); + Eina_Array *xy = eina_array_new(2); + eina_array_push(xy, eina_stringshare_add("X:")); + eina_array_push(xy, eina_stringshare_add("Y:")); + memset(&attr, 0x00, sizeof(parser_attr)); attr.keyword = eina_stringshare_add("fixed"); + attr.value.strs = xy; attr.value.cnt = 2; attr.value.min = 0; attr.value.max = 1; @@ -443,8 +473,12 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) attr.value.append_str = ATTR_APPEND_SEMICOLON; eina_inarray_push(td->attrs, &attr); + Eina_Array *size = eina_array_new(1); + eina_array_push(size, eina_stringshare_add("Size:")); + memset(&attr, 0x00, sizeof(parser_attr)); attr.keyword = eina_stringshare_add("size"); + attr.value.strs = size; attr.value.cnt = 1; attr.value.min = 1; attr.value.max = 255; @@ -453,8 +487,13 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) attr.value.append_str = ATTR_APPEND_SEMICOLON; eina_inarray_push(td->attrs, &attr); + Eina_Array *wh = eina_array_new(2); + eina_array_push(wh, eina_stringshare_add("W:")); + eina_array_push(wh, eina_stringshare_add("H:")); + memset(&attr, 0x00, sizeof(parser_attr)); attr.keyword = eina_stringshare_add("min"); + attr.value.strs = wh; attr.value.cnt = 2; attr.value.min = 0; attr.value.max = 1000; @@ -463,8 +502,13 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) attr.value.append_str = ATTR_APPEND_SEMICOLON; eina_inarray_push(td->attrs, &attr); + wh = eina_array_new(2); + eina_array_push(wh, eina_stringshare_add("W:")); + eina_array_push(wh, eina_stringshare_add("H:")); + memset(&attr, 0x00, sizeof(parser_attr)); attr.keyword = eina_stringshare_add("max"); + attr.value.strs = wh; attr.value.cnt = 2; attr.value.min = 0; attr.value.max = 1000; @@ -473,8 +517,12 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) attr.value.append_str = ATTR_APPEND_SEMICOLON; eina_inarray_push(td->attrs, &attr); + Eina_Array *mouse_events = eina_array_new(1); + eina_array_push(mouse_events, eina_stringshare_add("Mouse Events:")); + memset(&attr, 0x00, sizeof(parser_attr)); attr.keyword = eina_stringshare_add("mouse_events"); + attr.value.strs = mouse_events; attr.value.cnt = 1; attr.value.min = 0; attr.value.max = 1; @@ -484,8 +532,13 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) eina_inarray_push(td->attrs, &attr); //Type: Float + xy = eina_array_new(2); + eina_array_push(xy, eina_stringshare_add("X:")); + eina_array_push(xy, eina_stringshare_add("Y:")); + memset(&attr, 0x00, sizeof(parser_attr)); attr.keyword = eina_stringshare_add("relative"); + attr.value.strs = xy; attr.value.cnt = 2; attr.value.min = 0.0; attr.value.max = 1; @@ -494,8 +547,13 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) attr.value.append_str = ATTR_APPEND_SEMICOLON; eina_inarray_push(td->attrs, &attr); + wh = eina_array_new(2); + eina_array_push(wh, eina_stringshare_add("W:")); + eina_array_push(wh, eina_stringshare_add("H:")); + memset(&attr, 0x00, sizeof(parser_attr)); attr.keyword = eina_stringshare_add("aspect"); + attr.value.strs = wh; attr.value.cnt = 2; attr.value.min = 0.0; attr.value.max = 1.0; @@ -504,8 +562,13 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) attr.value.append_str = ATTR_APPEND_SEMICOLON; eina_inarray_push(td->attrs, &attr); + xy = eina_array_new(2); + eina_array_push(xy, eina_stringshare_add("X:")); + eina_array_push(xy, eina_stringshare_add("Y:")); + memset(&attr, 0x00, sizeof(parser_attr)); attr.keyword = eina_stringshare_add("align"); + attr.value.strs = xy; attr.value.cnt = 2; attr.value.min = 0.0; attr.value.max = 1.0; --
