rimmed pushed a commit to branch master.

http://git.enlightenment.org/tools/eflete.git/commit/?id=e0df89801810846b5597efe1f8038c825f348539

commit e0df89801810846b5597efe1f8038c825f348539
Author: Andrii Kroitor <an.kroi...@samsung.com>
Date:   Wed Jan 13 14:11:46 2016 +0200

    editor: implement program add/del methods
---
 src/bin/common/signals.h        | 16 ++++++++++
 src/bin/editor/editor.h         |  6 ++++
 src/bin/editor/editor_program.c | 70 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 92 insertions(+)

diff --git a/src/bin/common/signals.h b/src/bin/common/signals.h
index 1553cb9..00a2cf5 100644
--- a/src/bin/common/signals.h
+++ b/src/bin/common/signals.h
@@ -200,6 +200,22 @@ typedef struct {
  */
 #define SIGNAL_EDITOR_PART_DELETED "SIGNAL_EDITOR_PART_DELETED"
 
+/**
+ * emited when program is added in editor.
+ * eventinfo - stringshare with programs name
+ *
+ * @ingroup Window
+ */
+#define SIGNAL_EDITOR_PROGRAM_ADDED "SIGNAL_EDITOR_PROGRAM_ADDED"
+
+/**
+ * emited *before* program will be deleted in editor.
+ * eventinfo - stringshare with programs name
+ *
+ * @ingroup Window
+ */
+#define SIGNAL_EDITOR_PROGRAM_DELETED "SIGNAL_EDITOR_PROGRAM_DELETED"
+
 typedef struct {
    const char *part_name;
    const char *relative_part_name;
diff --git a/src/bin/editor/editor.h b/src/bin/editor/editor.h
index 52bf7ef..9dcb99f 100644
--- a/src/bin/editor/editor.h
+++ b/src/bin/editor/editor.h
@@ -718,5 +718,11 @@ editor_program_after_add(Evas_Object *edit_object, Change 
*change, Eina_Bool mer
 Eina_Bool
 editor_program_after_del(Evas_Object *edit_object, Change *change, Eina_Bool 
merge,
                          const char *program_name, Eina_Stringshare *after);
+Eina_Bool
+editor_program_add(Evas_Object *edit_object, Change *change, Eina_Bool merge,
+                   const char *program_name);
+Eina_Bool
+editor_program_del(Evas_Object *edit_object, Change *change, Eina_Bool merge,
+                   const char *program_name);
 
 #endif /* EDITOR_H */
diff --git a/src/bin/editor/editor_program.c b/src/bin/editor/editor_program.c
index d600237..6561451 100644
--- a/src/bin/editor/editor_program.c
+++ b/src/bin/editor/editor_program.c
@@ -478,3 +478,73 @@ editor_program_reset(Evas_Object *edit_object, Change 
*change, Eina_Bool merge _
 
    return res;
 }
+
+Eina_Bool
+editor_program_add(Evas_Object *edit_object, Change *change, Eina_Bool merge 
__UNUSED__,
+                const char *program_name)
+{
+   Diff *diff;
+   Eina_Stringshare *event_info;
+
+   assert(edit_object != NULL);
+
+   if (change)
+     {
+        diff = mem_calloc(1, sizeof(Diff));
+        diff->redo.type = FUNCTION_TYPE_STRING;
+        diff->redo.function = editor_program_add;
+        diff->redo.args.type_s.s1 = eina_stringshare_add(program_name);
+        diff->undo.type = FUNCTION_TYPE_STRING;
+        diff->undo.function = editor_program_del;
+        diff->undo.args.type_s.s1 = eina_stringshare_add(program_name);
+
+        change_diff_add(change, diff);
+     }
+   if (!edje_edit_program_add(edit_object, program_name))
+     return false;
+
+   editor_save(edit_object);
+   _editor_project_changed();
+
+   event_info = eina_stringshare_add(program_name);
+   if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_PROGRAM_ADDED, (void *)event_info);
+   eina_stringshare_del(event_info);
+   return true;
+}
+
+Eina_Bool
+editor_program_del(Evas_Object *edit_object, Change *change, Eina_Bool merge 
__UNUSED__,
+                const char *program_name)
+{
+   Diff *diff;
+   Eina_Stringshare *event_info;
+
+   assert(edit_object != NULL);
+
+   event_info = eina_stringshare_add(program_name);
+   if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_PROGRAM_DELETED, (void *)event_info);
+
+   if (change)
+     {
+        if (!editor_program_reset(edit_object, change, false, program_name))
+          return false;
+        diff = mem_calloc(1, sizeof(Diff));
+        diff->redo.type = FUNCTION_TYPE_STRING;
+        diff->redo.function = editor_program_del;
+        diff->redo.args.type_s.s1 = eina_stringshare_add(program_name);
+        diff->undo.type = FUNCTION_TYPE_STRING;
+        diff->undo.function = editor_program_add;
+        diff->undo.args.type_s.s1 = eina_stringshare_add(program_name);
+
+        change_diff_add(change, diff);
+     }
+   if (!edje_edit_program_del(edit_object, program_name))
+     {
+        eina_stringshare_del(event_info);
+        return false;
+     }
+   eina_stringshare_del(event_info);
+   editor_save(edit_object);
+   _editor_project_changed();
+   return true;
+}

-- 


Reply via email to