rimmed pushed a commit to branch master.

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

commit f7efc65a63e9d124913c3b5550bf6028a9e2c002
Author: Andrii Kroitor <an.kroi...@samsung.com>
Date:   Wed Nov 4 15:36:58 2015 +0200

    editor: add state_add/_del methods
---
 src/bin/common/signals.h       | 17 ++++++++++
 src/bin/editor/editor.h        |  6 ++++
 src/bin/editor/editor_states.c | 70 ++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 93 insertions(+)

diff --git a/src/bin/common/signals.h b/src/bin/common/signals.h
index 043c0e4..6c9cf1c 100644
--- a/src/bin/common/signals.h
+++ b/src/bin/common/signals.h
@@ -143,6 +143,23 @@ typedef struct {
  * @ingroup Window
  */
 #define SIGNAL_EDITOR_ATTRIBUTE_CHANGED "SIGNAL_EDITOR_ATTRIBUTE_CHANGED"
+
+/**
+ * emited when state is added in editor.
+ * eventinfo - stringshare with state name
+ *
+ * @ingroup Window
+ */
+#define SIGNAL_EDITOR_STATE_ADDED "SIGNAL_EDITOR_STATE_ADDED"
+
+/**
+ * emited *before* state will be deleted in editor.
+ * eventinfo - stringshare with state name
+ *
+ * @ingroup Window
+ */
+#define SIGNAL_EDITOR_STATE_DEL "SIGNAL_EDITOR_STATE_DEL"
+
 /**
  * emited when project is changed in any way (through attribute, .
  * eventinfo - NULL
diff --git a/src/bin/editor/editor.h b/src/bin/editor/editor.h
index a03d6bb..bde0013 100644
--- a/src/bin/editor/editor.h
+++ b/src/bin/editor/editor.h
@@ -197,6 +197,12 @@ editor_group_max_h_set(Evas_Object *obj, Change *change, 
Eina_Bool merge,
 /* State */
 
 Eina_Bool
+editor_state_add(Evas_Object *edit_object, Change *change, Eina_Bool merge,
+                 const char *part_name, const char *state_name, double 
state_val);
+Eina_Bool
+editor_state_del(Evas_Object *edit_object, Change *change, Eina_Bool merge,
+                 const char *part_name, const char *state_name, double 
state_val);
+Eina_Bool
 editor_state_min_w_set(Evas_Object *obj, Change *change, Eina_Bool merge, 
const char *part_name, const char *state_name, double state_val,
       int new_val);
 Eina_Bool
diff --git a/src/bin/editor/editor_states.c b/src/bin/editor/editor_states.c
index a3aeef5..0627be4 100644
--- a/src/bin/editor/editor_states.c
+++ b/src/bin/editor/editor_states.c
@@ -292,3 +292,73 @@ editor_state_reset(Evas_Object *edit_object, Change 
*change, Eina_Bool merge __U
 
    return res;
 }
+
+Eina_Bool
+editor_state_add(Evas_Object *edit_object, Change *change, Eina_Bool merge 
__UNUSED__,
+                 const char *part_name, const char *state_name, double 
state_val)
+{
+   Diff *diff;
+   Eina_Stringshare *event_info;
+
+   assert(edit_object != NULL);
+
+   if (change)
+     {
+        diff = mem_calloc(1, sizeof(Diff));
+        diff->redo.type = FUNCTION_TYPE_STRING_STRING_DOUBLE;
+        diff->redo.function = editor_state_add;
+        diff->redo.args.type_ssd.s1 = eina_stringshare_add(part_name);
+        diff->redo.args.type_ssd.s2 = eina_stringshare_add(state_name);
+        diff->redo.args.type_ssd.d3 = state_val;
+        diff->undo.type = FUNCTION_TYPE_STRING_STRING_DOUBLE;
+        diff->undo.function = editor_state_del;
+        diff->undo.args.type_ssd.s1 = eina_stringshare_add(part_name);
+        diff->undo.args.type_ssd.s2 = eina_stringshare_add(state_name);
+        diff->undo.args.type_ssd.d3 = state_val;
+
+        change_diff_add(change, diff);
+     }
+   if (!edje_edit_state_add(edit_object, part_name, state_name, state_val))
+     return false;
+   _editor_project_changed();
+   event_info = eina_stringshare_add(state_name);
+   evas_object_smart_callback_call(ap.win, SIGNAL_EDITOR_STATE_ADDED, (void 
*)event_info);
+   eina_stringshare_del(event_info);
+   return true;
+}
+
+Eina_Bool
+editor_state_del(Evas_Object *edit_object, Change *change, Eina_Bool merge 
__UNUSED__,
+                 const char *part_name, const char *state_name, double 
state_val)
+{
+   Diff *diff;
+   Eina_Stringshare *event_info;
+
+   assert(edit_object != NULL);
+
+   event_info = eina_stringshare_add(state_name);
+   evas_object_smart_callback_call(ap.win, SIGNAL_EDITOR_STATE_DEL, (void 
*)event_info);
+   eina_stringshare_del(event_info);
+   if (change)
+     {
+        if (!editor_state_reset(edit_object, change, false, part_name, 
state_name, state_val))
+          return false;
+        diff = mem_calloc(1, sizeof(Diff));
+        diff->redo.type = FUNCTION_TYPE_STRING_STRING_DOUBLE;
+        diff->redo.function = editor_state_del;
+        diff->redo.args.type_ssd.s1 = eina_stringshare_add(part_name);
+        diff->redo.args.type_ssd.s2 = eina_stringshare_add(state_name);
+        diff->redo.args.type_ssd.d3 = state_val;
+        diff->undo.type = FUNCTION_TYPE_STRING_STRING_DOUBLE;
+        diff->undo.function = editor_state_add;
+        diff->undo.args.type_ssd.s1 = eina_stringshare_add(part_name);
+        diff->undo.args.type_ssd.s2 = eina_stringshare_add(state_name);
+        diff->undo.args.type_ssd.d3 = state_val;
+
+        change_diff_add(change, diff);
+     }
+   if (!edje_edit_state_del(edit_object, part_name, state_name, state_val))
+     return false;
+   _editor_project_changed();
+   return true;
+}

-- 


Reply via email to