rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=1ecad59250a2d43a205c553f4dc5fa954882c6b8
commit 1ecad59250a2d43a205c553f4dc5fa954882c6b8 Author: Vitalii Vorobiov <[email protected]> Date: Thu Sep 8 16:38:42 2016 +0300 resource_manager2: group del --- src/bin/resource_manager/resource_manager_build.c | 4 +- src/bin/resource_manager/resource_manager_react.c | 90 ++++++++++++++++++++++- 2 files changed, 91 insertions(+), 3 deletions(-) diff --git a/src/bin/resource_manager/resource_manager_build.c b/src/bin/resource_manager/resource_manager_build.c index d134413..84f86f5 100644 --- a/src/bin/resource_manager/resource_manager_build.c +++ b/src/bin/resource_manager/resource_manager_build.c @@ -101,9 +101,9 @@ _state_dependency_load(Project *pro, Group2 *group, Part2 *part, State2 *state) if (strcmp(state->normal, EFLETE_DUMMY_IMAGE_NAME)) { if (edje_edit_image_set_exists(group->edit_object, state->normal)) - res = resource_manager_find(pro->image_sets, state->normal); + res = resource_manager_find(pro->RM.image_sets, state->normal); else - res = resource_manager_find(pro->images, state->normal); + res = resource_manager_find(pro->RM.images, state->normal); _resource_usage_resource_add((Resource2 *)state, res); } diff --git a/src/bin/resource_manager/resource_manager_react.c b/src/bin/resource_manager/resource_manager_react.c index 567040d..1d759e6 100644 --- a/src/bin/resource_manager/resource_manager_react.c +++ b/src/bin/resource_manager/resource_manager_react.c @@ -618,8 +618,96 @@ _editor_group_del_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info) { + State2 *state; + Part2 *part; + Program2 *program; + Part_Item2 *item; + Group_Data2 *group_data; Eina_Stringshare *group_name = (Eina_Stringshare *)event_info; - printf("ugh [%s] \n", group_name); + Project *pro = (Project *)data; + Group2 *group = (Group2 *)resource_manager_find(pro->RM.groups, group_name); + + TODO("Apply more complex work (with warning and error maybe?) with parts which are used by other resources later") + + /* step by step */ + /* 1. check if alias and remove dependencies */ + if (group->main_group) + { + _resource_usage_dependency_cleanup((Resource2 *)group); + group->main_group->aliases = eina_list_remove(group->main_group->aliases, group); + } + else + { + /* 2.1. reset all dependencies to this group into NULL (items, group parts etc) */ + TODO("Editor cleanup with group deletion") + /* 2.2. do NOT kill all aliases iof this group, they will be removed through this + callbback, but remove alias dependencies */ + _resource_usage_dependency_cleanup((Resource2 *)group); + + EINA_LIST_FREE(group->parts, part) + { + /* 1. remove part from all "used_in" and "uses___" and cleanup */ + _resource_usage_dependency_cleanup((Resource2 *)part); + eina_stringshare_del(part->common.name); + EINA_LIST_FREE(part->states, state) + { + /* 2.1. remove each state from all "used_in" and "uses___" and cleanup */ + _resource_usage_dependency_cleanup((Resource2 *)state); + /* 2.2. cleanup list of tweens */ + eina_list_free(state->tweens); + /* 2.3. free state */ + eina_stringshare_del(state->common.name); + eina_stringshare_del(state->normal); + free(state); + } + EINA_LIST_FREE(part->items, item) + { + /* 3.1. remove each item from all "used_in" and "uses___" and cleanup */ + _resource_usage_dependency_cleanup((Resource2 *)item); + /* 3.2. free item */ + eina_stringshare_del(item->common.name); + free(item); + } + /* 4. cleanup items and state list */ + eina_list_free(part->states); + eina_list_free(part->items); + /* 5. remove part from group->parts */ + group->parts = eina_list_remove(group->parts, part); + /* 6. free part */ + free(part); + } + + EINA_LIST_FREE(group->programs, program) + { + eina_list_free(program->targets); + eina_list_free(program->afters); + _resource_usage_dependency_cleanup((Resource2 *)program); + eina_stringshare_del(program->common.name); + free(program); + } + + EINA_LIST_FREE(group->data_items, group_data) + { + eina_stringshare_del(group_data->source); + _resource_usage_dependency_cleanup((Resource2 *)group_data); + eina_stringshare_del(group_data->common.name); + eina_stringshare_del(group_data->source); + free(group_data); + } + } + eina_stringshare_del(group->widget); + eina_stringshare_del(group->class); + eina_stringshare_del(group->style); + eina_stringshare_del(group->common.name); + /* 4. cleanup items and state list */ + eina_list_free(group->programs); + eina_list_free(group->parts); + eina_list_free(group->limits); + eina_list_free(group->data_items); + /* 5. remove part from group->parts */ + pro->groups = eina_list_remove(pro->RM.groups, group); + /* 6. free part */ + free(group); } /* INITIAL FUNCTIONS */ --
