rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=8995164f4fc94c9d167183236676395ad4efca55
commit 8995164f4fc94c9d167183236676395ad4efca55 Author: Mykyta Biliavskyi <m.biliavs...@samsung.com> Date: Tue Jan 17 17:02:30 2017 +0200 Editor: add proxy for edje_edit_image_set_set API. Added signal SIGNAL_EDITOR_IMAGE_SET_DELETED for make possible communication between resource manager and editor modules. This signal will be emmited when new image set will be delete. Enhanced Resource manager internal API. Added _resource_image_set_del function, that correctly delete image set. This function take care about any relative resources. --- src/bin/common/signals.h | 10 ++++ src/bin/editor/editor.h | 3 + src/bin/editor/editor_top_level.c | 18 ++++++ src/bin/resource_manager/resource_manager_free.c | 70 ++++++++++++++++++++++ .../resource_manager/resource_manager_private.h | 10 +++- src/bin/resource_manager/resource_manager_react.c | 16 +++++ 6 files changed, 125 insertions(+), 2 deletions(-) diff --git a/src/bin/common/signals.h b/src/bin/common/signals.h index 5ac1004..71ac08c 100644 --- a/src/bin/common/signals.h +++ b/src/bin/common/signals.h @@ -573,6 +573,16 @@ typedef struct { * @ingroup Window */ #define SIGNAL_EDITOR_IMAGE_SET_ADDED "SIGNAL_EDITOR_IMAGE_SET_ADDED" + +/** + * emited when image set deleted. + * eventinfo - image set name. + * + * @ingroup Window + */ +#define SIGNAL_EDITOR_IMAGE_SET_DELETED "SIGNAL_EDITOR_IMAGE_SET_DELETED" + + /** * emited when textblock style is added. * eventinfo - NULL diff --git a/src/bin/editor/editor.h b/src/bin/editor/editor.h index 144c869..1bbe0d6 100644 --- a/src/bin/editor/editor.h +++ b/src/bin/editor/editor.h @@ -292,6 +292,9 @@ Eina_Bool editor_image_set_add(Evas_Object *obj, const char *name, Eina_Bool notify) EINA_WARN_UNUSED_RESULT; Eina_Bool +editor_image_set_del(Evas_Object *obj, const char *name, Eina_Bool notify) EINA_WARN_UNUSED_RESULT; + +Eina_Bool editor_image_set_image_border_left_set(Evas_Object *obj, const char *name, int position, int l) EINA_WARN_UNUSED_RESULT; Eina_Bool diff --git a/src/bin/editor/editor_top_level.c b/src/bin/editor/editor_top_level.c index e0bf277..953ba79 100644 --- a/src/bin/editor/editor_top_level.c +++ b/src/bin/editor/editor_top_level.c @@ -76,6 +76,24 @@ editor_image_set_add(Evas_Object *obj, const char *name, Eina_Bool notify) return true; } +Eina_Bool +editor_image_set_del(Evas_Object *obj, const char *name, Eina_Bool notify) +{ + assert(obj != NULL); + assert(name != NULL); + + if (!edje_edit_image_set_del(obj, name)) + return false; + + if (!editor_save_all(obj)) + return false; + _editor_project_changed(); + + if (notify) + evas_object_smart_callback_call(ap.win, SIGNAL_EDITOR_IMAGE_SET_DELETED, (void *)name); + return true; +} + inline static Eina_Bool _image_set_image_attribute_save(Evas_Object *obj, Editor_Attribute_Resource_Change *send) { diff --git a/src/bin/resource_manager/resource_manager_free.c b/src/bin/resource_manager/resource_manager_free.c index 3edd13c..9b28139 100644 --- a/src/bin/resource_manager/resource_manager_free.c +++ b/src/bin/resource_manager/resource_manager_free.c @@ -139,6 +139,76 @@ _resource_image_del(Project *pro, Image2 *res_image) } void +_resource_image_set_del(Project *pro, Image_Set2 *res_image_set) +{ + Eina_List *l, *images; + Resource2 *res; + State2 *state; + Image_Set2 *image_set; + int idx; + + Eina_Bool is_opened = false; + + EINA_LIST_FOREACH(res_image_set->common.used_in, l, res) + { + if (res->common.type == RESOURCE2_TYPE_STATE) + { + state = (State2 *)res; + if (res_image_set->common.name == state->normal) + { + if (!state->part->group->edit_object) + { + is_opened = true; + resource_group_edit_object_load(pro, + state->part->group, + evas_object_evas_get(ap.win)); + } + CRIT_ON_FAIL(editor_state_image_set(state->part->group->edit_object, + NULL, + false, + true, + state->part->common.name, + state->common.name, + state->val, + EFLETE_DUMMY_IMAGE_NAME)); + if (is_opened) + resource_group_edit_object_unload(state->part->group); + eina_stringshare_del(state->normal); + state->normal = eina_stringshare_add(EFLETE_DUMMY_IMAGE_NAME); + } + else + { + /* NOT WORKING FOR NOW SINCE TWEEN ALREADY DELETED SOMEHOW + CRIT_ON_FAIL(editor_state_tween_del(state->part->group->edit_object, + NULL, + false, + true, + state->part->common.name, + state->common.name, + state->val, + res_image->common.name)); + */ + state->tweens = eina_list_remove(state->tweens, res_image_set); + } + } + else if (res->common.type == RESOURCE2_TYPE_IMAGE_SET) + { + image_set = (Image_Set2 *)res; + + TODO("Make editor_image_set_image_del"); + images = edje_edit_image_set_images_list_get(pro->global_object, + image_set->common.name); + idx = eina_list_data_idx(images, (void *)res_image_set->common.name); + edje_edit_image_set_image_del(pro->global_object, + image_set->common.name, + idx); + edje_edit_string_list_free(images); + } + } + _resource_image_set_free(pro, res_image_set); +} + +void _resource_tone_free(Project *pro, Tone2 *res) { pro->RM.tones = eina_list_remove(pro->RM.tones, res); diff --git a/src/bin/resource_manager/resource_manager_private.h b/src/bin/resource_manager/resource_manager_private.h index fa8d81e..0de2644 100644 --- a/src/bin/resource_manager/resource_manager_private.h +++ b/src/bin/resource_manager/resource_manager_private.h @@ -175,6 +175,12 @@ void _resource_image_del(Project *pro, Image2 *res_image); void +_resource_image_set_free(Project *pro, Image_Set2 *res); + +void +_resource_image_set_del(Project *pro, Image_Set2 *res_image); + +void _resource_tone_free(Project *pro, Tone2 *res); void @@ -203,8 +209,8 @@ _resource_style_del(Project *pro, Style2 *res_style); /***** NOT IMPLEMENTED YET BUT NEED FREEING ***********/ -void -_resource_image_set_free(Project *pro, Image_Set2 *res); +//void +//_resource_image_set_free(Project *pro, Image_Set2 *res); void _resource_font_free(Project *pro, Font2 *res); diff --git a/src/bin/resource_manager/resource_manager_react.c b/src/bin/resource_manager/resource_manager_react.c index 501c767..8b106ac 100644 --- a/src/bin/resource_manager/resource_manager_react.c +++ b/src/bin/resource_manager/resource_manager_react.c @@ -651,6 +651,20 @@ _image_set_added(void *data, } static void +_image_set_deleted(void *data, + Evas_Object *obj __UNUSED__, + void *ei) +{ + Image_Set2 *res; + const char *name = (const char *)ei; + Project *project = (Project *)data; + + + res = (Image_Set2 *)resource_manager_find(project->RM.image_sets, name); + _resource_image_set_del(project, res); +} + +static void _style_added(void *data, Evas_Object *obj __UNUSED__, void *ei) @@ -955,6 +969,7 @@ _resource_callbacks_register(Project *project) evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_IMAGE_ADDED, _image_added, project); evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_IMAGE_DELETED, image_deleted, project); evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_IMAGE_SET_ADDED, _image_set_added, project); + evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_IMAGE_SET_DELETED, _image_set_deleted, project); evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_STYLE_ADDED, _style_added, project); evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_STYLE_DELETED, _style_deleted, project); evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_STYLE_TAG_CHANGED, _style_changed, project); @@ -991,6 +1006,7 @@ _resource_callbacks_unregister(Project *project) evas_object_smart_callback_del_full(ap.win, SIGNAL_EDITOR_IMAGE_ADDED, _image_added, project); evas_object_smart_callback_del_full(ap.win, SIGNAL_EDITOR_IMAGE_DELETED, image_deleted, project); evas_object_smart_callback_del_full(ap.win, SIGNAL_EDITOR_IMAGE_SET_ADDED, _image_set_added, project); + evas_object_smart_callback_del_full(ap.win, SIGNAL_EDITOR_IMAGE_SET_DELETED, _image_set_deleted, project); evas_object_smart_callback_del_full(ap.win, SIGNAL_EDITOR_STYLE_ADDED, _style_added, project); evas_object_smart_callback_del_full(ap.win, SIGNAL_EDITOR_STYLE_DELETED, _style_deleted, project); evas_object_smart_callback_del_full(ap.win, SIGNAL_EDITOR_STYLE_TAG_CHANGED, _style_changed, project); --