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

-- 


Reply via email to