3 * Copyright 2012 Samsung Electronics Co., Ltd
5 * Licensed under the Flora License, Version 1.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://floralicense.org/license/
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
18 #include "searchbar.h"
20 static void __cal_util_searchbar_changed_callback(void *data, Evas_Object *obj, void *event_info)
25 if (elm_object_focus_get(data)) {
26 if (elm_entry_is_empty(obj))
27 elm_object_signal_emit(data, "elm,state,eraser,hide", "elm");
29 elm_object_signal_emit(data, "elm,state,eraser,show", "elm");
31 if (elm_entry_is_empty(obj))
32 elm_object_signal_emit(data, "elm,state,guidetext,show", "elm");
34 elm_object_signal_emit(data, "elm,state,guidetext,hide", "elm");
38 static void __cal_util_searchbar_with_cancel_btn_focused_callback(void *data, Evas_Object *obj, void *event_info)
40 c_retm_if(!data, "data is null");
41 c_retm_if(!obj, "obj is null");
43 if (!elm_entry_is_empty(obj))
44 elm_object_signal_emit(data, "elm,state,eraser,show", "elm");
46 elm_object_signal_emit(data, "elm,state,guidetext,hide", "elm");
48 elm_object_signal_emit(data, "cancel,in", "");
51 static void __cal_util_searchbar_focused_callback(void *data, Evas_Object *obj, void *event_info)
53 c_retm_if(!data, "data is null");
54 c_retm_if(!obj, "obj is null");
56 elm_object_signal_emit(data, "elm,state,eraser,show", "elm");
58 elm_object_signal_emit(data, "elm,state,guidetext,hide", "elm");
61 static void __cal_util_searchbar_eraser_clicked_callback(void *data, Evas_Object *obj, const char *emission, const char *source) // When X marked button is clicked, empty entry's contents.
63 c_retm_if(!data, "data is null");
65 elm_entry_entry_set(data, "");
68 static void __cal_util_searchbar_cancel_btn_clicked_callback(void *data, Evas_Object *obj, void *event_info)
70 c_retm_if(!data, "data is null");
72 c_retm_if(!obj, "obj is null");
74 Evas_Object *searchbar_layout = data;
75 Evas_Object *entry = elm_object_part_content_get(searchbar_layout, "elm.swallow.content");
76 c_retm_if(!entry, "entry is null");
78 evas_object_hide(obj);
80 elm_entry_input_panel_hide(entry);
82 elm_entry_entry_set(entry, NULL);
84 elm_object_focus_set(entry, EINA_FALSE);
87 static void __cal_util_searchbar_unfocused_callback(void *data, Evas_Object *obj, void *event_info)
92 if (elm_entry_is_empty(obj))
93 elm_object_signal_emit(data, "elm,state,guidetext,show", "elm");
95 elm_object_signal_emit(data, "elm,state,eraser,hide", "elm");
97 elm_object_signal_emit(data, "cancel,out", "");
100 static void __cal_util_searchbar_symbol_clicked_callback(void *data, Evas_Object *obj, const char *emission, const char *source)
102 c_retm_if(!data, "data is null");
104 elm_object_focus_set(data, EINA_TRUE);
107 static void __cal_util_searchbar_bg_clicked_callback(void *data, Evas_Object *obj, const char *emission, const char *source)
109 c_retm_if(!data, "data is null");
111 elm_object_focus_set(data, EINA_TRUE);
114 Evas_Object * cal_util_add_searchbar(Evas_Object *parent, const char *text, const char *guide,
115 Eina_Bool cancel_button, Evas_Smart_Cb cancel_callback, void* cancel_callback_data)
117 c_retvm_if(!parent, NULL, "parent is null");
119 Evas_Object *searchbar_layout = elm_layout_add(parent);
120 c_retvm_if(!searchbar_layout, NULL, "searchbar_layout is null");
123 elm_layout_theme_set(searchbar_layout, "layout", "searchbar", "cancel_button");
125 elm_layout_theme_set(searchbar_layout, "layout", "searchbar", "default");
127 Evas_Object *entry = elm_entry_add(searchbar_layout);
128 c_retvm_if(!entry, searchbar_layout, "entry is null");
130 elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT);
131 evas_object_show(entry);
133 elm_entry_scrollable_set(entry, EINA_TRUE);
134 elm_entry_single_line_set(entry, EINA_TRUE);
135 ecore_imf_context_input_panel_return_key_type_set(elm_entry_imf_context_get(entry), ECORE_IMF_INPUT_PANEL_RETURN_KEY_TYPE_SEARCH);
137 elm_object_part_content_set(searchbar_layout, "elm.swallow.content", entry);
139 if (guide && strlen(guide))
140 elm_object_part_text_set(searchbar_layout, "elm.guidetext", guide);
142 elm_object_part_text_set(searchbar_layout, "elm.guidetext", S_("IDS_COM_BODY_SEARCH"));
144 if (text && strlen(text))
145 elm_object_text_set(entry, text);
148 Evas_Object *cancel_btn = elm_button_add(searchbar_layout);
149 c_retvm_if(!cancel_btn, searchbar_layout, "cancel_btn is null");
151 elm_object_part_content_set(searchbar_layout, "button_cancel", cancel_btn);
152 elm_object_style_set(cancel_btn, "searchbar/default");
153 elm_object_text_set(cancel_btn, S_("IDS_COM_SK_CANCEL"));
155 evas_object_smart_callback_add(entry, "focused", __cal_util_searchbar_with_cancel_btn_focused_callback, searchbar_layout);
156 if (cancel_callback == NULL)
157 evas_object_smart_callback_add(cancel_btn, "clicked", __cal_util_searchbar_cancel_btn_clicked_callback, searchbar_layout);
159 evas_object_smart_callback_add(cancel_btn, "clicked", cancel_callback, cancel_callback_data);
162 evas_object_smart_callback_add(entry, "focused", __cal_util_searchbar_focused_callback, searchbar_layout);
165 evas_object_smart_callback_add(entry, "changed", __cal_util_searchbar_changed_callback, searchbar_layout);
166 evas_object_smart_callback_add(entry, "preedit,changed", __cal_util_searchbar_changed_callback, searchbar_layout);
167 evas_object_smart_callback_add(entry, "unfocused", __cal_util_searchbar_unfocused_callback, searchbar_layout);
168 elm_object_signal_callback_add(searchbar_layout, "elm,eraser,clicked", "elm", __cal_util_searchbar_eraser_clicked_callback, entry);
169 elm_object_signal_callback_add(searchbar_layout, "elm,bg,clicked", "elm", __cal_util_searchbar_bg_clicked_callback, entry);
170 elm_object_signal_callback_add(searchbar_layout, "elm,action,click", "", __cal_util_searchbar_symbol_clicked_callback, entry);
172 return searchbar_layout;