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. --