efl_ui_tab_pager: make this compatible with Efl.Pack_Linear test suite
authorMarcel Hollerbach <mail@marcel-hollerbach.de>
Fri, 23 Aug 2019 17:34:53 +0000 (19:34 +0200)
committerYeongjong Lee <yj34.lee@samsung.com>
Mon, 16 Sep 2019 01:23:00 +0000 (10:23 +0900)
the testsuite now is happy with the behaviour in there. Additionally,
the internals are cleaned up, fields that are not used anymore are
deleted, and the logic maintaining them as well.

Reviewed-by: WooHyun Jung <woohyun0705@gmail.com>
Differential Revision: https://phab.enlightenment.org/D9732

src/lib/elementary/efl_ui_tab_pager.c
src/lib/elementary/efl_ui_tab_pager.eo
src/lib/elementary/efl_ui_tab_pager_private.h

index bfc22d8..f1a3dc4 100644 (file)
 static void
 _select(Eo *obj, int index)
 {
-   EFL_UI_TAB_PAGER_DATA_GET(obj, sd);
-   if (sd->cnt > index) sd->cur = index;
-   else sd->cur = 0;
-
-   Efl_Ui_Tab_Page *page = eina_list_nth(sd->tab_pages, sd->cur);
+   Efl_Ui_Tab_Page *page = efl_pack_content_get(obj, index);
 
    efl_ui_selectable_selected_set(efl_ui_tab_page_tab_bar_item_get(page), EINA_TRUE);
 }
@@ -26,23 +22,14 @@ _select(Eo *obj, int index)
 static void
 _tab_select_cb(void *data, const Efl_Event *event)
 {
-   Eina_List *n;
-   Efl_Ui_Tab_Page *p;
    EFL_UI_TAB_PAGER_DATA_GET(data, sd);
-   int i = 0;
-   //FIXME this is super clumsy, this can be improved later on
    Efl_Ui_Tab_Bar_Default_Item *selected;
+   int i = 0;
 
    selected = efl_ui_single_selectable_last_selected_get(event->object);
-   EINA_LIST_FOREACH(sd->tab_pages, n, p)
-     {
-        if (efl_ui_tab_page_tab_bar_item_get(p) == selected)
-          {
-             if (efl_ui_spotlight_active_index_get(data) != i)
-               efl_ui_spotlight_active_index_set(data, i);
-          }
-        i++;
-     }
+   i = efl_pack_index_get(sd->tab_bar, selected);
+   if (efl_ui_spotlight_active_index_get(data) != i)
+     efl_ui_spotlight_active_index_set(data, i);
 }
 
 EOLIAN static Efl_Canvas_Object *
@@ -79,8 +66,6 @@ _efl_ui_tab_pager_efl_object_constructor(Eo *obj, Efl_Ui_Tab_Pager_Data *sd)
 
    sd->tab_bar = efl_add(EFL_UI_TAB_BAR_CLASS, obj);
    efl_event_callback_add(sd->tab_bar, EFL_UI_EVENT_ITEM_SELECTED, _tab_select_cb, obj);
-   sd->cur = 0;
-   sd->cnt = 0;
 
    return obj;
 }
@@ -95,66 +80,30 @@ _efl_ui_tab_pager_efl_object_finalize(Eo *obj, Efl_Ui_Tab_Pager_Data *pd)
    return obj;
 }
 
-EOLIAN static int
-_efl_ui_tab_pager_efl_container_content_count(Eo *obj EINA_UNUSED, Efl_Ui_Tab_Pager_Data *sd)
-{
-   return sd->cnt;
-}
-
 EOLIAN static Eina_Bool
 _efl_ui_tab_pager_efl_pack_pack_clear(Eo *obj, Efl_Ui_Tab_Pager_Data *sd)
 {
-   if (sd->tab_bar)
-     {
-        Eo *subobj;
-        Eina_List *l, *l_next;
-        EINA_LIST_FOREACH_SAFE(sd->tab_pages, l, l_next, subobj)
-          {
-             sd->tab_pages = eina_list_remove(sd->tab_pages, subobj);
-             sd->cnt--;
-          }
-        efl_pack_clear(sd->tab_bar);
-        efl_pack_clear(efl_super(obj, MY_CLASS));
-
-        return EINA_TRUE;
-     }
-   return EINA_FALSE;
+   if (!efl_pack_clear(sd->tab_bar))
+     return EINA_FALSE;
+   return efl_pack_clear(efl_super(obj, MY_CLASS));
 }
 
 EOLIAN static Eina_Bool
 _efl_ui_tab_pager_efl_pack_unpack_all(Eo *obj, Efl_Ui_Tab_Pager_Data *sd)
 {
-   if (sd->tab_bar)
-     {
-        Eo *subobj;
-        Eina_List *l, *l_next;
-        EINA_LIST_FOREACH_SAFE(sd->tab_pages, l, l_next, subobj)
-          {
-             sd->tab_pages = eina_list_remove(sd->tab_pages, subobj);
-             sd->cnt--;
-          }
-        efl_pack_unpack_all(sd->tab_bar);
-        efl_pack_unpack_all(efl_super(obj, MY_CLASS));
-
-        return EINA_TRUE;
-     }
-   return EINA_FALSE;
+   if (!efl_pack_unpack_all(sd->tab_bar))
+     return EINA_FALSE;
+   return efl_pack_unpack_all(efl_super(obj, MY_CLASS));
 }
 
+#define ITEM(s) efl_ui_tab_page_tab_bar_item_get(s)
+
 EOLIAN static Eina_Bool
 _efl_ui_tab_pager_efl_pack_unpack(Eo *obj, Efl_Ui_Tab_Pager_Data *sd, Efl_Gfx_Entity *subobj)
 {
-   if (sd->tab_bar)
-     {
-        sd->tab_pages = eina_list_remove(sd->tab_pages, subobj);
-        sd->cnt--;
-
-        efl_pack_unpack(sd->tab_bar, efl_ui_tab_page_tab_bar_item_get(subobj));
-        efl_pack_unpack(efl_super(obj, MY_CLASS), subobj);
-
-        return EINA_TRUE;
-     }
-   return EINA_FALSE;
+   if (!efl_pack_unpack(sd->tab_bar, ITEM(subobj)))
+     return EINA_FALSE;
+   return efl_pack_unpack(efl_super(obj, MY_CLASS), subobj);
 }
 
 EOLIAN static Eina_Bool
@@ -162,20 +111,9 @@ _efl_ui_tab_pager_efl_pack_linear_pack_begin(Eo *obj,
                                              Efl_Ui_Tab_Pager_Data *sd,
                                              Efl_Gfx_Entity *subobj)
 {
-   if (sd->tab_bar)
-     {
-
-        sd->tab_pages = eina_list_prepend(sd->tab_pages, subobj);
-        sd->cnt ++;
-
-        efl_pack_begin(sd->tab_bar, efl_ui_tab_page_tab_bar_item_get(subobj));
-        efl_pack_begin(efl_super(obj, MY_CLASS), subobj);
-
-        sd->cur ++;
-
-        return EINA_TRUE;
-     }
-   else return EINA_FALSE;
+   if (!efl_pack_begin(sd->tab_bar, ITEM(subobj)))
+     return EINA_FALSE;
+   return efl_pack_begin(efl_super(obj, MY_CLASS), subobj);
 }
 
 EOLIAN static Eina_Bool
@@ -183,17 +121,9 @@ _efl_ui_tab_pager_efl_pack_linear_pack_end(Eo *obj,
                                            Efl_Ui_Tab_Pager_Data *sd,
                                            Efl_Gfx_Entity *subobj)
 {
-   if (sd->tab_bar)
-     {
-        sd->tab_pages = eina_list_append(sd->tab_pages, subobj);
-        sd->cnt ++;
-
-        efl_pack_end(sd->tab_bar, efl_ui_tab_page_tab_bar_item_get(subobj));
-        efl_pack_end(efl_super(obj, MY_CLASS), subobj);
-
-        return EINA_TRUE;
-     }
-   else return EINA_FALSE;
+   if (!efl_pack_end(sd->tab_bar, ITEM(subobj)))
+     return EINA_FALSE;
+   return efl_pack_end(efl_super(obj, MY_CLASS), subobj);
 }
 
 EOLIAN static Eina_Bool
@@ -202,21 +132,9 @@ _efl_ui_tab_pager_efl_pack_linear_pack_before(Eo *obj,
                                               Efl_Gfx_Entity *subobj,
                                               const Efl_Gfx_Entity *existing)
 {
-   if (sd->tab_bar)
-     {
-        int before_index = eina_list_data_idx(sd->tab_pages, (void *)existing);
-
-        sd->tab_pages = eina_list_prepend_relative(sd->tab_pages, subobj, existing);
-        sd->cnt ++;
-
-        efl_pack_before(sd->tab_bar, efl_ui_tab_page_tab_bar_item_get(subobj), existing);
-        efl_pack_before(efl_super(obj, MY_CLASS), subobj, existing);
-
-        if (sd->cur >= before_index) sd->cur ++;
-
-        return EINA_TRUE;
-     }
-   else return EINA_FALSE;
+   if (!efl_pack_before(sd->tab_bar, ITEM(subobj), ITEM(existing)))
+     return EINA_FALSE;
+   return efl_pack_before(efl_super(obj, MY_CLASS), subobj, existing);
 }
 
 EOLIAN static Eina_Bool
@@ -225,21 +143,9 @@ _efl_ui_tab_pager_efl_pack_linear_pack_after(Eo *obj,
                                              Efl_Gfx_Entity *subobj,
                                              const Efl_Gfx_Entity *existing)
 {
-   if (sd->tab_bar)
-     {
-        int after_index = eina_list_data_idx(sd->tab_pages, (void *)existing) + 1;
-
-        sd->tab_pages = eina_list_append_relative(sd->tab_pages, subobj, existing);
-        sd->cnt ++;
-
-        efl_pack_after(sd->tab_bar, efl_ui_tab_page_tab_bar_item_get(subobj), existing);
-        efl_pack_after(efl_super(obj, MY_CLASS), subobj, existing);
-
-        if (sd->cur > after_index) sd->cur ++;
-
-        return EINA_TRUE;
-     }
-   else return EINA_FALSE;
+   if (!efl_pack_after(sd->tab_bar, ITEM(subobj), ITEM(existing)))
+     return EINA_FALSE;
+   return efl_pack_after(efl_super(obj, MY_CLASS), subobj, existing);
 }
 
 EOLIAN static Eina_Bool
@@ -248,58 +154,17 @@ _efl_ui_tab_pager_efl_pack_linear_pack_at(Eo *obj,
                                           Efl_Gfx_Entity *subobj,
                                           int index)
 {
-   if (sd->tab_bar)
-     {
-        Efl_Gfx_Entity *existing = NULL;
-
-        existing = eina_list_nth(sd->tab_pages, index);
-        sd->tab_pages = eina_list_prepend_relative(sd->tab_pages, subobj, existing);
-        sd->cnt ++;
-
-        efl_pack_at(sd->tab_bar, efl_ui_tab_page_tab_bar_item_get(subobj), index);
-        efl_pack_at(efl_super(obj, MY_CLASS), subobj, index);
-
-        if (sd->cur >= index) sd->cur ++;
-
-        return EINA_TRUE;
-     }
-   else return EINA_FALSE;
+   if (!efl_pack_at(sd->tab_bar, ITEM(subobj), index))
+     return EINA_FALSE;
+   return efl_pack_at(efl_super(obj, MY_CLASS), subobj, index);
 }
 
 EOLIAN static Efl_Gfx_Entity *
 _efl_ui_tab_pager_efl_pack_linear_pack_unpack_at(Eo *obj, Efl_Ui_Tab_Pager_Data *sd, int index)
 {
-   if (sd->tab_bar)
-     {
-        Efl_Gfx_Entity *existing = NULL;
-        existing = eina_list_nth(sd->tab_pages, index);
-        if (!existing) return NULL;
-
-        sd->tab_pages = eina_list_remove(sd->tab_pages, existing);
-        sd->cnt--;
-
-        efl_pack_unpack_at(sd->tab_bar, index);
-        efl_pack_unpack_at(efl_super(obj, MY_CLASS), index);
-
-        return existing;
-     }
-   return NULL;
-}
-
-EOLIAN static Efl_Gfx_Entity *
-_efl_ui_tab_pager_efl_pack_linear_pack_content_get(Eo *obj EINA_UNUSED,
-                                                   Efl_Ui_Tab_Pager_Data *sd,
-                                                   int index)
-{
-   return eina_list_nth(sd->tab_pages, index);
-}
-
-EOLIAN static int
-_efl_ui_tab_pager_efl_pack_linear_pack_index_get(Eo *obj EINA_UNUSED,
-                                                 Efl_Ui_Tab_Pager_Data *sd,
-                                                 const Efl_Gfx_Entity *subobj)
-{
-   return eina_list_data_idx(sd->tab_pages, (void *)subobj);
+   if (!efl_pack_unpack_at(sd->tab_bar, index))
+     return NULL;
+   return efl_pack_unpack_at(efl_super(obj, MY_CLASS), index);
 }
 
 #include "efl_ui_tab_pager.eo.c"
index ac25bec..e6b1075 100644 (file)
@@ -15,18 +15,15 @@ class @beta Efl.Ui.Tab_Pager extends Efl.Ui.Spotlight.Container
       Efl.Object.constructor;
       Efl.Object.destructor;
       Efl.Object.finalize;
-      Efl.Container.content_count;
-      Efl.Pack.pack_clear;                     // TODO
-      Efl.Pack.unpack_all;                     // TODO
+      Efl.Pack.pack_clear;
+      Efl.Pack.unpack_all;
       Efl.Pack.unpack;
       Efl.Pack_Linear.pack_begin;
       Efl.Pack_Linear.pack_end;
       Efl.Pack_Linear.pack_before;
       Efl.Pack_Linear.pack_after;
       Efl.Pack_Linear.pack_at;
-      Efl.Pack_Linear.pack_content_get;
-      Efl.Pack_Linear.pack_index_get;
-      Efl.Pack_Linear.pack_unpack_at;          // TODO
+      Efl.Pack_Linear.pack_unpack_at;
       Efl.Ui.Spotlight.Container.active_index { set; }
    }
 }
index 1a0bfd4..1da72fe 100644 (file)
@@ -6,10 +6,6 @@ typedef struct _Efl_Ui_Tab_Pager_Data                   Efl_Ui_Tab_Pager_Data;
 struct _Efl_Ui_Tab_Pager_Data
 {
    Eo                                      *tab_bar;
-
-   int                                      cnt;
-   int                                      cur;
-   Eina_List                               *tab_pages;
 };