cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=aecb3a4bb27ec9a83e5f69aea323743bc5d57360

commit aecb3a4bb27ec9a83e5f69aea323743bc5d57360
Author: Marcel Hollerbach <m...@marcel-hollerbach.de>
Date:   Tue Sep 17 16:25:37 2019 +0200

    efl_ui_layout_part_table: implement Efl.Pack.pack API
    
    this api was missing, the pack method here is behaving in the same
    manner as Efl.Ui.Table.
    
    Reviewed-by: Cedric BAIL <cedric.b...@free.fr>
    Differential Revision: https://phab.enlightenment.org/D9992
---
 src/lib/elementary/efl_ui_layout_pack.c        | 42 ++++++++++++++++++++++++++
 src/lib/elementary/efl_ui_layout_part_table.eo |  1 +
 2 files changed, 43 insertions(+)

diff --git a/src/lib/elementary/efl_ui_layout_pack.c 
b/src/lib/elementary/efl_ui_layout_pack.c
index 2c79d66266..646ef3e483 100644
--- a/src/lib/elementary/efl_ui_layout_pack.c
+++ b/src/lib/elementary/efl_ui_layout_pack.c
@@ -274,6 +274,48 @@ _efl_ui_layout_part_table_efl_pack_unpack(Eo *obj 
EINA_UNUSED, Efl_Ui_Layout_Tab
    return _efl_ui_layout_table_unpack(pd->obj, pd->sd, pd->part, subobj) == 
subobj;
 }
 
+
+EOLIAN static Eina_Bool
+_efl_ui_layout_part_table_efl_pack_pack(Eo *obj, Efl_Ui_Layout_Table_Data *pd, 
Efl_Gfx_Entity *subobj)
+{
+   int last_col, last_row;
+   int req_cols, req_rows;
+   Eina_Iterator *iter;
+   Eo *pack, *element;
+
+   pack = (Eo *) edje_object_part_object_get(pd->obj, pd->part);
+
+
+   //first lookup what the most lower / right element is
+   iter = evas_object_table_iterator_new(pack);
+   EINA_ITERATOR_FOREACH(iter, element)
+     {
+        unsigned short item_col, item_row;
+
+        evas_object_table_pack_get(pack, element, &item_col, &item_row, NULL, 
NULL);
+        if (item_row > last_row ||
+            (item_row == last_row && item_col > last_col))
+          {
+             last_col = item_col;
+             last_row = item_row;
+          }
+     }
+   eina_iterator_free(iter);
+
+   //now add the new element right to it, or do a linebreak and place
+   //that element in the next column on the first element
+   evas_object_table_col_row_size_get(pack, &req_cols, &req_rows);
+   last_col ++;
+   if (last_col > req_cols)
+     {
+        last_row ++;
+        last_col = 0;
+     }
+
+   return _efl_ui_layout_table_pack(obj, pd->sd, pd->part, subobj, last_col, 
last_row, 1, 1);
+}
+
+
 EOLIAN static Eina_Bool
 _efl_ui_layout_part_table_efl_pack_table_pack_table(Eo *obj EINA_UNUSED, 
Efl_Ui_Layout_Table_Data *pd, Efl_Gfx_Entity *subobj, int col, int row, int 
colspan, int rowspan)
 {
diff --git a/src/lib/elementary/efl_ui_layout_part_table.eo 
b/src/lib/elementary/efl_ui_layout_part_table.eo
index eca9fa43f9..9c9482cf1e 100644
--- a/src/lib/elementary/efl_ui_layout_part_table.eo
+++ b/src/lib/elementary/efl_ui_layout_part_table.eo
@@ -21,6 +21,7 @@ class @beta Efl.Ui.Layout_Part_Table extends Efl.Object 
implements Efl.Pack_Tabl
       Efl.Object.destructor;
       Efl.Container.content_iterate;
       Efl.Container.content_count;
+      Efl.Pack.pack;
       Efl.Pack.pack_clear;
       Efl.Pack.unpack_all;
       Efl.Pack.unpack;

-- 


Reply via email to