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 */

-- 


Reply via email to