Elm_test/Grid: Add linear API test for Efl.Ui.Grid

At this point, it proves that the grid API does not work.
Some things still need to be implemented or fixed.
This commit is contained in:
Jean-Philippe Andre 2016-04-14 14:12:16 +09:00
parent 4b7ca8846d
commit 86a59a3a24
6 changed files with 194 additions and 34 deletions

View File

@ -141,6 +141,7 @@ void test_table6(void *data, Evas_Object *obj, void *event_info);
void test_table7(void *data, Evas_Object *obj, void *event_info);
void test_table8(void *data, Evas_Object *obj, void *event_info);
void test_ui_grid(void *data, Evas_Object *obj, void *event_info);
void test_ui_grid_linear(void *data, Evas_Object *obj, void *event_info);
void test_gengrid(void *data, Evas_Object *obj, void *event_info);
void test_gengrid2(void *data, Evas_Object *obj, void *event_info);
void test_gengrid3(void *data, Evas_Object *obj, void *event_info);
@ -594,6 +595,7 @@ add_tests:
//------------------------------//
ADD_TEST(NULL, "New Containers", "Ui.Box", test_ui_box);
ADD_TEST(NULL, "New Containers", "Ui.Grid", test_ui_grid);
ADD_TEST(NULL, "New Containers", "Ui.Grid Linear", test_ui_grid_linear);
//------------------------------//
ADD_TEST(NULL, "Entries", "Entry", test_entry);

View File

@ -353,3 +353,149 @@ test_ui_grid(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_i
evas_object_show(win);
}
static const char *
btn_text(const char *str)
{
static char buf[64];
static int id = 0;
sprintf(buf, "%s %d", str ?: "item", ++id);
return buf;
}
static void
remove_cb(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
{
eo_unref(obj);
}
static void
append_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Eo *grid = data;
Eo *o = elm_button_add(grid);
elm_object_text_set(o, btn_text("appended"));
evas_object_smart_callback_add(o, "clicked", remove_cb, grid);
elm_object_tooltip_text_set(o, "Click to unpack");
efl_pack_end(grid, o);
efl_gfx_visible_set(o, 1);
}
static void
rmrand_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Eo *grid = data, *o;
int cols, rows;
efl_pack_grid_size_get(o, &cols, &rows);
if (!cols || !rows) return;
o = efl_pack_grid_child_at(grid, rand() % cols, rand() % rows);
eo_unref(o);
}
static void
clear_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Eo *grid = data;
efl_pack_clear(grid);
}
void
test_ui_grid_linear(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
Evas_Object *win, *o, *vbox, *f, *hbox, *grid, *ico;
win = elm_win_util_standard_add("ui-grid-linear", "Efl.Ui.Grid Linear APIs");
elm_win_autodel_set(win, EINA_TRUE);
efl_gfx_size_set(win, 600, 400);
vbox = eo_add(EFL_UI_BOX_CLASS, win);
efl_pack_padding_set(vbox, 10, 10, EINA_TRUE);
efl_pack_direction_set(vbox, EFL_ORIENT_DOWN);
evas_object_size_hint_weight_set(vbox, 1, 1);
evas_object_size_hint_padding_set(vbox, 5, 5, 5, 5);
elm_win_resize_object_add(win, vbox);
efl_gfx_visible_set(vbox, 1);
// create here to pass in cb
grid = eo_add(EFL_UI_GRID_CLASS, win);
/* controls */
f = elm_frame_add(win);
elm_object_text_set(f, "Controls");
evas_object_size_hint_align_set(f, -1, -1);
evas_object_size_hint_weight_set(f, 1, 0);
efl_pack(vbox, f);
efl_gfx_visible_set(f, 1);
hbox = eo_add(EFL_UI_BOX_CLASS, win);
elm_object_content_set(f, hbox);
efl_pack_padding_set(hbox, 5, 0, EINA_TRUE);
efl_gfx_visible_set(hbox, 1);
ico = elm_icon_add(win);
elm_icon_standard_set(ico, "list-add");
o = elm_button_add(win);
elm_object_content_set(o, ico);
elm_object_text_set(o, "Append");
evas_object_smart_callback_add(o, "clicked", append_cb, grid);
efl_pack(hbox, o);
efl_gfx_visible_set(o, 1);
ico = elm_icon_add(win);
elm_icon_standard_set(ico, "edit-delete");
o = elm_button_add(win);
elm_object_content_set(o, ico);
elm_object_text_set(o, "Remove random");
evas_object_smart_callback_add(o, "clicked", rmrand_cb, grid);
efl_pack(hbox, o);
efl_gfx_visible_set(o, 1);
ico = elm_icon_add(win);
elm_icon_standard_set(ico, "edit-clear-all");
o = elm_button_add(win);
elm_object_content_set(o, ico);
elm_object_text_set(o, "Clear");
evas_object_smart_callback_add(o, "clicked", clear_cb, grid);
efl_pack(hbox, o);
efl_gfx_visible_set(o, 1);
/* contents */
f = elm_frame_add(win);
elm_object_text_set(f, "Contents");
evas_object_size_hint_align_set(f, -1, -1);
evas_object_size_hint_weight_set(f, 1, 1);
efl_pack(vbox, f);
efl_gfx_visible_set(f, 1);
efl_pack_max_span_set(grid, 4);
efl_pack_directions_set(grid, EFL_ORIENT_RIGHT, EFL_ORIENT_DOWN);
evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_object_content_set(f, grid);
evas_object_show(grid);
o = elm_button_add(win);
elm_object_text_set(o, btn_text(NULL));
evas_object_smart_callback_add(o, "clicked", remove_cb, grid);
efl_pack(grid, o);
efl_gfx_visible_set(o, 1);
o = elm_button_add(win);
elm_object_text_set(o, btn_text(NULL));
evas_object_smart_callback_add(o, "clicked", remove_cb, grid);
efl_pack(grid, o);
efl_gfx_visible_set(o, 1);
o = elm_button_add(win);
elm_object_text_set(o, btn_text(NULL));
evas_object_smart_callback_add(o, "clicked", remove_cb, grid);
efl_pack(grid, o);
efl_gfx_visible_set(o, 1);
evas_object_show(win);
}

View File

@ -25,6 +25,14 @@ interface Efl.Pack_Grid (Efl.Pack_Linear)
@in row: int;
}
}
grid_child_at {
[[returns the top child at position. see also grid_children_at]]
return: Efl.Pack_Item*;
params {
@in col: int;
@in row: int;
}
}
@property grid_child_position {
[[position and span of the $subobj in this container, may be modified to move the $subobj]]
set { [[same as grid_pack]] }

View File

@ -1,14 +1,6 @@
/* FIXME: this is not necessary - just use efl.gfx.base */
interface Efl.Pack_Item
{
[[Describes an item that can be packed in a container.]]
legacy_prefix: null;
methods {
/* FIXME: is this same as eo_parent? shouldn't it be? */
@property container {
get {}
values {
obj: const(Eo.Base)*; /* FIXME: this is an Efl.Pack* */
}
}
}
}

View File

@ -22,7 +22,7 @@ struct _Grid_Item
Efl_Pack_Item *object;
int colspan, rowspan;
int col, row; // if linear, this may change
int col, row;
Eina_Bool linear : 1;
};
@ -53,7 +53,7 @@ struct _Grid_Item_Iterator
static inline Eina_Bool
_horiz(Efl_Orient dir)
{
return dir % 180 == 0;
return dir % 180 == EFL_ORIENT_RIGHT;
}
EOLIAN static Eina_Bool
@ -250,6 +250,8 @@ _efl_ui_grid_eo_base_constructor(Eo *obj, Efl_Ui_Grid_Data *pd)
pd->dir1 = EFL_ORIENT_RIGHT;
pd->dir2 = EFL_ORIENT_DOWN;
pd->lastcol = -1;
pd->lastrow = -1;
return obj;
}
@ -309,10 +311,12 @@ _efl_ui_grid_efl_pack_grid_pack_grid(Eo *obj, Efl_Ui_Grid_Data *pd, Efl_Pack_Ite
if ((row + rowspan) >= 0x7ffff)
WRN("row + rowspan getting rather large (>32767)");
if ((col + colspan - 1) > pd->lastcol)
pd->lastcol = col + colspan;
if ((row + rowspan - 1) > pd->lastrow)
pd->lastrow = row + rowspan;
if ((pd->lastcol < (col + colspan - 1)) ||
(pd->lastrow < (row + rowspan - 1)))
{
pd->lastcol = col + colspan - 1;
pd->lastrow = row + rowspan - 1;
}
elm_widget_sub_object_add(obj, subobj);
evas_object_table_pack(wd->resize_obj, subobj, col, row, colspan, rowspan);
@ -338,15 +342,24 @@ _efl_ui_grid_efl_pack_grid_grid_child_position_get(Eo *obj, Efl_Ui_Grid_Data *pd
if (rowspan) *rowspan = irowspan;
}
EOLIAN static Efl_Pack_Item *
_efl_ui_grid_efl_pack_grid_grid_child_at(Eo *obj, Efl_Ui_Grid_Data *pd EINA_UNUSED, int col, int row)
{
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, NULL);
return evas_object_table_child_get(wd->resize_obj, col, row);
}
EOLIAN static Eina_Bool
_efl_ui_grid_efl_pack_unpack(Eo *obj, Efl_Ui_Grid_Data *pd EINA_UNUSED, Efl_Pack_Item *subobj)
{
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
if (elm_widget_sub_object_del(obj, subobj))
if (evas_object_table_unpack(wd->resize_obj, subobj))
{
evas_object_table_unpack(wd->resize_obj, subobj);
return EINA_TRUE;
if (elm_widget_sub_object_del(obj, subobj))
return EINA_TRUE;
return EINA_FALSE;
}
return EINA_FALSE;
@ -440,19 +453,17 @@ _efl_ui_grid_efl_pack_contents_iterate(Eo *obj, Efl_Ui_Grid_Data *pd EINA_UNUSED
EOLIAN static int
_efl_ui_grid_efl_pack_contents_count(Eo *obj, Efl_Ui_Grid_Data *pd EINA_UNUSED)
{
/* FIXME */
Eina_Iterator *it;
Efl_Pack_Item *pack;
int k = 0;
Eina_List *li;
int count;
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, 0);
it = evas_object_table_iterator_new(obj);
EINA_ITERATOR_FOREACH(it, pack)
k++;
eina_iterator_free(it);
/* FIXME */
li = evas_object_table_children_get(wd->resize_obj);
count = eina_list_count(li);
eina_list_free(li);
return k;
return count;
}
EOLIAN static Eina_List *
@ -616,6 +627,7 @@ _efl_ui_grid_efl_pack_linear_pack_end(Eo *obj, Efl_Ui_Grid_Data *pd, Efl_Pack_It
col = 0;
row++;
}
if (row < 0) row = 0;
}
else
{
@ -625,9 +637,12 @@ _efl_ui_grid_efl_pack_linear_pack_end(Eo *obj, Efl_Ui_Grid_Data *pd, Efl_Pack_It
row = 0;
col++;
}
if (col < 0) col = 0;
}
DBG("packing new obj at %d,%d", col, row);
pd->lastcol = col;
pd->lastrow = row;
efl_pack_grid(obj, subobj, col, row, 1, 1);
}

View File

@ -27,6 +27,7 @@ class Efl.Ui.Grid (Elm.Widget, Efl.Pack_Grid)
Efl.Pack.layout_request;
Efl.Pack_Grid.pack_grid;
Efl.Pack_Grid.grid_children_at;
Efl.Pack_Grid.grid_child_at;
Efl.Pack_Grid.grid_child_position.set;
Efl.Pack_Grid.grid_child_position.get;
Efl.Pack_Grid.grid_size.set;
@ -37,14 +38,10 @@ class Efl.Ui.Grid (Elm.Widget, Efl.Pack_Grid)
Efl.Pack_Grid.columns.get;
Efl.Pack_Grid.rows.set;
Efl.Pack_Grid.rows.get;
Efl.Pack_Linear.pack_end;
//Efl.Pack_Linear.child_at.get;
//Efl.Pack_Linear.child_at.set;
//Efl.Pack_Linear.child_index.get;
//Efl.Pack_Linear.child_index.set;
Efl.Pack_Linear.direction.set;
Efl.Pack_Linear.direction.get;
Efl.Pack_Grid.directions.set;
Efl.Pack_Grid.directions.get;
Efl.Pack_Linear.pack_end;
Efl.Pack_Linear.direction.set;
Efl.Pack_Linear.direction.get;
}
}