rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=1dcddb2ee2de462e6540fea98f46c9c46447c20b
commit 1dcddb2ee2de462e6540fea98f46c9c46447c20b Author: Vitalii Vorobiov <vi.vorob...@samsung.com> Date: Wed Jan 20 17:30:11 2016 +0000 property_group: better logic with filter If none part is selected, set state to NULL save that into editor so history can restore both unset part and state back @fix #49862 --- src/bin/ui/property_group.c | 129 ++++++++++++++++++++++++++++---------------- 1 file changed, 84 insertions(+), 45 deletions(-) diff --git a/src/bin/ui/property_group.c b/src/bin/ui/property_group.c index 96c980c..dd6cd2d 100644 --- a/src/bin/ui/property_group.c +++ b/src/bin/ui/property_group.c @@ -1984,35 +1984,6 @@ prop_program_action_add(Evas_Object *parent, Group_Prop_Data *pd) return item; } -#define PROGRAM_ATTR_1COMBOBOX_CALLBACK(SUB, VALUE, MEMBER, DESCRIPTION, UPDATE) \ -static void \ -_on_##MEMBER##_##VALUE##_change(void *data, \ - Evas_Object *obj __UNUSED__, \ - void *ei) \ -{ \ - Group_Prop_Data *pd = (Group_Prop_Data *)data; \ - Ewe_Combobox_Item *item = ei; \ - Eina_Bool isNone = false; \ - Eina_Stringshare *old_val = edje_edit_##SUB##_##VALUE##_get(pd->group->edit_object \ - PROGRAM_ARGS); \ - if (((item->index != 0) && (item->title == old_val)) /*stringshares*/ || \ - ((item->index == 0) && (old_val == NULL))) \ - { \ - eina_stringshare_del(old_val); \ - return; \ - } \ - eina_stringshare_del(old_val); \ - isNone = !strcmp(item->title, _("None")); \ - Eina_Stringshare *msg = eina_stringshare_printf(DESCRIPTION, isNone ? NULL : item->title); \ - Change *change = change_add(msg); \ - eina_stringshare_del(msg); \ - editor_##SUB##_##VALUE##_set(pd->group->edit_object, change, false PROGRAM_ARGS, \ - isNone ? NULL : item->title); \ - history_change_add(pd->group->history, change); \ - evas_object_smart_callback_call(ap.win, SIGNAL_PROPERTY_ATTRIBUTE_CHANGED, NULL); \ - UPDATE \ -} - static void _program_transition_param_set(Group_Prop_Data *pd, Edje_Tween_Mode type) { @@ -2249,11 +2220,17 @@ prop_program_filter_part_update(Group_Prop_Data *pd) value = edje_edit_program_filter_part_get(pd->group->edit_object PROGRAM_ARGS); ewe_combobox_item_add(pd->attributes.program.filter_part, _("None")); ewe_combobox_text_set(pd->attributes.program.filter_part, value ? value : _("None")); + if (!value) + { + elm_object_disabled_set(pd->attributes.program.filter_state, true); + ewe_combobox_text_set(pd->attributes.program.filter_state, _("None")); + } EINA_LIST_FOREACH(pd->group->parts, l, part) { ewe_combobox_item_add(pd->attributes.program.filter_part, part->name); } edje_edit_string_free(value); + prop_program_filter_state_update(pd); } static void @@ -2268,6 +2245,7 @@ prop_program_filter_state_update(Group_Prop_Data *pd) if (!part_name) { elm_object_disabled_set(pd->attributes.program.filter_state, true); + ewe_combobox_text_set(pd->attributes.program.filter_state, _("None")); return; } else @@ -2284,24 +2262,85 @@ prop_program_filter_state_update(Group_Prop_Data *pd) edje_edit_string_free(part_name); } -#define UPDATE_PROGRAM_FILTER_STATE \ - prop_program_filter_state_update(pd); - -#define PROGRAM_ATTR_2COMBOBOX(TEXT, SUB, VALUE1, VALUE2, MEMBER, TOOLTIP1, TOOLTIP2, DESCRIPTION1, DESCRIPTION2, LABEL1, LABEL2) \ - PROGRAM_ATTR_1COMBOBOX_CALLBACK(SUB, VALUE1, MEMBER, DESCRIPTION1, UPDATE_PROGRAM_FILTER_STATE) \ - PROGRAM_ATTR_1COMBOBOX_CALLBACK(SUB, VALUE2, MEMBER, DESCRIPTION2, ) \ - PROGRAM_2COMBOBOX_ADD(TEXT, SUB, VALUE1, VALUE2, MEMBER, TOOLTIP1, TOOLTIP2, LABEL1, LABEL2) +static void +_on_program_filter_part_change(void *data, + Evas_Object *obj __UNUSED__, + void *ei) +{ + Group_Prop_Data *pd = (Group_Prop_Data *)data; + Ewe_Combobox_Item *item = ei; + Eina_Bool isNone = false; + Eina_Stringshare *old_val = edje_edit_program_filter_part_get(pd->group->edit_object + PROGRAM_ARGS); + Part *part; + State *state; + if (((item->index != 0) && (item->title == old_val)) /*stringshares*/ || + ((item->index == 0) && (old_val == NULL))) + { + eina_stringshare_del(old_val); + return; + } + eina_stringshare_del(old_val); + isNone = !strcmp(item->title, _("None")); + Eina_Stringshare *msg = eina_stringshare_printf(_("filter part changed to \"%s\""), + isNone ? NULL : item->title); + /* making change */ + Change *change = change_add(msg); + eina_stringshare_del(msg); + editor_program_filter_part_set(pd->group->edit_object, change, false PROGRAM_ARGS, + isNone ? NULL : item->title); -PROGRAM_ATTR_2COMBOBOX(_("filter"), program, filter_part, filter_state, program, - _("Filter signals to be only accepted if the part is " - "in certain state (part value)"), - _("Filter signals to be only accepted if the part is " - "in certain state (state value)"), - _("filter part changed to \"%s\""), - _("filter state changed to \"%s\""), - _("part:"), _("state:")) + if (isNone) + { + editor_program_filter_state_set(pd->group->edit_object, change, false PROGRAM_ARGS, + NULL); + } + else + { + part = pm_resource_unsorted_get(pd->group->parts, item->title); + state = eina_list_data_get(part->states); + editor_program_filter_state_set(pd->group->edit_object, change, false PROGRAM_ARGS, + state->parsed_name); + } + history_change_add(pd->group->history, change); + evas_object_smart_callback_call(ap.win, SIGNAL_PROPERTY_ATTRIBUTE_CHANGED, NULL); + prop_program_filter_state_update(pd); +} +static void +_on_program_filter_state_change(void *data, + Evas_Object *obj __UNUSED__, + void *ei) +{ + Group_Prop_Data *pd = (Group_Prop_Data *)data; + Ewe_Combobox_Item *item = ei; + Eina_Bool isNone = false; + Eina_Stringshare *old_val = edje_edit_program_filter_part_get(pd->group->edit_object + PROGRAM_ARGS); + if (((item->index != 0) && (item->title == old_val)) /*stringshares*/ || + ((item->index == 0) && (old_val == NULL))) + { + eina_stringshare_del(old_val); + return; + } + eina_stringshare_del(old_val); + isNone = !strcmp(item->title, _("None")); + Eina_Stringshare *msg = eina_stringshare_printf(_("filter state changed to \"%s\""), + isNone ? NULL : item->title); + Change *change = change_add(msg); + eina_stringshare_del(msg); + editor_program_filter_state_set(pd->group->edit_object, change, false PROGRAM_ARGS, + isNone ? NULL : item->title); + history_change_add(pd->group->history, change); + evas_object_smart_callback_call(ap.win, SIGNAL_PROPERTY_ATTRIBUTE_CHANGED, NULL); + prop_program_filter_state_update(pd); +} -#undef UPDATE_PROGRAM_FILTER_STATE +PROGRAM_2COMBOBOX_ADD(_("filter"), program, filter_part, filter_state, program, + _("Filter signals to be only accepted if the part is " + "in certain state (part value)"), + _("Filter signals to be only accepted if the part is " + "in certain state (state value)"), + _("part:"), _("state:")) #define PROGRAM_ATTR_2SPINNER(TEXT, SUB, VALUE1, VALUE2, MEMBER, MIN, MAX, STEP, FMT, \ L1_START, L1_END, L2_START, L2_END, TOOLTIP1, TOOLTIP2, MULTIPLIER, \ --