summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukasz Stanislawski <l.stanislaws@samsung.com>2016-01-04 14:05:29 -0800
committerCedric BAIL <cedric@osg.samsung.com>2016-01-04 14:05:32 -0800
commit9230a3d31e5428e7f3c69ff6dde8c6f0c59403fc (patch)
treecf8ed9bc3fcd991fdc249de1a225eb3f3b5d9691
parent34d2c8e1250c21e06593efba67eeefc97a216d98 (diff)
downloadelementary-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.c2
-rw-r--r--src/bin/test_genlist.c153
-rw-r--r--src/lib/elm_genlist.c4
-rw-r--r--src/lib/elm_genlist_item.eo3
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)