struct _Widget_Data
{
- Eina_List *stack;
+ Eina_Inlist *stack;
Evas_Object *base;
Evas_Object *rect;
Eina_Bool preserve: 1;
struct _Elm_Naviframe_Content_Item_Pair
{
+ EINA_INLIST;
const char *part;
Evas_Object *content;
Elm_Naviframe_Item *it;
struct _Elm_Naviframe_Text_Item_Pair
{
+ EINA_INLIST;
const char *part;
const char *text;
};
struct _Elm_Naviframe_Item
{
Elm_Widget_Item base;
- Eina_List *content_list;
- Eina_List *text_list;
+ EINA_INLIST;
+ Eina_Inlist *content_list;
+ Eina_Inlist *text_list;
Evas_Object *content;
Evas_Object *title_prev_btn;
Evas_Object *title_next_btn;
static void _item_signal_emit_hook(Elm_Object_Item *it,
const char *emission,
const char *source);
+static void _item_title_visible_update(Elm_Naviframe_Item *navi_it);
static void _sizing_eval(Evas_Object *obj);
static void _item_sizing_eval(Elm_Naviframe_Item *it);
static void _move(void *data, Evas *e, Evas_Object *obj, void *event_info);
_del_hook(Evas_Object *obj)
{
Widget_Data *wd;
- Eina_List *list;
Elm_Naviframe_Item *it;
wd = elm_widget_data_get(obj);
if (!wd) return;
- EINA_LIST_REVERSE_FOREACH(wd->stack, list, it)
+ EINA_INLIST_REVERSE_FOREACH(wd->stack, it)
_item_del(it);
- eina_list_free(wd->stack);
free(wd);
}
static void
_theme_hook(Evas_Object *obj)
{
- //FIXME:
+ Widget_Data *wd;
+ Elm_Naviframe_Item *it;
+
+ wd = elm_widget_data_get(obj);
+ if (!wd) return;
+
+ _elm_theme_object_set(obj,
+ wd->base,
+ "naviframe",
+ "base",
+ elm_widget_style_get(obj));
+
+ EINA_INLIST_FOREACH(wd->stack, it)
+ {
+ elm_naviframe_item_style_set(ELM_CAST(it), it->style);
+ _item_title_visible_update(it);
+ }
+
_elm_widget_mirrored_reload(obj);
_mirrored_set(obj, elm_widget_mirrored_get(obj));
+
+ evas_object_hide(wd->rect);
+
}
static void _emit_hook(Evas_Object *obj,
_mirrored_set(Evas_Object *obj, Eina_Bool rtl)
{
Widget_Data *wd;
- Eina_List *l;
Elm_Naviframe_Item *it;
wd = elm_widget_data_get(obj);
if (!wd) return;
- EINA_LIST_FOREACH(wd->stack, l, it)
+ EINA_INLIST_FOREACH(wd->stack, it)
edje_object_mirrored_set(it->base.view, rtl);
edje_object_mirrored_set(wd->base, rtl);
}
{
ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
- Eina_List *l = NULL;
Elm_Naviframe_Text_Item_Pair *pair = NULL;
Elm_Naviframe_Item *navi_it = ELM_CAST(it);
char buf[1024];
else
snprintf(buf, sizeof(buf), "%s", part);
- EINA_LIST_FOREACH(navi_it->text_list, l, pair)
+ EINA_INLIST_FOREACH(navi_it->text_list, pair)
if (!strcmp(buf, pair->part)) break;
if (!pair)
return;
}
eina_stringshare_replace(&pair->part, buf);
- navi_it->text_list = eina_list_append(navi_it->text_list, pair);
+ navi_it->text_list = eina_inlist_append(navi_it->text_list,
+ EINA_INLIST_GET(pair));
}
eina_stringshare_replace(&pair->text, label);
_item_text_get_hook(const Elm_Object_Item *it, const char *part)
{
ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL);
- Eina_List *l = NULL;
Elm_Naviframe_Text_Item_Pair *pair = NULL;
Elm_Naviframe_Item *navi_it = ELM_CAST(it);
char buf[1024];
else
snprintf(buf, sizeof(buf), "%s", part);
- EINA_LIST_FOREACH(navi_it->text_list, l, pair)
+ EINA_INLIST_FOREACH(navi_it->text_list, pair)
{
if (!strcmp(buf, pair->part))
return pair->text;
_item_content_get_hook(const Elm_Object_Item *it, const char *part)
{
ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL);
- Eina_List *l = NULL;
Elm_Naviframe_Content_Item_Pair *pair = NULL;
Elm_Naviframe_Item *navi_it = ELM_CAST(it);
return navi_it->title_next_btn;
//common parts
- EINA_LIST_FOREACH(navi_it->content_list, l, pair)
+ EINA_INLIST_FOREACH(navi_it->content_list, pair)
{
if (!strcmp(part, pair->part))
return pair->content;
_item_content_unset_hook(Elm_Object_Item *it, const char *part)
{
ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL);
- Eina_List *l = NULL;
Elm_Naviframe_Content_Item_Pair *pair = NULL;
Elm_Naviframe_Item *navi_it = ELM_CAST(it);
Evas_Object *content = NULL;
}
//common parts
- EINA_LIST_FOREACH(navi_it->content_list, l, pair)
+ EINA_INLIST_FOREACH(navi_it->content_list, pair)
{
if (!strcmp(part, pair->part))
{
content = pair->content;
eina_stringshare_del(pair->part);
- navi_it->content_list = eina_list_remove(navi_it->content_list,
- pair);
+ navi_it->content_list = eina_inlist_remove(navi_it->content_list,
+ EINA_INLIST_GET(pair));
free(pair);
break;
}
}
static void
+_item_title_visible_update(Elm_Naviframe_Item *navi_it)
+{
+ if (navi_it->title_visible)
+ edje_object_signal_emit(navi_it->base.view, "elm,state,title,show", "elm");
+ else
+ edje_object_signal_emit(navi_it->base.view, "elm,state,title,hide", "elm");
+}
+
+static void
_sizing_eval(Evas_Object *obj)
{
Widget_Data *wd;
- Eina_List *list;
Elm_Naviframe_Item *it;
wd = elm_widget_data_get(obj);
if (!wd) return;
- list = eina_list_last(wd->stack);
- if (!list) return;
-
- EINA_LIST_FOREACH(wd->stack, list, it)
+ EINA_INLIST_FOREACH(wd->stack, it)
_item_sizing_eval(it);
}
Elm_Naviframe_Item *it = pair->it;
snprintf(buf, sizeof(buf), "elm,state,%s,hide", pair->part);
edje_object_signal_emit(it->base.view, buf, "elm");
- it->content_list = eina_list_remove(it->content_list, pair);
+ it->content_list = eina_inlist_remove(it->content_list,
+ EINA_INLIST_GET(pair));
eina_stringshare_del(pair->part);
free(pair);
}
const char *part,
Evas_Object *content)
{
- Eina_List *l = NULL;
char buf[1024];
- EINA_LIST_FOREACH(it->content_list, l, pair)
+ EINA_INLIST_FOREACH(it->content_list, pair)
if (!strcmp(part, pair->part)) break;
if (!pair)
}
pair->it = it;
eina_stringshare_replace(&pair->part, part);
- it->content_list = eina_list_append(it->content_list, pair);
+ it->content_list = eina_inlist_append(it->content_list,
+ EINA_INLIST_GET(pair));
}
if ((pair->content) && (pair->content != content))
_item_del(Elm_Naviframe_Item *it)
{
Widget_Data *wd;
- Eina_List *l;
Elm_Naviframe_Content_Item_Pair *content_pair;
Elm_Naviframe_Text_Item_Pair *text_pair;
if ((it->content) && (!wd->preserve))
evas_object_del(it->content);
- EINA_LIST_FOREACH(it->content_list, l, content_pair)
+ EINA_INLIST_REVERSE_FOREACH(it->content_list, content_pair)
{
- evas_object_event_callback_del(content_pair->content, EVAS_CALLBACK_DEL, _title_content_del);
+ evas_object_event_callback_del(content_pair->content,
+ EVAS_CALLBACK_DEL,
+ _title_content_del);
evas_object_del(content_pair->content);
eina_stringshare_del(content_pair->part);
+ it->content_list =
+ eina_inlist_remove(it->content_list,
+ EINA_INLIST_GET(content_pair));
free(content_pair);
}
- EINA_LIST_FOREACH(it->text_list, l, text_pair)
+ EINA_INLIST_REVERSE_FOREACH(it->text_list, text_pair)
{
eina_stringshare_del(text_pair->part);
eina_stringshare_del(text_pair->text);
+ it->text_list = eina_inlist_remove(it->text_list,
+ EINA_INLIST_GET(text_pair));
free(text_pair);
}
- eina_list_free(it->content_list);
- eina_list_free(it->text_list);
-
- wd->stack = eina_list_remove(wd->stack, it);
+ wd->stack = eina_inlist_remove(wd->stack, EINA_INLIST_GET(it));
elm_widget_item_del(it);
}
_item_text_set_hook(ELM_CAST(it), "elm.text.title", title_label);
//title buttons
- if ((!prev_btn) && wd->auto_pushed && eina_list_count(wd->stack))
+ if ((!prev_btn) && wd->auto_pushed && eina_inlist_count(wd->stack))
{
prev_btn = _back_btn_new(obj);
_title_prev_btn_set(it, prev_btn, EINA_TRUE);
"elm");
}
it->title_visible = EINA_TRUE;
- wd->stack = eina_list_append(wd->stack, it);
+ wd->stack = eina_inlist_append(wd->stack, EINA_INLIST_GET(it));
return ELM_CAST(it);
}
elm_naviframe_item_pop(Evas_Object *obj)
{
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- Elm_Naviframe_Item *it, *prev_it;
+ Elm_Naviframe_Item *it, *prev_it = NULL;
Widget_Data *wd;
Evas_Object *content = NULL;
it = ELM_CAST(elm_naviframe_top_item_get(obj));
if (!it) return NULL;
- wd->stack = eina_list_remove(wd->stack, it);
-
if (wd->preserve)
content = it->content;
- prev_it = ELM_CAST(elm_naviframe_top_item_get(obj));
+ if (wd->stack->last->prev)
+ prev_it = EINA_INLIST_CONTAINER_GET(wd->stack->last->prev,
+ Elm_Naviframe_Item);
if (prev_it)
{
if (wd->freeze_events)
ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
Elm_Naviframe_Item *navi_it = ELM_CAST(it);
Widget_Data *wd = elm_widget_data_get(navi_it->base.widget);
- Eina_List *l, *prev_l;
+ Eina_Inlist *l, *prev_l;
if (it == elm_naviframe_top_item_get(navi_it->base.widget)) return;
- l = eina_list_last(wd->stack)->prev;
+ l = wd->stack->last->prev;
while(l)
{
- if (l->data == it) break;
+ if (ELM_CAST(EINA_INLIST_CONTAINER_GET(l, Elm_Naviframe_Item)) == it)
+ break;
prev_l = l->prev;
- _item_del(l->data);
+ _item_del(EINA_INLIST_CONTAINER_GET(l, Elm_Naviframe_Item));
l = prev_l;
}
elm_naviframe_item_pop(navi_it->base.widget);
if (it == elm_naviframe_top_item_get(navi_it->base.widget))
{
_item_del(navi_it);
- navi_it = ELM_CAST(eina_list_last(wd->stack)->data);
+ navi_it = ELM_CAST(EINA_INLIST_CONTAINER_GET(wd->stack->last, Elm_Naviframe_Item));
evas_object_show(navi_it->base.view);
evas_object_raise(navi_it->base.view);
edje_object_signal_emit(navi_it->base.view, "elm,state,visible", "elm");
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
Widget_Data *wd = elm_widget_data_get(obj);
if ((!wd) || (!wd->stack)) return NULL;
- return eina_list_last(wd->stack)->data;
+ return ELM_CAST(EINA_INLIST_CONTAINER_GET(wd->stack->last,
+ Elm_Naviframe_Item));
}
EAPI Elm_Object_Item*
ELM_CHECK_WIDTYPE(obj, widtype) NULL;
Widget_Data *wd = elm_widget_data_get(obj);
if ((!wd) || (!wd->stack)) return NULL;
- return wd->stack->data;
+ return ELM_CAST(EINA_INLIST_CONTAINER_GET(wd->stack,
+ Elm_Naviframe_Item));
}
EAPI void
{
ELM_OBJ_ITEM_CHECK_OR_RETURN(it);
Elm_Naviframe_Item *navi_it = ELM_CAST(it);
- Eina_List *l;
Elm_Naviframe_Content_Item_Pair *content_pair;
Elm_Naviframe_Text_Item_Pair *text_pair;
Widget_Data *wd;
buf,
elm_widget_style_get(navi_it->base.widget));
//recover item
- EINA_LIST_FOREACH(navi_it->text_list, l, text_pair)
+ EINA_INLIST_FOREACH(navi_it->text_list, text_pair)
_item_text_set_hook(it, text_pair->part, text_pair->text);
- EINA_LIST_FOREACH(navi_it->content_list, l, content_pair)
+ EINA_INLIST_FOREACH(navi_it->content_list, content_pair)
_item_content_set_hook(it, content_pair->part, content_pair->content);
//content
visible = !!visible;
if (navi_it->title_visible == visible) return;
- if (visible)
- edje_object_signal_emit(navi_it->base.view, "elm,state,title,show", "elm");
- else
- edje_object_signal_emit(navi_it->base.view, "elm,state,title,hide", "elm");
-
navi_it->title_visible = visible;
+ _item_title_visible_update(navi_it);
}
EAPI Eina_Bool