rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=0277ffe3353be8dcf0bf7de2315b42b814fa003f
commit 0277ffe3353be8dcf0bf7de2315b42b814fa003f Author: Vitalii Vorobiov <vi.vorob...@samsung.com> Date: Fri Mar 18 09:27:38 2016 +0200 demo_group: update program list on program changes add program when source name and signal name is not NULL on any changes of them, poke demo_group to check if program should be added into group Fixes T3223 --- src/bin/common/signals.h | 8 ++++ src/bin/ui/property_group.c | 4 ++ src/bin/ui/workspace/demo_group.c | 79 +++++++++++++++++++++++++++++++++++++++ src/bin/ui/workspace/demo_group.h | 6 +++ 4 files changed, 97 insertions(+) diff --git a/src/bin/common/signals.h b/src/bin/common/signals.h index a632461..c741554 100644 --- a/src/bin/common/signals.h +++ b/src/bin/common/signals.h @@ -217,6 +217,14 @@ typedef struct { #define SIGNAL_EDITOR_PROGRAM_ADDED "SIGNAL_EDITOR_PROGRAM_ADDED" /** + * emited when program is being changed from property. + * eventinfo - stringshare with programs name + * + * @ingroup Window + */ +#define SIGNAL_EDITOR_PROGRAM_UPDATE "SIGNAL_EDITOR_PROGRAM_UPDATE" + +/** * emited *before* program will be deleted in editor. * eventinfo - stringshare with programs name * diff --git a/src/bin/ui/property_group.c b/src/bin/ui/property_group.c index 99cb1c9..d8897be 100644 --- a/src/bin/ui/property_group.c +++ b/src/bin/ui/property_group.c @@ -1013,9 +1013,13 @@ _on_editor_attribute_changed(void *data, break; case ATTRIBUTE_PROGRAM_SIGNAL: prop_program_signal_update(pd); + evas_object_smart_callback_call(ap.win, SIGNAL_EDITOR_PROGRAM_UPDATE, (void *)eina_stringshare_add(pd->attributes.program.program)); + eina_stringshare_del(pd->attributes.program.program); break; case ATTRIBUTE_PROGRAM_SOURCE: prop_program_source_update(pd); + evas_object_smart_callback_call(ap.win, SIGNAL_EDITOR_PROGRAM_UPDATE, (void *)eina_stringshare_add(pd->attributes.program.program)); + eina_stringshare_del(pd->attributes.program.program); break; case ATTRIBUTE_PROGRAM_ACTION: prop_program_action_update(pd); diff --git a/src/bin/ui/workspace/demo_group.c b/src/bin/ui/workspace/demo_group.c index 7b7f543..4edbae6 100644 --- a/src/bin/ui/workspace/demo_group.c +++ b/src/bin/ui/workspace/demo_group.c @@ -43,6 +43,9 @@ static Elm_Genlist_Item_Class *itc_part; static Elm_Genlist_Item_Class *itc_part_selected; static Elm_Genlist_Item_Class *itc_signals; +static void +_program_item_del(Elm_Object_Item *pl, Demo_Signal *part); + #define CAPTION_GENLIST_ITEM_TEXT_GET(TYPE, TITLE) \ static char * \ _##TYPE##_label_cb(void *data, \ @@ -220,6 +223,79 @@ _content_get(void *data __UNUSED__, return button; } +void +_program_add(void *data, + Evas_Object *obj __UNUSED__, + void *ei) +{ + Part_Demo_List *pl = data; + Demo_Signal *demo_sig, *pr; + Eina_Stringshare *sig_name, *source_name; + Eina_Stringshare *program_name = ei; + Eina_Bool correct = false; + Elm_Object_Item *part_item; + const Eina_List *part_items; + + assert(pl); + + part_items = elm_genlist_item_subitems_get(pl->it_signal); + part_item = eina_list_data_get(part_items); + pr = elm_object_item_data_get(part_item); + + /* find program */ + while ((pr) && (pr->prog_name != program_name)) + { + part_items = eina_list_next(part_items); + part_item = eina_list_data_get(part_items); + pr = elm_object_item_data_get(part_item); + } + + sig_name = edje_edit_program_signal_get(pl->group->edit_object, program_name); + source_name = edje_edit_program_source_get(pl->group->edit_object, program_name); + if (!source_name) source_name = eina_stringshare_add(""); + if ((sig_name) && (strcmp(sig_name, "drag") != 0) && + (strncmp(sig_name, "mouse", strlen("mouse")) != 0)) + correct = true; + + /* if program is not exist */ + if ((!part_item) && (correct)) + { + demo_sig = mem_calloc(1, sizeof(Demo_Part)); + demo_sig->prog_name = eina_stringshare_add(program_name); + demo_sig->sig_name = eina_stringshare_add(sig_name); + demo_sig->source_name = eina_stringshare_add(source_name); + pl->signal_list = eina_list_append(pl->signal_list, demo_sig); + elm_genlist_item_append(pl->genlist, + itc_signals, + demo_sig, + pl->it_signal, + ELM_GENLIST_ITEM_NONE, + NULL, + NULL); + } + else if ((part_item) && (correct)) /* if program exist and data is correct */ + { + eina_stringshare_del(pr->prog_name); + eina_stringshare_del(pr->sig_name); + eina_stringshare_del(pr->source_name); + pr->prog_name = eina_stringshare_add(program_name); + pr->sig_name = eina_stringshare_add(sig_name); + pr->source_name = eina_stringshare_add(source_name); + elm_genlist_item_update(part_item); + } + else if ((part_item) && (!correct)) /* if exists and data is NOT correct */ + { + pl->signal_list = eina_list_remove(pl->signal_list, pr); + _program_item_del(pl->it_signal, pr); + eina_stringshare_del(pr->prog_name); + eina_stringshare_del(pr->sig_name); + eina_stringshare_del(pr->source_name); + free(pr); + elm_object_item_del(part_item); + } +} + + static void _part_renamed(void *data, Evas_Object *obj __UNUSED__, @@ -340,7 +416,10 @@ demo_group_add(Group *group) elm_scroller_policy_set(pl->genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); evas_object_show(pl->genlist); elm_object_content_set(pl->layout, pl->genlist); + evas_object_smart_callback_add(ap.win, SIGNAL_PART_RENAMED, _part_renamed, pl); + evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_PROGRAM_UPDATE, _program_add, pl); + evas_object_smart_callback_add(pl->genlist, "clicked,double", _on_clicked_double, pl); evas_object_smart_callback_add(pl->genlist, "expand,request", _expand_request_cb, pl); evas_object_smart_callback_add(pl->genlist, "contract,request", _contract_request_cb, pl); diff --git a/src/bin/ui/workspace/demo_group.h b/src/bin/ui/workspace/demo_group.h index d9a120f..b181a4e 100644 --- a/src/bin/ui/workspace/demo_group.h +++ b/src/bin/ui/workspace/demo_group.h @@ -123,6 +123,12 @@ demo_group_program_del(Evas_Object *demo, Eina_Stringshare *program_name); * @ingroup DemoGroup */ void +demo_group_program_add(Evas_Object *demo, Eina_Stringshare *program_name); + +/** + * @ingroup DemoGroup + */ +void demo_group_demo_update(Evas_Object *demo); #endif /* DEMO_GROUP_H */ --