X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Flib%2Felm_searchbar.c;h=b1b0c9f6a8d4edbae9d5350cbeba5bc313466848;hb=fe8e3ff6847a4dc7b606f5e7ea81d19083303ce7;hp=2aa08105fe80e2ef6726034c92b64d1d965e68d3;hpb=caefdfdbf3077d8b7f1aa1b99e2915f2011cc31a;p=framework%2Fuifw%2Felementary.git diff --git a/src/lib/elm_searchbar.c b/src/lib/elm_searchbar.c index 2aa0810..b1b0c9f 100644 --- a/src/lib/elm_searchbar.c +++ b/src/lib/elm_searchbar.c @@ -19,15 +19,16 @@ struct _Widget_Data Evas_Object *base, *eb, *cancel_btn; Eina_Bool cancel_btn_ani_flag; Eina_Bool cancel_btn_show_mode; - Eina_Bool background_mode; + Eina_Bool boundary_mode; }; static void _del_hook(Evas_Object *obj); static void _theme_hook(Evas_Object *obj); +static void _on_focus_hook(void *data, Evas_Object *obj); static void _sizing_eval(Evas_Object *obj); -static void _clicked(void *data, Evas_Object *obj, const char *emission, const char *source); -static void _changed(void *data, Evas_Object *obj, const char *emission, const char *source); -static void _cancel_clicked(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _clicked(void *data, Evas_Object *obj, void *event_info); +static void _changed(void *data, Evas_Object *obj, void *event_info); +static void _cancel_clicked(void *data, Evas_Object *obj, void *event_info); static void _del_hook(Evas_Object *obj) { @@ -41,6 +42,8 @@ static void _del_hook(Evas_Object *obj) static void _theme_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); + char buf[4096]; + if (!wd) return; _elm_theme_object_set(obj, wd->base, "searchbar", "base", elm_widget_style_get(obj)); @@ -50,10 +53,32 @@ static void _theme_hook(Evas_Object *obj) if (wd->cancel_btn) edje_object_part_swallow(wd->base, "button_cancel", wd->cancel_btn); + snprintf(buf, sizeof(buf), "searchbar/%s", elm_widget_style_get(obj)); + elm_object_style_set(wd->eb, buf); + + snprintf(buf, sizeof(buf), "searchbar/%s", elm_widget_style_get(obj)); + elm_object_style_set(wd->cancel_btn, buf); + edje_object_scale_set(wd->cancel_btn, elm_widget_scale_get(obj) * _elm_config->scale); _sizing_eval(obj); } +static void +_on_focus_hook(void *data, Evas_Object *obj) +{ + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd || !wd->base) + return; + if (elm_widget_focus_get(obj)) + { + if (wd->cancel_btn_show_mode) + { + if (wd->cancel_btn_ani_flag) edje_object_signal_emit(wd->base, "CANCELIN", "PROG"); + else edje_object_signal_emit(wd->base, "CANCELSHOW", "PROG"); + } + } +} + static void _sizing_eval(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); @@ -67,25 +92,21 @@ static void _sizing_eval(Evas_Object *obj) evas_object_size_hint_max_set(obj, maxw, maxh); } -static void _clicked(void *data, Evas_Object *obj, const char *emission, const char *source) +static void _clicked(void *data, Evas_Object *obj, void *event_info) { Widget_Data *wd = elm_widget_data_get(data); if (!wd) return; - elm_entry_cursor_end_set(elm_editfield_entry_get(wd->eb)); - if (wd->cancel_btn_show_mode) - { - if (wd->cancel_btn_ani_flag) - edje_object_signal_emit(wd->base, "CANCELIN", "PROG"); - else - edje_object_signal_emit(wd->base, "CANCELSHOW", "PROG"); - } + { + if (wd->cancel_btn_ani_flag) edje_object_signal_emit(wd->base, "CANCELIN", "PROG"); + else edje_object_signal_emit(wd->base, "CANCELSHOW", "PROG"); + } evas_object_smart_callback_call(data, "clicked", NULL); } -static void _changed(void *data, Evas_Object *obj, const char *emission, const char *source) +static void _changed(void *data, Evas_Object *obj, void *event_info) { Widget_Data *wd = elm_widget_data_get(data); @@ -95,37 +116,42 @@ static void _changed(void *data, Evas_Object *obj, const char *emission, const c // evas_object_smart_callback_call(data, "changed", NULL); } -static void _cancel_clicked(void *data, Evas_Object *obj, const char *emission, const char *source) +static void _cancel_clicked(void *data, Evas_Object *obj, void *event_info) { Widget_Data *wd = elm_widget_data_get(data); if (!wd) return; if (wd->cancel_btn_show_mode) - { - if (wd->cancel_btn_ani_flag) - edje_object_signal_emit(wd->base, "CANCELOUT", "PROG"); - else - edje_object_signal_emit(wd->base, "CANCELHIDE", "PROG"); - } + { + if (wd->cancel_btn_ani_flag) edje_object_signal_emit(wd->base, "CANCELOUT", "PROG"); + else edje_object_signal_emit(wd->base, "CANCELHIDE", "PROG"); + } const char* text; text = elm_entry_entry_get(elm_editfield_entry_get(wd->eb)); - if (text != NULL && strlen(text) > 0) - elm_entry_entry_set(elm_editfield_entry_get(wd->eb), NULL); + if (text != NULL && strlen(text) > 0) elm_entry_entry_set(elm_editfield_entry_get(wd->eb), NULL); evas_object_smart_callback_call(data, "cancel,clicked", NULL); } static void -_searchicon_clicked(void *data, Evas_Object *obj, const char *emission, const char *source) +_basebg_clicked(void *data, Evas_Object *obj, const char *emission, const char *source) { Widget_Data *wd = elm_widget_data_get(data); + if (!wd) return; - if (!strcmp(source, "search_icon")) - evas_object_smart_callback_call(data, "searchsymbol,clicked", NULL); - else if (!strcmp(source, "base_bg")) - _clicked(data, obj, emission, source); + if (!strcmp(source, "base_bg")) + _clicked(data, obj, NULL); +} + +static void +_searchsymbol_clicked(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + Widget_Data *wd = elm_widget_data_get(data); + + if (!wd) return; + evas_object_smart_callback_call(data, "searchsymbol,clicked", NULL); } /** @@ -140,6 +166,7 @@ EAPI Evas_Object *elm_searchbar_add(Evas_Object *parent) Evas_Object *obj; Evas *e; Widget_Data *wd; + char buf[4096]; wd = ELM_NEW(Widget_Data); e = evas_object_evas_get(parent); @@ -151,40 +178,47 @@ EAPI Evas_Object *elm_searchbar_add(Evas_Object *parent) elm_widget_data_set(obj, wd); elm_widget_del_hook_set(obj, _del_hook); elm_widget_theme_hook_set(obj, _theme_hook); + elm_widget_on_focus_hook_set( obj, _on_focus_hook, NULL ); elm_widget_can_focus_set(obj, 1 ); wd->base = edje_object_add(e); if (wd->base == NULL) return NULL; - _elm_theme_object_set(obj, wd->base, "searchbar", "base", "default_with_bg"); + _elm_theme_object_set(obj, wd->base, "searchbar", "base", "default"); // evas_object_size_hint_weight_set(wd->base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); // evas_object_size_hint_align_set(wd->base, EVAS_HINT_FILL, EVAS_HINT_FILL); // Add Entry wd->eb = elm_editfield_add(parent); - elm_object_style_set(wd->eb, "searchbar_with_bg"); + snprintf(buf, sizeof(buf), "searchbar/%s", elm_widget_style_get(obj)); + elm_object_style_set(wd->eb, buf); + edje_object_part_swallow(wd->base, "search_textfield", wd->eb); // elm_editfield_guide_text_set(wd->eb, "Search"); elm_editfield_entry_single_line_set(wd->eb, EINA_TRUE); elm_editfield_eraser_set(wd->eb, EINA_TRUE); evas_object_smart_callback_add(wd->eb, "clicked", _clicked, obj); evas_object_smart_callback_add(elm_editfield_entry_get(wd->eb), "changed", _changed, obj); - edje_object_signal_callback_add(wd->base, "mouse,up,1", "*", _searchicon_clicked, obj); + edje_object_signal_callback_add(wd->base, "mouse,up,1", "*", _basebg_clicked, obj); + edje_object_signal_callback_add(wd->base, "elm,action,click", "", _searchsymbol_clicked, obj); elm_widget_sub_object_add(obj, wd->eb); // Add Button wd->cancel_btn = elm_button_add(parent); edje_object_part_swallow(wd->base, "button_cancel", wd->cancel_btn); - elm_object_style_set(wd->cancel_btn, "custom/darkblue"); + + snprintf(buf, sizeof(buf), "searchbar/%s", elm_widget_style_get(obj)); + elm_object_style_set(wd->cancel_btn, buf); + elm_button_label_set(wd->cancel_btn, "Cancel"); evas_object_smart_callback_add(wd->cancel_btn, "clicked", _cancel_clicked, obj); elm_widget_sub_object_add(obj, wd->cancel_btn); wd->cancel_btn_ani_flag = EINA_FALSE; wd->cancel_btn_show_mode = EINA_TRUE; - wd->background_mode = EINA_TRUE; + wd->boundary_mode = EINA_TRUE; elm_widget_resize_object_set(obj, wd->base); @@ -204,7 +238,7 @@ EAPI Evas_Object *elm_searchbar_add(Evas_Object *parent) EAPI void elm_searchbar_text_set(Evas_Object *obj, const char *entry) { Widget_Data *wd = elm_widget_data_get(obj); - if (!wd) return NULL; + if (!wd) return; elm_entry_entry_set(elm_editfield_entry_get(wd->eb), entry); } @@ -277,18 +311,17 @@ EAPI void elm_searchbar_cancel_button_set(Evas_Object *obj, Eina_Bool visible) else wd->cancel_btn_show_mode = visible; if (!visible) - { - if (wd->cancel_btn_show_mode && wd->cancel_btn_ani_flag) - edje_object_signal_emit(wd->base, "CANCELOUT", "PROG"); - else - edje_object_signal_emit(wd->base, "CANCELHIDE", "PROG"); - - _sizing_eval(obj); - } + { + if (wd->cancel_btn_ani_flag) + edje_object_signal_emit(wd->base, "CANCELOUT", "PROG"); + else + edje_object_signal_emit(wd->base, "CANCELHIDE", "PROG"); + } + _sizing_eval(obj); } /** - * clear searchbar content + * clear searchbar status * * @param obj The searchbar object * @return void @@ -301,44 +334,39 @@ EAPI void elm_searchbar_clear(Evas_Object *obj) if (!wd) return; if (wd->cancel_btn_show_mode) - { - if (wd->cancel_btn_ani_flag) - edje_object_signal_emit(wd->base, "CANCELOUT", "PROG"); - else - edje_object_signal_emit(wd->base, "CANCELHIDE", "PROG"); - } - - elm_entry_entry_set(elm_editfield_entry_get(wd->eb), NULL); + { + if (wd->cancel_btn_ani_flag) + edje_object_signal_emit(wd->base, "CANCELOUT", "PROG"); + else + edje_object_signal_emit(wd->base, "CANCELHIDE", "PROG"); + } +// elm_entry_entry_set(elm_editfield_entry_get(wd->eb), NULL); } /** - * set the searchbar background mode(with bg rect) set + * set the searchbar boundary rect mode(with bg rect) set * * @param obj The searchbar object - * @param bgmode The flag of background mode or not + * @param boundary The present flag of boundary rect or not * @return void * * @ingroup Searchbar */ -EAPI void elm_searchbar_background_set(Evas_Object *obj, Eina_Bool bgmode) +EAPI void elm_searchbar_boundary_rect_set(Evas_Object *obj, Eina_Bool boundary) { Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; - if (wd->background_mode == bgmode) return; - else wd->background_mode = bgmode; - - if (wd->background_mode) - { - _elm_theme_object_set(obj, wd->base, "searchbar", "base", "default_with_bg"); - elm_object_style_set(wd->eb, "searchbar_with_bg"); + if (wd->boundary_mode == boundary) return; + else wd->boundary_mode = boundary; - } + if (wd->boundary_mode) + { + edje_object_signal_emit(wd->base, "BDSHOW", "PROG"); + } else - { - _elm_theme_object_set(obj, wd->base, "searchbar", "base", "default"); - elm_object_style_set(wd->eb, "searchbar"); - } - + { + edje_object_signal_emit(wd->base, "BDHIDE", "PROG"); + } _sizing_eval(obj); }