1 #include "efl_assist.h"
2 #include "efl_assist_private.h"
4 const char *EA_EF_KEY_DATA = "_ea_ef_key_data";
6 typedef struct _Ea_Editfield_Data
8 Eina_Bool clear_btn_disabled;
11 static void _editfield_changed_cb(void *data, Evas_Object *obj, void *event_info)
13 Ea_Editfield_Data *eed;
15 eed = (Ea_Editfield_Data *)evas_object_data_get(obj, EA_EF_KEY_DATA);
16 if (eed && !(eed->clear_btn_disabled)
17 && elm_object_part_content_get(obj, "elm.swallow.clear"))
19 if (elm_object_focus_get(obj))
21 if (elm_entry_is_empty(obj))
22 elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
24 elm_object_signal_emit(obj, "elm,state,clear,visible", "");
29 static void _editfield_focused_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_entry_is_empty(obj))
38 elm_object_signal_emit(obj, "elm,state,clear,visible", "");
40 elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
42 elm_object_signal_emit(obj, "elm,state,focus,on", "");
45 static void _editfield_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
47 Ea_Editfield_Data *eed;
49 eed = (Ea_Editfield_Data *)evas_object_data_get(obj, EA_EF_KEY_DATA);
50 if (eed && !(eed->clear_btn_disabled)
51 && elm_object_part_content_get(obj, "elm.swallow.clear"))
52 elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
53 elm_object_signal_emit(obj, "elm,state,focus,off", "");
56 static void _eraser_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
58 elm_entry_entry_set(data, "");
61 static void _editfield_searchbar_changed_cb(void *data, Evas_Object *obj, void *event_info)
63 Ea_Editfield_Data *eed;
65 eed = (Ea_Editfield_Data *)evas_object_data_get(obj, EA_EF_KEY_DATA);
66 if (eed && !(eed->clear_btn_disabled)
67 && elm_object_part_content_get(obj, "elm.swallow.clear"))
69 if (elm_entry_is_empty(obj))
70 elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
72 elm_object_signal_emit(obj, "elm,state,clear,visible", "");
76 static void _editfield_searchbar_focused_cb(void *data, Evas_Object *obj, void *event_info)
78 elm_object_signal_emit(obj, "elm,state,focus,on", "");
81 static void _editfield_searchbar_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
83 elm_object_signal_emit(obj, "elm,state,focus,off", "");
86 static Elm_Access_Info_Cb _editfield_searchbar_access_info_cb(void *data, Evas_Object *obj)
93 EXPORT_API Evas_Object *
94 ea_editfield_add(Evas_Object *parent, Ea_Editfield_Type type)
96 Evas_Object *entry, *button;
97 Ea_Editfield_Data *eed;
99 entry = elm_entry_add(parent);
101 if (type == EA_EDITFIELD_SINGLELINE)
103 elm_object_style_set(entry, "editfield");
104 elm_entry_single_line_set(entry, EINA_TRUE);
106 else if (type == EA_EDITFIELD_SCROLL_SINGLELINE)
108 elm_object_style_set(entry, "editfield");
109 elm_entry_single_line_set(entry, EINA_TRUE);
110 elm_entry_scrollable_set(entry, EINA_TRUE);
111 elm_object_signal_emit(entry, "elm,state,scroll,enabled", "");
113 else if (type == EA_EDITFIELD_SCROLL_SINGLELINE_PASSWORD)
115 elm_object_style_set(entry, "editfield");
116 elm_entry_single_line_set(entry, EINA_TRUE);
117 elm_entry_password_set(entry, EINA_TRUE);
118 elm_entry_scrollable_set(entry, EINA_TRUE);
119 elm_object_signal_emit(entry, "elm,state,scroll,enabled", "");
121 else if (type == EA_EDITFIELD_SCROLL_MULTILINE)
123 elm_object_style_set(entry, "editfield");
124 elm_entry_scrollable_set(entry, EINA_TRUE);
125 elm_object_signal_emit(entry, "elm,state,scroll,enabled", "");
127 else if (type == EA_EDITFIELD_SEARCHBAR)
129 elm_object_style_set(entry, "editfield/searchbar/default");
130 elm_entry_single_line_set(entry, EINA_TRUE);
131 elm_entry_scrollable_set(entry, EINA_TRUE);
132 elm_object_signal_emit(entry, "elm,state,scroll,enabled", "");
136 elm_object_style_set(entry, "editfield");
139 if (type == EA_EDITFIELD_SEARCHBAR)
141 button = elm_button_add(parent);
142 elm_object_style_set(button, "search_icon");
143 elm_object_focus_allow_set(button, EINA_FALSE);
144 elm_object_part_content_set(entry, "elm.swallow.icon", button);
146 button = elm_button_add(parent);
147 elm_object_style_set(button, "search_clear");
148 elm_object_focus_allow_set(button, EINA_FALSE);
149 elm_object_part_content_set(entry, "elm.swallow.clear", button);
150 evas_object_smart_callback_add(button, "clicked", _eraser_btn_clicked_cb, entry);
152 evas_object_smart_callback_add(entry, "changed", _editfield_searchbar_changed_cb, NULL);
153 evas_object_smart_callback_add(entry, "preedit,changed", _editfield_searchbar_changed_cb, NULL);
154 evas_object_smart_callback_add(entry, "focused", _editfield_searchbar_focused_cb, NULL);
155 evas_object_smart_callback_add(entry, "unfocused", _editfield_searchbar_unfocused_cb, NULL);
157 elm_access_info_cb_set(entry, ELM_ACCESS_TYPE, _editfield_searchbar_access_info_cb, NULL);
161 button = elm_button_add(parent);
162 elm_object_style_set(button, "editfield_clear");
163 elm_object_focus_allow_set(button, EINA_FALSE);
164 elm_object_part_content_set(entry, "elm.swallow.clear", button);
165 evas_object_smart_callback_add(button, "clicked", _eraser_btn_clicked_cb, entry);
167 evas_object_smart_callback_add(entry, "changed", _editfield_changed_cb, NULL);
168 evas_object_smart_callback_add(entry, "preedit,changed", _editfield_changed_cb, NULL);
169 evas_object_smart_callback_add(entry, "focused", _editfield_focused_cb, NULL);
170 evas_object_smart_callback_add(entry, "unfocused", _editfield_unfocused_cb, NULL);
173 eed = calloc(1, sizeof(Ea_Editfield_Data));
174 eed->clear_btn_disabled = EINA_FALSE;
175 evas_object_data_set(entry, EA_EF_KEY_DATA, eed);
180 ea_editfield_clear_button_disabled_set(Evas_Object *obj, Eina_Bool disable)
182 Ea_Editfield_Data *eed;
184 eed = evas_object_data_get(obj, EA_EF_KEY_DATA);
187 eed->clear_btn_disabled = !!disable;
188 if (eed->clear_btn_disabled)
189 elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
194 ea_editfield_clear_button_disabled_get(Evas_Object *obj)
196 Ea_Editfield_Data *eed;
200 eed = evas_object_data_get(obj, EA_EF_KEY_DATA);
204 return eed->clear_btn_disabled;