Initialize efl-assist
[platform/core/uifw/efl-assist.git] / src / lib / efl_assist_editfield.c
1 #include "efl_assist.h"
2 #include "efl_assist_private.h"
3
4 static void _editfield_changed_cb(void *data, Evas_Object *obj, void *event_info)
5 {
6    if (elm_object_part_content_get(obj, "elm.swallow.clear"))
7      {
8         if (elm_object_focus_get(obj))
9           {
10              if (elm_entry_is_empty(obj))
11                elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
12              else
13                elm_object_signal_emit(obj, "elm,state,clear,visible", "");
14           }
15      }
16 }
17
18 static void _editfield_focused_cb(void *data, Evas_Object *obj, void *event_info)
19 {
20    if (elm_object_part_content_get(obj, "elm.swallow.clear"))
21      {
22         if (!elm_entry_is_empty(obj))
23           elm_object_signal_emit(obj, "elm,state,clear,visible", "");
24         else
25           elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
26      }
27    elm_object_signal_emit(obj, "elm,state,focus,on", "");
28 }
29
30 static void _editfield_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
31 {
32    if (elm_object_part_content_get(obj, "elm.swallow.clear"))
33      elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
34    elm_object_signal_emit(obj, "elm,state,focus,off", "");
35 }
36
37 static void _eraser_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
38 {
39    elm_entry_entry_set(data, "");
40 }
41
42 static void _editfield_searchbar_changed_cb(void *data, Evas_Object *obj, void *event_info)
43 {
44    if (elm_object_part_content_get(obj, "elm.swallow.clear"))
45      {
46         if (elm_entry_is_empty(obj))
47           elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
48         else
49           elm_object_signal_emit(obj, "elm,state,clear,visible", "");
50      }
51 }
52
53 static void _editfield_searchbar_focused_cb(void *data, Evas_Object *obj, void *event_info)
54 {
55    elm_object_signal_emit(obj, "elm,state,focus,on", "");
56 }
57
58 static void _editfield_searchbar_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
59 {
60    elm_object_signal_emit(obj, "elm,state,focus,off", "");
61 }
62
63 EXPORT_API Evas_Object *
64 ea_editfield_add(Evas_Object *parent, Ea_Editfield_Type type)
65 {
66    Evas_Object *entry, *button;
67
68    entry = elm_entry_add(parent);
69
70    if (type == EA_EDITFIELD_SINGLELINE)
71      {
72         elm_object_style_set(entry, "editfield");
73         elm_entry_single_line_set(entry, EINA_TRUE);
74      }
75    else if (type == EA_EDITFIELD_SCROLL_SINGLELINE)
76      {
77         elm_object_style_set(entry, "editfield");
78         elm_entry_single_line_set(entry, EINA_TRUE);
79         elm_entry_scrollable_set(entry, EINA_TRUE);
80         elm_object_signal_emit(entry, "elm,state,scroll,enabled", "");
81      }
82    else if (type == EA_EDITFIELD_SCROLL_SINGLELINE_PASSWORD)
83      {
84         elm_object_style_set(entry, "editfield");
85         elm_entry_single_line_set(entry, EINA_TRUE);
86         elm_entry_password_set(entry, EINA_TRUE);
87         elm_entry_scrollable_set(entry, EINA_TRUE);
88         elm_object_signal_emit(entry, "elm,state,scroll,enabled", "");
89      }
90    else if (type == EA_EDITFIELD_SCROLL_MULTILINE)
91      {
92         elm_object_style_set(entry, "editfield");
93         elm_entry_scrollable_set(entry, EINA_TRUE);
94         elm_object_signal_emit(entry, "elm,state,scroll,enabled", "");
95      }
96    else if (type == EA_EDITFIELD_SEARCHBAR)
97      {
98         elm_object_style_set(entry, "editfield/searchbar/default");
99         elm_entry_single_line_set(entry, EINA_TRUE);
100         elm_entry_scrollable_set(entry, EINA_TRUE);
101         elm_object_signal_emit(entry, "elm,state,scroll,enabled", "");
102      }
103    else
104      {
105         elm_object_style_set(entry, "editfield");
106      }
107
108    if (type == EA_EDITFIELD_SEARCHBAR)
109      {
110         button = elm_button_add(parent);
111         elm_object_style_set(button, "search_icon");
112         elm_object_focus_allow_set(button, EINA_FALSE);
113         elm_object_part_content_set(entry, "elm.swallow.icon", button);
114
115         button = elm_button_add(parent);
116         elm_object_style_set(button, "search_clear");
117         elm_object_focus_allow_set(button, EINA_FALSE);
118         elm_object_part_content_set(entry, "elm.swallow.clear", button);
119         evas_object_smart_callback_add(button, "clicked", _eraser_btn_clicked_cb, entry);
120
121         evas_object_smart_callback_add(entry, "changed", _editfield_searchbar_changed_cb, NULL);
122         evas_object_smart_callback_add(entry, "preedit,changed", _editfield_searchbar_changed_cb, NULL);
123         evas_object_smart_callback_add(entry, "focused", _editfield_searchbar_focused_cb, NULL);
124         evas_object_smart_callback_add(entry, "unfocused", _editfield_searchbar_unfocused_cb, NULL);
125      }
126    else
127      {
128         button = elm_button_add(parent);
129         elm_object_style_set(button, "editfield_clear");
130         elm_object_focus_allow_set(button, EINA_FALSE);
131         elm_object_part_content_set(entry, "elm.swallow.clear", button);
132         evas_object_smart_callback_add(button, "clicked", _eraser_btn_clicked_cb, entry);
133
134         evas_object_smart_callback_add(entry, "changed", _editfield_changed_cb, NULL);
135         evas_object_smart_callback_add(entry, "preedit,changed", _editfield_changed_cb, NULL);
136         evas_object_smart_callback_add(entry, "focused", _editfield_focused_cb, NULL);
137         evas_object_smart_callback_add(entry, "unfocused", _editfield_unfocused_cb, NULL);
138      }
139
140    return entry;
141 }