From 9af887bc1a9767a70ba34cd372723ba715ca96dd Mon Sep 17 00:00:00 2001 From: ChunEon Park Date: Fri, 16 Sep 2011 14:07:37 +0900 Subject: [PATCH] elm_widget - added item signal emit function naviframe - filled the signal emit hooks --- src/lib/Elementary.h.in | 16 +++++++++ src/lib/elc_naviframe.c | 92 ++++++++++++++++++++++++++++++++----------------- src/lib/elm_main.c | 6 ++++ src/lib/elm_widget.c | 18 ++++++++++ src/lib/elm_widget.h | 15 ++++++++ 5 files changed, 116 insertions(+), 31 deletions(-) diff --git a/src/lib/Elementary.h.in b/src/lib/Elementary.h.in index 84b6746..193ef6e 100644 --- a/src/lib/Elementary.h.in +++ b/src/lib/Elementary.h.in @@ -872,6 +872,20 @@ extern "C" { EAPI void elm_object_item_data_set(Elm_Object_Item *it, void *data); /** + * Send a signal to the edje object of the widget item. + * + * This function sends a signal to the edje object of the obj item. An + * edje program can respond to a signal by specifying matching + * 'signal' and 'source' fields. + * + * @param it The Elementary object item + * @param emission The signal's name. + * @param source The signal's source. + * @ingroup General + */ + EAPI void elm_object_item_signal_emit(Elm_Object_Item *it, const char *emission, const char *source) EINA_ARG_NONNULL(1); + + /** * @} */ @@ -8238,6 +8252,8 @@ extern "C" { #define ELM_NAVIFRAME_ITEM_OPTIONHEADER "elm.swallow.optionheader" #define ELM_NAVIFRAME_ITEM_TITLE_LABEL "elm.text.title" #define ELM_NAVIFRAME_ITEM_PREV_BTN "elm.swallow.prev_btn" + #define ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_CLOSE "elm,state,optionheader,instant_close", "" + #define ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_OPEN "elm,state,optionheader,instant_open", "" EAPI Evas_Object *elm_naviframe_add(Evas_Object *parent) EINA_ARG_NONNULL(1); EAPI Elm_Object_Item *elm_naviframe_item_push(Evas_Object *obj, const char *title_label, Evas_Object *prev_btn, Evas_Object *next_btn, Evas_Object *content, const char *item_style) EINA_ARG_NONNULL(1, 5); diff --git a/src/lib/elc_naviframe.c b/src/lib/elc_naviframe.c index cb04706..dc24e21 100644 --- a/src/lib/elc_naviframe.c +++ b/src/lib/elc_naviframe.c @@ -53,19 +53,25 @@ static const Evas_Smart_Cb_Description _signals[] = { static void _del_hook(Evas_Object *obj); static void _theme_hook(Evas_Object *obj); +static void _emit_hook(Evas_Object *obj, + const char *emission, + const char *source); 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 _item_text_set_hook(Elm_Object_Item *it, + const char *part, + const char *label); +static const char *_item_text_get_hook(const Elm_Object_Item *it, + const char *part); +static void _item_content_set_hook(Elm_Object_Item *it, + const char *part, + Evas_Object *content); +static Evas_Object *_item_content_get_hook(const Elm_Object_Item *it, + const char *part); +static Evas_Object *_item_content_unset_hook(Elm_Object_Item *it, + const char *part); +static void _item_signal_emit_hook(Elm_Object_Item *it, + const char *emission, + const char *source); 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); @@ -142,6 +148,18 @@ _theme_hook(Evas_Object *obj __UNUSED__) //FIXME: } +static void _emit_hook(Evas_Object *obj, + const char *emission, + const char *source) +{ + ELM_CHECK_WIDTYPE(obj, widtype); + + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; + + edje_object_signal_emit(wd->base, emission, source); +} + static void _disable_hook(Evas_Object *obj __UNUSED__) { @@ -149,7 +167,9 @@ _disable_hook(Evas_Object *obj __UNUSED__) } static void -_text_set_hook(Elm_Object_Item *it, const char *part, const char *label) +_item_text_set_hook(Elm_Object_Item *it, + const char *part, + const char *label) { ELM_OBJ_ITEM_CHECK_OR_RETURN(it); @@ -202,7 +222,7 @@ _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) +_item_text_get_hook(const Elm_Object_Item *it, const char *part) { ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); Eina_List *l = NULL; @@ -224,9 +244,9 @@ _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) +_item_content_set_hook(Elm_Object_Item *it, + const char *part, + Evas_Object *content) { ELM_OBJ_ITEM_CHECK_OR_RETURN(it); @@ -257,8 +277,7 @@ _content_set_hook(Elm_Object_Item *it, /* */ static Evas_Object * -_content_get_hook(const Elm_Object_Item *it, - const char *part) +_item_content_get_hook(const Elm_Object_Item *it, const char *part) { ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); Eina_List *l = NULL; @@ -283,8 +302,7 @@ _content_get_hook(const Elm_Object_Item *it, } static Evas_Object * -_content_unset_hook(Elm_Object_Item *it __UNUSED__, - const char *part __UNUSED__) +_item_content_unset_hook(Elm_Object_Item *it, const char *part) { ELM_OBJ_ITEM_CHECK_OR_RETURN(it, NULL); Eina_List *l = NULL; @@ -293,8 +311,8 @@ _content_unset_hook(Elm_Object_Item *it __UNUSED__, Evas_Object *content = NULL; char buf[1028]; - //specified parts - //FIXME: could be unset the below specified contents also. + //specified parts + //FIXME: could be unset the below specified contents also. if (!part || !strcmp(part, "elm.swallow.content") || !strcmp(part, "elm.swallow.prev_btn") || @@ -305,7 +323,7 @@ _content_unset_hook(Elm_Object_Item *it __UNUSED__, return NULL; } - //common parts + //common parts EINA_LIST_FOREACH(navi_it->content_list, l, pair) { if (!strcmp(part, pair->part)) @@ -334,6 +352,16 @@ _content_unset_hook(Elm_Object_Item *it __UNUSED__, } static void +_item_signal_emit_hook(Elm_Object_Item *it, + const char *emission, + const char *source) +{ + ELM_OBJ_ITEM_CHECK_OR_RETURN(it); + Elm_Naviframe_Item *navi_it = ELM_CAST(it); + edje_object_signal_emit(navi_it->base.view, emission, source); +} + +static void _sizing_eval(Evas_Object *obj) { Widget_Data *wd; @@ -676,6 +704,7 @@ elm_naviframe_add(Evas_Object *parent) elm_widget_del_hook_set(obj, _del_hook); elm_widget_disable_hook_set(obj, _disable_hook); elm_widget_theme_hook_set(obj, _theme_hook); + elm_widget_signal_emit_hook_set(obj, _emit_hook); //base wd->base = edje_object_add(e); @@ -709,11 +738,12 @@ elm_naviframe_item_push(Evas_Object *obj, const char *title_label, Evas_Object * 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); + elm_widget_item_text_set_hook_set(it, _item_text_set_hook); + elm_widget_item_text_get_hook_set(it, _item_text_get_hook); + elm_widget_item_content_set_hook_set(it, _item_content_set_hook); + elm_widget_item_content_get_hook_set(it, _item_content_get_hook); + elm_widget_item_content_unset_hook_set(it, _item_content_unset_hook); + elm_widget_item_signal_emit_hook_set(it, _item_signal_emit_hook); //item base layout it->base.view = edje_object_add(evas_object_evas_get(obj)); @@ -735,11 +765,11 @@ elm_naviframe_item_push(Evas_Object *obj, const char *title_label, Evas_Object * //title edje_object_signal_callback_add(it->base.view, - "elm,title,clicked", + "elm,action,title,clicked", "elm", _title_clicked, it); - _text_set_hook(ELM_CAST(it), "elm.text.title", title_label); + _item_text_set_hook(ELM_CAST(it), "elm.text.title", title_label); //title buttons if ((!prev_btn) && (eina_list_count(wd->stack))) diff --git a/src/lib/elm_main.c b/src/lib/elm_main.c index 669a093..e309668 100644 --- a/src/lib/elm_main.c +++ b/src/lib/elm_main.c @@ -3551,3 +3551,9 @@ elm_object_item_text_part_get(const Elm_Object_Item *it, const char *part) { return elm_widget_item_text_part_get(it, part); } + +EAPI void +elm_object_item_signal_emit(Elm_Object_Item *it, const char *emission, const char *source) +{ + elm_widget_item_signal_emit(it, emission, source); +} \ No newline at end of file diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c index 6042c99..6c362de 100644 --- a/src/lib/elm_widget.c +++ b/src/lib/elm_widget.c @@ -2937,6 +2937,16 @@ _elm_widget_item_text_part_set(Elm_Widget_Item *item, item->on_text_set_func((Elm_Object_Item *) item, part, label); } +EAPI void +_elm_widget_item_signal_emit(Elm_Widget_Item *item, + const char *emission, + const char *source) +{ + ELM_WIDGET_ITEM_CHECK_OR_RETURN(item); + if (item->on_signal_emit_func) + item->on_signal_emit_func((Elm_Object_Item *) item, emission, source); +} + EAPI const char * _elm_widget_item_text_part_get(const Elm_Widget_Item *item, const char *part) @@ -2986,6 +2996,14 @@ _elm_widget_item_text_get_hook_set(Elm_Widget_Item *item, item->on_text_get_func = func; } +EAPI void +_elm_widget_item_signal_emit_hook_set(Elm_Widget_Item *item, + Elm_Widget_On_Signal_Emit_Cb func) +{ + ELM_WIDGET_ITEM_CHECK_OR_RETURN(item); + item->on_signal_emit_func = func; +} + static void _smart_add(Evas_Object *obj) { diff --git a/src/lib/elm_widget.h b/src/lib/elm_widget.h index 3f19026..58ae03f 100644 --- a/src/lib/elm_widget.h +++ b/src/lib/elm_widget.h @@ -197,6 +197,7 @@ typedef void (*Elm_Widget_On_Content_Set_Cb)(void *data, const char *part, Evas_ typedef const char *(*Elm_Widget_On_Text_Get_Cb)(const void *data, const char *part); typedef Evas_Object *(*Elm_Widget_On_Content_Get_Cb)(const void *data, const char *part); typedef Evas_Object *(*Elm_Widget_On_Content_Unset_Cb)(const void *data, const char *part); +typedef void (*Elm_Widget_On_Signal_Emit_Cb)(void *data, const char *emission, const char *source); struct _Elm_Widget_Item { @@ -213,6 +214,7 @@ struct _Elm_Widget_Item Elm_Widget_On_Content_Unset_Cb on_content_unset_func; Elm_Widget_On_Text_Set_Cb on_text_set_func; Elm_Widget_On_Text_Get_Cb on_text_get_func; + Elm_Widget_On_Signal_Emit_Cb on_signal_emit_func; /* widget variations should have data from here and on */ /* @todo: TODO check if this is enough for 1.0 release, maybe add padding! */ }; @@ -394,6 +396,7 @@ EAPI void _elm_widget_item_content_get_hook_set(Elm_Widget_Item *ite EAPI void _elm_widget_item_content_unset_hook_set(Elm_Widget_Item *item, Elm_Widget_On_Content_Unset_Cb func); EAPI void _elm_widget_item_text_set_hook_set(Elm_Widget_Item *item, Elm_Widget_On_Text_Set_Cb func); EAPI void _elm_widget_item_text_get_hook_set(Elm_Widget_Item *item, Elm_Widget_On_Text_Get_Cb func); +EAPI void _elm_widget_item_signal_emit_hook_set(Elm_Widget_Item *it, Elm_Widget_On_Signal_Emit_Cb func); /* debug function. don't use it unless you are tracking parenting issues */ EAPI void elm_widget_tree_dump(const Evas_Object *top); @@ -544,6 +547,12 @@ EAPI void elm_widget_tree_dot_dump(const Evas_Object *top, FILE *out #define elm_widget_item_text_part_get(item, part) \ _elm_widget_item_text_part_get((const Elm_Widget_Item *)item, part) /** + * Convenience function to query item's signal emit. + * @see _elm_widget_item_signal_emit() + */ +#define elm_widget_item_signal_emit(item, emission, source) \ + _elm_widget_item_signal_emit((Elm_Widget_Item *)item, emission, source) +/** * Convenience function to query item's content set hook. * @see _elm_widget_item_content_set_hook_set() */ @@ -573,6 +582,12 @@ EAPI void elm_widget_tree_dot_dump(const Evas_Object *top, FILE *out */ #define elm_widget_item_text_get_hook_set(item, func) \ _elm_widget_item_text_get_hook_set((Elm_Widget_Item *)item, (Elm_Widget_On_Text_Get_Cb)func) +/** + * Convenience function to query item's signal emit hook. + * @see _elm_widget_item_signal_emit_hook_set() + */ +#define elm_widget_item_signal_emit_hook_set(item, func) \ + _elm_widget_item_signal_emit_hook_set((Elm_Widget_Item *)item, (Elm_Widget_On_Signal_Emit_Cb)func) /** * Cast and ensure the given pointer is an Elm_Widget_Item or return NULL. -- 2.7.4