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 EXPORT_API Evas_Object *
87 ea_editfield_add(Evas_Object *parent, Ea_Editfield_Type type)
89 Evas_Object *entry, *button;
90 Ea_Editfield_Data *eed;
92 entry = elm_entry_add(parent);
94 if (type == EA_EDITFIELD_SINGLELINE)
96 elm_object_style_set(entry, "editfield");
97 elm_entry_single_line_set(entry, EINA_TRUE);
99 else if (type == EA_EDITFIELD_SCROLL_SINGLELINE)
101 elm_object_style_set(entry, "editfield");
102 elm_entry_single_line_set(entry, EINA_TRUE);
103 elm_entry_scrollable_set(entry, EINA_TRUE);
104 elm_object_signal_emit(entry, "elm,state,scroll,enabled", "");
106 else if (type == EA_EDITFIELD_SCROLL_SINGLELINE_PASSWORD)
108 elm_object_style_set(entry, "editfield");
109 elm_entry_single_line_set(entry, EINA_TRUE);
110 elm_entry_password_set(entry, EINA_TRUE);
111 elm_entry_scrollable_set(entry, EINA_TRUE);
112 elm_object_signal_emit(entry, "elm,state,scroll,enabled", "");
114 else if (type == EA_EDITFIELD_SCROLL_MULTILINE)
116 elm_object_style_set(entry, "editfield");
117 elm_entry_scrollable_set(entry, EINA_TRUE);
118 elm_object_signal_emit(entry, "elm,state,scroll,enabled", "");
120 else if (type == EA_EDITFIELD_SEARCHBAR)
122 elm_object_style_set(entry, "editfield/searchbar/default");
123 elm_entry_single_line_set(entry, EINA_TRUE);
124 elm_entry_scrollable_set(entry, EINA_TRUE);
125 elm_object_signal_emit(entry, "elm,state,scroll,enabled", "");
129 elm_object_style_set(entry, "editfield");
132 if (type == EA_EDITFIELD_SEARCHBAR)
134 button = elm_button_add(parent);
135 elm_object_style_set(button, "search_clear");
136 elm_object_focus_allow_set(button, EINA_FALSE);
137 elm_object_part_content_set(entry, "elm.swallow.clear", button);
138 evas_object_smart_callback_add(button, "clicked", _eraser_btn_clicked_cb, entry);
140 evas_object_smart_callback_add(entry, "changed", _editfield_searchbar_changed_cb, NULL);
141 evas_object_smart_callback_add(entry, "preedit,changed", _editfield_searchbar_changed_cb, NULL);
142 evas_object_smart_callback_add(entry, "focused", _editfield_searchbar_focused_cb, NULL);
143 evas_object_smart_callback_add(entry, "unfocused", _editfield_searchbar_unfocused_cb, NULL);
147 button = elm_button_add(parent);
148 elm_object_style_set(button, "editfield_clear");
149 elm_object_focus_allow_set(button, EINA_FALSE);
150 elm_object_part_content_set(entry, "elm.swallow.clear", button);
151 evas_object_smart_callback_add(button, "clicked", _eraser_btn_clicked_cb, entry);
153 evas_object_smart_callback_add(entry, "changed", _editfield_changed_cb, NULL);
154 evas_object_smart_callback_add(entry, "preedit,changed", _editfield_changed_cb, NULL);
155 evas_object_smart_callback_add(entry, "focused", _editfield_focused_cb, NULL);
156 evas_object_smart_callback_add(entry, "unfocused", _editfield_unfocused_cb, NULL);
159 eed = calloc(1, sizeof(Ea_Editfield_Data));
160 eed->clear_btn_disabled = EINA_FALSE;
161 evas_object_data_set(entry, EA_EF_KEY_DATA, eed);
166 ea_editfield_clear_button_disabled_set(Evas_Object *obj, Eina_Bool disable)
168 Ea_Editfield_Data *eed;
170 eed = evas_object_data_get(obj, EA_EF_KEY_DATA);
173 eed->clear_btn_disabled = !!disable;
174 if (eed->clear_btn_disabled)
175 elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
180 ea_editfield_clear_button_disabled_get(Evas_Object *obj)
182 Ea_Editfield_Data *eed;
186 eed = evas_object_data_get(obj, EA_EF_KEY_DATA);
190 return eed->clear_btn_disabled;