davemds pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=47117721681bd4068619cadccb556d0e1bf72faf

commit 47117721681bd4068619cadccb556d0e1bf72faf
Author: Dave Andreoli <[email protected]>
Date:   Tue Aug 9 15:30:07 2016 +0200

    Add a FAILING test for genlist reusable contents
    
    shortly explained in T4319
---
 src/bin/elementary/test.c         |   2 +
 src/bin/elementary/test_genlist.c | 127 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 129 insertions(+)

diff --git a/src/bin/elementary/test.c b/src/bin/elementary/test.c
index c8342f3..426be47 100644
--- a/src/bin/elementary/test.c
+++ b/src/bin/elementary/test.c
@@ -133,6 +133,7 @@ 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_genlist_cache(void *data, Evas_Object *obj, void *event_info);
+void test_genlist_reusable(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);
@@ -787,6 +788,7 @@ add_tests:
    ADD_TEST(NULL, "Lists - Genlist", "Genlist Filter", test_genlist_filter);
    ADD_TEST(NULL, "Lists - Genlist", "Genlist Show/Bring", 
test_genlist_show_bring);
    ADD_TEST(NULL, "Lists - Genlist", "Genlist Cache", test_genlist_cache);
+   ADD_TEST(NULL, "Lists - Genlist", "Genlist Reusable Contents", 
test_genlist_reusable);
 
    //------------------------------//
 
diff --git a/src/bin/elementary/test_genlist.c 
b/src/bin/elementary/test_genlist.c
index 3be11a1..fece0ee 100644
--- a/src/bin/elementary/test_genlist.c
+++ b/src/bin/elementary/test_genlist.c
@@ -5392,3 +5392,130 @@ test_genlist_cache(void *data EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED,
    explode_win_enable(win);
    evas_object_show(win);
 }
+
+
+/***  Genlist Reusable Contents  *********************************************/
+static char *
+gl_re2_text_get(void *data, Evas_Object *obj EINA_UNUSED,
+                      const char *part EINA_UNUSED)
+{
+   int num = (int)(uintptr_t)data;
+   char buf[256];
+
+   snprintf(buf, sizeof(buf), "Item # %d", num);
+   return strdup(buf);
+}
+
+static Evas_Object *
+gl_re2_content_get(void *data, Evas_Object *obj, const char *part)
+{
+   int num = (int)(uintptr_t)data;
+   Evas_Object *cont = NULL;
+   char buf[256];
+
+   if (!strcmp(part, "elm.swallow.icon"))
+     {
+        cont = elm_icon_add(obj);
+        elm_icon_standard_set(cont, "user-home");
+     }
+   else if (!strcmp(part, "elm.swallow.end"))
+     {
+        printf("Creating NEW content for item # %d\n", num);
+        cont = elm_label_add(obj);
+        snprintf(buf, sizeof(buf), "<warning>Content for item # %d</>", num);
+        elm_object_text_set(cont, buf);
+     }
+
+   return cont;
+}
+
+static Evas_Object *
+gl_re2_reusable_content_get(void *data, Evas_Object *obj,
+                            const char *part, Evas_Object *old)
+{
+   Eina_Bool enabled = (Eina_Bool)(uintptr_t)evas_object_data_get(obj, 
"reusable_enabled");
+   int num = (int)(uintptr_t)data;
+
+   if (enabled && old && !strcmp(part, "elm.swallow.end"))
+     {
+        printf("REUSING content for item # %d\n", num);
+        return old;
+     }
+
+   return NULL;
+}
+
+static void
+gl_re2_check_changed_cb(void *data, Evas_Object *obj,
+                        void *event_info EINA_UNUSED)
+{
+   Eina_Bool enabled = elm_check_state_get(obj);
+   Evas_Object *gl = data;
+
+   evas_object_data_set(gl, "reusable_enabled", (void*)(uintptr_t)enabled);
+   elm_genlist_realized_items_update(gl);
+}
+
+void
+test_genlist_reusable(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED,
+                      void *event_info EINA_UNUSED)
+{
+   Evas_Object *win, *bx, *fr, *lb, *gl, *ck;
+   Elm_Genlist_Item_Class *itc;
+   int i;
+
+   // window
+   win = elm_win_util_standard_add("genlist-reusable", "Genlist Reusable 
Contents");
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   bx = elm_box_add(win);
+   evas_object_size_hint_expand_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, bx);
+   evas_object_show(bx);
+
+   fr = elm_frame_add(bx);
+   evas_object_size_hint_expand_set(fr, EVAS_HINT_EXPAND, 0);
+   evas_object_size_hint_fill_set(fr, EVAS_HINT_FILL, 0);
+   elm_object_text_set(fr, "Information");
+   elm_box_pack_end(bx, fr);
+   evas_object_show(fr);
+
+   lb = elm_label_add(fr);
+   elm_object_text_set(lb, "Numbers on the left should always match the one on 
the right");
+   elm_object_content_set(fr, lb);
+   evas_object_show(lb);
+
+   // genlist
+   gl = elm_genlist_add(bx);
+   elm_genlist_homogeneous_set(gl, EINA_TRUE);
+   evas_object_size_hint_expand_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_fill_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(bx, gl);
+   evas_object_show(gl);
+   evas_object_data_set(gl, "reusable_enabled", (void*)EINA_TRUE);
+
+   itc = elm_genlist_item_class_new();
+   itc->item_style = "default";
+   itc->func.text_get = gl_re2_text_get;
+   itc->func.content_get = gl_re2_content_get;
+   itc->func.reusable_content_get = gl_re2_reusable_content_get;
+
+   for (i = 1; i <= 2000; i++)
+       elm_genlist_item_append(gl, itc, (void*)(uintptr_t)i, NULL,
+                               ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+   elm_genlist_item_class_free(itc);
+
+   // buttons
+   ck = elm_check_add(bx);
+   elm_object_text_set(ck, "Enable reusable contents");
+   elm_check_state_set(ck, EINA_TRUE);
+   evas_object_smart_callback_add(ck, "changed", gl_re2_check_changed_cb, gl);
+   elm_box_pack_end(bx, ck);
+   evas_object_show(ck);
+
+   // show everything
+   evas_object_resize(win, 400, 400);
+   explode_win_enable(win);
+   evas_object_show(win);
+}

-- 


Reply via email to