rimmed pushed a commit to branch master.

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

commit eaea7777610d2ddce48ca17363a10664227ee0d1
Author: Andrii Kroitor <[email protected]>
Date:   Fri May 27 10:02:29 2016 +0300

    editor: add group_data api
---
 src/bin/common/signals.h              |  24 ++++++
 src/bin/editor/banned_edje_edit_api.h |   8 +-
 src/bin/editor/editor.h               |  14 ++++
 src/bin/editor/editor_group.c         | 145 +++++++++++++++++++++++++++++++++-
 4 files changed, 185 insertions(+), 6 deletions(-)

diff --git a/src/bin/common/signals.h b/src/bin/common/signals.h
index d7d2d29..b5c6bb0 100644
--- a/src/bin/common/signals.h
+++ b/src/bin/common/signals.h
@@ -111,6 +111,14 @@ typedef struct {
 #define SIGNAL_PART_RENAMED "SIGNAL_PART_RENAMED"
 
 /**
+ * emited when group_data is renamed.
+ * eventinfo - pointer to Rename structure
+ *
+ * @ingroup Window
+ */
+#define SIGNAL_GROUP_DATA_RENAMED "SIGNAL_GROUP_DATA_RENAMED"
+
+/**
  * emited when program is renamed.
  * eventinfo - pointer to Rename structure
  *
@@ -246,6 +254,22 @@ typedef struct {
  */
 #define SIGNAL_EDITOR_PROGRAM_DELETED "SIGNAL_EDITOR_PROGRAM_DELETED"
 
+/**
+ * emited when group_data is added in editor.
+ * eventinfo - stringshare with group_datas name
+ *
+ * @ingroup Window
+ */
+#define SIGNAL_EDITOR_GROUP_DATA_ADDED "SIGNAL_EDITOR_GROUP_DATA_ADDED"
+
+/**
+ * emited *before* group_data will be deleted in editor.
+ * eventinfo - stringshare with group_datas name
+ *
+ * @ingroup Window
+ */
+#define SIGNAL_EDITOR_GROUP_DATA_DELETED "SIGNAL_EDITOR_GROUP_DATA_DELETED"
+
 typedef struct {
    const char *part_name;
    const char *relative_part_name;
diff --git a/src/bin/editor/banned_edje_edit_api.h 
b/src/bin/editor/banned_edje_edit_api.h
index 4602d73..7c963aa 100644
--- a/src/bin/editor/banned_edje_edit_api.h
+++ b/src/bin/editor/banned_edje_edit_api.h
@@ -53,10 +53,10 @@
 //#pragma GCC poison edje_edit_data_del
 //#pragma GCC poison edje_edit_data_value_set
 //#pragma GCC poison edje_edit_data_name_set
-//#pragma GCC poison edje_edit_group_data_add
-//#pragma GCC poison edje_edit_group_data_del
-//#pragma GCC poison edje_edit_group_data_value_set
-//#pragma GCC poison edje_edit_group_data_name_set
+#pragma GCC poison edje_edit_group_data_add
+#pragma GCC poison edje_edit_group_data_del
+#pragma GCC poison edje_edit_group_data_value_set
+#pragma GCC poison edje_edit_group_data_name_set
 
 /* Color Classes API */
 //#pragma GCC poison edje_edit_color_class_add
diff --git a/src/bin/editor/editor.h b/src/bin/editor/editor.h
index 724adcb..5a3f6e9 100644
--- a/src/bin/editor/editor.h
+++ b/src/bin/editor/editor.h
@@ -32,6 +32,8 @@ typedef enum {
    ATTRIBUTE_GROUP_MIN_H,
    ATTRIBUTE_GROUP_MAX_W,
    ATTRIBUTE_GROUP_MAX_H,
+   ATTRIBUTE_GROUP_DATA_NAME,
+   ATTRIBUTE_GROUP_DATA_VALUE,
    ATTRIBUTE_STATE_NAME,
    ATTRIBUTE_STATE_MIN_W,
    ATTRIBUTE_STATE_MIN_H,
@@ -247,6 +249,18 @@ Eina_Bool
 editor_group_max_h_set(Evas_Object *obj, Change *change, Eina_Bool merge,
                        int new_val) EINA_WARN_UNUSED_RESULT;
 
+Eina_Bool
+editor_group_data_add(Evas_Object *edit_object, Change *change, Eina_Bool 
merge,
+                      const char *item_name) EINA_WARN_UNUSED_RESULT;
+Eina_Bool
+editor_group_data_del(Evas_Object *edit_object, Change *change, Eina_Bool 
merge,
+                      const char *item_name) EINA_WARN_UNUSED_RESULT;
+Eina_Bool
+editor_group_data_value_set(Evas_Object *edit_object, Change *change, 
Eina_Bool merge,
+                            const char *item_name, const char *new_val) 
EINA_WARN_UNUSED_RESULT;
+Eina_Bool
+editor_group_data_name_set(Evas_Object *edit_object, Change *change, Eina_Bool 
merge,
+                           const char *item_name, const char *new_val) 
EINA_WARN_UNUSED_RESULT;
 /* State */
 
 Eina_Bool
diff --git a/src/bin/editor/editor_group.c b/src/bin/editor/editor_group.c
index 2369f0e..7482b22 100644
--- a/src/bin/editor/editor_group.c
+++ b/src/bin/editor/editor_group.c
@@ -182,10 +182,10 @@ editor_group_name_set(Evas_Object *edit_object, Change 
*change, Eina_Bool merge,
         diff = mem_calloc(1, sizeof(Diff));
         diff->redo.type = FUNCTION_TYPE_STRING;
         diff->redo.function = editor_group_name_set;
-        diff->redo.args.type_ssds.s1 = eina_stringshare_add(new_val);
+        diff->redo.args.type_s.s1 = eina_stringshare_add(new_val);
         diff->undo.type = FUNCTION_TYPE_STRING;
         diff->undo.function = editor_group_name_set;
-        diff->undo.args.type_ssds.s1 = eina_stringshare_add(old_value);
+        diff->undo.args.type_s.s1 = eina_stringshare_add(old_value);
         if (merge)
           change_diff_merge_add(change, diff);
         else
@@ -197,3 +197,144 @@ editor_group_name_set(Evas_Object *edit_object, Change 
*change, Eina_Bool merge,
    if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_ATTRIBUTE_CHANGED, &attribute);
    return true;
 }
+
+Eina_Bool
+editor_group_data_value_set(Evas_Object *edit_object, Change *change, 
Eina_Bool merge,
+                            const char *item_name, const char *new_val)
+{
+   Diff *diff;
+   Attribute attribute = ATTRIBUTE_GROUP_DATA_VALUE;
+   assert(edit_object != NULL);
+   assert(item_name != NULL);
+   assert(new_val != NULL);
+   if (change)
+     {
+        Eina_Stringshare *old_value = 
edje_edit_group_data_value_get(edit_object, item_name);
+        diff = mem_calloc(1, sizeof(Diff));
+        diff->redo.type = FUNCTION_TYPE_STRING_STRING;
+        diff->redo.function = editor_group_data_value_set;
+        diff->redo.args.type_ss.s1 = eina_stringshare_add(item_name);
+        diff->redo.args.type_ss.s2 = eina_stringshare_add(new_val);
+        diff->undo.type = FUNCTION_TYPE_STRING_STRING;
+        diff->undo.function = editor_group_data_value_set;
+        diff->undo.args.type_ss.s1 = eina_stringshare_add(item_name);
+        diff->undo.args.type_ss.s2 = old_value;
+        if (merge)
+          change_diff_merge_add(change, diff);
+        else
+          change_diff_add(change, diff);
+     }
+   if (!edje_edit_group_data_value_set(edit_object, item_name, new_val))
+     return false;
+   _editor_project_changed();
+   if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_ATTRIBUTE_CHANGED, &attribute);
+   return true;
+}
+
+Eina_Bool
+editor_group_data_name_set(Evas_Object *edit_object, Change *change, Eina_Bool 
merge,
+                           const char *item_name, const char *new_val)
+{
+   Diff *diff;
+   Rename ren;
+   Attribute attribute = ATTRIBUTE_GROUP_DATA_NAME;
+   assert(edit_object != NULL);
+   assert(item_name != NULL);
+   assert(new_val != NULL);
+   if (change)
+     {
+        diff = mem_calloc(1, sizeof(Diff));
+        diff->redo.type = FUNCTION_TYPE_STRING_STRING;
+        diff->redo.function = editor_group_data_name_set;
+        diff->redo.args.type_ss.s1 = eina_stringshare_add(item_name);
+        diff->redo.args.type_ss.s2 = eina_stringshare_add(new_val);
+        diff->undo.type = FUNCTION_TYPE_STRING_STRING;
+        diff->undo.function = editor_group_data_name_set;
+        diff->undo.args.type_ss.s1 = eina_stringshare_add(new_val);
+        diff->undo.args.type_ss.s2 = eina_stringshare_add(item_name);
+        if (merge)
+          change_diff_merge_add(change, diff);
+        else
+          change_diff_add(change, diff);
+     }
+   if (!edje_edit_group_data_name_set(edit_object, item_name, new_val))
+     return false;
+   _editor_project_changed();
+   ren.old_name = item_name;
+   ren.new_name = new_val;
+   if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_GROUP_DATA_RENAMED, &ren);
+   if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_ATTRIBUTE_CHANGED, &attribute);
+   return true;
+}
+
+Eina_Bool
+editor_group_data_add(Evas_Object *edit_object, Change *change, Eina_Bool 
merge __UNUSED__,
+                      const char *item_name)
+{
+   Diff *diff;
+   Eina_Stringshare *event_info;
+
+   assert(edit_object != NULL);
+   assert(item_name != NULL);
+
+   if (change)
+     {
+        diff = mem_calloc(1, sizeof(Diff));
+        diff->redo.type = FUNCTION_TYPE_STRING;
+        diff->redo.function = editor_group_data_add;
+        diff->redo.args.type_s.s1 = eina_stringshare_add(item_name);
+        diff->undo.type = FUNCTION_TYPE_STRING;
+        diff->undo.function = editor_group_data_del;
+        diff->undo.args.type_s.s1 = eina_stringshare_add(item_name);
+
+        change_diff_add(change, diff);
+     }
+   if (!edje_edit_group_data_add(edit_object, item_name, ""))
+     return false;
+
+   CRIT_ON_FAIL(editor_save(edit_object));
+   _editor_project_changed();
+
+   event_info = eina_stringshare_add(item_name);
+   if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_GROUP_DATA_ADDED, (void *)event_info);
+   eina_stringshare_del(event_info);
+   return true;
+}
+
+Eina_Bool
+editor_group_data_del(Evas_Object *edit_object, Change *change, Eina_Bool 
merge __UNUSED__,
+                      const char *item_name)
+{
+   Diff *diff;
+   Eina_Stringshare *event_info;
+
+   assert(edit_object != NULL);
+   assert(item_name != NULL);
+
+   event_info = eina_stringshare_add(item_name);
+   if (!_editor_signals_blocked) evas_object_smart_callback_call(ap.win, 
SIGNAL_EDITOR_GROUP_DATA_DELETED, (void *)event_info);
+
+   if (change)
+     {
+        if (!editor_group_data_value_set(edit_object, change, false, 
item_name, ""))
+          return false;
+        diff = mem_calloc(1, sizeof(Diff));
+        diff->redo.type = FUNCTION_TYPE_STRING;
+        diff->redo.function = editor_group_data_del;
+        diff->redo.args.type_s.s1 = eina_stringshare_add(item_name);
+        diff->undo.type = FUNCTION_TYPE_STRING;
+        diff->undo.function = editor_group_data_add;
+        diff->undo.args.type_s.s1 = eina_stringshare_add(item_name);
+
+        change_diff_add(change, diff);
+     }
+   if (!edje_edit_group_data_del(edit_object, item_name))
+     {
+        eina_stringshare_del(event_info);
+        return false;
+     }
+   eina_stringshare_del(event_info);
+   CRIT_ON_FAIL(editor_save(edit_object));
+   _editor_project_changed();
+   return true;
+}

-- 


Reply via email to