diff --git a/src/lib/elementary/efl_ui_tab_pager.c b/src/lib/elementary/efl_ui_tab_pager.c index bfc22d8e1c..f1a3dc4059 100644 --- a/src/lib/elementary/efl_ui_tab_pager.c +++ b/src/lib/elementary/efl_ui_tab_pager.c @@ -14,11 +14,7 @@ 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" diff --git a/src/lib/elementary/efl_ui_tab_pager.eo b/src/lib/elementary/efl_ui_tab_pager.eo index ac25becc58..e6b10757e6 100644 --- a/src/lib/elementary/efl_ui_tab_pager.eo +++ b/src/lib/elementary/efl_ui_tab_pager.eo @@ -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; } } } diff --git a/src/lib/elementary/efl_ui_tab_pager_private.h b/src/lib/elementary/efl_ui_tab_pager_private.h index 1a0bfd4bc1..1da72fe5ec 100644 --- a/src/lib/elementary/efl_ui_tab_pager_private.h +++ b/src/lib/elementary/efl_ui_tab_pager_private.h @@ -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; };