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