Eolian: Integration of Naviframe

This commit is contained in:
Daniel Zaoui 2014-03-30 11:51:39 +03:00
parent 4b163aecbc
commit b62d73c702
5 changed files with 425 additions and 458 deletions

View File

@ -623,6 +623,8 @@ BUILT_SOURCES = \
elm_menu.eo.h \ elm_menu.eo.h \
elc_multibuttonentry.eo.c \ elc_multibuttonentry.eo.c \
elc_multibuttonentry.eo.h \ elc_multibuttonentry.eo.h \
elc_naviframe.eo.c \
elc_naviframe.eo.h \
elm_panel.eo.c \ elm_panel.eo.c \
elm_panel.eo.h \ elm_panel.eo.h \
elm_mapbuf.eo.c \ elm_mapbuf.eo.c \
@ -730,6 +732,7 @@ EXTRA_DIST += \
elm_map.eo \ elm_map.eo \
elm_menu.eo \ elm_menu.eo \
elc_multibuttonentry.eo \ elc_multibuttonentry.eo \
elc_naviframe.eo \
elm_panel.eo \ elm_panel.eo \
elm_mapbuf.eo \ elm_mapbuf.eo \
elm_notify.eo \ elm_notify.eo \
@ -809,6 +812,7 @@ nodist_includesunstable_HEADERS = \
elm_map.eo.h \ elm_map.eo.h \
elm_menu.eo.h \ elm_menu.eo.h \
elc_multibuttonentry.eo.h \ elc_multibuttonentry.eo.h \
elc_naviframe.eo.h \
elm_panel.eo.h \ elm_panel.eo.h \
elm_mapbuf.eo.h \ elm_mapbuf.eo.h \
elm_notify.eo.h \ elm_notify.eo.h \

View File

@ -7,8 +7,6 @@
#include "elm_widget_naviframe.h" #include "elm_widget_naviframe.h"
#include "elm_widget_container.h" #include "elm_widget_container.h"
EAPI Eo_Op ELM_OBJ_NAVIFRAME_BASE_ID = EO_NOOP;
#define MY_CLASS ELM_OBJ_NAVIFRAME_CLASS #define MY_CLASS ELM_OBJ_NAVIFRAME_CLASS
#define MY_CLASS_NAME "Elm_Naviframe" #define MY_CLASS_NAME "Elm_Naviframe"
@ -69,11 +67,9 @@ _prev_page_focus_recover(Elm_Naviframe_Item *it)
} }
} }
static void EOLIAN static Eina_Bool
_elm_naviframe_smart_translate(Eo *obj EINA_UNUSED, void *_pd, va_list *list) _elc_naviframe_elm_widget_translate(Eo *obj EINA_UNUSED, Elc_Naviframe_Data *sd)
{ {
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
Elm_Naviframe_Smart_Data *sd = _pd;
Elm_Naviframe_Item *it; Elm_Naviframe_Item *it;
EINA_INLIST_FOREACH(sd->stack, it) EINA_INLIST_FOREACH(sd->stack, it)
@ -81,7 +77,7 @@ _elm_naviframe_smart_translate(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
eo_do_super(obj, MY_CLASS, elm_obj_widget_translate(NULL)); eo_do_super(obj, MY_CLASS, elm_obj_widget_translate(NULL));
if (ret) *ret = EINA_TRUE; return EINA_TRUE;
} }
static void static void
@ -336,12 +332,10 @@ _item_title_enabled_update(Elm_Naviframe_Item *nit, Eina_Bool transition)
} }
} }
static void EOLIAN static Eina_Bool
_elm_naviframe_smart_theme(Eo *obj, void *_pd, va_list *list) _elc_naviframe_elm_widget_theme_apply(Eo *obj, Elc_Naviframe_Data *sd)
{ {
Elm_Naviframe_Item *it; Elm_Naviframe_Item *it;
Elm_Naviframe_Smart_Data *sd = _pd;
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
const char *style, *sstyle; const char *style, *sstyle;
eo_do(obj, elm_obj_widget_style_get(&style)); eo_do(obj, elm_obj_widget_style_get(&style));
@ -356,7 +350,7 @@ _elm_naviframe_smart_theme(Eo *obj, void *_pd, va_list *list)
} }
elm_layout_sizing_eval(obj); elm_layout_sizing_eval(obj);
if (ret) *ret = EINA_TRUE; return EINA_TRUE;
} }
static char * static char *
@ -869,15 +863,13 @@ _item_signal_emit_hook(Elm_Object_Item *it,
elm_object_signal_emit(VIEW(it), emission, source); elm_object_signal_emit(VIEW(it), emission, source);
} }
static void EOLIAN static void
_elm_naviframe_smart_sizing_eval(Eo *obj, void *_pd, va_list *list EINA_UNUSED) _elc_naviframe_elm_layout_sizing_eval(Eo *obj, Elc_Naviframe_Data *sd)
{ {
Evas_Coord minw = -1, minh = -1; Evas_Coord minw = -1, minh = -1;
Elm_Naviframe_Item *it, *top; Elm_Naviframe_Item *it, *top;
Evas_Coord x, y, w, h; Evas_Coord x, y, w, h;
Elm_Naviframe_Smart_Data *sd = _pd;
if (sd->on_deletion) return; if (sd->on_deletion) return;
if (!sd->stack) return; if (!sd->stack) return;
@ -954,14 +946,9 @@ _back_btn_new(Evas_Object *obj, const char *title_label)
return btn; return btn;
} }
static void EOLIAN static void
_elm_naviframe_smart_signal_emit(Eo *obj, void *_pd, va_list *list) _elc_naviframe_elm_layout_signal_emit(Eo *obj, Elc_Naviframe_Data *sd, const char *emission, const char *source)
{ {
Elm_Naviframe_Smart_Data *sd = _pd;
const char *emission = va_arg(*list, const char *);
const char *source = va_arg(*list, const char *);
if (!sd->stack) return; if (!sd->stack) return;
eo_do_super(obj, MY_CLASS, elm_obj_layout_signal_emit(emission, source)); eo_do_super(obj, MY_CLASS, elm_obj_layout_signal_emit(emission, source));
@ -969,85 +956,63 @@ _elm_naviframe_smart_signal_emit(Eo *obj, void *_pd, va_list *list)
/* content/text smart functions proxying things to the top item, which /* content/text smart functions proxying things to the top item, which
* is the resize object of the layout */ * is the resize object of the layout */
static void EOLIAN static Eina_Bool
_elm_naviframe_smart_text_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list) _elc_naviframe_elm_layout_text_set(Eo *obj, Elc_Naviframe_Data *sd EINA_UNUSED, const char *part, const char *label)
{ {
Elm_Object_Item *it; Elm_Object_Item *it;
const char *part = va_arg(*list, const char *);
const char *label = va_arg(*list, const char *);
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
Eina_Bool int_ret = EINA_FALSE;
if (ret) *ret = EINA_FALSE;
it = elm_naviframe_top_item_get(obj); it = elm_naviframe_top_item_get(obj);
if (!it) return; if (!it) return EINA_FALSE;
elm_object_item_part_text_set(it, part, label); elm_object_item_part_text_set(it, part, label);
int_ret = !strcmp(elm_object_item_part_text_get(it, part), label); return !strcmp(elm_object_item_part_text_get(it, part), label);
if (ret) *ret = int_ret;
} }
static void EOLIAN static const char*
_elm_naviframe_smart_text_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list) _elc_naviframe_elm_layout_text_get(Eo *obj, Elc_Naviframe_Data *sd EINA_UNUSED, const char *part)
{ {
Elm_Object_Item *it = elm_naviframe_top_item_get(obj); Elm_Object_Item *it = elm_naviframe_top_item_get(obj);
const char *part = va_arg(*list, const char *); if (!it) return NULL;
const char **text = va_arg(*list, const char **);
*text = NULL;
if (!it) return; return elm_object_item_part_text_get(it, part);
*text = elm_object_item_part_text_get(it, part);
} }
/* we have to keep a "manual" set here because of the callbacks on the /* we have to keep a "manual" set here because of the callbacks on the
* children */ * children */
static void EOLIAN static Eina_Bool
_elm_naviframe_smart_content_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list) _elc_naviframe_elm_container_content_set(Eo *obj, Elc_Naviframe_Data *sd EINA_UNUSED, const char *part, Evas_Object *content)
{ {
Elm_Object_Item *it; Elm_Object_Item *it;
const char *part = va_arg(*list, const char *);
Evas_Object *content = va_arg(*list, Evas_Object *);
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
if (ret) *ret = EINA_FALSE;
it = elm_naviframe_top_item_get(obj); it = elm_naviframe_top_item_get(obj);
if (!it) return; if (!it) return EINA_FALSE;
elm_object_item_part_content_set(it, part, content); elm_object_item_part_content_set(it, part, content);
if(content == elm_object_item_part_content_get(it, part)) if(content == elm_object_item_part_content_get(it, part))
if (ret) *ret = EINA_TRUE; return EINA_TRUE;
return EINA_FALSE;
} }
static void EOLIAN static Evas_Object*
_elm_naviframe_smart_content_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list) _elc_naviframe_elm_container_content_get(Eo *obj, Elc_Naviframe_Data *sd EINA_UNUSED, const char *part)
{ {
Elm_Object_Item *it = elm_naviframe_top_item_get(obj); Elm_Object_Item *it = elm_naviframe_top_item_get(obj);
const char *part = va_arg(*list, const char *); if (!it) return NULL;
Evas_Object **content = va_arg(*list, Evas_Object **);
*content = NULL;
if (!it) return; return elm_object_item_part_content_get(it, part);
*content = elm_object_item_part_content_get(it, part);
} }
static void EOLIAN static Evas_Object*
_elm_naviframe_smart_content_unset(Eo *obj, void *_pd EINA_UNUSED, va_list *list) _elc_naviframe_elm_container_content_unset(Eo *obj, Elc_Naviframe_Data *sd EINA_UNUSED, const char *part)
{ {
Elm_Object_Item *it = elm_naviframe_top_item_get(obj); Elm_Object_Item *it = elm_naviframe_top_item_get(obj);
const char *part = va_arg(*list, const char *); if (!it) return NULL;
Evas_Object **content = va_arg(*list, Evas_Object **);
*content = NULL;
if (!it) return;
*content = elm_object_item_part_content_unset(it, part); return elm_object_item_part_content_unset(it, part);
} }
static void static void
@ -1261,8 +1226,8 @@ _on_obj_size_hints_changed(void *data EINA_UNUSED, Evas *e EINA_UNUSED,
_item_dispmode_set(it, dispmode); _item_dispmode_set(it, dispmode);
} }
static void EOLIAN static Eina_Bool
_elm_naviframe_smart_focus_next(Eo *obj, void *_pd EINA_UNUSED, va_list *list) _elc_naviframe_elm_widget_focus_next(Eo *obj, Elc_Naviframe_Data *sd EINA_UNUSED, Elm_Focus_Direction dir, Evas_Object **next)
{ {
Evas_Object *ao; Evas_Object *ao;
@ -1270,10 +1235,6 @@ _elm_naviframe_smart_focus_next(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
Elm_Naviframe_Item *top_it; Elm_Naviframe_Item *top_it;
void *(*list_data_get)(const Eina_List *list); void *(*list_data_get)(const Eina_List *list);
Elm_Focus_Direction dir = va_arg(*list, Elm_Focus_Direction);
Evas_Object **next = va_arg(*list, Evas_Object **);
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
if (ret) *ret = EINA_FALSE;
Eina_Bool int_ret; Eina_Bool int_ret;
top_it = (Elm_Naviframe_Item *)elm_naviframe_top_item_get(obj); top_it = (Elm_Naviframe_Item *)elm_naviframe_top_item_get(obj);
@ -1292,32 +1253,26 @@ _elm_naviframe_smart_focus_next(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
int_ret = elm_widget_focus_list_next_get(obj, l, list_data_get, dir, next); int_ret = elm_widget_focus_list_next_get(obj, l, list_data_get, dir, next);
eina_list_free(l); eina_list_free(l);
if (ret) *ret = int_ret;
end: end:
if (ret && !*ret) if (!int_ret)
{ {
*next = obj; *next = obj;
*ret = !elm_widget_focus_get(obj); int_ret = !elm_widget_focus_get(obj);
} }
return int_ret;
} }
static void EOLIAN static Eina_Bool
_elm_naviframe_smart_focus_direction_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list) _elc_naviframe_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, Elc_Naviframe_Data *sd EINA_UNUSED)
{ {
Eina_Bool *ret = va_arg(*list, Eina_Bool *); return EINA_TRUE;
*ret = EINA_TRUE;
} }
static void EOLIAN static Eina_Bool
_elm_naviframe_smart_focus_direction(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list) _elc_naviframe_elm_widget_focus_direction(Eo *obj EINA_UNUSED, Elc_Naviframe_Data *sd EINA_UNUSED, const Evas_Object *base, double degree, Evas_Object **direction, double *weight)
{ {
Evas_Object *base = va_arg(*list, Evas_Object *);
double degree = va_arg(*list, double);
Evas_Object **direction = va_arg(*list, Evas_Object **);
double *weight = va_arg(*list, double *);
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
if (ret) *ret = EINA_FALSE;
Eina_Bool int_ret; Eina_Bool int_ret;
Eina_List *l = NULL; Eina_List *l = NULL;
@ -1325,7 +1280,7 @@ _elm_naviframe_smart_focus_direction(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED,
void *(*list_data_get)(const Eina_List *list); void *(*list_data_get)(const Eina_List *list);
top_it = (Elm_Naviframe_Item *)elm_naviframe_top_item_get(obj); top_it = (Elm_Naviframe_Item *)elm_naviframe_top_item_get(obj);
if (!top_it) return; if (!top_it) return EINA_FALSE;
list_data_get = eina_list_data_get; list_data_get = eina_list_data_get;
@ -1334,14 +1289,14 @@ _elm_naviframe_smart_focus_direction(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED,
int_ret = elm_widget_focus_list_direction_get int_ret = elm_widget_focus_list_direction_get
(obj, base, l, list_data_get, degree, direction, weight); (obj, base, l, list_data_get, degree, direction, weight);
if (ret) *ret = int_ret;
eina_list_free(l); eina_list_free(l);
return int_ret;
} }
static void EOLIAN static void
_elm_naviframe_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED) _elc_naviframe_evas_smart_add(Eo *obj, Elc_Naviframe_Data *priv)
{ {
Elm_Naviframe_Smart_Data *priv = _pd;
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd); ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
eo_do_super(obj, MY_CLASS, evas_obj_smart_add()); eo_do_super(obj, MY_CLASS, evas_obj_smart_add());
@ -1379,13 +1334,11 @@ _pop_transition_cb(void *data)
return ECORE_CALLBACK_CANCEL; return ECORE_CALLBACK_CANCEL;
} }
static void EOLIAN static void
_elm_naviframe_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED) _elc_naviframe_evas_smart_del(Eo *obj, Elc_Naviframe_Data *sd)
{ {
Elm_Naviframe_Item *it; Elm_Naviframe_Item *it;
Elm_Naviframe_Smart_Data *sd = _pd;
sd->on_deletion = EINA_TRUE; sd->on_deletion = EINA_TRUE;
while (sd->stack) while (sd->stack)
@ -1407,8 +1360,8 @@ _elm_naviframe_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
} }
//Show only the top item view //Show only the top item view
static void EOLIAN static void
_elm_naviframe_smart_show(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED) _elc_naviframe_evas_smart_show(Eo *obj, Elc_Naviframe_Data *sd EINA_UNUSED)
{ {
Elm_Naviframe_Item *top; Elm_Naviframe_Item *top;
@ -1417,42 +1370,36 @@ _elm_naviframe_smart_show(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNU
evas_object_show(VIEW(top)); evas_object_show(VIEW(top));
} }
static void EOLIAN static Eina_Bool
_elm_naviframe_smart_event(Eo *obj, void *_pd EINA_UNUSED, va_list *list) _elc_naviframe_elm_widget_event(Eo *obj, Elc_Naviframe_Data *sd EINA_UNUSED, Evas_Object *src, Evas_Callback_Type type, void *event_info)
{ {
Evas_Object *src = va_arg(*list, Evas_Object *);
Evas_Callback_Type type = va_arg(*list, Evas_Callback_Type);
Evas_Event_Key_Down *ev = va_arg(*list, Evas_Event_Key_Down *);
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
Elm_Naviframe_Item *it; Elm_Naviframe_Item *it;
if (ret) *ret = EINA_FALSE;
(void)src; (void)src;
Evas_Event_Key_Down *ev = event_info;
if (elm_widget_disabled_get(obj)) return; if (elm_widget_disabled_get(obj)) return EINA_FALSE;
if (type != EVAS_CALLBACK_KEY_DOWN) return; if (type != EVAS_CALLBACK_KEY_DOWN) return EINA_FALSE;
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return; if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return EINA_FALSE;
if (strcmp(ev->key, "BackSpace")) return; if (strcmp(ev->key, "BackSpace")) return EINA_FALSE;
eo_do(obj, elm_obj_naviframe_top_item_get((Elm_Object_Item **)&it)); eo_do(obj, elm_obj_naviframe_top_item_get((Elm_Object_Item **)&it));
if (!it) return; if (!it) return EINA_FALSE;
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
if (ret) *ret = EINA_TRUE;
//FIXME: Replace this below code to elm_naviframe_item_pop() at elm 2.0. //FIXME: Replace this below code to elm_naviframe_item_pop() at elm 2.0.
///Leave for compatibility. ///Leave for compatibility.
if (it->title_prev_btn) if (it->title_prev_btn)
evas_object_smart_callback_call(it->title_prev_btn, SIG_CLICKED, NULL); evas_object_smart_callback_call(it->title_prev_btn, SIG_CLICKED, NULL);
return EINA_TRUE;
} }
static void EOLIAN static void
_elm_naviframe_smart_access(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list) _elc_naviframe_elm_widget_access(Eo *obj EINA_UNUSED, Elc_Naviframe_Data *sd, Eina_Bool is_access)
{ {
Elm_Naviframe_Smart_Data *sd = _pd;
Elm_Naviframe_Item *it; Elm_Naviframe_Item *it;
Eina_Bool is_access = va_arg(*list, int);
EINA_INLIST_FOREACH(sd->stack, it) EINA_INLIST_FOREACH(sd->stack, it)
_access_obj_process(it, is_access); _access_obj_process(it, is_access);
} }
@ -1532,8 +1479,8 @@ elm_naviframe_add(Evas_Object *parent)
return obj; return obj;
} }
static void EOLIAN static void
_constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED) _elc_naviframe_eo_base_constructor(Eo *obj, Elc_Naviframe_Data *sd EINA_UNUSED)
{ {
eo_do_super(obj, MY_CLASS, eo_constructor()); eo_do_super(obj, MY_CLASS, eo_constructor());
eo_do(obj, eo_do(obj,
@ -1541,71 +1488,25 @@ _constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED)
evas_obj_smart_callbacks_descriptions_set(_smart_callbacks, NULL)); evas_obj_smart_callbacks_descriptions_set(_smart_callbacks, NULL));
} }
EAPI Elm_Object_Item * EOLIAN static Elm_Object_Item*
elm_naviframe_item_push(Evas_Object *obj, _elc_naviframe_item_push(Eo *obj, Elc_Naviframe_Data *sd EINA_UNUSED, const char *title_label, Evas_Object *prev_btn, Evas_Object *next_btn, Evas_Object *content, const char *item_style)
const char *title_label,
Evas_Object *prev_btn,
Evas_Object *next_btn,
Evas_Object *content,
const char *item_style)
{
ELM_NAVIFRAME_CHECK(obj) NULL;
Elm_Object_Item *ret = NULL;
eo_do(obj, elm_obj_naviframe_item_push(title_label, prev_btn, next_btn, content, item_style, &ret));
return ret;
}
static void
_item_push(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
{ {
Elm_Naviframe_Item *top_item, *item; Elm_Naviframe_Item *top_item, *item;
const char *title_label = va_arg(*list, const char *);
Evas_Object *prev_btn = va_arg(*list, Evas_Object *);
Evas_Object *next_btn = va_arg(*list, Evas_Object *);
Evas_Object *content = va_arg(*list, Evas_Object *);
const char *item_style = va_arg(*list, const char *);
Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **);
*ret = NULL;
top_item = (Elm_Naviframe_Item *)elm_naviframe_top_item_get(obj); top_item = (Elm_Naviframe_Item *)elm_naviframe_top_item_get(obj);
item = _item_new(obj, top_item, item = _item_new(obj, top_item,
title_label, prev_btn, next_btn, content, item_style); title_label, prev_btn, next_btn, content, item_style);
if (!item) return; if (!item) return NULL;
_item_push_helper(item); _item_push_helper(item);
*ret = (Elm_Object_Item *)item; return (Elm_Object_Item *)item;
} }
EAPI Elm_Object_Item * EOLIAN static Elm_Object_Item*
elm_naviframe_item_insert_before(Evas_Object *obj, _elc_naviframe_item_insert_before(Eo *obj, Elc_Naviframe_Data *sd, Elm_Object_Item *before, const char *title_label, Evas_Object *prev_btn, Evas_Object *next_btn, Evas_Object *content, const char *item_style)
Elm_Object_Item *before,
const char *title_label,
Evas_Object *prev_btn,
Evas_Object *next_btn,
Evas_Object *content,
const char *item_style)
{
ELM_NAVIFRAME_CHECK(obj) NULL;
Elm_Object_Item *ret = NULL;
eo_do(obj, elm_obj_naviframe_item_insert_before(before, title_label, prev_btn, next_btn, content, item_style, &ret));
return ret;
}
static void
_item_insert_before(Eo *obj, void *_pd, va_list *list)
{ {
Elm_Naviframe_Item *it, *prev_it = NULL; Elm_Naviframe_Item *it, *prev_it = NULL;
Elm_Object_Item *before = va_arg(*list, Elm_Object_Item *); ELM_NAVIFRAME_ITEM_CHECK_OR_RETURN(before, NULL);
const char *title_label = va_arg(*list, const char *);
Evas_Object *prev_btn = va_arg(*list, Evas_Object *);
Evas_Object *next_btn = va_arg(*list, Evas_Object *);
Evas_Object *content = va_arg(*list, Evas_Object *);
const char *item_style = va_arg(*list, const char *);
Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **);
*ret = NULL;
ELM_NAVIFRAME_ITEM_CHECK(before);
Elm_Naviframe_Smart_Data *sd = _pd;
it = (Elm_Naviframe_Item *)before; it = (Elm_Naviframe_Item *)before;
if (EINA_INLIST_GET(it)->prev) if (EINA_INLIST_GET(it)->prev)
@ -1613,7 +1514,7 @@ _item_insert_before(Eo *obj, void *_pd, va_list *list)
Elm_Naviframe_Item); Elm_Naviframe_Item);
it = _item_new(obj, prev_it, it = _item_new(obj, prev_it,
title_label, prev_btn, next_btn, content, item_style); title_label, prev_btn, next_btn, content, item_style);
if (!it) return; if (!it) return NULL;
sd->stack = eina_inlist_prepend_relative sd->stack = eina_inlist_prepend_relative
(sd->stack, EINA_INLIST_GET(it), (sd->stack, EINA_INLIST_GET(it),
@ -1623,45 +1524,20 @@ _item_insert_before(Eo *obj, void *_pd, va_list *list)
elm_layout_sizing_eval(obj); elm_layout_sizing_eval(obj);
*ret = (Elm_Object_Item *)it; return (Elm_Object_Item *)it;
} }
EAPI Elm_Object_Item * EOLIAN static Elm_Object_Item*
elm_naviframe_item_insert_after(Evas_Object *obj, _elc_naviframe_item_insert_after(Eo *obj, Elc_Naviframe_Data *sd, Elm_Object_Item *after, const char *title_label, Evas_Object *prev_btn, Evas_Object *next_btn, Evas_Object *content, const char *item_style)
Elm_Object_Item *after,
const char *title_label,
Evas_Object *prev_btn,
Evas_Object *next_btn,
Evas_Object *content,
const char *item_style)
{
ELM_NAVIFRAME_CHECK(obj) NULL;
Elm_Object_Item *ret = NULL;
eo_do(obj, elm_obj_naviframe_item_insert_after(after, title_label, prev_btn, next_btn, content, item_style, &ret));
return ret;
}
static void
_item_insert_after(Eo *obj, void *_pd, va_list *list)
{ {
Elm_Naviframe_Item *it; Elm_Naviframe_Item *it;
Eina_Bool top_inserted = EINA_FALSE; Eina_Bool top_inserted = EINA_FALSE;
Elm_Object_Item *after = va_arg(*list, Elm_Object_Item *); ELM_NAVIFRAME_ITEM_CHECK_OR_RETURN(after, NULL);
const char *title_label = va_arg(*list, const char *);
Evas_Object *prev_btn = va_arg(*list, Evas_Object *);
Evas_Object *next_btn = va_arg(*list, Evas_Object *);
Evas_Object *content = va_arg(*list, Evas_Object *);
const char *item_style = va_arg(*list, const char *);
Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **);
*ret = NULL;
ELM_NAVIFRAME_ITEM_CHECK(after);
Elm_Naviframe_Smart_Data *sd = _pd;
it = _item_new(obj, (Elm_Naviframe_Item *)after, it = _item_new(obj, (Elm_Naviframe_Item *)after,
title_label, prev_btn, next_btn, content, item_style); title_label, prev_btn, next_btn, content, item_style);
if (!it) return; if (!it) return NULL;
if (elm_naviframe_top_item_get(obj) == after) top_inserted = EINA_TRUE; if (elm_naviframe_top_item_get(obj) == after) top_inserted = EINA_TRUE;
@ -1686,35 +1562,21 @@ _item_insert_after(Eo *obj, void *_pd, va_list *list)
elm_layout_sizing_eval(obj); elm_layout_sizing_eval(obj);
*ret = (Elm_Object_Item *)it; return (Elm_Object_Item *)it;
} }
EAPI Evas_Object * EOLIAN static Evas_Object*
elm_naviframe_item_pop(Evas_Object *obj) _elc_naviframe_item_pop(Eo *obj, Elc_Naviframe_Data *sd)
{
ELM_NAVIFRAME_CHECK(obj) NULL;
Evas_Object *ret = NULL;
eo_do(obj, elm_obj_naviframe_item_pop(&ret));
return ret;
}
static void
_item_pop(Eo *obj, void *_pd, va_list *list)
{ {
Elm_Naviframe_Item *it, *prev_it = NULL; Elm_Naviframe_Item *it, *prev_it = NULL;
Evas_Object *content = NULL; Evas_Object *content = NULL;
Evas_Object **ret = va_arg(*list, Evas_Object **); if (sd->freeze_events && sd->popping) return NULL;
*ret = NULL;
Elm_Naviframe_Smart_Data *sd = _pd;
if (sd->freeze_events && sd->popping) return;
it = (Elm_Naviframe_Item *)elm_naviframe_top_item_get(obj); it = (Elm_Naviframe_Item *)elm_naviframe_top_item_get(obj);
if (!it) return; if (!it) return NULL;
if (it->popping) return; if (it->popping) return NULL;
it->popping = EINA_TRUE; it->popping = EINA_TRUE;
evas_object_ref(obj); evas_object_ref(obj);
@ -1729,7 +1591,7 @@ _item_pop(Eo *obj, void *_pd, va_list *list)
else else
it->popping = EINA_FALSE; it->popping = EINA_FALSE;
evas_object_unref(obj); evas_object_unref(obj);
return; return NULL;
} }
it->ref--; it->ref--;
} }
@ -1774,7 +1636,7 @@ _item_pop(Eo *obj, void *_pd, va_list *list)
else else
elm_widget_item_del(it); elm_widget_item_del(it);
*ret = content; return content;
} }
EAPI void EAPI void
@ -1829,23 +1691,11 @@ elm_naviframe_item_promote(Elm_Object_Item *it)
_item_push_helper(nit); _item_push_helper(nit);
} }
EAPI void EOLIAN static void
elm_naviframe_item_simple_promote(Evas_Object *obj, _elc_naviframe_item_simple_promote(Eo *obj EINA_UNUSED, Elc_Naviframe_Data *sd, Evas_Object *content)
Evas_Object *content)
{
ELM_NAVIFRAME_CHECK(obj);
eo_do(obj, elm_obj_naviframe_item_simple_promote(content));
}
static void
_item_simple_promote(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
{ {
Elm_Naviframe_Item *itr; Elm_Naviframe_Item *itr;
Evas_Object *content = va_arg(*list, Evas_Object *);
Elm_Naviframe_Smart_Data *sd = _pd;
EINA_INLIST_FOREACH(sd->stack, itr) EINA_INLIST_FOREACH(sd->stack, itr)
{ {
if (elm_object_item_content_get((Elm_Object_Item *)itr) == content) if (elm_object_item_content_get((Elm_Object_Item *)itr) == content)
@ -1856,80 +1706,31 @@ _item_simple_promote(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
} }
} }
EAPI void EOLIAN static void
elm_naviframe_content_preserve_on_pop_set(Evas_Object *obj, _elc_naviframe_content_preserve_on_pop_set(Eo *obj EINA_UNUSED, Elc_Naviframe_Data *sd, Eina_Bool preserve)
Eina_Bool preserve)
{ {
ELM_NAVIFRAME_CHECK(obj);
eo_do(obj, elm_obj_naviframe_content_preserve_on_pop_set(preserve));
}
static void
_content_preserve_on_pop_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
{
Eina_Bool preserve = va_arg(*list, int);
Elm_Naviframe_Smart_Data *sd = _pd;
sd->preserve = !!preserve; sd->preserve = !!preserve;
} }
EAPI Eina_Bool EOLIAN static Eina_Bool
elm_naviframe_content_preserve_on_pop_get(const Evas_Object *obj) _elc_naviframe_content_preserve_on_pop_get(Eo *obj EINA_UNUSED, Elc_Naviframe_Data *sd)
{ {
ELM_NAVIFRAME_CHECK(obj) EINA_FALSE; return sd->preserve;
Eina_Bool ret = EINA_FALSE;
eo_do((Eo *) obj, elm_obj_naviframe_content_preserve_on_pop_get(&ret));
return ret;
} }
static void EOLIAN static Elm_Object_Item*
_content_preserve_on_pop_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) _elc_naviframe_top_item_get(Eo *obj EINA_UNUSED, Elc_Naviframe_Data *sd)
{ {
Eina_Bool *ret = va_arg(*list, Eina_Bool *); if (!sd->stack) return NULL;
Elm_Naviframe_Smart_Data *sd = _pd; return (Elm_Object_Item *)(EINA_INLIST_CONTAINER_GET
*ret = sd->preserve;
}
EAPI Elm_Object_Item *
elm_naviframe_top_item_get(const Evas_Object *obj)
{
ELM_NAVIFRAME_CHECK(obj) NULL;
Elm_Object_Item *ret = NULL;
eo_do((Eo *) obj, elm_obj_naviframe_top_item_get(&ret));
return ret;
}
static void
_top_item_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
{
Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **);
*ret = NULL;
Elm_Naviframe_Smart_Data *sd = _pd;
if (!sd->stack) return;
*ret = (Elm_Object_Item *)(EINA_INLIST_CONTAINER_GET
(sd->stack->last, Elm_Naviframe_Item)); (sd->stack->last, Elm_Naviframe_Item));
} }
EAPI Elm_Object_Item * EOLIAN static Elm_Object_Item*
elm_naviframe_bottom_item_get(const Evas_Object *obj) _elc_naviframe_bottom_item_get(Eo *obj EINA_UNUSED, Elc_Naviframe_Data *sd)
{ {
ELM_NAVIFRAME_CHECK(obj) NULL; if (!sd->stack) return NULL;
Elm_Object_Item *ret = NULL; return (Elm_Object_Item *)(EINA_INLIST_CONTAINER_GET
eo_do((Eo *) obj, elm_obj_naviframe_bottom_item_get(&ret));
return ret;
}
static void
_bottom_item_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
{
Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **);
*ret = NULL;
Elm_Naviframe_Smart_Data *sd = _pd;
if (!sd->stack) return;
*ret = (Elm_Object_Item *)(EINA_INLIST_CONTAINER_GET
(sd->stack, Elm_Naviframe_Item)); (sd->stack, Elm_Naviframe_Item));
} }
@ -2013,184 +1814,54 @@ elm_naviframe_item_pop_cb_set(Elm_Object_Item *it, Elm_Naviframe_Item_Pop_Cb fun
nit->pop_data = data; nit->pop_data = data;
} }
EAPI void EOLIAN static void
elm_naviframe_prev_btn_auto_pushed_set(Evas_Object *obj, _elc_naviframe_prev_btn_auto_pushed_set(Eo *obj EINA_UNUSED, Elc_Naviframe_Data *sd, Eina_Bool auto_pushed)
Eina_Bool auto_pushed)
{ {
ELM_NAVIFRAME_CHECK(obj);
eo_do(obj, elm_obj_naviframe_prev_btn_auto_pushed_set(auto_pushed));
}
static void
_prev_btn_auto_pushed_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
{
Eina_Bool auto_pushed = va_arg(*list, int);
Elm_Naviframe_Smart_Data *sd = _pd;
sd->auto_pushed = !!auto_pushed; sd->auto_pushed = !!auto_pushed;
} }
EAPI Eina_Bool EOLIAN static Eina_Bool
elm_naviframe_prev_btn_auto_pushed_get(const Evas_Object *obj) _elc_naviframe_prev_btn_auto_pushed_get(Eo *obj EINA_UNUSED, Elc_Naviframe_Data *sd)
{ {
ELM_NAVIFRAME_CHECK(obj) EINA_FALSE; return sd->auto_pushed;
Eina_Bool ret = EINA_FALSE;
eo_do((Eo *) obj, elm_obj_naviframe_prev_btn_auto_pushed_get(&ret));
return ret;
} }
static void EOLIAN static Eina_List*
_prev_btn_auto_pushed_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) _elc_naviframe_items_get(Eo *obj EINA_UNUSED, Elc_Naviframe_Data *sd)
{ {
Eina_Bool *ret = va_arg(*list, Eina_Bool *); Eina_List *ret = NULL;
Elm_Naviframe_Smart_Data *sd = _pd;
*ret = sd->auto_pushed;
}
EAPI Eina_List *
elm_naviframe_items_get(const Evas_Object *obj)
{
ELM_NAVIFRAME_CHECK(obj) NULL;
Eina_List *ret;
eo_do((Eo *) obj, elm_obj_naviframe_items_get(&ret));
return ret;
}
static void
_items_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
{
Eina_List **ret = va_arg(*list, Eina_List **);
*ret = NULL;
Elm_Naviframe_Item *itr; Elm_Naviframe_Item *itr;
Elm_Naviframe_Smart_Data *sd = _pd;
EINA_INLIST_FOREACH(sd->stack, itr) EINA_INLIST_FOREACH(sd->stack, itr)
*ret = eina_list_append(*ret, itr); ret = eina_list_append(ret, itr);
return ret;
} }
EAPI void EOLIAN static void
elm_naviframe_event_enabled_set(Evas_Object *obj, _elc_naviframe_event_enabled_set(Eo *obj EINA_UNUSED, Elc_Naviframe_Data *sd, Eina_Bool enabled)
Eina_Bool enabled)
{ {
ELM_NAVIFRAME_CHECK(obj);
eo_do(obj, elm_obj_naviframe_event_enabled_set(enabled));
}
static void
_event_enabled_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
{
Eina_Bool enabled = va_arg(*list, int);
Elm_Naviframe_Smart_Data *sd = _pd;
enabled = !!enabled; enabled = !!enabled;
if (sd->freeze_events == !enabled) return; if (sd->freeze_events == !enabled) return;
sd->freeze_events = !enabled; sd->freeze_events = !enabled;
} }
EAPI Eina_Bool EOLIAN static Eina_Bool
elm_naviframe_event_enabled_get(const Evas_Object *obj) _elc_naviframe_event_enabled_get(Eo *obj EINA_UNUSED, Elc_Naviframe_Data *sd)
{ {
ELM_NAVIFRAME_CHECK(obj) EINA_FALSE; return !sd->freeze_events;
Eina_Bool ret = EINA_FALSE; }
eo_do((Eo *) obj, elm_obj_naviframe_event_enabled_get(&ret));
return ret; EOLIAN static Eina_Bool
_elc_naviframe_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elc_Naviframe_Data *sd EINA_UNUSED)
{
return EINA_TRUE;
} }
static void static void
_event_enabled_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) _elc_naviframe_class_constructor(Eo_Class *klass)
{ {
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
Elm_Naviframe_Smart_Data *sd = _pd;
*ret = !sd->freeze_events;
}
static void
_elm_naviframe_smart_focus_next_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list)
{
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
*ret = EINA_TRUE;
}
static void
_class_constructor(Eo_Class *klass)
{
const Eo_Op_Func_Description func_desc[] = {
EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor),
EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_ADD), _elm_naviframe_smart_add),
EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_DEL), _elm_naviframe_smart_del),
EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_SHOW), _elm_naviframe_smart_show),
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_NEXT_MANAGER_IS), _elm_naviframe_smart_focus_next_manager_is),
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_NEXT), _elm_naviframe_smart_focus_next),
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_DIRECTION_MANAGER_IS), _elm_naviframe_smart_focus_direction_manager_is),
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_DIRECTION), _elm_naviframe_smart_focus_direction),
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_THEME_APPLY), _elm_naviframe_smart_theme),
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_TRANSLATE), _elm_naviframe_smart_translate),
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_ACCESS), _elm_naviframe_smart_access),
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_EVENT), _elm_naviframe_smart_event),
EO_OP_FUNC(ELM_OBJ_CONTAINER_ID(ELM_OBJ_CONTAINER_SUB_ID_CONTENT_SET), _elm_naviframe_smart_content_set),
EO_OP_FUNC(ELM_OBJ_CONTAINER_ID(ELM_OBJ_CONTAINER_SUB_ID_CONTENT_GET), _elm_naviframe_smart_content_get),
EO_OP_FUNC(ELM_OBJ_CONTAINER_ID(ELM_OBJ_CONTAINER_SUB_ID_CONTENT_UNSET), _elm_naviframe_smart_content_unset),
EO_OP_FUNC(ELM_OBJ_LAYOUT_ID(ELM_OBJ_LAYOUT_SUB_ID_SIGNAL_EMIT), _elm_naviframe_smart_signal_emit),
EO_OP_FUNC(ELM_OBJ_LAYOUT_ID(ELM_OBJ_LAYOUT_SUB_ID_TEXT_SET), _elm_naviframe_smart_text_set),
EO_OP_FUNC(ELM_OBJ_LAYOUT_ID(ELM_OBJ_LAYOUT_SUB_ID_TEXT_GET), _elm_naviframe_smart_text_get),
EO_OP_FUNC(ELM_OBJ_LAYOUT_ID(ELM_OBJ_LAYOUT_SUB_ID_SIZING_EVAL), _elm_naviframe_smart_sizing_eval),
EO_OP_FUNC(ELM_OBJ_NAVIFRAME_ID(ELM_OBJ_NAVIFRAME_SUB_ID_ITEM_PUSH), _item_push),
EO_OP_FUNC(ELM_OBJ_NAVIFRAME_ID(ELM_OBJ_NAVIFRAME_SUB_ID_ITEM_INSERT_BEFORE), _item_insert_before),
EO_OP_FUNC(ELM_OBJ_NAVIFRAME_ID(ELM_OBJ_NAVIFRAME_SUB_ID_ITEM_INSERT_AFTER), _item_insert_after),
EO_OP_FUNC(ELM_OBJ_NAVIFRAME_ID(ELM_OBJ_NAVIFRAME_SUB_ID_ITEM_POP), _item_pop),
EO_OP_FUNC(ELM_OBJ_NAVIFRAME_ID(ELM_OBJ_NAVIFRAME_SUB_ID_ITEM_SIMPLE_PROMOTE), _item_simple_promote),
EO_OP_FUNC(ELM_OBJ_NAVIFRAME_ID(ELM_OBJ_NAVIFRAME_SUB_ID_CONTENT_PRESERVE_ON_POP_SET), _content_preserve_on_pop_set),
EO_OP_FUNC(ELM_OBJ_NAVIFRAME_ID(ELM_OBJ_NAVIFRAME_SUB_ID_CONTENT_PRESERVE_ON_POP_GET), _content_preserve_on_pop_get),
EO_OP_FUNC(ELM_OBJ_NAVIFRAME_ID(ELM_OBJ_NAVIFRAME_SUB_ID_TOP_ITEM_GET), _top_item_get),
EO_OP_FUNC(ELM_OBJ_NAVIFRAME_ID(ELM_OBJ_NAVIFRAME_SUB_ID_BOTTOM_ITEM_GET), _bottom_item_get),
EO_OP_FUNC(ELM_OBJ_NAVIFRAME_ID(ELM_OBJ_NAVIFRAME_SUB_ID_PREV_BTN_AUTO_PUSHED_SET), _prev_btn_auto_pushed_set),
EO_OP_FUNC(ELM_OBJ_NAVIFRAME_ID(ELM_OBJ_NAVIFRAME_SUB_ID_PREV_BTN_AUTO_PUSHED_GET), _prev_btn_auto_pushed_get),
EO_OP_FUNC(ELM_OBJ_NAVIFRAME_ID(ELM_OBJ_NAVIFRAME_SUB_ID_ITEMS_GET), _items_get),
EO_OP_FUNC(ELM_OBJ_NAVIFRAME_ID(ELM_OBJ_NAVIFRAME_SUB_ID_EVENT_ENABLED_SET), _event_enabled_set),
EO_OP_FUNC(ELM_OBJ_NAVIFRAME_ID(ELM_OBJ_NAVIFRAME_SUB_ID_EVENT_ENABLED_GET), _event_enabled_get),
EO_OP_FUNC_SENTINEL
};
eo_class_funcs_set(klass, func_desc);
evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass); evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
} }
static const #include "elc_naviframe.eo.c"
Eo_Op_Description op_desc[] = {
EO_OP_DESCRIPTION(ELM_OBJ_NAVIFRAME_SUB_ID_ITEM_PUSH, "Push a new item to the top of the naviframe stack (and show it)."),
EO_OP_DESCRIPTION(ELM_OBJ_NAVIFRAME_SUB_ID_ITEM_INSERT_BEFORE, "Insert a new item into the naviframe before item before."),
EO_OP_DESCRIPTION(ELM_OBJ_NAVIFRAME_SUB_ID_ITEM_INSERT_AFTER, "Insert a new item into the naviframe after item after."),
EO_OP_DESCRIPTION(ELM_OBJ_NAVIFRAME_SUB_ID_ITEM_POP, "Pop an item that is on top of the stack."),
EO_OP_DESCRIPTION(ELM_OBJ_NAVIFRAME_SUB_ID_ITEM_SIMPLE_PROMOTE, "Simple version of item_promote."),
EO_OP_DESCRIPTION(ELM_OBJ_NAVIFRAME_SUB_ID_CONTENT_PRESERVE_ON_POP_SET, "preserve the content objects when items are popped."),
EO_OP_DESCRIPTION(ELM_OBJ_NAVIFRAME_SUB_ID_CONTENT_PRESERVE_ON_POP_GET, "Get a value whether preserve mode is enabled or not."),
EO_OP_DESCRIPTION(ELM_OBJ_NAVIFRAME_SUB_ID_TOP_ITEM_GET, "Get a top item on the naviframe stack."),
EO_OP_DESCRIPTION(ELM_OBJ_NAVIFRAME_SUB_ID_BOTTOM_ITEM_GET, "Get a bottom item on the naviframe stack."),
EO_OP_DESCRIPTION(ELM_OBJ_NAVIFRAME_SUB_ID_PREV_BTN_AUTO_PUSHED_SET, "Set creating prev button automatically or not."),
EO_OP_DESCRIPTION(ELM_OBJ_NAVIFRAME_SUB_ID_PREV_BTN_AUTO_PUSHED_GET, "Get a value whether prev button(back button) will be auto pushed or not."),
EO_OP_DESCRIPTION(ELM_OBJ_NAVIFRAME_SUB_ID_ITEMS_GET, "Get a list of all the naviframe items."),
EO_OP_DESCRIPTION(ELM_OBJ_NAVIFRAME_SUB_ID_EVENT_ENABLED_SET, "Set the event enabled when pushing/popping items."),
EO_OP_DESCRIPTION(ELM_OBJ_NAVIFRAME_SUB_ID_EVENT_ENABLED_GET, "Get the value of event enabled status."),
EO_OP_DESCRIPTION_SENTINEL
};
static const Eo_Class_Description class_desc = {
EO_VERSION,
MY_CLASS_NAME,
EO_CLASS_TYPE_REGULAR,
EO_CLASS_DESCRIPTION_OPS(&ELM_OBJ_NAVIFRAME_BASE_ID, op_desc, ELM_OBJ_NAVIFRAME_SUB_ID_LAST),
NULL,
sizeof(Elm_Naviframe_Smart_Data),
_class_constructor,
NULL
};
EO_DEFINE_CLASS(elm_obj_naviframe_class_get, &class_desc, ELM_OBJ_LAYOUT_CLASS, NULL);

View File

@ -0,0 +1,289 @@
class Elc_Naviframe (Elm_Layout)
{
legacy_prefix: elm_naviframe;
eo_prefix: elm_obj_naviframe;
properties {
event_enabled {
set {
/*@
@brief Set the event enabled when pushing/popping items
If @p enabled is @c EINA_TRUE, the contents of the naviframe item will
receives events from mouse and keyboard during view changing such as
item push/pop.
@warning Events will be blocked by calling evas_object_freeze_events_set()
internally. So don't call the API whiling pushing/popping items.
@see elm_naviframe_event_enabled_get()
@see evas_object_freeze_events_set()
@ingroup Naviframe */
}
get {
/*@
@brief Get the value of event enabled status.
@return @c EINA_TRUE, when event is enabled
@see elm_naviframe_event_enabled_set()
@ingroup Naviframe */
}
values {
Eina_Bool enabled; /*@ Events are received when enabled is @c EINA_TRUE, and
ignored otherwise. */
}
}
content_preserve_on_pop {
set {
/*@
@brief preserve the content objects when items are popped.
@see also elm_naviframe_content_preserve_on_pop_get()
@ingroup Naviframe */
}
get {
/*@
@brief Get a value whether preserve mode is enabled or not.
@return If @c EINA_TRUE, preserve mode is enabled
@see also elm_naviframe_content_preserve_on_pop_set()
@ingroup Naviframe */
}
values {
Eina_Bool preserve; /*@ Enable the preserve mode if @c EINA_TRUE, disable otherwise */
}
}
prev_btn_auto_pushed {
set {
/*@
@brief Set creating prev button automatically or not
@see also elm_naviframe_item_push()
@ingroup Naviframe */
}
get {
/*@
@brief Get a value whether prev button(back button) will be auto pushed or
not.
@return If @c EINA_TRUE, prev button will be auto pushed.
@see also elm_naviframe_item_push()
elm_naviframe_prev_btn_auto_pushed_set()
@ingroup Naviframe */
}
values {
Eina_Bool auto_pushed; /*@ If @c EINA_TRUE, the previous button(back button) will
be created internally when you pass the @c NULL to the prev_btn
parameter in elm_naviframe_item_push */
}
}
items {
get {
/*@
@brief Get a list of all the naviframe items.
@return An Eina_List of naviframe items, #Elm_Object_Item,
or @c NULL on failure.
@note The returned list MUST be freed.
@ingroup Naviframe */
return Eina_List * @warn_unused;
}
}
top_item {
get {
/*@
@brief Get a top item on the naviframe stack
@return The top item on the naviframe stack or @c NULL, if the stack is
empty
@ingroup Naviframe */
return Elm_Object_Item *;
}
}
bottom_item {
get {
/*@
@brief Get a bottom item on the naviframe stack
@return The bottom item on the naviframe stack or @c NULL, if the stack is
empty
@ingroup Naviframe */
return Elm_Object_Item *;
}
}
}
methods {
item_pop {
/*@
@brief Pop an item that is on top of the stack
@return @c NULL or the content object(if the
elm_naviframe_content_preserve_on_pop_get is true).
This pops an item that is on the top(visible) of the naviframe, makes it
disappear, then deletes the item. The item that was underneath it on the
stack will become visible.
@see also elm_naviframe_content_preserve_on_pop_get()
@see also elm_naviframe_item_pop_cb_set()
@ingroup Naviframe */
return Evas_Object *;
}
item_insert_before {
/*@
@brief Insert a new item into the naviframe before item @p before.
@return The created item or @c NULL upon failure.
The item is inserted into the naviframe straight away without any
transition operations. This item will be deleted when it is popped.
@see also elm_naviframe_item_style_set()
@see also elm_naviframe_item_push()
@see also elm_naviframe_item_insert_after()
The following styles are available for this item:
@li @c "default"
@ingroup Naviframe */
return Elm_Object_Item *;
params {
@in Elm_Object_Item *before; /*@ The naviframe item to insert before. */
@in const char *title_label; /*@ The label in the title area. The name of the title
label part is "elm.text.title" */
@in Evas_Object *prev_btn; /*@ The button to go to the previous item. If it is NULL,
then naviframe will create a back button automatically. The name of
the prev_btn part is "elm.swallow.prev_btn" */
@in Evas_Object *next_btn; /*@ The button to go to the next item. Or It could be just an
extra function button. The name of the next_btn part is
"elm.swallow.next_btn" */
@in Evas_Object *content; /*@ The main content object. The name of content part is
"elm.swallow.content" */
@in const char *item_style; /*@ The current item style name. @c NULL would be default. */
}
}
item_push {
/*@
@brief Push a new item to the top of the naviframe stack (and show it).
@return The created item or @c NULL upon failure.
The item pushed becomes one page of the naviframe, this item will be
deleted when it is popped.
@see also elm_naviframe_item_style_set()
@see also elm_naviframe_item_insert_before()
@see also elm_naviframe_item_insert_after()
The following styles are available for this item:
@li @c "default"
@ingroup Naviframe */
return Elm_Object_Item *;
params {
@in const char *title_label; /*@ The label in the title area. The name of the title
label part is "elm.text.title" */
@in Evas_Object *prev_btn; /*@ The button to go to the previous item. If it is NULL,
then naviframe will create a back button automatically. The name of
the prev_btn part is "elm.swallow.prev_btn" */
@in Evas_Object *next_btn; /*@ The button to go to the next item. Or It could be just an
extra function button. The name of the next_btn part is
"elm.swallow.next_btn" */
@in Evas_Object *content; /*@ The main content object. The name of content part is
"elm.swallow.content" */
@in const char *item_style; /*@ The current item style name. @c NULL would be default. */
}
}
item_simple_promote {
/*@
@brief Simple version of item_promote.
@see elm_naviframe_item_promote */
params {
@in Evas_Object *content;
}
}
item_insert_after {
/*@
@brief Insert a new item into the naviframe after item @p after.
@return The created item or @c NULL upon failure.
The item is inserted into the naviframe straight away without any
transition operations. This item will be deleted when it is popped.
@see also elm_naviframe_item_style_set()
@see also elm_naviframe_item_push()
@see also elm_naviframe_item_insert_before()
The following styles are available for this item:
@li @c "default"
@ingroup Naviframe */
return Elm_Object_Item *;
params {
@in Elm_Object_Item *after; /*@ The naviframe item to insert after. */
@in const char *title_label; /*@ The label in the title area. The name of the title
label part is "elm.text.title" */
@in Evas_Object *prev_btn; /*@ The button to go to the previous item. If it is NULL,
then naviframe will create a back button automatically. The name of
the prev_btn part is "elm.swallow.prev_btn" */
@in Evas_Object *next_btn; /*@ The button to go to the next item. Or It could be just an
extra function button. The name of the next_btn part is
"elm.swallow.next_btn" */
@in Evas_Object *content; /*@ The main content object. The name of content part is
"elm.swallow.content" */
@in const char *item_style; /*@ The current item style name. @c NULL would be default. */
}
}
}
implements {
class::constructor;
Eo_Base::constructor;
Evas_Smart::del;
Evas_Smart::show;
Evas_Smart::add;
Elm_Widget::focus_direction;
Elm_Widget::focus_next_manager_is;
Elm_Widget::focus_direction_manager_is;
Elm_Widget::access;
Elm_Widget::focus_next;
Elm_Widget::translate;
Elm_Widget::theme_apply;
Elm_Widget::event;
Elm_Container::content_get;
Elm_Container::content_set;
Elm_Container::content_unset;
Elm_Layout::text_set;
Elm_Layout::text_get;
Elm_Layout::signal_emit;
Elm_Layout::sizing_eval;
}
events {
transition,finished;
title,transition,finished;
title,clicked;
language,changed;
access,changed;
focused;
unfocused;
}
}

View File

@ -3,6 +3,8 @@
* *
* @{ * @{
*/ */
#include "elc_naviframe.eo.h"
#if 0
#define ELM_OBJ_NAVIFRAME_CLASS elm_obj_naviframe_class_get() #define ELM_OBJ_NAVIFRAME_CLASS elm_obj_naviframe_class_get()
const Eo_Class *elm_obj_naviframe_class_get(void) EINA_CONST; const Eo_Class *elm_obj_naviframe_class_get(void) EINA_CONST;
@ -215,6 +217,7 @@ enum
* @see elm_naviframe_event_enabled_get * @see elm_naviframe_event_enabled_get
*/ */
#define elm_obj_naviframe_event_enabled_get(ret) ELM_OBJ_NAVIFRAME_ID(ELM_OBJ_NAVIFRAME_SUB_ID_EVENT_ENABLED_GET), EO_TYPECHECK(Eina_Bool *, ret) #define elm_obj_naviframe_event_enabled_get(ret) ELM_OBJ_NAVIFRAME_ID(ELM_OBJ_NAVIFRAME_SUB_ID_EVENT_ENABLED_GET), EO_TYPECHECK(Eina_Bool *, ret)
#endif
/** /**
* @} * @}
*/ */

View File

@ -17,8 +17,8 @@
/** /**
* Base layout smart data extended with naviframe instance data. * Base layout smart data extended with naviframe instance data.
*/ */
typedef struct _Elm_Naviframe_Smart_Data Elm_Naviframe_Smart_Data; typedef struct _Elc_Naviframe_Data Elc_Naviframe_Data;
struct _Elm_Naviframe_Smart_Data struct _Elc_Naviframe_Data
{ {
Eina_Inlist *stack; /* top item is the list's LAST item */ Eina_Inlist *stack; /* top item is the list's LAST item */
Eina_List *popping; Eina_List *popping;
@ -82,7 +82,7 @@ struct _Elm_Naviframe_Text_Item_Pair
*/ */
#define ELM_NAVIFRAME_DATA_GET(o, sd) \ #define ELM_NAVIFRAME_DATA_GET(o, sd) \
Elm_Naviframe_Smart_Data * sd = eo_data_scope_get(o, ELM_OBJ_NAVIFRAME_CLASS) Elc_Naviframe_Data * sd = eo_data_scope_get(o, ELM_OBJ_NAVIFRAME_CLASS)
#define ELM_NAVIFRAME_DATA_GET_OR_RETURN(o, ptr) \ #define ELM_NAVIFRAME_DATA_GET_OR_RETURN(o, ptr) \
ELM_NAVIFRAME_DATA_GET(o, ptr); \ ELM_NAVIFRAME_DATA_GET(o, ptr); \