rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=0603ec1b363441368a0da1b0ef29726fc95710f8
commit 0603ec1b363441368a0da1b0ef29726fc95710f8 Author: Andrii Kroitor <[email protected]> Date: Wed Dec 16 18:41:35 2015 +0200 editor: add part_item restack method --- src/bin/common/signals.h | 13 +++++++ src/bin/editor/editor.h | 3 ++ src/bin/editor/editor_part.c | 93 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+) diff --git a/src/bin/common/signals.h b/src/bin/common/signals.h index a3230eb..8a9d0c7 100644 --- a/src/bin/common/signals.h +++ b/src/bin/common/signals.h @@ -220,6 +220,19 @@ typedef struct { */ #define SIGNAL_EDITOR_PART_RESTACKED "SIGNAL_EDITOR_PART_RESTACKED" +typedef struct { + const char *part_name; + const char *part_item; + const char *relative_part_item; +} Editor_Part_Item_Restack; +/** + * emited when part item is restacked. + * eventinfo - Editor_Part_Item_Restack struct + * + * @ingroup Window + */ +#define SIGNAL_EDITOR_PART_ITEM_RESTACKED "SIGNAL_EDITOR_PART_ITEM_RESTACKED" + /** * emited when project is changed in any way (through attribute, . diff --git a/src/bin/editor/editor.h b/src/bin/editor/editor.h index 08f82d6..7eb670f 100644 --- a/src/bin/editor/editor.h +++ b/src/bin/editor/editor.h @@ -430,6 +430,9 @@ Eina_Bool editor_part_restack(Evas_Object *edit_object, Change *change, Eina_Bool merge, const char *part_name, const char *relative_part); Eina_Bool +editor_part_item_restack(Evas_Object *edit_object, Change *change, Eina_Bool merge, + const char *part_name, const char *part_item, const char *relative_part_item); +Eina_Bool editor_part_item_append(Evas_Object *edit_object, Change *change, Eina_Bool merge, const char *part_name, const char *item_name, const char *source_group); Eina_Bool diff --git a/src/bin/editor/editor_part.c b/src/bin/editor/editor_part.c index 17dcadd..89a2c4d 100644 --- a/src/bin/editor/editor_part.c +++ b/src/bin/editor/editor_part.c @@ -739,3 +739,96 @@ editor_part_restack(Evas_Object *edit_object, Change *change, Eina_Bool merge, } return true; } + +Eina_Bool +editor_part_item_restack(Evas_Object *edit_object, Change *change, Eina_Bool merge, + const char *part_name, const char *part_item, const char *relative_part_item) +{ + Diff *diff; + Eina_Stringshare *old_relative_part_item; + Editor_Part_Item_Restack event_info; + Eina_List *items, *part_item_l, *l; + Eina_Stringshare *part_item_name, *relative_part_item_name, *item_name; + Change *virtual_change; + Eina_Bool res; + + assert(edit_object != NULL); + assert(part_name != NULL); + assert(part_item != NULL); + + items = edje_edit_part_items_list_get(edit_object, part_name); + assert(items != NULL); + part_item_name = eina_stringshare_add(part_item); + part_item_l = eina_list_data_find_list(items, part_item_name); + + old_relative_part_item = eina_stringshare_add(eina_list_data_get(eina_list_next(part_item_l))); + if (change) + { + diff = mem_calloc(1, sizeof(Diff)); + diff->redo.type = FUNCTION_TYPE_STRING_STRING_STRING; + diff->redo.function = editor_part_item_restack; + diff->redo.args.type_sss.s1 = eina_stringshare_add(part_name); + diff->redo.args.type_sss.s2 = eina_stringshare_add(part_item); + diff->redo.args.type_sss.s3 = eina_stringshare_add(relative_part_item); + diff->undo.type = FUNCTION_TYPE_STRING_STRING_STRING; + diff->undo.function = editor_part_item_restack; + diff->undo.args.type_sss.s1 = eina_stringshare_add(part_name); + diff->undo.args.type_sss.s2 = eina_stringshare_add(part_item); + diff->undo.args.type_sss.s3 = old_relative_part_item; + if (merge) + change_diff_merge_add(change, diff); + else + change_diff_add(change, diff); + } + + virtual_change = change_add(NULL); + you_shall_not_pass_editor_signals(NULL); + + if (relative_part_item) + { + relative_part_item_name = eina_stringshare_add(relative_part_item); + if (old_relative_part_item != relative_part_item_name) + { + EINA_LIST_REVERSE_FOREACH(items, l, item_name) + { + if (item_name == part_item_name) continue; + + res = editor_part_item_del(edit_object, virtual_change, false, part_name, item_name); + assert(res); + + if (item_name == relative_part_item_name) break; + } + res = editor_part_item_del(edit_object, virtual_change, false, part_name, part_item); + assert(res); + res = change_undo(edit_object, virtual_change); + assert(res); + } + } + else + { + if (eina_list_next(part_item_l)) + { + res = editor_part_item_del(edit_object, virtual_change, false, part_name, part_item); + assert(res); + res = change_undo(edit_object, virtual_change); + assert(res); + } + } + you_shall_pass_editor_signals(NULL); + change_free(virtual_change); + + edje_edit_string_list_free(items); + + _editor_project_changed(); + if (!_editor_signals_blocked) + { + event_info.part_name = eina_stringshare_add(part_name); + event_info.part_item = part_item_name; + event_info.relative_part_item = eina_stringshare_add(relative_part_item); + evas_object_smart_callback_call(ap.win, SIGNAL_EDITOR_PART_ITEM_RESTACKED, &event_info); + eina_stringshare_del(event_info.part_name); + eina_stringshare_del(event_info.part_item); + eina_stringshare_del(event_info.relative_part_item); + } + return true; +} --
