From 9c52484cafbb52a293e1048362b877ec7e43a81f Mon Sep 17 00:00:00 2001 From: Yeongjong Lee Date: Tue, 27 Aug 2019 12:46:03 +0200 Subject: [PATCH] efl_pack_table: rename table_position to cell_column, cell_row Summary: Rename ambiguous `table_position` property. it is actually related to child column, row. ref T7900 Reviewers: segfaultxavi, zmike Reviewed By: segfaultxavi Subscribers: cedric, #reviewers, #committers Tags: #efl_api Maniphest Tasks: T7900 Differential Revision: https://phab.enlightenment.org/D9611 --- src/bin/elementary/test_ui_table.c | 6 +- src/bin/elementary/test_ui_table_static.c | 6 +- src/lib/edje/edje_part_invalid.c | 5 +- src/lib/edje/edje_part_table.c | 40 +++++++- .../edje/efl_canvas_layout_part_invalid.eo | 3 +- src/lib/edje/efl_canvas_layout_part_table.eo | 3 +- src/lib/efl/interfaces/efl_pack_table.eo | 17 +++- src/lib/elementary/efl_ui_layout_pack.c | 49 +++++++++- .../elementary/efl_ui_layout_part_table.eo | 3 +- src/lib/elementary/efl_ui_table.c | 92 ++++++++++++++++++- src/lib/elementary/efl_ui_table.eo | 3 +- src/tests/edje/edje_test_container.c | 3 +- 12 files changed, 202 insertions(+), 28 deletions(-) diff --git a/src/bin/elementary/test_ui_table.c b/src/bin/elementary/test_ui_table.c index 43b4c9cdb0..67f7067657 100644 --- a/src/bin/elementary/test_ui_table.c +++ b/src/bin/elementary/test_ui_table.c @@ -138,7 +138,8 @@ child_evt_cb(void *data, const Efl_Event *event) int col, row, colspan, rowspan; char buf[64]; - efl_pack_table_position_get(event->object, it, &col, &row, &colspan, &rowspan); + efl_pack_table_cell_column_get(event->object, it, &col, &colspan); + efl_pack_table_cell_row_get(event->object, it, &row, &rowspan); if (event->desc == EFL_CONTAINER_EVENT_CONTENT_ADDED) sprintf(buf, "pack %d,%d %dx%d", col, row, colspan, rowspan); else @@ -168,7 +169,8 @@ _custom_layout_update(Eo *pack, void *_pd EINA_UNUSED) it = efl_content_iterate(pack); EINA_ITERATOR_FOREACH(it, item) { - if (efl_pack_table_position_get(pack, item, &c, &r, &cs, &rs)) + if (efl_pack_table_cell_column_get(pack, item, &c, &cs) && + efl_pack_table_cell_row_get(pack, item, &r, &rs)) { Eina_Rect m; diff --git a/src/bin/elementary/test_ui_table_static.c b/src/bin/elementary/test_ui_table_static.c index 3e5ff789c4..7656bbc6a4 100644 --- a/src/bin/elementary/test_ui_table_static.c +++ b/src/bin/elementary/test_ui_table_static.c @@ -86,10 +86,8 @@ _ch_table(void *data, const Efl_Event *ev) Eo *table = data; int x, y, w, h; - // FIXME: old elm_table API doesn't need table object - //elm_grid_pack_get(obj, &x, &y, &w, &h); - //elm_grid_pack_set(obj, x - 1, y - 1, w + 2, h + 2); - efl_pack_table_position_get(table, ev->object, &x, &y, &w, &h); + efl_pack_table_cell_column_get(table, ev->object, &x, &w); + efl_pack_table_cell_row_get(table, ev->object, &y, &h); efl_pack_table(table, ev->object, x - 1, y - 1, w + 2, h + 2); } diff --git a/src/lib/edje/edje_part_invalid.c b/src/lib/edje/edje_part_invalid.c index 6403109b1c..4c62204709 100644 --- a/src/lib/edje/edje_part_invalid.c +++ b/src/lib/edje/edje_part_invalid.c @@ -95,7 +95,10 @@ EDJE_PART_INVALID_CONST(Efl_Ui_Layout_Orientation, 0, efl_ui_layout_orientation_ EDJE_PART_INVALID(Eina_Bool, 0, efl_pack_table, _efl_canvas_layout_part_invalid_efl_pack_table_pack_table, Efl_Gfx_Entity *subobj, int col, int row, int colspan, int rowspan) EDJE_PART_INVALID(Efl_Gfx_Entity *, 0, efl_pack_table_content_get, _efl_canvas_layout_part_invalid_efl_pack_table_table_content_get, int col, int row) EDJE_PART_INVALID(Eina_Iterator *, 0, efl_pack_table_contents_get, _efl_canvas_layout_part_invalid_efl_pack_table_table_contents_get, int col, int row, Eina_Bool below) -EDJE_PART_INVALID_CONST(Eina_Bool, 0, efl_pack_table_position_get, _efl_canvas_layout_part_invalid_efl_pack_table_table_position_get, Efl_Gfx_Entity *subobj, int *col, int *row, int *colspan, int *rowspan) +EDJE_PART_INVALID_CONST(Eina_Bool, 0, efl_pack_table_cell_column_get, _efl_canvas_layout_part_invalid_efl_pack_table_table_cell_column_get, Efl_Gfx_Entity *subobj, int *col, int *colspan) +EDJE_PART_INVALID_VOID(efl_pack_table_cell_column_set, _efl_canvas_layout_part_invalid_efl_pack_table_table_cell_column_set, Efl_Gfx_Entity *subobj, int col, int colspan) +EDJE_PART_INVALID_CONST(Eina_Bool, 0, efl_pack_table_cell_row_get, _efl_canvas_layout_part_invalid_efl_pack_table_table_cell_row_get, Efl_Gfx_Entity *subobj, int *row, int *rowspan) +EDJE_PART_INVALID_VOID(efl_pack_table_cell_row_set, _efl_canvas_layout_part_invalid_efl_pack_table_table_cell_row_set, Efl_Gfx_Entity *subobj, int row, int rowspan) EDJE_PART_INVALID_VOID_CONST(efl_pack_table_size_get, _efl_canvas_layout_part_invalid_efl_pack_table_table_size_get, int *cols, int *rows) EDJE_PART_INVALID_CONST(int, 0, efl_pack_table_columns_get, _efl_canvas_layout_part_invalid_efl_pack_table_table_columns_get) EDJE_PART_INVALID_CONST(int, 0, efl_pack_table_rows_get, _efl_canvas_layout_part_invalid_efl_pack_table_table_rows_get) diff --git a/src/lib/edje/edje_part_table.c b/src/lib/edje/edje_part_table.c index e860d74e78..d3d27bff23 100644 --- a/src/lib/edje/edje_part_table.c +++ b/src/lib/edje/edje_part_table.c @@ -163,21 +163,53 @@ _efl_canvas_layout_part_table_efl_pack_table_table_contents_get(Eo *obj, void *_ } EOLIAN static Eina_Bool -_efl_canvas_layout_part_table_efl_pack_table_table_position_get(const Eo *obj, void *_pd EINA_UNUSED, Efl_Gfx_Entity * subobj, int *col, int *row, int *colspan, int *rowspan) +_efl_canvas_layout_part_table_efl_pack_table_table_cell_column_get(const Eo *obj, void *_pd EINA_UNUSED, Efl_Gfx_Entity * subobj, int *col, int *colspan) { - unsigned short c, r, cs, rs; + unsigned short c, cs; Eina_Bool ret; PROXY_DATA_GET(obj, pd); - ret = evas_object_table_pack_get(pd->rp->object, subobj, &c, &r, &cs, &rs); + ret = evas_object_table_pack_get(pd->rp->object, subobj, &c, NULL, &cs, NULL); if (col) *col = c; - if (row) *row = r; if (colspan) *colspan = cs; + + return ret; +} + +EOLIAN static void +_efl_canvas_layout_part_table_efl_pack_table_table_cell_column_set(Eo *obj, void *_pd EINA_UNUSED, Efl_Gfx_Entity * subobj, int col, int colspan) +{ + unsigned short r, rs; + + PROXY_DATA_GET(obj, pd); + evas_object_table_pack_get(pd->rp->object, subobj, NULL, &r, NULL, &rs); + evas_object_table_pack(pd->rp->object, subobj, col, r, colspan, rs); +} + +EOLIAN static Eina_Bool +_efl_canvas_layout_part_table_efl_pack_table_table_cell_row_get(const Eo *obj, void *_pd EINA_UNUSED, Efl_Gfx_Entity * subobj, int *row, int *rowspan) +{ + unsigned short r, rs; + Eina_Bool ret; + + PROXY_DATA_GET(obj, pd); + ret = evas_object_table_pack_get(pd->rp->object, subobj, NULL, &r, NULL, &rs); + if (row) *row = r; if (rowspan) *rowspan = rs; return ret; } +EOLIAN static void +_efl_canvas_layout_part_table_efl_pack_table_table_cell_row_set(Eo *obj, void *_pd EINA_UNUSED, Efl_Gfx_Entity * subobj, int row, int rowspan) +{ + unsigned short c, cs; + + PROXY_DATA_GET(obj, pd); + evas_object_table_pack_get(pd->rp->object, subobj, &c, NULL, &cs, NULL); + evas_object_table_pack(pd->rp->object, subobj, c, row, cs, rowspan); +} + /* Legacy API implementation */ #ifdef DEGUG diff --git a/src/lib/edje/efl_canvas_layout_part_invalid.eo b/src/lib/edje/efl_canvas_layout_part_invalid.eo index 48a4b7a589..62a1afcbe1 100644 --- a/src/lib/edje/efl_canvas_layout_part_invalid.eo +++ b/src/lib/edje/efl_canvas_layout_part_invalid.eo @@ -63,7 +63,8 @@ class @beta Efl.Canvas.Layout_Part_Invalid extends Efl.Canvas.Layout_Part implem Efl.Pack_Table.pack_table; Efl.Pack_Table.table_content_get; Efl.Pack_Table.table_contents_get; - Efl.Pack_Table.table_position { get; } + Efl.Pack_Table.table_cell_column { get; set; } + Efl.Pack_Table.table_cell_row { get; set; } Efl.Pack_Table.table_size { get; } Efl.Pack_Table.table_columns { get; } Efl.Pack_Table.table_rows { get; } diff --git a/src/lib/edje/efl_canvas_layout_part_table.eo b/src/lib/edje/efl_canvas_layout_part_table.eo index 2b9854cc6c..86dc0e7647 100644 --- a/src/lib/edje/efl_canvas_layout_part_table.eo +++ b/src/lib/edje/efl_canvas_layout_part_table.eo @@ -15,7 +15,8 @@ class @beta Efl.Canvas.Layout_Part_Table extends Efl.Canvas.Layout_Part implemen Efl.Pack_Table.pack_table; Efl.Pack_Table.table_content_get; Efl.Pack_Table.table_contents_get; - Efl.Pack_Table.table_position { get; } + Efl.Pack_Table.table_cell_column { get; set; } + Efl.Pack_Table.table_cell_row { get; set; } Efl.Pack_Table.table_size { get; } Efl.Pack_Table.table_columns { get; } Efl.Pack_Table.table_rows { get; } diff --git a/src/lib/efl/interfaces/efl_pack_table.eo b/src/lib/efl/interfaces/efl_pack_table.eo index 9214eb7c65..b2d4b31f1b 100644 --- a/src/lib/efl/interfaces/efl_pack_table.eo +++ b/src/lib/efl/interfaces/efl_pack_table.eo @@ -40,16 +40,27 @@ interface @beta Efl.Pack_Table extends Efl.Pack @in row: int; [[Row number]] } } - @property table_position { - [[Position and span of the $subobj in this container, may be modified to move the $subobj]] + @property table_cell_column { + [[column of the $subobj in this container.]] + set {} get { return: bool; [[Returns false if item is not a child]] } keys { subobj: Efl.Gfx.Entity; [[Child object]] } values { col: int; [[Column number]] - row: int; [[Row number]] colspan: int; [[Column span]] + } + } + @property table_cell_row { + [[row of the $subobj in this container.]] + set {} + get { return: bool; [[Returns false if item is not a child]] } + keys { + subobj: Efl.Gfx.Entity; [[Child object]] + } + values { + row: int; [[Row number]] rowspan: int; [[Row span]] } } diff --git a/src/lib/elementary/efl_ui_layout_pack.c b/src/lib/elementary/efl_ui_layout_pack.c index 6cd89f20a5..2c79d66266 100644 --- a/src/lib/elementary/efl_ui_layout_pack.c +++ b/src/lib/elementary/efl_ui_layout_pack.c @@ -322,24 +322,65 @@ _efl_ui_layout_part_table_efl_pack_table_table_contents_get(Eo *obj EINA_UNUSED, } EOLIAN static Eina_Bool -_efl_ui_layout_part_table_efl_pack_table_table_position_get(const Eo *obj EINA_UNUSED, Efl_Ui_Layout_Table_Data *pd, Efl_Gfx_Entity * subobj, int *col, int *row, int *colspan, int *rowspan) +_efl_ui_layout_part_table_efl_pack_table_table_cell_column_get(const Eo *obj EINA_UNUSED, Efl_Ui_Layout_Table_Data *pd, Efl_Gfx_Entity * subobj, int *col, int *colspan) { - unsigned short c, r, cs, rs; + unsigned short c, cs; Eina_Bool ret; edje_object_freeze(pd->obj); Eo *pack = (Eo *) edje_object_part_object_get(pd->obj, pd->part); edje_object_thaw(pd->obj); - ret = evas_object_table_pack_get(pack, subobj, &c, &r, &cs, &rs); + ret = evas_object_table_pack_get(pack, subobj, &c, NULL, &cs, NULL); if (col) *col = c; - if (row) *row = r; if (colspan) *colspan = cs; + + return ret; +} + +EOLIAN static void +_efl_ui_layout_part_table_efl_pack_table_table_cell_column_set(Eo *obj EINA_UNUSED, Efl_Ui_Layout_Table_Data *pd, Efl_Gfx_Entity * subobj, int col, int colspan) +{ + unsigned short r, rs; + + edje_object_freeze(pd->obj); + Eo *pack = (Eo *) edje_object_part_object_get(pd->obj, pd->part); + edje_object_thaw(pd->obj); + + evas_object_table_pack_get(pack, subobj, NULL, &r, NULL, &rs); + evas_object_table_pack(pack, subobj, col, r, colspan, rs); +} + +EOLIAN static Eina_Bool +_efl_ui_layout_part_table_efl_pack_table_table_cell_row_get(const Eo *obj EINA_UNUSED, Efl_Ui_Layout_Table_Data *pd, Efl_Gfx_Entity * subobj, int *row, int *rowspan) +{ + unsigned short r, rs; + Eina_Bool ret; + + edje_object_freeze(pd->obj); + Eo *pack = (Eo *) edje_object_part_object_get(pd->obj, pd->part); + edje_object_thaw(pd->obj); + + ret = evas_object_table_pack_get(pack, subobj, NULL, &r, NULL, &rs); + if (row) *row = r; if (rowspan) *rowspan = rs; return ret; } +EOLIAN static void +_efl_ui_layout_part_table_efl_pack_table_table_cell_row_set(Eo *obj EINA_UNUSED, Efl_Ui_Layout_Table_Data *pd, Efl_Gfx_Entity * subobj, int row, int rowspan) +{ + unsigned short c, cs; + + edje_object_freeze(pd->obj); + Eo *pack = (Eo *) edje_object_part_object_get(pd->obj, pd->part); + edje_object_thaw(pd->obj); + + evas_object_table_pack_get(pack, subobj, &c, NULL, &cs, NULL); + evas_object_table_pack(pack, subobj, c, row, cs, rowspan); +} + EOLIAN static void _efl_ui_layout_part_table_efl_pack_table_table_size_get(const Eo *obj EINA_UNUSED, Efl_Ui_Layout_Table_Data *pd, int *cols, int *rows) { diff --git a/src/lib/elementary/efl_ui_layout_part_table.eo b/src/lib/elementary/efl_ui_layout_part_table.eo index 2ffe6fae99..eca9fa43f9 100644 --- a/src/lib/elementary/efl_ui_layout_part_table.eo +++ b/src/lib/elementary/efl_ui_layout_part_table.eo @@ -27,7 +27,8 @@ class @beta Efl.Ui.Layout_Part_Table extends Efl.Object implements Efl.Pack_Tabl Efl.Pack_Table.pack_table; Efl.Pack_Table.table_content_get; Efl.Pack_Table.table_contents_get; - Efl.Pack_Table.table_position { get; } + Efl.Pack_Table.table_cell_column { get; set; } + Efl.Pack_Table.table_cell_row { get; set; } Efl.Pack_Table.table_size { get; } Efl.Pack_Table.table_columns { get; } Efl.Pack_Table.table_rows { get; } diff --git a/src/lib/elementary/efl_ui_table.c b/src/lib/elementary/efl_ui_table.c index ca2b5c009d..7ed1635db4 100644 --- a/src/lib/elementary/efl_ui_table.c +++ b/src/lib/elementary/efl_ui_table.c @@ -383,9 +383,9 @@ _efl_ui_table_efl_pack_table_pack_table(Eo *obj, Efl_Ui_Table_Data *pd, } EOLIAN static Eina_Bool -_efl_ui_table_efl_pack_table_table_position_get(const Eo *obj, Efl_Ui_Table_Data *pd, Evas_Object *subobj, int *col, int *row, int *colspan, int *rowspan) +_efl_ui_table_efl_pack_table_table_cell_column_get(const Eo *obj, Efl_Ui_Table_Data *pd, Evas_Object *subobj, int *col, int *colspan) { - int c = -1, r = -1, cs = 0, rs = 0; + int c = -1, cs = 0; Table_Item *gi; Eina_Bool ret = EINA_FALSE; @@ -393,19 +393,101 @@ _efl_ui_table_efl_pack_table_table_position_get(const Eo *obj, Efl_Ui_Table_Data if (gi) { c = gi->col; - r = gi->row; cs = gi->col_span; - rs = gi->row_span; ret = EINA_TRUE; } if (col) *col = c; - if (row) *row = r; if (colspan) *colspan = cs; + return ret; +} + +EOLIAN static void +_efl_ui_table_efl_pack_table_table_cell_column_set(Eo *obj, Efl_Ui_Table_Data *pd, Evas_Object *subobj, int col, int colspan) +{ + Table_Item *gi; + + gi = _efl_ui_table_item_date_get((Eo *)obj, pd, subobj); + if (!gi) + return; + + if (col < 0) col = 0; + if (colspan < 1) colspan = 1; + + if (((int64_t) col + (int64_t) colspan) > (int64_t) INT_MAX) + colspan = INT_MAX - col; + + if (pd->req_cols && ((col + colspan) > pd->req_cols)) + { + ERR("table requested size exceeded! packing in extra cell at " + "%d+%d (table cols: %d)", col, colspan, pd->req_cols); + } + + gi->col = col; + gi->col_span = colspan; + + if (gi->col > pd->last_col) + pd->linear_recalc = EINA_TRUE; + + if (pd->cols < gi->col + gi->col_span) + pd->cols = gi->col + gi->col_span; + + efl_pack_layout_request(obj); +} + +EOLIAN static Eina_Bool +_efl_ui_table_efl_pack_table_table_cell_row_get(const Eo *obj, Efl_Ui_Table_Data *pd, Evas_Object *subobj, int *row, int *rowspan) +{ + int r = -1, rs = 0; + Table_Item *gi; + Eina_Bool ret = EINA_FALSE; + + gi = _efl_ui_table_item_date_get((Eo *)obj, pd, subobj); + if (gi) + { + r = gi->row; + rs = gi->row_span; + ret = EINA_TRUE; + } + + if (row) *row = r; if (rowspan) *rowspan = rs; return ret; } +EOLIAN static void +_efl_ui_table_efl_pack_table_table_cell_row_set(Eo *obj, Efl_Ui_Table_Data *pd, Evas_Object *subobj, int row, int rowspan) +{ + Table_Item *gi; + + gi = _efl_ui_table_item_date_get((Eo *)obj, pd, subobj); + if (!gi) + return; + + if (row < 0) row = 0; + if (rowspan < 1) rowspan = 1; + + if (((int64_t) row + (int64_t) rowspan) > (int64_t) INT_MAX) + rowspan = INT_MAX - row; + + if (pd->req_rows && ((row + rowspan) > pd->req_rows)) + { + ERR("table requested size exceeded! packing in extra cell at " + "%d+%d (table rows: %d)", row, rowspan, pd->req_rows); + } + + gi->row = row; + gi->row_span = rowspan; + + if (gi->row > pd->last_row) + pd->linear_recalc = EINA_TRUE; + + if (pd->rows < gi->row + gi->row_span) + pd->rows = gi->row + gi->row_span; + + efl_pack_layout_request(obj); +} + EOLIAN static Efl_Gfx_Entity * _efl_ui_table_efl_pack_table_table_content_get(Eo *obj EINA_UNUSED, Efl_Ui_Table_Data *pd, int col, int row) { diff --git a/src/lib/elementary/efl_ui_table.eo b/src/lib/elementary/efl_ui_table.eo index c0648dc1a9..d1466868a6 100644 --- a/src/lib/elementary/efl_ui_table.eo +++ b/src/lib/elementary/efl_ui_table.eo @@ -47,7 +47,8 @@ class Efl.Ui.Table extends Efl.Ui.Widget implements Efl.Pack_Table, Efl.Pack_Lay Efl.Pack_Table.pack_table; Efl.Pack_Table.table_content_get; Efl.Pack_Table.table_contents_get; - Efl.Pack_Table.table_position { get; } + Efl.Pack_Table.table_cell_column { get; set; } + Efl.Pack_Table.table_cell_row { get; set; } Efl.Pack_Table.table_size { get; set; } Efl.Pack_Table.table_columns { get; set; } Efl.Pack_Table.table_rows { get; set; } diff --git a/src/tests/edje/edje_test_container.c b/src/tests/edje/edje_test_container.c index 11fc195e09..1ddeb86985 100644 --- a/src/tests/edje/edje_test_container.c +++ b/src/tests/edje/edje_test_container.c @@ -236,7 +236,8 @@ EFL_START_TEST(edje_test_table_eoapi) it = efl_content_iterate(efl_part(obj, "table")); EINA_ITERATOR_FOREACH(it, sobj) { - efl_pack_table_position_get(efl_part(obj, "table"), sobj, &k, &l, &cs, &rs); + efl_pack_table_cell_column_get(efl_part(obj, "table"), sobj, &k, &cs); + efl_pack_table_cell_column_get(efl_part(obj, "table"), sobj, &l, &rs); fail_if(cs != 1); fail_if(rs != 1); if (l >= 2)