Add description of apache license to source files
[platform/core/uifw/efl-assist.git] / src / lib / efl_assist_editfield.c
1 /*
2  * Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  *
16  */
17
18
19 #include "efl_assist.h"
20 #include "efl_assist_private.h"
21
22 const char *EA_EF_KEY_DATA = "_ea_ef_key_data";
23
24 typedef struct _Ea_Editfield_Data
25 {
26    Eina_Bool clear_btn_disabled;
27 } Ea_Editfield_Data;
28
29 static void _editfield_changed_cb(void *data, Evas_Object *obj, void *event_info)
30 {
31    Ea_Editfield_Data *eed;
32
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"))
36      {
37         if (elm_object_focus_get(obj))
38           {
39              if (elm_entry_is_empty(obj))
40                elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
41              else
42                elm_object_signal_emit(obj, "elm,state,clear,visible", "");
43           }
44      }
45 }
46
47 static void _editfield_focused_cb(void *data, Evas_Object *obj, void *event_info)
48 {
49    Ea_Editfield_Data *eed;
50
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"))
54      {
55         if (!elm_entry_is_empty(obj))
56           elm_object_signal_emit(obj, "elm,state,clear,visible", "");
57         else
58           elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
59      }
60    elm_object_signal_emit(obj, "elm,state,focus,on", "");
61 }
62
63 static void _editfield_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
64 {
65    Ea_Editfield_Data *eed;
66
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", "");
72 }
73
74 static void _eraser_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
75 {
76    elm_entry_entry_set(data, "");
77 }
78
79 static void _editfield_searchbar_changed_cb(void *data, Evas_Object *obj, void *event_info)
80 {
81    Ea_Editfield_Data *eed;
82
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"))
86      {
87         if (elm_entry_is_empty(obj))
88           elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
89         else
90           elm_object_signal_emit(obj, "elm,state,clear,visible", "");
91      }
92 }
93
94 static void _editfield_searchbar_focused_cb(void *data, Evas_Object *obj, void *event_info)
95 {
96    elm_object_signal_emit(obj, "elm,state,focus,on", "");
97 }
98
99 static void _editfield_searchbar_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
100 {
101    elm_object_signal_emit(obj, "elm,state,focus,off", "");
102 }
103
104 EXPORT_API Evas_Object *
105 ea_editfield_add(Evas_Object *parent, Ea_Editfield_Type type)
106 {
107    Evas_Object *entry, *button;
108    Ea_Editfield_Data *eed;
109
110    entry = elm_entry_add(parent);
111
112    if (type == EA_EDITFIELD_SINGLELINE)
113      {
114         elm_object_style_set(entry, "editfield");
115         elm_entry_single_line_set(entry, EINA_TRUE);
116      }
117    else if (type == EA_EDITFIELD_SCROLL_SINGLELINE)
118      {
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", "");
123      }
124    else if (type == EA_EDITFIELD_SCROLL_SINGLELINE_PASSWORD)
125      {
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", "");
131      }
132    else if (type == EA_EDITFIELD_SCROLL_MULTILINE)
133      {
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", "");
137      }
138    else if (type == EA_EDITFIELD_SEARCHBAR)
139      {
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", "");
144      }
145    else
146      {
147         elm_object_style_set(entry, "editfield");
148      }
149
150    if (type == EA_EDITFIELD_SEARCHBAR)
151      {
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);
157
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);
162      }
163    else
164      {
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);
170
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);
175      }
176
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);
180    return entry;
181 }
182
183 EXPORT_API void
184 ea_editfield_clear_button_disabled_set(Evas_Object *obj, Eina_Bool disable)
185 {
186    Ea_Editfield_Data *eed;
187
188    eed = evas_object_data_get(obj, EA_EF_KEY_DATA);
189    if (eed)
190      {
191         eed->clear_btn_disabled = !!disable;
192         if (eed->clear_btn_disabled)
193           elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
194      }
195 }
196
197 EXPORT_API Eina_Bool
198 ea_editfield_clear_button_disabled_get(Evas_Object *obj)
199 {
200    Ea_Editfield_Data *eed;
201
202    if (!obj)
203      return EINA_FALSE;
204    eed = evas_object_data_get(obj, EA_EF_KEY_DATA);
205    if (!eed)
206      return EINA_FALSE;
207
208    return eed->clear_btn_disabled;
209 }