rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=a68223e53201568b48a63465399971dbaab8bdf0
commit a68223e53201568b48a63465399971dbaab8bdf0 Author: Andrii Kroitor <an.kroi...@samsung.com> Date: Tue Dec 1 16:16:35 2015 +0200 group_navigator: use editor api to add and to delete parts --- src/bin/ui/group_navigator.c | 102 +++++++++++++++++++++++++++++++++---------- 1 file changed, 80 insertions(+), 22 deletions(-) diff --git a/src/bin/ui/group_navigator.c b/src/bin/ui/group_navigator.c index 4b851e1..93e9554 100644 --- a/src/bin/ui/group_navigator.c +++ b/src/bin/ui/group_navigator.c @@ -512,18 +512,35 @@ _popup_add_part_ok_clicked(void *data, const Edje_Part_Type type = *((const Edje_Part_Type *)data); Part_List *pl = evas_object_data_get(obj, GROUP_NAVIGATOR_DATA); const char *name; - Part_ *part; - Elm_Object_Item *glit; + Eina_Stringshare *msg; + Change *change; assert(pl != NULL); name = elm_entry_entry_get(pl->popup.entry_name); + msg = eina_stringshare_printf(_("added new part \"%s\""), name); + change = change_add(msg); + editor_part_add(pl->group->edit_object, change, false, name, type); + + history_change_add(pl->group->history, change); + eina_stringshare_del(msg); + ecore_job_add(_job_popup_del, pl); +} + +static void +_editor_part_added_cb(void *data, + Evas_Object *obj __UNUSED__, + void *event_info) +{ + Part_List *pl = data; + Eina_Stringshare *part_name = event_info; + Part_ *part; + Elm_Object_Item *glit; - edje_edit_part_add(pl->group->edit_object, name, type); - /* if (type == EDJE_PART_IMAGE) */ - TODO("Add noimage here") + assert(pl != NULL); + assert(part_name != NULL); - part = gm_part_add(ap.project, pl->group, name); + part = gm_part_add(ap.project, pl->group, part_name); glit = elm_genlist_item_append(pl->genlist, pl->itc_part, @@ -537,8 +554,6 @@ _popup_add_part_ok_clicked(void *data, evas_object_smart_callback_call(ap.win, SIGNAL_PART_ADDED, (void *)part); elm_genlist_item_selected_set(glit, true); - - ecore_job_add(_job_popup_del, pl); } static void @@ -786,21 +801,71 @@ _part_del(Part_List *pl, { Part_ *part; Eina_Stringshare *part_name; + Eina_Stringshare *msg; + Change *change; assert(pl != NULL); assert(glit != NULL); part = elm_object_item_data_get(glit); - _unselect_part(pl); + + part_name = eina_stringshare_add(part->name); + msg = eina_stringshare_printf(_("deleted part \"%s\""), part_name); + change = change_add(msg); + editor_part_del(pl->group->edit_object, change, false, part_name); + history_change_add(pl->group->history, change); + eina_stringshare_del(msg); + eina_stringshare_del(part_name); +} + +static Elm_Object_Item * +_part_item_find(Part_List *pl, Part_ *part) +{ + Elm_Object_Item *part_item; + Part_ *pr; + + assert(pl != NULL); + assert(part != NULL); + + part_item = elm_genlist_first_item_get(pl->genlist); + pr = elm_object_item_data_get(part_item); + while (pr != part) + { + part_item = elm_genlist_item_next_get(part_item); + pr = elm_object_item_data_get(part_item); + + assert(pr != NULL); + } + assert(part_item != NULL); + return part_item; +} + +static void +_editor_part_deleted_cb(void *data, + Evas_Object *obj __UNUSED__, + void *event_info) +{ + Part_List *pl = data; + Eina_Stringshare *part_name = event_info; + Part_ *part; + Elm_Object_Item *part_item; + + assert(pl != NULL); + assert(part_name != NULL); + + part = pm_resource_unsorted_get(pl->group->parts, part_name); + + part_item = _part_item_find(pl, part); + if (pl->selected_part_item == part_item) + _unselect_part(pl); /* This callbck should be called before actual part deletion */ evas_object_smart_callback_call(ap.win, SIGNAL_PART_DELETED, (void *)part); - elm_object_item_del(glit); + elm_object_item_del(part_item); /* part is freed after deletion so we need to save its name */ part_name = eina_stringshare_ref(part->name); gm_part_del(ap.project, part); - edje_edit_part_del(pl->group->edit_object, part_name); eina_stringshare_del(part_name); } @@ -829,6 +894,7 @@ _state_del(Part_List *pl, part_name = eina_stringshare_ref(state->part->name); state_name = eina_stringshare_ref(state->parsed_name); state_val = state->parsed_val; + TODO("recheck string args logic"); editor_state_del(pl->group->edit_object, change, false, part_name, state_name, state_val); eina_stringshare_del(part_name); eina_stringshare_del(state_name); @@ -1036,6 +1102,8 @@ group_navigator_add(Group *group) pl->name_validator = elm_validator_regexp_new(PART_NAME_REGEX, NULL); + evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_PART_ADDED, _editor_part_added_cb, pl); + evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_PART_DELETED, _editor_part_deleted_cb, pl); evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_STATE_ADDED, _editor_state_added_cb, pl); evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_STATE_DELETED, _editor_state_deleted_cb, pl); @@ -1046,7 +1114,6 @@ group_navigator_add(Group *group) void group_navigator_part_select(Evas_Object *obj, Part_ *part) { - Part_ *pr; Elm_Object_Item *part_item; Part_List *pl = evas_object_data_get(obj, GROUP_NAVIGATOR_DATA); @@ -1054,16 +1121,7 @@ group_navigator_part_select(Evas_Object *obj, Part_ *part) if (part) { - part_item = elm_genlist_first_item_get(pl->genlist); - pr = elm_object_item_data_get(part_item); - while (pr != part) - { - part_item = elm_genlist_item_next_get(part_item); - pr = elm_object_item_data_get(part_item); - - assert(pr != NULL); - } - assert(part_item != NULL); + part_item = _part_item_find(pl, part); elm_genlist_item_selected_set(part_item, true); } else --