2 * Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include "efl_assist.h"
20 #include "efl_assist_private.h"
22 const char *EA_EF_KEY_DATA = "_ea_ef_key_data";
24 typedef struct _Ea_Editfield_Data
26 Eina_Bool clear_btn_disabled;
29 static void _editfield_changed_cb(void *data, Evas_Object *obj, void *event_info)
31 Ea_Editfield_Data *eed;
33 eed = (Ea_Editfield_Data *)evas_object_data_get(obj, EA_EF_KEY_DATA);
34 if (eed && !(eed->clear_btn_disabled)
35 && elm_object_part_content_get(obj, "elm.swallow.clear"))
37 if (elm_object_focus_get(obj))
39 if (elm_entry_is_empty(obj))
40 elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
42 elm_object_signal_emit(obj, "elm,state,clear,visible", "");
47 static void _editfield_focused_cb(void *data, Evas_Object *obj, void *event_info)
49 Ea_Editfield_Data *eed;
51 eed = (Ea_Editfield_Data *)evas_object_data_get(obj, EA_EF_KEY_DATA);
52 if (eed && !(eed->clear_btn_disabled)
53 && elm_object_part_content_get(obj, "elm.swallow.clear"))
55 if (!elm_entry_is_empty(obj))
56 elm_object_signal_emit(obj, "elm,state,clear,visible", "");
58 elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
60 elm_object_signal_emit(obj, "elm,state,focus,on", "");
63 static void _editfield_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
65 Ea_Editfield_Data *eed;
67 eed = (Ea_Editfield_Data *)evas_object_data_get(obj, EA_EF_KEY_DATA);
68 if (eed && !(eed->clear_btn_disabled)
69 && elm_object_part_content_get(obj, "elm.swallow.clear"))
70 elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
71 elm_object_signal_emit(obj, "elm,state,focus,off", "");
74 static void _eraser_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
76 elm_entry_entry_set(data, "");
79 static void _editfield_searchbar_changed_cb(void *data, Evas_Object *obj, void *event_info)
81 Ea_Editfield_Data *eed;
83 eed = (Ea_Editfield_Data *)evas_object_data_get(obj, EA_EF_KEY_DATA);
84 if (eed && !(eed->clear_btn_disabled)
85 && elm_object_part_content_get(obj, "elm.swallow.clear"))
87 if (elm_entry_is_empty(obj))
88 elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
90 elm_object_signal_emit(obj, "elm,state,clear,visible", "");
94 static void _editfield_searchbar_focused_cb(void *data, Evas_Object *obj, void *event_info)
96 elm_object_signal_emit(obj, "elm,state,focus,on", "");
99 static void _editfield_searchbar_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
101 elm_object_signal_emit(obj, "elm,state,focus,off", "");
104 EXPORT_API Evas_Object *
105 ea_editfield_add(Evas_Object *parent, Ea_Editfield_Type type)
107 Evas_Object *entry, *button;
108 Ea_Editfield_Data *eed;
110 entry = elm_entry_add(parent);
112 if (type == EA_EDITFIELD_SINGLELINE)
114 elm_object_style_set(entry, "editfield");
115 elm_entry_single_line_set(entry, EINA_TRUE);
117 else if (type == EA_EDITFIELD_SCROLL_SINGLELINE)
119 elm_object_style_set(entry, "editfield");
120 elm_entry_single_line_set(entry, EINA_TRUE);
121 elm_entry_scrollable_set(entry, EINA_TRUE);
122 elm_object_signal_emit(entry, "elm,state,scroll,enabled", "");
124 else if (type == EA_EDITFIELD_SCROLL_SINGLELINE_PASSWORD)
126 elm_object_style_set(entry, "editfield");
127 elm_entry_single_line_set(entry, EINA_TRUE);
128 elm_entry_password_set(entry, EINA_TRUE);
129 elm_entry_scrollable_set(entry, EINA_TRUE);
130 elm_object_signal_emit(entry, "elm,state,scroll,enabled", "");
132 else if (type == EA_EDITFIELD_SCROLL_MULTILINE)
134 elm_object_style_set(entry, "editfield");
135 elm_entry_scrollable_set(entry, EINA_TRUE);
136 elm_object_signal_emit(entry, "elm,state,scroll,enabled", "");
138 else if (type == EA_EDITFIELD_SEARCHBAR)
140 elm_object_style_set(entry, "editfield/searchbar/default");
141 elm_entry_single_line_set(entry, EINA_TRUE);
142 elm_entry_scrollable_set(entry, EINA_TRUE);
143 elm_object_signal_emit(entry, "elm,state,scroll,enabled", "");
147 elm_object_style_set(entry, "editfield");
150 if (type == EA_EDITFIELD_SEARCHBAR)
152 button = elm_button_add(parent);
153 elm_object_style_set(button, "search_clear");
154 elm_object_focus_allow_set(button, EINA_FALSE);
155 elm_object_part_content_set(entry, "elm.swallow.clear", button);
156 evas_object_smart_callback_add(button, "clicked", _eraser_btn_clicked_cb, entry);
158 evas_object_smart_callback_add(entry, "changed", _editfield_searchbar_changed_cb, NULL);
159 evas_object_smart_callback_add(entry, "preedit,changed", _editfield_searchbar_changed_cb, NULL);
160 evas_object_smart_callback_add(entry, "focused", _editfield_searchbar_focused_cb, NULL);
161 evas_object_smart_callback_add(entry, "unfocused", _editfield_searchbar_unfocused_cb, NULL);
165 button = elm_button_add(parent);
166 elm_object_style_set(button, "editfield_clear");
167 elm_object_focus_allow_set(button, EINA_FALSE);
168 elm_object_part_content_set(entry, "elm.swallow.clear", button);
169 evas_object_smart_callback_add(button, "clicked", _eraser_btn_clicked_cb, entry);
171 evas_object_smart_callback_add(entry, "changed", _editfield_changed_cb, NULL);
172 evas_object_smart_callback_add(entry, "preedit,changed", _editfield_changed_cb, NULL);
173 evas_object_smart_callback_add(entry, "focused", _editfield_focused_cb, NULL);
174 evas_object_smart_callback_add(entry, "unfocused", _editfield_unfocused_cb, NULL);
177 eed = calloc(1, sizeof(Ea_Editfield_Data));
178 eed->clear_btn_disabled = EINA_FALSE;
179 evas_object_data_set(entry, EA_EF_KEY_DATA, eed);
184 ea_editfield_clear_button_disabled_set(Evas_Object *obj, Eina_Bool disable)
186 Ea_Editfield_Data *eed;
188 eed = evas_object_data_get(obj, EA_EF_KEY_DATA);
191 eed->clear_btn_disabled = !!disable;
192 if (eed->clear_btn_disabled)
193 elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
198 ea_editfield_clear_button_disabled_get(Evas_Object *obj)
200 Ea_Editfield_Data *eed;
204 eed = evas_object_data_get(obj, EA_EF_KEY_DATA);
208 return eed->clear_btn_disabled;