rimmed pushed a commit to branch master.

http://git.enlightenment.org/tools/eflete.git/commit/?id=239710ab9e91ca77a3dca83ee030398d609a33f4

commit 239710ab9e91ca77a3dca83ee030398d609a33f4
Author: Andrii Kroitor <an.kroi...@samsung.com>
Date:   Tue Dec 22 14:28:16 2015 +0200

    workspace: fix part_item add logic
---
 src/bin/common/signals.h                |  8 --------
 src/bin/project_manager/group_manager.c | 12 ++++++++++++
 src/bin/project_manager/group_manager.h |  3 +++
 src/bin/ui/group_navigator.c            | 31 ++++---------------------------
 src/bin/ui/group_navigator.h            |  3 +++
 src/bin/ui/tabs.c                       | 27 +++++++++++++++------------
 src/bin/ui/workspace/workspace.c        | 30 +++++++++++++++++++++---------
 src/bin/ui/workspace/workspace.h        | 17 +++++++++++------
 8 files changed, 69 insertions(+), 62 deletions(-)

diff --git a/src/bin/common/signals.h b/src/bin/common/signals.h
index 3a2ea90..b7735e0 100644
--- a/src/bin/common/signals.h
+++ b/src/bin/common/signals.h
@@ -68,14 +68,6 @@
  */
 #define SIGNAL_PART_UNSELECTED "SIGNAL_PART_UNSELECTED"
 
-/**
- * emited when new part_item is added.
- * eventinfo - pointer to Part_ structure
- *
- * @ingroup Window
- */
-#define SIGNAL_PART_ITEM_ADDED "SIGNAL_PART_ITEM_ADDED"
-
 typedef struct {
    const char *old_name;
    const char *new_name;
diff --git a/src/bin/project_manager/group_manager.c 
b/src/bin/project_manager/group_manager.c
index 19189ae..cd8d6ce 100644
--- a/src/bin/project_manager/group_manager.c
+++ b/src/bin/project_manager/group_manager.c
@@ -541,6 +541,18 @@ gm_state_del(Project *pro, State *state)
 }
 
 void
+gm_part_item_add(Project *pro, Part_ *part, Eina_Stringshare *item_name)
+{
+   assert(pro != NULL);
+   assert(part != NULL);
+   assert(item_name != NULL);
+   assert((part->type ==  EDJE_PART_TYPE_BOX) ||
+          (part->type ==  EDJE_PART_TYPE_TABLE));
+
+   part->items = eina_list_append(part->items, 
eina_stringshare_ref(item_name));
+}
+
+void
 gm_part_item_del(Project *pro, Part_ *part, Eina_Stringshare *item_name)
 {
    Eina_List *l;
diff --git a/src/bin/project_manager/group_manager.h 
b/src/bin/project_manager/group_manager.h
index fedfdb7..c6258f1 100644
--- a/src/bin/project_manager/group_manager.h
+++ b/src/bin/project_manager/group_manager.h
@@ -109,6 +109,9 @@ gm_state_add(Project *pro, Part_ *part, const char 
*state_name);
 Part_ *
 gm_part_add(Project *pro, Group *group, Eina_Stringshare *part_name);
 
+void
+gm_part_item_add(Project *pro, Part_ *part, Eina_Stringshare *item_name);
+
 Group *
 gm_group_add(Project *pro, const char *group_name);
 
diff --git a/src/bin/ui/group_navigator.c b/src/bin/ui/group_navigator.c
index 9ab0de0..e7c822b 100644
--- a/src/bin/ui/group_navigator.c
+++ b/src/bin/ui/group_navigator.c
@@ -857,37 +857,15 @@ _popup_add_item_ok_clicked(void *data,
    ecore_job_add(_job_popup_del, pl);
 }
 
-static void
-_editor_part_item_added_cb(void *data,
-                           Evas_Object *obj __UNUSED__,
-                           void *event_info)
+void
+group_navigator_part_item_add(Evas_Object *obj, Part_ *part __UNUSED__, 
Eina_Stringshare * item_name)
 {
-   Part_List *pl = data;
-   const Editor_Item *editor_item = event_info;
-   Part_ *part;
+   Part_List *pl = evas_object_data_get(obj, GROUP_NAVIGATOR_DATA);
    Elm_Object_Item *items_glit, *glit;
    const Eina_List *l;
-   Eina_Stringshare *item_name;
 
    assert(pl != NULL);
-   assert(editor_item != NULL);
-
-   part = elm_object_item_data_get(pl->selected_part_item);
-   if (strcmp(editor_item->part_name, part->name))
-     {
-        part = pm_resource_unsorted_get(part->group->parts, 
editor_item->part_name);
-        group_navigator_part_select(pl->layout, part);
-     }
-
-   assert((part->type == EDJE_PART_TYPE_TABLE) ||
-          (part->type == EDJE_PART_TYPE_BOX));
-
-   item_name = eina_stringshare_add(editor_item->item_name);
-   TODO("move this logic to group_manager")
-   part->items = eina_list_append(part->items, item_name);
-
-   /* callback should be called before selection to allow some additional 
loading */
-   evas_object_smart_callback_call(ap.win, SIGNAL_PART_ITEM_ADDED, (void 
*)part);
+   assert(item_name != NULL);
 
    elm_genlist_item_expanded_set(pl->selected_part_item, true);
    items_glit = 
eina_list_data_get(eina_list_last(elm_genlist_item_subitems_get(pl->selected_part_item)));
@@ -1584,7 +1562,6 @@ group_navigator_add(Group *group)
    pl->name_validator = elm_validator_regexp_new(PART_NAME_REGEX, NULL);
 
    TODO("Fix multi-tab logic");
-   evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_PART_ITEM_ADDED, 
_editor_part_item_added_cb, pl);
    evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_PART_ITEM_DELETED, 
_editor_part_item_deleted_cb, pl);
    evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_PART_RESTACKED, 
_editor_part_restacked_cb, pl);
    evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_PART_ITEM_RESTACKED, 
_editor_part_item_restacked_cb, pl);
diff --git a/src/bin/ui/group_navigator.h b/src/bin/ui/group_navigator.h
index b542e80..b0f3b3d 100644
--- a/src/bin/ui/group_navigator.h
+++ b/src/bin/ui/group_navigator.h
@@ -94,4 +94,7 @@ group_navigator_part_add(Evas_Object *obj, Part_ *part);
 
 void
 group_navigator_part_del(Evas_Object *obj, Part_ *part);
+
+void
+group_navigator_part_item_add(Evas_Object *obj, Part_ *part, Eina_Stringshare 
* item_name);
 #endif /* GROUP_NAVIGATOR_H */
diff --git a/src/bin/ui/tabs.c b/src/bin/ui/tabs.c
index 29a7b7f..8bef710 100644
--- a/src/bin/ui/tabs.c
+++ b/src/bin/ui/tabs.c
@@ -202,16 +202,6 @@ _property_attribute_changed(void *data __UNUSED__,
 }
 
 static void
-_part_item_added(void *data __UNUSED__,
-                 Evas_Object *obj __UNUSED__,
-                 void *ei __UNUSED__)
-{
-   assert(tabs.current_workspace != NULL);
-
-   workspace_groupview_hard_update(tabs.current_workspace);
-}
-
-static void
 _part_renamed(void *data __UNUSED__,
               Evas_Object *obj __UNUSED__,
               void *ei)
@@ -336,6 +326,20 @@ _editor_part_deleted_cb(void *data __UNUSED__,
    workspace_part_del(tabs.current_workspace, part_name);
 }
 
+static void
+_editor_part_item_added_cb(void *data __UNUSED__,
+                           Evas_Object *obj __UNUSED__,
+                           void *event_info)
+{
+   const Editor_Item *editor_item = event_info;
+
+   assert(editor_item != NULL);
+   assert(tabs.current_group != NULL);
+   assert(tabs.current_workspace != NULL);
+
+   workspace_part_item_add(tabs.current_workspace, editor_item->part_name, 
editor_item->item_name);
+}
+
 Evas_Object *
 tabs_add(void)
 {
@@ -420,7 +424,6 @@ tabs_add(void)
    evas_object_smart_callback_add(ap.win, SIGNAL_PROPERTY_ATTRIBUTE_CHANGED, 
_property_attribute_changed, NULL);
    evas_object_smart_callback_add(ap.win, SIGNAL_PART_RENAMED, _part_renamed, 
NULL);
    evas_object_smart_callback_add(ap.win, SIGNAL_PART_UNSELECTED, 
_part_unselected, NULL);
-   evas_object_smart_callback_add(ap.win, SIGNAL_PART_ITEM_ADDED, 
_part_item_added, NULL);
    evas_object_smart_callback_add(ap.win, SIGNAL_PROJECT_CHANGED, 
_project_changed, NULL);
    evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_SAVED, _editor_saved, 
NULL);
    evas_object_smart_callback_add(ap.win, SIGNAL_PROJECT_OPENED, 
_project_opened, NULL);
@@ -428,7 +431,7 @@ tabs_add(void)
 
    evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_PART_ADDED, 
_editor_part_added_cb, NULL);
    evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_PART_DELETED, 
_editor_part_deleted_cb, NULL);
-   //evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_PART_ITEM_ADDED, 
_editor_part_item_added_cb, NULL);
+   evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_PART_ITEM_ADDED, 
_editor_part_item_added_cb, NULL);
    //evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_PART_ITEM_DELETED, 
_editor_part_item_deleted_cb, NULL);
    //evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_PART_RESTACKED, 
_editor_part_restacked_cb, NULL);
    //evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_PART_ITEM_RESTACKED, 
_editor_part_item_restacked_cb, NULL);
diff --git a/src/bin/ui/workspace/workspace.c b/src/bin/ui/workspace/workspace.c
index 68ca357..2523405 100644
--- a/src/bin/ui/workspace/workspace.c
+++ b/src/bin/ui/workspace/workspace.c
@@ -1670,15 +1670,6 @@ workspace_groupview_soft_update(Evas_Object *obj)
    groupedit_soft_update(sd->groupedit);
 }
 
-void
-workspace_groupview_hard_update(Evas_Object *obj)
-{
-   WS_DATA_GET(obj, sd);
-
-   assert(sd->groupedit != NULL);
-
-   groupedit_hard_update(sd->groupedit);
-}
 Eina_Bool
 workspace_edit_object_recalc(Evas_Object *obj)
 {
@@ -1907,3 +1898,24 @@ workspace_part_del(Evas_Object *obj, Eina_Stringshare 
*part_name)
    groupedit_edit_object_part_del(sd->groupedit, part);
    gm_part_del(ap.project, part);
 }
+
+void
+workspace_part_item_add(Evas_Object *obj,
+                        Eina_Stringshare *part_name,
+                        Eina_Stringshare *item_name)
+{
+   Part_ *part;
+   WS_DATA_GET(obj, sd);
+   assert(part_name != NULL);
+   assert(item_name != NULL);
+
+   part = pm_resource_unsorted_get(sd->group->parts, part_name);
+
+   assert((part->type == EDJE_PART_TYPE_TABLE) ||
+          (part->type == EDJE_PART_TYPE_BOX));
+
+   group_navigator_part_select(sd->group_navigator, part);
+   gm_part_item_add(ap.project, part, item_name);
+   groupedit_hard_update(sd->groupedit);
+   group_navigator_part_item_add(sd->group_navigator, part, item_name);
+}
diff --git a/src/bin/ui/workspace/workspace.h b/src/bin/ui/workspace/workspace.h
index d849dc1..bd16b34 100644
--- a/src/bin/ui/workspace/workspace.h
+++ b/src/bin/ui/workspace/workspace.h
@@ -96,26 +96,31 @@ void
 workspace_groupview_soft_update(Evas_Object *obj);
 
 /**
- * Update the parts attributes, and recalculate them.
+ * Add new part to group_edit and group_navigator.
+ * Part should be already added to edit_object.
  *
- * @paramaram obj The workspace object.
+ * @param obj The workspace object.
+ * @param part_name name of added part
  *
  * @ingroup Workspace
  */
 void
-workspace_groupview_hard_update(Evas_Object *obj);
+workspace_part_add(Evas_Object *obj, Eina_Stringshare *part_name);
 
 /**
- * Add new part to group_edit and group_navigator.
+ * Add new part item to group_edit and group_navigator.
  * Part should be already added to edit_object.
  *
  * @param obj The workspace object.
- * @param part_name name of added part
+ * @param part_name name of part
+ * @param item_name name of added part_item
  *
  * @ingroup Workspace
  */
 void
-workspace_part_add(Evas_Object *obj, Eina_Stringshare *part_name);
+workspace_part_item_add(Evas_Object *obj,
+                        Eina_Stringshare *part_name,
+                        Eina_Stringshare *item_name);
 
 /**
  * Del part from group_edit and group_navigator.

-- 


Reply via email to