rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=72e00d4c0c1feb863a3b42cd4d92a0cf0d6ce259
commit 72e00d4c0c1feb863a3b42cd4d92a0cf0d6ce259 Author: Vyacheslav Reutskiy <v.reuts...@samsung.com> Date: Wed Nov 25 12:17:28 2015 +0200 groupedit: save the pointer to table cells object for hilignt it first: update the groupedit_item, we need to save only pointer to cell layout for higlight and cell name for search it. second: delete functions for manipulate groupedit item, now only groupedit recalc need for add, delete, change attributes also. TODO: * delete groupedit API for add/del container items; * remake hilight item procedure. Change-Id: Ib21e6008a24f5fc54c59e229790b9bb3cd046547 --- src/bin/ui/workspace/groupedit.c | 33 ++--- src/bin/ui/workspace/groupedit_calc.c | 215 +++++-------------------------- src/bin/ui/workspace/groupedit_private.h | 9 +- 3 files changed, 43 insertions(+), 214 deletions(-) diff --git a/src/bin/ui/workspace/groupedit.c b/src/bin/ui/workspace/groupedit.c index d11c7c5..ba3dd75 100644 --- a/src/bin/ui/workspace/groupedit.c +++ b/src/bin/ui/workspace/groupedit.c @@ -346,7 +346,9 @@ groupedit_edit_object_part_item_add(Evas_Object *obj, Eina_Stringshare *part, assert(item != NULL); assert(source != NULL); - return _edit_object_part_item_add(sd, part, item, source); + /* return _edit_object_part_item_add(sd, part, item, source); */ + TODO("delete this func, instead use _recalc") + return false; } Eina_Bool @@ -358,7 +360,9 @@ groupedit_edit_object_part_item_del(Evas_Object *obj, Eina_Stringshare *part, assert(part != NULL); assert(item != NULL); - return _edit_object_part_item_del(sd, part, item); + /* return _edit_object_part_item_del(sd, part, item); */ + TODO("delete this func, instead use _recalc") + return false; } Eina_Bool @@ -687,37 +691,16 @@ groupedit_zoom_factor_set(Evas_Object *obj, double factor) Eina_Bool groupedit_edit_object_part_item_selected_set(Evas_Object *obj, Eina_Stringshare *item_name, - Eina_Bool selected) + Eina_Bool selected __UNUSED__) { WS_GROUPEDIT_DATA_GET(obj, sd); Groupedit_Part *gp = sd->selected; - Eina_List *l, *l_n; - Groupedit_Item *ge_item = NULL; if (!gp) return false; assert(item_name != NULL); - EINA_LIST_FOREACH_SAFE(gp->items, l, l_n, ge_item) - { - if (ge_item->name == item_name) - { - ge_item->selected = selected; - if (selected) - { - edje_object_file_set(ge_item->highlight, EFLETE_THEME, "elm/image/border/2px"); - evas_object_color_set(ge_item->highlight, 0, 253, 255, 255); - } - else - { - edje_object_file_set(ge_item->highlight, EFLETE_THEME, "elm/image/border/1px"); - evas_object_color_set(ge_item->highlight, 49, 140, 141, 255); - } - sd->manual_calc = true; - _parts_recalc(sd); - return true; - } - } + TODO("need to find a item in the list and emit signal for hilight it. NOT RECALC!!!!") return false; } diff --git a/src/bin/ui/workspace/groupedit_calc.c b/src/bin/ui/workspace/groupedit_calc.c index 8dc9b7a..c274265 100644 --- a/src/bin/ui/workspace/groupedit_calc.c +++ b/src/bin/ui/workspace/groupedit_calc.c @@ -41,9 +41,6 @@ _move_border_to_top(Ws_Groupedit_Smart_Data *sd); static void _part_draw_del(Ws_Groupedit_Smart_Data *sd, Part_ *part); -static Groupedit_Item * -_item_draw_add(Ws_Groupedit_Smart_Data *sd, Part_ *part, Eina_Stringshare *item); - static void _item_draw_del(Groupedit_Item *ge_item); @@ -96,77 +93,6 @@ _edit_object_part_del(Ws_Groupedit_Smart_Data *sd, Part_ *part) return true; } -Eina_Bool -_edit_object_part_item_add(Ws_Groupedit_Smart_Data *sd, - Eina_Stringshare *part, - Eina_Stringshare *item, - Eina_Stringshare *source) -{ - Groupedit_Part *gp; - Groupedit_Item *ge_item = NULL; - unsigned char type = EDJE_PART_TYPE_NONE; - - assert(sd != NULL); - assert(part != NULL); - assert(item != NULL); - assert(source != NULL); - - gp = _parts_list_find(sd->parts, part); - if (!edje_edit_part_item_append(sd->group->edit_object, part, item, source)) - return false; - - ge_item = _item_draw_add(sd, gp->part, item); - if (!ge_item) return false; - type = edje_edit_part_type_get(sd->group->edit_object, part); - - if (type == EDJE_PART_TYPE_TABLE) - { - /*Position new item in cell with coords [0;0]*/ - /*edit_part_item_position_col_set(sd->group->edit_object, part, item, 0); - edje_edit_part_item_position_row_set(sd->group->edit_object, part, item, 0);*/ - evas_object_table_pack(gp->draw, ge_item->border, 0, 0, 1, 1); - evas_object_table_pack(gp->draw, ge_item->draw, 0, 0, 1, 1); - evas_object_table_pack(gp->draw, ge_item->highlight, 0, 0, 1, 1); - } - - gp->items = eina_list_append(gp->items, ge_item); - evas_object_smart_member_add(ge_item->border, gp->draw); - evas_object_smart_member_add(ge_item->draw, gp->draw); - evas_object_smart_member_add(ge_item->highlight, gp->draw); - - evas_object_smart_changed(sd->obj); - - return true; -} - -Eina_Bool -_edit_object_part_item_del(Ws_Groupedit_Smart_Data *sd __UNUSED__, - Eina_Stringshare *part __UNUSED__, - Eina_Stringshare *item __UNUSED__) -{ - Groupedit_Part *gp; - Groupedit_Item *ge_item = NULL; - Eina_List *l, *l_next; - - gp = _parts_list_find(sd->parts, part); - - if (!edje_edit_part_item_del(sd->group->edit_object, part, item)) - return false; - - EINA_LIST_FOREACH_SAFE(gp->items, l, l_next, ge_item) - { - if (ge_item->name == item) break; - ge_item = NULL; - } - if (!ge_item) return false; - evas_object_table_unpack(gp->draw, ge_item->draw); - gp->items = eina_list_remove(gp->items, ge_item); - _item_draw_del(ge_item); - - evas_object_smart_changed(sd->obj); - return true; -} - static void _part_parts_layouts_update(Ws_Groupedit_Smart_Data *sd, Groupedit_Part *ge_part, @@ -532,14 +458,16 @@ static void _part_table_items_add(Ws_Groupedit_Smart_Data *sd, Groupedit_Part *gp, Eina_Stringshare ***items_draw) { const Evas_Object *table; - Evas_Object *cell; + Evas_Object *cell, *cell_content; Eina_Stringshare *item_name, *item_source; int w, h; /* Geometry values */ int min_w, max_w, min_h, max_h; /* Hints values */ int i, j, col, row; unsigned char span_col, span_row; + Groupedit_Item *item; assert(gp->container != NULL); + assert(gp->items == NULL); table = edje_object_part_object_get(sd->group->edit_object, gp->part->name); evas_object_table_col_row_size_get(table, &col, &row); @@ -554,18 +482,24 @@ _part_table_items_add(Ws_Groupedit_Smart_Data *sd, Groupedit_Part *gp, Eina_Stri span_col = 1; span_row = 1; + cell = elm_layout_add(sd->parent); + evas_object_size_hint_align_set(cell, EVAS_HINT_FILL, EVAS_HINT_FILL); + + elm_layout_theme_set(cell, "layout", "groupview", "default"); + evas_object_show(cell); + elm_object_signal_emit(cell, "border,part_item", "eflete"); if (items_draw[i][j] != NULL) { item_name = items_draw[i][j]; span_col = edje_edit_part_item_span_col_get(sd->group->edit_object, gp->part->name, item_name); span_row = edje_edit_part_item_span_row_get(sd->group->edit_object, gp->part->name, item_name); - cell = edje_object_add(sd->e); + cell_content = edje_object_add(sd->e); item_source = edje_edit_part_item_source_get(sd->group->edit_object, gp->part->name, item_name); - edje_object_file_set(cell, ap.project->dev, item_source); + edje_object_file_set(cell_content, ap.project->dev, item_source); eina_stringshare_del(item_source); /* hide this object, it need only for calculate cell size */ - evas_object_hide(cell); + evas_object_hide(cell_content); min_w = edje_edit_part_item_min_w_get(sd->group->edit_object, gp->part->name, item_name); min_h = edje_edit_part_item_min_h_get(sd->group->edit_object, gp->part->name, item_name); @@ -573,27 +507,25 @@ _part_table_items_add(Ws_Groupedit_Smart_Data *sd, Groupedit_Part *gp, Eina_Stri // Calculation according to box/table item implementation in efl 1.13 at edje_load.c if ((min_w <= 0) && (min_h <= 0)) { - edje_object_size_min_get(cell, &w, &h); + edje_object_size_min_get(cell_content, &w, &h); if ((w <= 0) && (h <= 0)) - edje_object_size_min_calc(cell, &w, &h); + edje_object_size_min_calc(cell_content, &w, &h); } if (((min_w <= 0) && (min_h <= 0)) && ((w > 0) || (h > 0))) - evas_object_size_hint_min_set(cell, w, h); + evas_object_size_hint_min_set(cell_content, w, h); else - evas_object_size_hint_min_set(cell, min_w, min_h); + evas_object_size_hint_min_set(cell_content, min_w, min_h); max_w = edje_edit_part_item_max_w_get(sd->group->edit_object, gp->part->name, item_name); max_h = edje_edit_part_item_max_h_get(sd->group->edit_object, gp->part->name, item_name); - evas_object_size_hint_max_set(cell, max_w, max_h); - evas_object_table_pack(gp->container, cell, i, j, span_col, span_row); - } - cell = elm_layout_add(sd->parent); - evas_object_size_hint_align_set(cell, EVAS_HINT_FILL, EVAS_HINT_FILL); - - elm_layout_theme_set(cell, "layout", "groupview", "default"); - evas_object_show(cell); - elm_object_signal_emit(cell, "border,part_item", "eflete"); + evas_object_size_hint_max_set(cell_content, max_w, max_h); + evas_object_table_pack(gp->container, cell_content, i, j, span_col, span_row); + item = mem_malloc(sizeof(Groupedit_Item)); + item->name = eina_stringshare_add(item_name); + item->layout = cell; + gp->items = eina_list_append(gp->items, item); + } evas_object_table_pack(gp->container, cell, i, j, span_col, span_row); } } @@ -788,8 +720,12 @@ _box_param_update(Ws_Groupedit_Smart_Data *sd, Groupedit_Part *gp) static void _part_container_del(Groupedit_Part *gp) { + Groupedit_Item *item; assert(gp->container != NULL); + EINA_LIST_FREE(gp->items, item) + _item_draw_del(item); + elm_box_unpack(gp->draw, gp->container); evas_object_del(gp->container); gp->container = NULL; @@ -848,8 +784,6 @@ _part_recalc_apply(Ws_Groupedit_Smart_Data *sd, Evas_Coord x, y, xe, ye, w, h; Evas_Coord part_x, part_y, abs_x, abs_y; Evas_Coord ro_w, ro_h; - Eina_List *l, *l_n, *l_sp, *l_sp_n; - Groupedit_Item *ge_item = NULL, *sp_item = NULL; const Evas_Object *ro; assert(sd != NULL); @@ -894,41 +828,10 @@ _part_recalc_apply(Ws_Groupedit_Smart_Data *sd, GP_REAL_GEOMETRY_CALC(part_x, part_y, abs_x, abs_y) + TODO("need to check it seems like extra action") if (gp->part->type == EDJE_PART_TYPE_BOX) evas_object_smart_calculate(gp->draw); - /* We don't need xe or ye for box items */ - xe = 0; - ye = 0; - - if (gp->items) - { - EINA_LIST_FOREACH_SAFE(gp->items, l, l_n, ge_item) - { - evas_object_geometry_get(ge_item->border, &x, &y, &w, &h); - GP_REAL_GEOMETRY_CALC(part_x, part_y, abs_x, abs_y) - - if (ge_item->spread) - { - EINA_LIST_FOREACH_SAFE(ge_item->spread, l_sp, l_sp_n, sp_item) - { - /* If it is BOX then there are borders exists. - * If border is not exist then it is TABLE's item. - */ - if (gp->part->type == EDJE_PART_TYPE_BOX) - evas_object_geometry_get(sp_item->border, &x, &y, &w, &h); - else - { - evas_object_geometry_get(sp_item->draw, &x, &y, &w, &h); - evas_object_smart_calculate(sp_item->draw); - } - - GP_REAL_GEOMETRY_CALC(part_x, part_y, abs_x, abs_y) - } - } - } - } - ZOOM_APPLY(gp->draw) } @@ -1178,65 +1081,15 @@ _part_draw_del(Ws_Groupedit_Smart_Data *sd, Part_ *part) _groupedit_part_free(gp); } -static Groupedit_Item * -_item_draw_add(Ws_Groupedit_Smart_Data *sd, Part_ *part, - Eina_Stringshare *item) -{ - Groupedit_Item *ge_item = NULL; - Eina_Stringshare *item_source; - - assert(sd != NULL); - assert(part != NULL); - assert(item != NULL); - - item_source = edje_edit_part_item_source_get(sd->group->edit_object, part->name, item); - if (item_source) - { - ge_item = (Groupedit_Item *)mem_calloc(1, sizeof(Groupedit_Item)); - ge_item->name = eina_stringshare_add(item); - - IMAGE_ADD_NEW(sd->obj, ge_item->border, "bg", "part_item") - evas_object_show(ge_item->border); - evas_object_size_hint_min_set(ge_item->border, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_align_set(ge_item->border, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_weight_set(ge_item->border, EVAS_HINT_FILL, EVAS_HINT_FILL); - - ge_item->draw = edje_object_add(sd->e); - edje_object_file_set(ge_item->draw, ap.project->dev, item_source); - evas_object_show(ge_item->draw); - - IMAGE_ADD_NEW(sd->obj, ge_item->highlight, "border", "1px"); - evas_object_size_hint_min_set(ge_item->highlight, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_align_set(ge_item->highlight, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_weight_set(ge_item->highlight, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_color_set(ge_item->highlight, 49, 140, 141, 255); - evas_object_show(ge_item->highlight); - } - edje_edit_string_free(item_source); - return ge_item; -} - static void -_item_draw_del(Groupedit_Item *ge_item) +_item_draw_del(Groupedit_Item *item) { - Groupedit_Item *spread_item = NULL; - - assert(ge_item != NULL); + assert(item != NULL); - EINA_LIST_FREE(ge_item->spread, spread_item) - { - evas_object_del(spread_item->draw); - if (spread_item->highlight) - evas_object_del(spread_item->highlight); - if (spread_item->border) - evas_object_del(spread_item->border); - free(spread_item); - } - eina_stringshare_del(ge_item->name); - evas_object_del(ge_item->draw); - evas_object_del(ge_item->border); - evas_object_del(ge_item->highlight); - free(ge_item); + eina_stringshare_del(item->name); + /* no sence to delete ge_item->layout, because we recreate table/box on add + * and delete item event. It will be deleted with conteiner object. */ + free(item); } static void diff --git a/src/bin/ui/workspace/groupedit_private.h b/src/bin/ui/workspace/groupedit_private.h index 04d22b5..4f54ee9 100644 --- a/src/bin/ui/workspace/groupedit_private.h +++ b/src/bin/ui/workspace/groupedit_private.h @@ -152,11 +152,7 @@ struct _Groupedit_Part struct _Groupedit_Item { Eina_Stringshare *name; /**< The item name. */ - Evas_Object *draw; /**< The loaded edje object.*/ - Evas_Object *border; /**< The item border*/ - Evas_Object *highlight; /**< The item highlight */ - Eina_List *spread; /**< The spreaded items */ - Eina_Bool selected : 1; /**< Item is selected in widget list or not. */ + Evas_Object *layout; /**< The item border and hilight */ }; void @@ -184,9 +180,6 @@ void _selected_item_return_to_place(Ws_Groupedit_Smart_Data *sd); Eina_Bool -_edit_object_part_item_add(Ws_Groupedit_Smart_Data *sd, Eina_Stringshare *part, - Eina_Stringshare *item, Eina_Stringshare *source); -Eina_Bool _edit_object_part_item_del(Ws_Groupedit_Smart_Data *sd, Eina_Stringshare *part, Eina_Stringshare *item); --