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