diff --git a/legacy/elementary/src/bin/test.c b/legacy/elementary/src/bin/test.c index 3b894f6d08..91b5ccba71 100644 --- a/legacy/elementary/src/bin/test.c +++ b/legacy/elementary/src/bin/test.c @@ -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); diff --git a/legacy/elementary/src/bin/test_gengrid.c b/legacy/elementary/src/bin/test_gengrid.c index 90c6a172f7..5bd1ed8f98 100644 --- a/legacy/elementary/src/bin/test_gengrid.c +++ b/legacy/elementary/src/bin/test_gengrid.c @@ -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 diff --git a/legacy/elementary/src/lib/Elementary.h.in b/legacy/elementary/src/lib/Elementary.h.in index 8a8e32670c..00d40bad49 100644 --- a/legacy/elementary/src/lib/Elementary.h.in +++ b/legacy/elementary/src/lib/Elementary.h.in @@ -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: diff --git a/legacy/elementary/src/lib/elm_gengrid.c b/legacy/elementary/src/lib/elm_gengrid.c index 4fd07fcbe0..198a578577 100644 --- a/legacy/elementary/src/lib/elm_gengrid.c +++ b/legacy/elementary/src/lib/elm_gengrid.c @@ -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. *