Add more insertion types to Gengrid.

Gengrid now has modes append, prepend, insert_before and insert_after. To see
them working check the Gengrid 2 test on elementary_test.



SVN revision: 53242
This commit is contained in:
Rafael Fonseca 2010-10-10 21:05:23 +00:00
parent 484d79e3c0
commit 0090ce210c
4 changed files with 278 additions and 16 deletions

View File

@ -45,6 +45,7 @@ void test_genlist5(void *data, Evas_Object *obj, void *event_info);
void test_genlist6(void *data, Evas_Object *obj, void *event_info);
void test_table(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_pager(void *data, Evas_Object *obj, void *event_info);
void test_pager_slide(void *data, Evas_Object *obj, void *event_info);
void test_win_state(void *data, Evas_Object *obj, void *event_info);
@ -252,6 +253,7 @@ my_win_main(char *autorun)
ADD_TEST("Genlist 5", test_genlist5);
ADD_TEST("Genlist Tree", test_genlist6);
ADD_TEST("GenGrid", test_gengrid);
ADD_TEST("GenGrid 2", test_gengrid2);
ADD_TEST("Checks", test_check);
ADD_TEST("Radios", test_radio);
ADD_TEST("Pager", test_pager);

View File

@ -8,6 +8,19 @@ typedef struct _Testitem
int onoff;
} Testitem;
static const char *img[9] =
{
"panel_01.jpg",
"plant_01.jpg",
"rock_01.jpg",
"rock_02.jpg",
"sky_01.jpg",
"sky_02.jpg",
"sky_03.jpg",
"sky_04.jpg",
"wood_01.jpg",
};
static Elm_Gengrid_Item_Class gic;
static void
@ -125,18 +138,6 @@ test_gengrid(void *data, Evas_Object *obj, void *event_info)
static Testitem ti[144];
int i, n;
char buf[PATH_MAX];
const char *img[9] =
{
"panel_01.jpg",
"plant_01.jpg",
"rock_01.jpg",
"rock_02.jpg",
"sky_01.jpg",
"sky_02.jpg",
"sky_03.jpg",
"sky_04.jpg",
"wood_01.jpg",
};
win = elm_win_add(NULL, "grid", ELM_WIN_BASIC);
elm_win_title_set(win, "Grid");
@ -185,4 +186,135 @@ test_gengrid(void *data, Evas_Object *obj, void *event_info)
evas_object_resize(win, 600, 600);
evas_object_show(win);
}
static void
_before_bt_clicked(void *data, Evas_Object *obj, void *event_info)
{
Testitem *ti;
Evas_Object *grid = data;
Elm_Gengrid_Item *sel;
char buf[PATH_MAX];
sel = elm_gengrid_selected_item_get(grid);
snprintf(buf, sizeof(buf), "%s/images/%s", PACKAGE_DATA_DIR, img[rand() % 9]);
ti = malloc(sizeof(*ti));
ti->mode = 0;
ti->path = eina_stringshare_add(buf);
ti->item = elm_gengrid_item_insert_before(grid, &gic, ti, sel, grid_sel,
NULL);
}
static void
_after_bt_clicked(void *data, Evas_Object *obj, void *event_info)
{
Testitem *ti;
Evas_Object *grid = data;
Elm_Gengrid_Item *sel;
char buf[PATH_MAX];
sel = elm_gengrid_selected_item_get(grid);
snprintf(buf, sizeof(buf), "%s/images/%s", PACKAGE_DATA_DIR, img[rand() % 9]);
ti = malloc(sizeof(*ti));
ti->mode = 0;
ti->path = eina_stringshare_add(buf);
ti->item = elm_gengrid_item_insert_after(grid, &gic, ti, sel, grid_sel,
NULL);
}
static void
_prepend_bt_clicked(void *data, Evas_Object *obj, void *event_info)
{
Testitem *ti;
Evas_Object *grid = data;
char buf[PATH_MAX];
snprintf(buf, sizeof(buf), "%s/images/%s", PACKAGE_DATA_DIR, img[rand() % 9]);
ti = malloc(sizeof(*ti));
ti->mode = 0;
ti->path = eina_stringshare_add(buf);
ti->item = elm_gengrid_item_prepend(grid, &gic, ti, grid_sel, NULL);
}
static void
_append_bt_clicked(void *data, Evas_Object *obj, void *event_info)
{
Testitem *ti;
Evas_Object *grid = data;
char buf[PATH_MAX];
snprintf(buf, sizeof(buf), "%s/images/%s", PACKAGE_DATA_DIR, img[rand() % 9]);
ti = malloc(sizeof(*ti));
ti->mode = 0;
ti->path = eina_stringshare_add(buf);
ti->item = elm_gengrid_item_append(grid, &gic, ti, grid_sel, NULL);
}
void
test_gengrid2(void *data, Evas_Object *obj, void *event_info)
{
Evas_Object *win, *bg, *grid, *bx, *hbx, *bt;
win = elm_win_add(NULL, "grid2", ELM_WIN_BASIC);
elm_win_title_set(win, "Grid2");
elm_win_autodel_set(win, 1);
bg = elm_bg_add(win);
evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(win, bg);
evas_object_show(bg);
bx = elm_box_add(win);
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_win_resize_object_add(win, bx);
evas_object_show(bx);
grid = elm_gengrid_add(win);
elm_gengrid_item_size_set(grid, 150, 150);
elm_gengrid_horizontal_set(grid, EINA_FALSE);
elm_gengrid_multi_select_set(grid, EINA_FALSE);
evas_object_smart_callback_add(grid, "selected", grid_selected, NULL);
evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_min_set(grid, 600, 500);
elm_box_pack_end(bx, grid);
evas_object_show(grid);
hbx = elm_box_add(win);
evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
elm_box_horizontal_set(hbx, EINA_TRUE);
elm_box_pack_end(bx, hbx);
evas_object_show(hbx);
bt = elm_button_add(win);
elm_button_label_set(bt, "Append");
evas_object_smart_callback_add(bt, "clicked", _append_bt_clicked, grid);
elm_box_pack_end(hbx, bt);
evas_object_show(bt);
bt = elm_button_add(win);
elm_button_label_set(bt, "Prepend");
evas_object_smart_callback_add(bt, "clicked", _prepend_bt_clicked, grid);
elm_box_pack_end(hbx, bt);
evas_object_show(bt);
bt = elm_button_add(win);
elm_button_label_set(bt, "Insert before");
evas_object_smart_callback_add(bt, "clicked", _before_bt_clicked, grid);
elm_box_pack_end(hbx, bt);
evas_object_show(bt);
bt = elm_button_add(win);
elm_button_label_set(bt, "Insert after");
evas_object_smart_callback_add(bt, "clicked", _after_bt_clicked, grid);
elm_box_pack_end(hbx, bt);
evas_object_show(bt);
gic.item_style = "default";
gic.func.label_get = grid_label_get;
gic.func.icon_get = grid_icon_get;
gic.func.state_get = grid_state_get;
gic.func.del = grid_del;
evas_object_resize(win, 600, 600);
evas_object_show(win);
}
#endif

View File

@ -708,7 +708,10 @@ extern "C" {
EAPI Elm_Gengrid_Item *elm_gengrid_selected_item_get(const Evas_Object *obj);
EAPI const Eina_List *elm_gengrid_selected_items_get(const Evas_Object *obj);
EAPI const Eina_List *elm_gengrid_items_get(const Evas_Object *obj);
EAPI Elm_Gengrid_Item *elm_gengrid_item_append(Evas_Object *obj, const Elm_Gengrid_Item_Class *gcc, const void *data, Evas_Smart_Cb func, const void *func_data);
EAPI Elm_Gengrid_Item *elm_gengrid_item_append(Evas_Object *obj, const Elm_Gengrid_Item_Class *gic, const void *data, Evas_Smart_Cb func, const void *func_data);
EAPI Elm_Gengrid_Item *elm_gengrid_item_prepend(Evas_Object *obj, const Elm_Gengrid_Item_Class *gic, const void *data, Evas_Smart_Cb func, const void *func_data);
EAPI Elm_Gengrid_Item *elm_gengrid_item_insert_before(Evas_Object *obj, const Elm_Gengrid_Item_Class *gic, const void *data, const Elm_Gengrid_Item *relative, Evas_Smart_Cb func, const void *func_data);
EAPI Elm_Gengrid_Item *elm_gengrid_item_insert_after(Evas_Object *obj, const Elm_Gengrid_Item_Class *gic, const void *data, const Elm_Gengrid_Item *relative, Evas_Smart_Cb func, const void *func_data);
EAPI void elm_gengrid_item_show(Elm_Gengrid_Item *item);
EAPI void elm_gengrid_item_bring_in(Elm_Gengrid_Item *item);
/* smart callbacks called:

View File

@ -1472,14 +1472,17 @@ elm_gengrid_align_get(const Evas_Object *obj, double *align_x, double *align_y)
* @param func_data Data passed to @p func above.
* @return A handle to the item added or NULL if not possible.
*
* @see elm_gengrid_item_prepend()
* @see elm_gengrid_item_insert_before()
* @see elm_gengrid_item_insert_after()
* @see elm_gengrid_item_del()
*
* @ingroup Gengrid
*/
EAPI Elm_Gengrid_Item *
elm_gengrid_item_append(Evas_Object *obj, const Elm_Gengrid_Item_Class *gic,
const void *data, Evas_Smart_Cb func,
const void *func_data)
const void *data, Evas_Smart_Cb func,
const void *func_data)
{
Elm_Gengrid_Item *item;
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
@ -1488,7 +1491,6 @@ elm_gengrid_item_append(Evas_Object *obj, const Elm_Gengrid_Item_Class *gic,
item = _item_create(wd, gic, data, func, func_data);
if (!item) return NULL;
wd->items = eina_list_append(wd->items, item);
if (wd->calc_job) ecore_job_del(wd->calc_job);
@ -1497,6 +1499,129 @@ elm_gengrid_item_append(Evas_Object *obj, const Elm_Gengrid_Item_Class *gic,
return item;
}
/**
* Add item at start of the Gengrid.
*
* This adds an item to the beginning of the grid.
*
* @param obj The Gengrid object.
* @param gic The item class for the item.
* @param data The item data.
* @param func Convenience function called when item is selected.
* @param func_data Data passed to @p func above.
* @return A handle to the item added or NULL if not possible.
*
* @see elm_gengrid_item_append()
* @see elm_gengrid_item_insert_before()
* @see elm_gengrid_item_insert_after()
* @see elm_gengrid_item_del()
*
* @ingroup Gengrid
*/
EAPI Elm_Gengrid_Item *
elm_gengrid_item_prepend(Evas_Object *obj, const Elm_Gengrid_Item_Class *gic,
const void *data, Evas_Smart_Cb func,
const void *func_data)
{
Elm_Gengrid_Item *item;
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return NULL;
item = _item_create(wd, gic, data, func, func_data);
if (!item) return NULL;
wd->items = eina_list_prepend(wd->items, item);
if (wd->calc_job) ecore_job_del(wd->calc_job);
wd->calc_job = ecore_job_add(_calc_job, wd);
return item;
}
/**
* Insert and item before another in the Gengrid.
*
* This inserts an item before another in the grid.
*
* @param obj The Gengrid object.
* @param gic The item class for the item.
* @param data The item data.
* @param relative The item to which insert before.
* @param func Convenience function called when item is selected.
* @param func_data Data passed to @p func above.
* @return A handle to the item added or NULL if not possible.
*
* @see elm_gengrid_item_append()
* @see elm_gengrid_item_prepend()
* @see elm_gengrid_item_insert_after()
* @see elm_gengrid_item_del()
*
* @ingroup Gengrid
*/
EAPI Elm_Gengrid_Item *
elm_gengrid_item_insert_before(Evas_Object *obj,
const Elm_Gengrid_Item_Class *gic,
const void *data,
const Elm_Gengrid_Item *relative,
Evas_Smart_Cb func, const void *func_data)
{
Elm_Gengrid_Item *item;
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return NULL;
item = _item_create(wd, gic, data, func, func_data);
if (!item) return NULL;
wd->items = eina_list_prepend_relative(wd->items, item, relative);
if (wd->calc_job) ecore_job_del(wd->calc_job);
wd->calc_job = ecore_job_add(_calc_job, wd);
return item;
}
/**
* Insert and item after another in the Gengrid.
*
* This inserts an item after another in the grid.
*
* @param obj The Gengrid object.
* @param gic The item class for the item.
* @param data The item data.
* @param relative The item to which insert after.
* @param func Convenience function called when item is selected.
* @param func_data Data passed to @p func above.
* @return A handle to the item added or NULL if not possible.
*
* @see elm_gengrid_item_append()
* @see elm_gengrid_item_prepend()
* @see elm_gengrid_item_insert_before()
* @see elm_gengrid_item_del()
*
* @ingroup Gengrid
*/
EAPI Elm_Gengrid_Item *
elm_gengrid_item_insert_after(Evas_Object *obj,
const Elm_Gengrid_Item_Class *gic,
const void *data,
const Elm_Gengrid_Item *relative,
Evas_Smart_Cb func, const void *func_data)
{
Elm_Gengrid_Item *item;
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return NULL;
item = _item_create(wd, gic, data, func, func_data);
if (!item) return NULL;
wd->items = eina_list_append_relative(wd->items, item, relative);
if (wd->calc_job) ecore_job_del(wd->calc_job);
wd->calc_job = ecore_job_add(_calc_job, wd);
return item;
}
/**
* Remove a item from the Gengrid.
*