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; +} --