diff options
author | Lukasz Stanislawski <l.stanislaws@samsung.com> | 2016-01-04 14:05:29 -0800 |
---|---|---|
committer | Cedric BAIL <cedric@osg.samsung.com> | 2016-01-04 14:05:32 -0800 |
commit | 9230a3d31e5428e7f3c69ff6dde8c6f0c59403fc (patch) | |
tree | cf8ed9bc3fcd991fdc249de1a225eb3f3b5d9691 | |
parent | 34d2c8e1250c21e06593efba67eeefc97a216d98 (diff) | |
download | elementary-9230a3d31e5428e7f3c69ff6dde8c6f0c59403fc.tar.gz |
genlist: new SCROLLTO_BOTTOM alignment
Summary:
Add new scrollto type allowing to align genlist item to bottom of viewport.
Feature compleates and closes list of all alignment types for genlist items.
@feature
Test Plan: elementary_test => Genlist Show/Bring
Reviewers: cedric, seoz, SanghyeonLee
Subscribers: seoz
Differential Revision: https://phab.enlightenment.org/D3447
Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
-rw-r--r-- | src/bin/test.c | 2 | ||||
-rw-r--r-- | src/bin/test_genlist.c | 153 | ||||
-rw-r--r-- | src/lib/elm_genlist.c | 4 | ||||
-rw-r--r-- | src/lib/elm_genlist_item.eo | 3 |
4 files changed, 161 insertions, 1 deletions
diff --git a/src/bin/test.c b/src/bin/test.c index 8019ac046..53f419d5b 100644 --- a/src/bin/test.c +++ b/src/bin/test.c @@ -124,6 +124,7 @@ void test_genlist_item_styles(void *data, Evas_Object *obj, void *event_info); void test_genlist_multi_select(void *data, Evas_Object *obj, void *event_info); void test_genlist_del(void *data, Evas_Object *obj, void *event_info); void test_genlist_filter(void *data, Evas_Object *obj, void *event_info); +void test_genlist_show_bring(void *data, Evas_Object *obj, void *event_info); void test_gesture_layer(void *data, Evas_Object *obj, void *event_info); void test_gesture_layer2(void *data, Evas_Object *obj, void *event_info); void test_gesture_layer3(void *data, Evas_Object *obj, void *event_info); @@ -695,6 +696,7 @@ add_tests: ADD_TEST(NULL, "Lists - Genlist", "Genlist Multi Select", test_genlist_multi_select); ADD_TEST(NULL, "Lists - Genlist", "Genlist Del", test_genlist_del); ADD_TEST(NULL, "Lists - Genlist", "Genlist Filter", test_genlist_filter); + ADD_TEST(NULL, "Lists - Genlist", "Genlist Show/Bring", test_genlist_show_bring); //------------------------------// diff --git a/src/bin/test_genlist.c b/src/bin/test_genlist.c index 36cd529a9..9dcebc19e 100644 --- a/src/bin/test_genlist.c +++ b/src/bin/test_genlist.c @@ -21,6 +21,7 @@ struct _api_data void *gl; void *filter_data; /* The data used for filtering */ + int scrollto; }; typedef struct _api_data api_data; @@ -5080,3 +5081,155 @@ test_genlist_filter(void *data EINA_UNUSED, evas_object_smart_callback_add(entry, "changed,user", _entry_change_cb, api); } +static void +_rd_changed_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) +{ + api_data *ad = data; + ad->scrollto = elm_radio_state_value_get(obj); +} + +static Evas_Object * +_scrollto_mode_frame_new(Evas_Object *win, void *data) +{ + Evas_Object *fr, *bx, *rd, *rdg; + api_data *sd = data; + + fr = elm_frame_add(win); + elm_object_text_set(fr, "Scrollto Mode"); + evas_object_show(fr); + + bx = elm_box_add(win); + elm_object_content_set(fr, bx); + evas_object_show(bx); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 0); + elm_object_text_set(rd, "SCROLLTO_NONE"); + evas_object_smart_callback_add(rd, "changed", _rd_changed_cb, sd); + evas_object_show(rd); + elm_box_pack_end(bx, rd); + rdg = rd; + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 1); + elm_object_text_set(rd, "SCROLLTO_IN"); + elm_radio_group_add(rd, rdg); + evas_object_smart_callback_add(rd, "changed", _rd_changed_cb, sd); + evas_object_show(rd); + elm_box_pack_end(bx, rd); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 2); + elm_object_text_set(rd, "SCROLLTO_TOP"); + elm_radio_group_add(rd, rdg); + evas_object_smart_callback_add(rd, "changed", _rd_changed_cb, sd); + evas_object_show(rd); + elm_box_pack_end(bx, rd); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 4); + elm_object_text_set(rd, "SCROLLTO_MIDDLE"); + elm_radio_group_add(rd, rdg); + evas_object_smart_callback_add(rd, "changed", _rd_changed_cb, sd); + evas_object_show(rd); + elm_box_pack_end(bx, rd); + + rd = elm_radio_add(win); + elm_radio_state_value_set(rd, 8); + elm_object_text_set(rd, "SCROLLTO_BOTTOM"); + elm_radio_group_add(rd, rdg); + evas_object_smart_callback_add(rd, "changed", _rd_changed_cb, sd); + evas_object_show(rd); + elm_box_pack_end(bx, rd); + + return fr; +} + +void +_scrollto_item_show(void *data, + Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + api_data *api = data; + Elm_Object_Item *it = elm_genlist_selected_item_get(api->gl); + elm_genlist_item_show(it, api->scrollto); +} + +void +_scrollto_item_bring(void *data, + Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + api_data *api = data; + Elm_Object_Item *it = elm_genlist_selected_item_get(api->gl); + elm_genlist_item_bring_in(it, api->scrollto); +} + +void +test_genlist_show_bring(void *data EINA_UNUSED, + Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Evas_Object *win, *gl, *bt_show, *bt_bring, *bx, *bxx, *fr; + Elm_Object_Item *gli; + int i, max; + api_data *api = calloc(1, sizeof(api_data)); + + win = elm_win_util_standard_add("genlist", "Genlist Item Show/Bring"); + elm_win_autodel_set(win, EINA_TRUE); + evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _cleanup_cb, api); + + bxx = elm_box_add(win); + evas_object_size_hint_weight_set(bxx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, bxx); + evas_object_show(bxx); + + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(bx); + elm_box_pack_end(bxx, bx); + + gl = elm_genlist_add(win); + evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, gl); + evas_object_show(gl); + api->gl = gl; + + api->itc1 = elm_genlist_item_class_new(); + api->itc1->item_style = "default"; + api->itc1->func.text_get = gl_text_get1; + api->itc1->func.content_get = gl_content_get; + api->itc1->func.state_get = NULL; + api->itc1->func.del = NULL; + + bt_show = elm_button_add(win); + elm_object_text_set(bt_show, "Show"); + evas_object_smart_callback_add(bt_show, "clicked", _scrollto_item_show, api); + evas_object_show(bt_show); + elm_box_pack_end(bx, bt_show); + + bt_bring = elm_button_add(win); + elm_object_text_set(bt_bring, "Bring"); + evas_object_smart_callback_add(bt_bring, "clicked", _scrollto_item_bring, api); + evas_object_show(bt_bring); + elm_box_pack_end(bx, bt_bring); + + fr = _scrollto_mode_frame_new(win, api); + elm_box_pack_end(bx, fr); + + max = 2000; + for (i = 0; i < max; i++) + elm_genlist_item_append(gl, api->itc1, (void*)(uintptr_t)i, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + + elm_genlist_item_class_free(api->itc1); + gli = elm_genlist_nth_item_get(gl, 1340); + elm_genlist_item_selected_set(gli, EINA_TRUE); + elm_genlist_item_show(gli, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE); + + evas_object_resize(win, 480, 400); + explode_win_enable(win); + evas_object_show(win); +} + diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index d4d24c9ea..b78081f84 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -6872,6 +6872,10 @@ _elm_genlist_item_coordinates_calc(Elm_Gen_Item *it, *y = it->y + it->item->block->y - (*h / 2) + (it->item->h / 2); break; + case ELM_GENLIST_ITEM_SCROLLTO_BOTTOM: + *y = it->y + it->item->block->y - *h + it->item->h; + break; + default: return EINA_FALSE; } diff --git a/src/lib/elm_genlist_item.eo b/src/lib/elm_genlist_item.eo index b8187e76b..695296ee9 100644 --- a/src/lib/elm_genlist_item.eo +++ b/src/lib/elm_genlist_item.eo @@ -32,7 +32,8 @@ enum Elm.Genlist.Item.Scrollto_Type none = 0, [[No scrollto.]] in = (1 << 0), [[To the nearest viewport.]] top = (1 << 1), [[To the top of viewport.]] - middle = (1 << 2) [[To the middle of viewport.]] + middle = (1 << 2), [[To the middle of viewport.]] + bottom = (1 << 3) [[To the bottom of viewport.]] } class Elm.Genlist_Item(Elm.Widget_Item) |