hermet pushed a commit to branch master. http://git.enlightenment.org/tools/enventor.git/commit/?id=528389b95c0201bab1229dbd27465d4faff28e15
commit 528389b95c0201bab1229dbd27465d4faff28e15 Author: Jaehyun Cho <[email protected]> Date: Fri Dec 19 14:36:49 2014 +0900 ctxpopup: Support toggle candidate. Summary: Support toggle candidate. @feature Reviewers: Hermet Differential Revision: https://phab.enlightenment.org/D1789 --- data/themes/default/layout_common.edc | 85 +++++++++++++++++++++++++++++++++ src/lib/ctxpopup.c | 90 +++++++++++++++++++++++++++++++++++ src/lib/edc_parser.c | 6 +-- src/lib/enventor_private.h | 15 +++--- 4 files changed, 186 insertions(+), 10 deletions(-) diff --git a/data/themes/default/layout_common.edc b/data/themes/default/layout_common.edc index 6cfeeb1..8564cc1 100644 --- a/data/themes/default/layout_common.edc +++ b/data/themes/default/layout_common.edc @@ -1559,6 +1559,91 @@ group { name: "preview_layout"; } } +group { name: "toggle_layout"; + parts { + part { name: "base"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + min: 150 1; + 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; + description { state: "default" 0.0; + rel1.to: "base"; + rel2.to: "base"; + rel2.relative: 0.0 1.0; + align: 0.0 0.5; + min: 35 0; + fixed: 1 0; + } + } + part { name: "elm.text.type"; + type: TEXT; + description { state: "default" 0.0; + rel1.to: "text_base"; + rel1.offset: 5 0; + rel2.to: "text_base"; + align: 0.0 0.5; + fixed: 1 0; + text { + font: FN; + size: 10; + align: 0.0 0.5; + min: 1 0; + ellipsis: -1; + } + color: COL_NM; + } + } + part { name: "padding1"; + type: SPACER; + 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: 5 0; + fixed: 1 0; + } + } + part { name: "elm.swallow.toggle"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.to: "padding1"; + rel1.relative: 1.0 0.0; + rel2.to: "padding2"; + rel2.relative: 0.0 1.0; + } + } + part { name: "padding2"; + type: SPACER; + description { state: "default" 0.0; + rel1.to: "base"; + rel1.relative: 1.0 0.0; + rel2.to: "base"; + align: 1.0 0.5; + min: 5 0; + fixed: 1 0; + } + } + } + programs { + program { name: "odd_item_set"; + signal: "odd,item,set"; + source: ""; + action: STATE_SET "odd" 0.0; + target: "base"; + } + } +} + group { name: "slider_layout"; parts { part { name: "base"; diff --git a/src/lib/ctxpopup.c b/src/lib/ctxpopup.c index 66463c7..f513d15 100644 --- a/src/lib/ctxpopup.c +++ b/src/lib/ctxpopup.c @@ -78,6 +78,37 @@ ctxpopup_it_cb(void *data, Evas_Object *obj, void *event_info) } static void +toggle_dismiss_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) +{ + attr_value *attr = data; + Evas_Object *box = elm_object_content_get(obj); + Evas_Object *layout; + Evas_Object *toggle; + Eina_List *box_children = elm_box_children_get(box); + Eina_List *l; + char candidate[512]; + char buf[128]; + + if (eina_list_count(box_children) == 0) return; + + snprintf(candidate, sizeof(candidate), "%s", attr->prepend_str); + + EINA_LIST_FOREACH(box_children, l, layout) + { + toggle = elm_object_part_content_get(layout, + "elm.swallow.toggle"); + snprintf(buf, sizeof(buf), "%d", (int) elm_check_state_get(toggle)); + strcat(candidate, buf); + strcat(candidate, " "); + } + candidate[strlen(candidate) - 1] = '\0'; //Remove last appended " ". + strcat(candidate, attr->append_str); + + ctxpopup_data *ctxdata = evas_object_data_get(obj, "ctxpopup_data"); + ctxdata->selected_cb(ctxdata->data, obj, candidate); +} + +static void slider_dismiss_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) { attr_value *attr = data; @@ -172,6 +203,60 @@ entry_changed_cb(void *data, Evas_Object *obj, void *event_info) } static Evas_Object * +toggle_layout_create(Evas_Object *parent, attr_value *attr, + const char *type, Eina_Bool toggle_val) +{ + //Layout + Evas_Object *layout = elm_layout_add(parent); + elm_layout_file_set(layout, EDJE_PATH, "toggle_layout"); + evas_object_show(layout); + + //Type + if (type) + elm_object_part_text_set(layout, "elm.text.type", type); + + //Toggle + Evas_Object *toggle = elm_check_add(layout); + elm_object_style_set(toggle, "toggle"); + elm_object_part_text_set(toggle, "on", "Enable"); + elm_object_part_text_set(toggle, "off", "Disable"); + elm_check_state_set(toggle, toggle_val); + evas_object_data_set(toggle, "attr", attr); + elm_object_part_content_set(layout, "elm.swallow.toggle", toggle); + + return layout; +} + +static void +toggle_layout_set(Evas_Object *ctxpopup, attr_value *attr) +{ + Eina_Stringshare *type; + Eina_Array_Iterator itr; + unsigned int i; + + //Box + Evas_Object *box = elm_box_add(ctxpopup); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(box); + + //Layout + Evas_Object *layout; + EINA_ARRAY_ITER_NEXT(attr->strs, i, type, itr) + { + layout = toggle_layout_create(box, attr, type, + (Eina_Bool) roundf(attr->val[i])); + if (i % 2) elm_object_signal_emit(layout, "odd,item,set", ""); + elm_box_pack_end(box, layout); + } + + elm_object_content_set(ctxpopup, box); + evas_object_smart_callback_add(ctxpopup, "dismissed", toggle_dismiss_cb, + (void *) attr); +} + +static Evas_Object * slider_layout_create(Evas_Object *parent, attr_value *attr, const char *type, double slider_val, Eina_Bool integer) { @@ -533,6 +618,11 @@ ctxpopup_candidate_list_create(edit_data *ed, attr_value *attr, switch (attr->type) { + case ATTR_VALUE_BOOLEAN: + { + toggle_layout_set(ctxpopup, attr); + break; + } case ATTR_VALUE_INTEGER: { slider_layout_set(ctxpopup, attr, EINA_TRUE); diff --git a/src/lib/edc_parser.c b/src/lib/edc_parser.c index a5df883..e4ec313 100644 --- a/src/lib/edc_parser.c +++ b/src/lib/edc_parser.c @@ -453,7 +453,7 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) attr.value.cnt = 1; attr.value.min = 0; attr.value.max = 1; - attr.value.type = ATTR_VALUE_INTEGER; + attr.value.type = ATTR_VALUE_BOOLEAN; attr.value.prepend_str = ATTR_PREPEND_COLON; attr.value.append_str = ATTR_APPEND_SEMICOLON; eina_inarray_push(td->attrs, &attr); @@ -468,7 +468,7 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) attr.value.cnt = 2; attr.value.min = 0; attr.value.max = 1; - attr.value.type = ATTR_VALUE_INTEGER; + attr.value.type = ATTR_VALUE_BOOLEAN; attr.value.prepend_str = ATTR_PREPEND_COLON; attr.value.append_str = ATTR_APPEND_SEMICOLON; eina_inarray_push(td->attrs, &attr); @@ -526,7 +526,7 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) attr.value.cnt = 1; attr.value.min = 0; attr.value.max = 1; - attr.value.type = ATTR_VALUE_INTEGER; + attr.value.type = ATTR_VALUE_BOOLEAN; attr.value.prepend_str = ATTR_PREPEND_COLON; attr.value.append_str = ATTR_APPEND_SEMICOLON; eina_inarray_push(td->attrs, &attr); diff --git a/src/lib/enventor_private.h b/src/lib/enventor_private.h index 2c78646..a45f9e1 100644 --- a/src/lib/enventor_private.h +++ b/src/lib/enventor_private.h @@ -41,13 +41,14 @@ typedef struct editor_s edit_data; typedef enum attr_value_type { - ATTR_VALUE_INTEGER = 1, - ATTR_VALUE_FLOAT = 2, - ATTR_VALUE_CONSTANT = 4, - ATTR_VALUE_PART = 8, - ATTR_VALUE_STATE = 16, - ATTR_VALUE_IMAGE = 32, - ATTR_VALUE_PROGRAM = 64 + ATTR_VALUE_BOOLEAN = 1, + ATTR_VALUE_INTEGER = 2, + ATTR_VALUE_FLOAT = 4, + ATTR_VALUE_CONSTANT = 8, + ATTR_VALUE_PART = 16, + ATTR_VALUE_STATE = 32, + ATTR_VALUE_IMAGE = 64, + ATTR_VALUE_PROGRAM = 128 } attr_value_type; struct attr_value_s --
