rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=1c2b08fcca5c67cd8f7e3f24c31122d9c6e14a13
commit 1c2b08fcca5c67cd8f7e3f24c31122d9c6e14a13 Author: Vyacheslav Reutskiy <v.reuts...@samsung.com> Date: Mon Jun 13 10:12:01 2016 +0300 project_manager: create a change with fake deleted parts This change will be applied to open project from import group from custom edj file. Change-Id: Ie5a40a5c158fde30d51b57724ee9f246cbd023b8 --- src/bin/editor/editor_general.c | 7 +++-- src/bin/project_manager/project_manager.c | 50 +++++++++++++++++++++++++++++++ src/bin/project_manager/project_manager.h | 14 +++++++++ 3 files changed, 69 insertions(+), 2 deletions(-) diff --git a/src/bin/editor/editor_general.c b/src/bin/editor/editor_general.c index 374f0cf..e44f0b0 100644 --- a/src/bin/editor/editor_general.c +++ b/src/bin/editor/editor_general.c @@ -103,6 +103,9 @@ you_shall_pass_editor_signals(Change *change) void _editor_project_changed() { - ap.project->changed = true; - evas_object_smart_callback_call(ap.win, SIGNAL_PROJECT_CHANGED, NULL); + /* avoid changes not opened project while we create fake diffs for import + * groups from custom groups */ + if (ap.project) + ap.project->changed = true; + if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, SIGNAL_PROJECT_CHANGED, NULL); } diff --git a/src/bin/project_manager/project_manager.c b/src/bin/project_manager/project_manager.c index 02eb77c..610c6d4 100644 --- a/src/bin/project_manager/project_manager.c +++ b/src/bin/project_manager/project_manager.c @@ -26,6 +26,8 @@ #endif #define PROJECT_FILE_KEY "project" +#include "change.h" + #define PROJECT_KEY_NAME "edje/name" #define PROJECT_KEY_AUTHORS "edje/authors" #define PROJECT_KEY_FILE_VERSION "edje/file_version" @@ -1819,3 +1821,51 @@ pm_lock_check(const char *path) { return _lock_try(path, false); } + +Eina_Bool +pm_project_group_import(Project *project, const char *edj, const char *group) +{ + Change *change; + Evas_Object *obj, *win; + Evas *e; + Eina_List *parts, *l; + Eina_Stringshare *part; + + assert(edj != NULL); + assert(group != NULL); + + ecore_thread_main_loop_begin(); + win = elm_win_add(NULL, "eflete_group_import", ELM_WIN_BASIC); + elm_win_norender_push(win); + e = evas_object_evas_get(win); + obj = edje_edit_object_add(e); + edje_object_file_set(obj, edj, group); + + change = change_add(NULL); + + parts = edje_edit_parts_list_get(obj); + you_shall_not_pass_editor_signals(NULL); + EINA_LIST_FOREACH(parts, l, part) + { + if (!editor_part_del(obj, change, true, false, part)) + ERR("Ohhh, fuck, cann't do fake deletion of part '%s'", part); + } + edje_edit_string_list_free(parts); + + CRIT_ON_FAIL(editor_group_add(project->global_object, group)); + CRIT_ON_FAIL(editor_save(project->global_object)); + + obj = edje_edit_object_add(e); + edje_object_file_set(obj, project->dev, group); + + change_undo(obj, change); + CRIT_ON_FAIL(editor_save(obj)); + + evas_object_del(win); + you_shall_pass_editor_signals(NULL); + + change_free(change); + ecore_thread_main_loop_end(); + + return true; +} diff --git a/src/bin/project_manager/project_manager.h b/src/bin/project_manager/project_manager.h index 5b69235..681b10a 100644 --- a/src/bin/project_manager/project_manager.h +++ b/src/bin/project_manager/project_manager.h @@ -535,4 +535,18 @@ pm_project_enventor_save(Project *project, Eina_Bool pm_lock_check(const char *path) EINA_ARG_NONNULL(1); +/** + * Import group to project from custom edj file. + * + * @param project The project where be imported group + * @param edj The path to edj file contains a group + * @param group The group name for import + * + * @return EINA_TRUE on success, otherwise EINA_FALSE + * + * @ingroup ProjectManager + */ +Eina_Bool +pm_project_group_import(Project *project, const char *edj, const char *group); + #endif /* PROJECT_MANAGER_H */ --