forked from enlightenment/efl
efl_ui_tab_pager: make this compatible with Efl.Pack_Linear test suite
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
This commit is contained in:
parent
3cc427234e
commit
7f94410a90
|
@ -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"
|
||||
|
|
|
@ -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; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue