From f00b247ee8a274284b3651066d971e8e192f407f Mon Sep 17 00:00:00 2001 From: ChunEon Park Date: Thu, 4 Aug 2011 16:37:36 +0000 Subject: [PATCH] elementary/elm_naviframe - modified to use elm_object_item common_apis SVN revision: 62097 --- src/bin/test_naviframe.c | 10 +- src/lib/Elementary.h.in | 5 +- src/lib/elc_naviframe.c | 303 ++++++++++++++++++++++++++++------------------- 3 files changed, 190 insertions(+), 128 deletions(-) diff --git a/src/bin/test_naviframe.c b/src/bin/test_naviframe.c index 453490f..5cc5e81 100644 --- a/src/bin/test_naviframe.c +++ b/src/bin/test_naviframe.c @@ -54,8 +54,8 @@ _page4(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) bt, bt2, NULL); - elm_naviframe_item_subtitle_label_set(it, "Here is sub-title part!"); - elm_naviframe_item_icon_set(it, ic); + elm_object_item_text_part_set(it, "elm.text.subtitle", "Here is sub-title part!"); + elm_object_item_content_part_set(it, "elm.swallow.icon", ic); elm_naviframe_item_title_visible_set(it, EINA_FALSE); evas_object_smart_callback_add(bt2, "clicked", _title_visible, it); } @@ -92,8 +92,8 @@ _page3(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) bt2, bt3, NULL); - elm_naviframe_item_subtitle_label_set(it, "Here is sub-title part!"); - elm_naviframe_item_icon_set(it, ic); + elm_object_item_text_part_set(it, "elm.text.subtitle", "Here is sub-title part!"); + elm_object_item_content_part_set(it, "elm.swallow.icon", ic); } void @@ -123,7 +123,7 @@ _page2(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) bt, bt2, NULL); - elm_naviframe_item_subtitle_label_set(it, "Here is sub-title part!"); + elm_object_item_text_part_set(it, "elm.text.subtitle", "Here is sub-title part!"); } void diff --git a/src/lib/Elementary.h.in b/src/lib/Elementary.h.in index ec47c2a..ae87c69 100644 --- a/src/lib/Elementary.h.in +++ b/src/lib/Elementary.h.in @@ -348,6 +348,7 @@ extern "C" { */ typedef struct _Elm_Object_Item Elm_Object_Item; + /** * Called back when a widget's tooltip is activated and needs content. * @param data user-data given to elm_object_tooltip_content_cb_set() @@ -24149,8 +24150,6 @@ extern "C" { EAPI Evas_Object *elm_naviframe_item_pop(Evas_Object *obj) EINA_ARG_NONNULL(1); EAPI void elm_naviframe_content_preserve_on_pop_set(Evas_Object *obj, Eina_Bool preserve) EINA_ARG_NONNULL(1); EAPI Eina_Bool elm_naviframe_content_preserve_on_pop_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); - EAPI void elm_naviframe_item_content_set(Elm_Object_Item *item, Evas_Object *content) EINA_ARG_NONNULL(1); - EAPI Evas_Object *elm_naviframe_item_content_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1); EAPI void elm_naviframe_item_title_label_set(Elm_Object_Item *it, const char *label) EINA_ARG_NONNULL(1); EAPI const char *elm_naviframe_item_title_label_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1); EAPI void elm_naviframe_item_subtitle_label_set(Elm_Object_Item *it, const char *label) EINA_ARG_NONNULL(1); @@ -24159,8 +24158,6 @@ extern "C" { EAPI Elm_Object_Item *elm_naviframe_bottom_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); EAPI void elm_naviframe_item_button_set(Elm_Object_Item *it, Evas_Object *btn, Elm_Naviframe_Button_Type btn_type) EINA_ARG_NONNULL(1); EAPI Evas_Object *elm_naviframe_item_button_get(const Elm_Object_Item *it, Elm_Naviframe_Button_Type btn_type) EINA_ARG_NONNULL(1); - EAPI void elm_naviframe_item_icon_set(Elm_Object_Item *it, Evas_Object *icon) EINA_ARG_NONNULL(1); - EAPI Evas_Object *elm_naviframe_item_icon_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1); EAPI void elm_naviframe_item_style_set(Elm_Object_Item *it, const char *item_style) EINA_ARG_NONNULL(1); EAPI const char *elm_naviframe_item_style_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1); EAPI void elm_naviframe_item_title_visible_set(Elm_Object_Item *it, Eina_Bool visible) EINA_ARG_NONNULL(1); diff --git a/src/lib/elc_naviframe.c b/src/lib/elc_naviframe.c index f49aff3..f224773 100644 --- a/src/lib/elc_naviframe.c +++ b/src/lib/elc_naviframe.c @@ -41,6 +41,18 @@ static const Evas_Smart_Cb_Description _signals[] = { static void _del_hook(Evas_Object *obj); static void _theme_hook(Evas_Object *obj); static void _disable_hook(Evas_Object *obj); +static void _text_set_hook(Elm_Object_Item *it, + const char *part, + const char *label); +static const char *_text_get_hook(const Elm_Object_Item *it, + const char *part); +static void _content_set_hook(Elm_Object_Item *it, + const char *part, + Evas_Object *content); +static Evas_Object *_content_get_hook(const Elm_Object_Item *it, + const char *part); +static Evas_Object *_content_unset_hook(Elm_Object_Item *it, + const char *part); 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); @@ -88,6 +100,15 @@ static void _show_finished(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _item_content_set(Elm_Naviframe_Item *navi_it, + Evas_Object *content); +static void _item_icon_set(Elm_Naviframe_Item *it, Evas_Object *icon); +static void _item_title_label_set(Elm_Naviframe_Item *navi_it, + const char *label); +static void _item_subtitle_label_set(Elm_Naviframe_Item *navi_it, + const char *label); + + static void _del_hook(Evas_Object *obj) @@ -118,6 +139,87 @@ _disable_hook(Evas_Object *obj __UNUSED__) } static void +_text_set_hook(Elm_Object_Item *it, const char *part, const char *label) +{ + ELM_OBJ_ITEM_CHECK_OR_RETURN(it); + Elm_Naviframe_Item *navi_it = ELM_CAST(it); + + if ((!part) || (!strcmp(part, "elm.text.title"))) + { + _item_title_label_set(navi_it, label); + return; + } + else if(!strcmp(part, "elm.text.subtitle")) + { + _item_subtitle_label_set(navi_it, label); + return; + } +} + +static const char * +_text_get_hook(const Elm_Object_Item *it, const char *part) +{ + ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); + Elm_Naviframe_Item *navi_it = ELM_CAST(it); + + if ((!part) || (!strcmp(part, "elm.text.title"))) + { + return navi_it->title_label; + } + else if(!strcmp(part, "elm.text.subtitle")) + { + return navi_it->title_sublabel; + } + return NULL; +} + +static void +_content_set_hook(Elm_Object_Item *it, + const char *part, + Evas_Object *content) +{ + ELM_OBJ_ITEM_CHECK_OR_RETURN(it); + Elm_Naviframe_Item *navi_it = ELM_CAST(it); + + if ((!(part)) || (!strcmp(part, "elm.swallow.content"))) + { + _item_content_set(navi_it, content); + return; + } + else if(!strcmp(part, "elm.swallow.icon")) + { + _item_icon_set(navi_it, content); + return; + } +} + +static Evas_Object * +_content_get_hook(const Elm_Object_Item *it, + const char *part) +{ + ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); + Elm_Naviframe_Item *navi_it = ELM_CAST(it); + + if ((!(part)) || (!strcmp(part, "elm.swallow.content"))) + { + return navi_it->content; + } + else if(!strcmp(part, "elm.swallow.icon")) + { + return navi_it->title_icon; + } + return NULL; +} + +static Evas_Object * +_content_unset_hook(Elm_Object_Item *it __UNUSED__, + const char *part __UNUSED__) +{ + //FIXME: + return NULL; +} + +static void _sizing_eval(Evas_Object *obj) { Widget_Data *wd; @@ -366,6 +468,79 @@ _show_finished(void *data, evas_object_pass_events_set(wd->base, EINA_FALSE); } +static void +_item_content_set(Elm_Naviframe_Item *navi_it, Evas_Object *content) +{ + if (navi_it->content == content) return; + if (navi_it->content) evas_object_del(navi_it->content); + elm_widget_sub_object_add(navi_it->base.widget, content); + edje_object_part_swallow(navi_it->base.view, "elm.swallow.content", content); + if (content) + edje_object_signal_emit(navi_it->base.view, + "elm,state,content,show", + "elm"); + else + edje_object_signal_emit(navi_it->base.view, + "elm,state,content,hide", + "elm"); + evas_object_event_callback_add(content, + EVAS_CALLBACK_DEL, + _content_del, + navi_it); + navi_it->content = content; + _item_sizing_eval(navi_it); +} + +static void +_item_icon_set(Elm_Naviframe_Item *navi_it, Evas_Object *icon) +{ + Widget_Data *wd = elm_widget_data_get(navi_it->base.widget); + if (!wd) return; + + if (navi_it->title_icon == icon) return; + if (navi_it->title_icon) evas_object_del(navi_it->title_icon); + navi_it->title_icon = icon; + if (!icon) + { + edje_object_signal_emit(navi_it->title, + "elm,state,icon,hide", + "elm"); + return; + } + elm_widget_sub_object_add(navi_it->base.widget, icon); + edje_object_part_swallow(navi_it->title, "elm.swallow.icon", icon); + edje_object_signal_emit(navi_it->title, "elm,state,icon,show", "elm"); + + evas_object_event_callback_add(icon, EVAS_CALLBACK_DEL, _title_icon_del, navi_it); + _item_sizing_eval(navi_it); +} + +static void +_item_title_label_set(Elm_Naviframe_Item *navi_it, const char *label) +{ + edje_object_part_text_set(navi_it->title, "elm.text.title", label); + if (label) + edje_object_signal_emit(navi_it->title, "elm,state,title,show", "elm"); + else + edje_object_signal_emit(navi_it->title, "elm,state,title,hidew", "elm"); + + eina_stringshare_replace(&navi_it->title_label, label); + _item_sizing_eval(navi_it); +} + +static void +_item_subtitle_label_set(Elm_Naviframe_Item *navi_it, const char *label) +{ + edje_object_part_text_set(navi_it->title, "elm.text.subtitle", label); + if (label) + edje_object_signal_emit(navi_it->title, "elm,state,subtitle,show", "elm"); + else + edje_object_signal_emit(navi_it->title, "elm,state,subtitle,hide", "elm"); + + eina_stringshare_replace(&navi_it->title_sublabel, label); + _item_sizing_eval(navi_it); +} + EAPI Evas_Object * elm_naviframe_add(Evas_Object *parent) { @@ -413,6 +588,13 @@ elm_naviframe_item_push(Evas_Object *obj, const char *title_label, Evas_Object * ERR("Failed to allocate new item! : naviframe=%p", obj); return NULL; } + + elm_widget_item_text_set_hook_set(it, _text_set_hook); + elm_widget_item_text_get_hook_set(it, _text_get_hook); + elm_widget_item_content_set_hook_set(it, _content_set_hook); + elm_widget_item_content_get_hook_set(it, _content_get_hook); + elm_widget_item_content_unset_hook_set(it, _content_unset_hook); + //item base layout it->base.view = edje_object_add(evas_object_evas_get(obj)); evas_object_smart_member_add(it->base.view, wd->base); @@ -443,7 +625,7 @@ elm_naviframe_item_push(Evas_Object *obj, const char *title_label, Evas_Object * "elm", _title_clicked, it); - elm_naviframe_item_title_label_set(ELM_CAST(it), title_label); + _item_title_label_set(it, title_label); //title buttons if ((!prev_btn) && (eina_list_count(wd->stack))) @@ -457,7 +639,7 @@ elm_naviframe_item_push(Evas_Object *obj, const char *title_label, Evas_Object * _title_next_btn_set(it, next_btn); edje_object_part_swallow(it->base.view, "elm.swallow.title", it->title); - elm_naviframe_item_content_set(ELM_CAST(it), content); + _item_content_set(it, content); _item_sizing_eval(it); evas_object_show(it->base.view); @@ -535,88 +717,6 @@ elm_naviframe_content_preserve_on_pop_get(const Evas_Object *obj) return wd->preserve; } -EAPI void -elm_naviframe_item_content_set(Elm_Object_Item *it, Evas_Object *content) -{ - ELM_OBJ_ITEM_CHECK_OR_RETURN(it); - Elm_Naviframe_Item *navi_it = ELM_CAST(it); - - if (navi_it->content == content) return; - if (navi_it->content) evas_object_del(navi_it->content); - elm_widget_sub_object_add(navi_it->base.widget, content); - edje_object_part_swallow(navi_it->base.view, "elm.swallow.content", content); - if (content) - edje_object_signal_emit(navi_it->base.view, - "elm,state,content,show", - "elm"); - else - edje_object_signal_emit(navi_it->base.view, - "elm,state,content,hide", - "elm"); - evas_object_event_callback_add(content, - EVAS_CALLBACK_DEL, - _content_del, - navi_it); - navi_it->content = content; - _item_sizing_eval(navi_it); -} - -EAPI Evas_Object * -elm_naviframe_item_content_get(const Elm_Object_Item *it) -{ - ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); - Elm_Naviframe_Item *navi_it = ELM_CAST(it); - return navi_it->content; -} - -EAPI void -elm_naviframe_item_title_label_set(Elm_Object_Item *it, const char *label) -{ - ELM_OBJ_ITEM_CHECK_OR_RETURN(it); - Elm_Naviframe_Item *navi_it = ELM_CAST(it); - - edje_object_part_text_set(navi_it->title, "elm.text.title", label); - if (label) - edje_object_signal_emit(navi_it->title, "elm,state,title,show", "elm"); - else - edje_object_signal_emit(navi_it->title, "elm,state,title,hidew", "elm"); - - eina_stringshare_replace(&navi_it->title_label, label); - _item_sizing_eval(navi_it); -} - -EAPI const char * -elm_naviframe_item_title_label_get(const Elm_Object_Item *it) -{ - ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); - Elm_Naviframe_Item *navi_it = ELM_CAST(it); - return navi_it->title_label; -} - -EAPI void -elm_naviframe_item_subtitle_label_set(Elm_Object_Item *it, const char *label) -{ - ELM_OBJ_ITEM_CHECK_OR_RETURN(it); - Elm_Naviframe_Item *navi_it = ELM_CAST(it); - - edje_object_part_text_set(navi_it->title, "elm.text.subtitle", label); - if (label) - edje_object_signal_emit(navi_it->title, "elm,state,subtitle,show", "elm"); - else - edje_object_signal_emit(navi_it->title, "elm,state,subtitle,hide", "elm"); - - eina_stringshare_replace(&navi_it->title_sublabel, label); - _item_sizing_eval(navi_it); -} - -EAPI const char * -elm_naviframe_item_subtitle_label_get(const Elm_Object_Item *it) -{ - ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); - Elm_Naviframe_Item *navi_it = ELM_CAST(it); - return navi_it->title_sublabel; -} - EAPI Elm_Object_Item* elm_naviframe_top_item_get(const Evas_Object *obj) { @@ -676,41 +776,6 @@ elm_naviframe_item_button_get(const Elm_Object_Item *it, Elm_Naviframe_Button_Ty } EAPI void -elm_naviframe_item_icon_set(Elm_Object_Item *it, Evas_Object *icon) -{ - 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); - if (!wd) return; - - if (navi_it->title_icon == icon) return; - if (navi_it->title_icon) evas_object_del(navi_it->title_icon); - navi_it->title_icon = icon; - if (!icon) - { - edje_object_signal_emit(navi_it->title, - "elm,state,icon,hide", - "elm"); - return; - } - elm_widget_sub_object_add(navi_it->base.widget, icon); - edje_object_part_swallow(navi_it->title, "elm.swallow.icon", icon); - edje_object_signal_emit(navi_it->title, "elm,state,icon,show", "elm"); - - evas_object_event_callback_add(icon, EVAS_CALLBACK_DEL, _title_icon_del, navi_it); - _item_sizing_eval(navi_it); -} - -EAPI Evas_Object * -elm_naviframe_item_icon_get(const Elm_Object_Item *it) -{ - ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); - Elm_Naviframe_Item *navi_it = ELM_CAST(it); - return navi_it->title_icon; -} - -EAPI void elm_naviframe_item_style_set(Elm_Object_Item *it, const char *item_style) { ELM_OBJ_ITEM_CHECK_OR_RETURN(it); -- 2.7.4