2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
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 <Elementary.h>
22 #include "browser-utility.h"
23 #include "app.h" /* for preference CAPI */
25 static void __changed_cb(void *data, Evas_Object *obj, void *event_info)
27 Evas_Object *layout = (Evas_Object *)data;
29 void *erase = evas_object_data_get(layout, "eraser");
30 BROWSER_LOGD("erase = %d", erase);
34 if (elm_object_focus_get(layout)) {
35 if (elm_entry_is_empty(obj))
36 elm_object_signal_emit(layout, "elm,state,eraser,hide", "elm");
38 elm_object_signal_emit(layout, "elm,state,eraser,show", "elm");
41 if (!elm_entry_is_empty(obj))
42 elm_object_signal_emit(layout, "elm,state,guidetext,hide", "elm");
45 static void __focused_cb(void *data, Evas_Object *obj, void *event_info)
47 Evas_Object *layout = (Evas_Object *)data;
49 void *erase = evas_object_data_get(layout, "eraser");
50 BROWSER_LOGD("erase = %d", erase);
52 if (!elm_entry_is_empty(obj) && erase)
53 elm_object_signal_emit(layout, "elm,state,eraser,show", "elm");
55 elm_object_signal_emit(layout, "elm,state,guidetext,hide", "elm");
58 static void __unfocused_cb(void *data, Evas_Object *obj, void *event_info)
60 Evas_Object *layout = (Evas_Object *)data;
62 if (elm_entry_is_empty(obj))
63 elm_object_signal_emit(layout, "elm,state,guidetext,show", "elm");
65 elm_object_signal_emit(layout, "elm,state,eraser,hide", "elm");
68 static void __url_entry_focused_cb(void *data, Evas_Object *obj, void *event_info)
70 Evas_Object *layout = (Evas_Object *)data;
72 void *erase = evas_object_data_get(layout, "eraser");
73 BROWSER_LOGD("erase = %d", erase);
75 if (!elm_entry_is_empty(obj) && erase)
76 elm_object_signal_emit(layout, "elm,state,eraser,show", "elm");
78 elm_object_signal_emit(layout, "elm,state,guidetext,hide", "elm");
79 // edje_object_signal_emit(elm_layout_edje_get(layout), "ellipsis_hide,signal", "");
80 elm_object_signal_emit(layout, "ellipsis_hide,signal", "elm");
82 int *cursor_position = (int *)evas_object_data_get(obj, "cursor_position");
83 BROWSER_LOGD("cursor_position = %d", cursor_position);
84 elm_entry_cursor_pos_set(obj, (int)cursor_position);
87 static void __url_entry_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
89 Evas_Object *layout = (Evas_Object *)data;
91 if (elm_entry_is_empty(obj))
92 elm_object_signal_emit(layout, "elm,state,guidetext,show", "elm");
94 elm_object_signal_emit(layout, "elm,state,eraser,hide", "elm");
96 // edje_object_signal_emit(elm_layout_edje_get(layout), "ellipsis_show,signal", "");
97 elm_object_signal_emit(layout, "ellipsis_show,signal", "elm");
99 evas_object_data_set(obj, "cursor_position", (void *)elm_entry_cursor_pos_get(obj));
101 BROWSER_LOGD("cursor_position = %d", elm_entry_cursor_pos_get(obj));
104 static void __eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
106 Evas_Object *entry = (Evas_Object *)data;
107 elm_entry_entry_set(entry, "");
110 Evas_Object *br_elm_url_editfield_add(Evas_Object *parent)
112 Evas_Object *layout = elm_layout_add(parent);
114 elm_layout_theme_set(layout, "layout", "browser-editfield", "default");
116 Evas_Object *entry = elm_entry_add(parent);
118 elm_entry_single_line_set(entry, EINA_TRUE);
119 elm_entry_scrollable_set(entry, EINA_TRUE);
121 elm_entry_text_style_user_push(entry, "DEFAULT='font_size=35 color=#3C3632 ellipsis=1'");
122 elm_object_part_content_set(layout, "elm.swallow.content", entry);
124 evas_object_smart_callback_add(entry, "changed", __changed_cb, layout);
125 evas_object_smart_callback_add(entry, "focused", __url_entry_focused_cb, layout);
126 evas_object_smart_callback_add(entry, "unfocused", __url_entry_unfocused_cb, layout);
127 elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm",
128 __eraser_clicked_cb, entry);
130 elm_object_signal_emit(layout, "ellipsis_show,signal", "elm");
135 Evas_Object *br_elm_find_word_editfield_add(Evas_Object *parent)
137 Evas_Object *layout = elm_layout_add(parent);
139 elm_layout_theme_set(layout, "layout", "browser-editfield", "default");
141 Evas_Object *entry = elm_entry_add(parent);
143 elm_entry_single_line_set(entry, EINA_TRUE);
144 elm_entry_scrollable_set(entry, EINA_TRUE);
146 elm_entry_text_style_user_push(entry, "color=#000000 ellipsis=1'");
147 elm_object_part_content_set(layout, "elm.swallow.content", entry);
149 evas_object_smart_callback_add(entry, "changed", __changed_cb, layout);
150 evas_object_smart_callback_add(entry, "focused", __focused_cb, layout);
151 evas_object_smart_callback_add(entry, "unfocused", __unfocused_cb, layout);
152 elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm",
153 __eraser_clicked_cb, entry);
155 elm_object_signal_emit(layout, "ellipsis_hide,signal", "elm");
160 Evas_Object *br_elm_editfield_add(Evas_Object *parent, Eina_Bool title)
162 Evas_Object *layout = elm_layout_add(parent);
164 elm_layout_theme_set(layout, "layout", "editfield", "title");
166 elm_layout_theme_set(layout, "layout", "editfield", "default");
168 Evas_Object *entry = elm_entry_add(parent);
169 elm_object_part_content_set(layout, "elm.swallow.content", entry);
171 elm_object_signal_emit(layout, "elm,state,guidetext,hide", "elm");
172 evas_object_data_set(layout, "eraser", (void *)EINA_TRUE);
174 evas_object_smart_callback_add(entry, "changed", __changed_cb, layout);
175 evas_object_smart_callback_add(entry, "focused", __focused_cb, layout);
176 evas_object_smart_callback_add(entry, "unfocused", __unfocused_cb, layout);
177 elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm",
178 __eraser_clicked_cb, entry);
183 void br_elm_editfield_label_set(Evas_Object *obj, const char *label)
185 elm_object_part_text_set(obj, "elm.text", label);
188 Evas_Object *br_elm_editfield_entry_get(Evas_Object *obj)
190 return elm_object_part_content_get(obj, "elm.swallow.content");
193 void br_elm_editfield_guide_text_set(Evas_Object *obj, const char *text)
195 elm_object_part_text_set(obj, "elm.guidetext", text);
198 void br_elm_editfield_entry_single_line_set(Evas_Object *obj, Eina_Bool single_line)
200 Evas_Object *entry = br_elm_editfield_entry_get(obj);
201 elm_entry_single_line_set(entry, EINA_TRUE);
202 elm_entry_scrollable_set(entry, EINA_TRUE);
205 void br_elm_editfield_eraser_set(Evas_Object *obj, Eina_Bool visible)
207 evas_object_data_set(obj, "eraser", (void *)visible);
210 elm_object_signal_emit(obj, "elm,state,eraser,show", "elm");
212 elm_object_signal_emit(obj, "elm,state,eraser,hide", "elm");
216 static void __searchbar_changed_cb(void *data, Evas_Object *obj, void *event_info)
218 Evas_Object *layout = (Evas_Object *)data;
220 if (elm_object_focus_get(layout)) {
221 if (elm_entry_is_empty(obj))
222 elm_object_signal_emit(layout, "elm,state,eraser,hide", "elm");
224 elm_object_signal_emit(layout, "elm,state,eraser,show", "elm");
227 if (!elm_entry_is_empty(obj))
228 elm_object_signal_emit(layout, "elm,state,guidetext,hide", "elm");
231 static void __searchbar_focused_cb(void *data, Evas_Object *obj, void *event_info)
233 Evas_Object *layout = (Evas_Object *)data;
235 if (!elm_entry_is_empty(obj))
236 elm_object_signal_emit(layout, "elm,state,eraser,show", "elm");
238 elm_object_signal_emit(layout, "elm,state,guidetext,hide", "elm");
239 elm_object_signal_emit(layout, "cancel,in", "");
242 static void __searchbar_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
244 Evas_Object *layout = (Evas_Object *)data;
246 if (elm_entry_is_empty(obj))
247 elm_object_signal_emit(layout, "elm,state,guidetext,show", "elm");
248 elm_object_signal_emit(layout, "elm,state,eraser,hide", "elm");
251 static void __searchbar_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
253 Evas_Object *entry = (Evas_Object *)data;
255 elm_entry_entry_set(entry, "");
258 static void __searchbar_bg_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
260 Evas_Object *entry = (Evas_Object *)data;
262 elm_object_focus_set(entry, EINA_TRUE);
265 static void __searchbar_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
267 Evas_Object *searchbar_layout = (Evas_Object *)data;
268 Evas_Object *entry = elm_object_part_content_get(searchbar_layout, "elm.swallow.content");
270 evas_object_hide(obj);
271 elm_object_signal_emit(searchbar_layout, "cancel,out", "");
273 text = elm_entry_entry_get(entry);
274 if (text != NULL && strlen(text) > 0)
275 elm_entry_entry_set(entry, NULL);
277 elm_object_focus_set(entry, EINA_FALSE);
280 static void __search_entry_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
282 Evas_Object *entry = (Evas_Object *)data;
283 if (!elm_object_focus_allow_get(entry)) {
284 elm_object_focus_allow_set(entry, EINA_TRUE);
285 elm_object_focus_set(entry, EINA_TRUE);
289 Evas_Object *br_elm_searchbar_add(Evas_Object *parent)
291 Evas_Object *searchbar_layout = elm_layout_add(parent);
292 elm_layout_theme_set(searchbar_layout, "layout", "searchbar", "cancel_button");
293 Evas_Object *entry = elm_entry_add(searchbar_layout);
294 elm_entry_scrollable_set(entry, EINA_TRUE);
295 elm_entry_single_line_set(entry, EINA_TRUE);
296 elm_object_part_content_set(searchbar_layout, "elm.swallow.content", entry);
297 elm_object_part_text_set(searchbar_layout, "elm.guidetext", BR_STRING_SEARCH);
300 * When tab history view, the search entry has focus automatically.
301 * So the keypad is shown. So give focus manually. */
302 edje_object_signal_callback_add(elm_layout_edje_get(searchbar_layout),
303 "mouse,clicked,1", "elm.swallow.content", __search_entry_clicked_cb, entry);
305 elm_object_focus_allow_set(entry, EINA_FALSE);
307 Evas_Object *cancel_button = elm_button_add(searchbar_layout);
308 elm_object_part_content_set(searchbar_layout, "button_cancel", cancel_button);
309 elm_object_style_set(cancel_button, "searchbar/default");
310 elm_object_text_set(cancel_button, BR_STRING_CANCEL);
311 evas_object_smart_callback_add(cancel_button, "clicked", __searchbar_cancel_clicked_cb, searchbar_layout);
313 evas_object_smart_callback_add(entry, "changed", __searchbar_changed_cb, searchbar_layout);
314 evas_object_smart_callback_add(entry, "focused", __searchbar_focused_cb, searchbar_layout);
315 evas_object_smart_callback_add(entry, "unfocused", __searchbar_unfocused_cb, searchbar_layout);
316 elm_object_signal_callback_add(searchbar_layout, "elm,eraser,clicked", "elm",
317 __searchbar_eraser_clicked_cb, entry);
318 elm_object_signal_callback_add(searchbar_layout, "elm,bg,clicked", "elm", __searchbar_bg_clicked_cb, entry);
320 return searchbar_layout;
323 void br_elm_searchbar_text_set(Evas_Object *obj, const char *text)
325 Evas_Object *entry = elm_object_part_content_get(obj, "elm.swallow.content");
326 elm_object_text_set(entry, text);
329 char *br_elm_searchbar_text_get(Evas_Object *obj)
331 Evas_Object *entry = elm_object_part_content_get(obj, "elm.swallow.content");
332 const char *text = elm_object_text_get(entry);
333 BROWSER_LOGD("search entry text=[%s]", text);
335 if (text && strlen(text))
341 Evas_Object *br_elm_searchbar_entry_get(Evas_Object *obj)
343 return elm_object_part_content_get(obj, "elm.swallow.content");
346 bool br_preference_set_bool(const char *key, bool value)
349 ret = preference_set_boolean(key, value);
351 case PREFERENCE_ERROR_NONE:
353 case PREFERENCE_ERROR_INVALID_PARAMETER:
354 BROWSER_LOGE("Can not get [%s] value. Invalid parameter\n", key);
356 case PREFERENCE_ERROR_IO_ERROR:
357 BROWSER_LOGE("Can not get [%s] value. Internal IO error\n", key);
365 bool br_preference_get_bool(const char *key, bool *value)
367 int ret = preference_get_boolean(key, value);
369 case PREFERENCE_ERROR_NONE:
371 case PREFERENCE_ERROR_INVALID_PARAMETER:
372 BROWSER_LOGE("Can not get [%s] value. Invalid parameter\n", key);
374 case PREFERENCE_ERROR_NO_KEY:
375 BROWSER_LOGE("Can not get [%s] value. Required key not available\n", key);
377 case PREFERENCE_ERROR_IO_ERROR:
378 BROWSER_LOGE("Can not get [%s] value. Internal IO error\n", key);
386 bool br_preference_create_bool(const char *key, bool value)
388 BROWSER_LOGD("%s(%d)", key, value);
389 bool existing = false;
390 int ret = preference_is_existing(key, &existing);
392 case PREFERENCE_ERROR_NONE:
394 preference_set_boolean(key, value);
396 case PREFERENCE_ERROR_INVALID_PARAMETER:
397 BROWSER_LOGE("Can not initialize [%s] value. Invalid parameter\n", key);
399 case PREFERENCE_ERROR_IO_ERROR:
400 BROWSER_LOGE("Can not initialize [%s] value. Internal IO error\n", key);
408 bool br_preference_set_int(const char *key, int value)
411 ret = preference_set_int(key, value);
413 case PREFERENCE_ERROR_NONE:
415 case PREFERENCE_ERROR_INVALID_PARAMETER:
416 BROWSER_LOGE("Can not get [%s] value. Invalid parameter\n", key);
418 case PREFERENCE_ERROR_IO_ERROR:
419 BROWSER_LOGE("Can not get [%s] value. Internal IO error\n", key);
427 bool br_preference_get_int(const char *key, int *value)
429 int ret = preference_get_int(key, value);
431 case PREFERENCE_ERROR_NONE:
433 case PREFERENCE_ERROR_INVALID_PARAMETER:
434 BROWSER_LOGE("Can not get [%s] value. Invalid parameter\n", key);
436 case PREFERENCE_ERROR_NO_KEY:
437 BROWSER_LOGE("Can not get [%s] value. Required key not available\n", key);
439 case PREFERENCE_ERROR_IO_ERROR:
440 BROWSER_LOGE("Can not get [%s] value. Internal IO error\n", key);
448 bool br_preference_create_int(const char *key, int value)
450 BROWSER_LOGD("%s(%d)", key, value);
451 bool existing = false;
452 int ret = preference_is_existing(key, &existing);
454 case PREFERENCE_ERROR_NONE:
456 preference_set_int(key, value);
458 case PREFERENCE_ERROR_INVALID_PARAMETER:
459 BROWSER_LOGE("Can not initialize [%s] value. Invalid parameter\n", key);
461 case PREFERENCE_ERROR_IO_ERROR:
462 BROWSER_LOGE("Can not initialize [%s] value. Internal IO error\n", key);
470 bool br_preference_set_str(const char *key, const char *value)
473 ret = preference_set_string(key, value);
475 case PREFERENCE_ERROR_NONE:
477 case PREFERENCE_ERROR_INVALID_PARAMETER:
478 BROWSER_LOGE("Can not get [%s] value. Invalid parameter\n", key);
480 case PREFERENCE_ERROR_IO_ERROR:
481 BROWSER_LOGE("Can not get [%s] value. Internal IO error\n", key);
489 bool br_preference_get_str(const char *key, char **value)
491 int ret = preference_get_string(key, value);
493 case PREFERENCE_ERROR_NONE:
495 case PREFERENCE_ERROR_INVALID_PARAMETER:
496 BROWSER_LOGE("Can not get [%s] value. Invalid parameter\n", key);
498 case PREFERENCE_ERROR_OUT_OF_MEMORY:
499 BROWSER_LOGE("Can not get [%s] value. Out of Memory\n", key);
501 case PREFERENCE_ERROR_NO_KEY:
502 BROWSER_LOGE("Can not get [%s] value. Required key not available\n", key);
504 case PREFERENCE_ERROR_IO_ERROR:
505 BROWSER_LOGE("Can not get [%s] value. Internal IO error\n", key);
513 bool br_preference_create_str(const char *key, const char *value)
515 BROWSER_LOGD("%s(%s)", key, value);
516 bool existing = false;
517 int ret = preference_is_existing(key, &existing);
519 case PREFERENCE_ERROR_NONE:
521 preference_set_string(key, value);
523 case PREFERENCE_ERROR_INVALID_PARAMETER:
524 BROWSER_LOGE("Can not initialize [%s] value. Invalid parameter\n", key);
526 case PREFERENCE_ERROR_IO_ERROR:
527 BROWSER_LOGE("Can not initialize [%s] value. Internal IO error\n", key);
535 bool br_preference_set_changed_cb(const char *key, br_preference_changed_cb callback, void *user_data)
537 BROWSER_LOGD("[%s]", key);
538 int ret = preference_set_changed_cb(key, (preference_changed_cb)callback, user_data);
540 case PREFERENCE_ERROR_NONE:
542 case PREFERENCE_ERROR_INVALID_PARAMETER:
543 BROWSER_LOGE("Can not set [%s] callback. Invalid parameter\n", key);
545 case PREFERENCE_ERROR_OUT_OF_MEMORY:
546 BROWSER_LOGE("Can not set [%s] callback. Out of Memory\n", key);
548 case PREFERENCE_ERROR_NO_KEY:
549 BROWSER_LOGE("Can not set [%s] callback. Required key not available\n", key);
551 case PREFERENCE_ERROR_IO_ERROR:
552 BROWSER_LOGE("Can not set [%s] callback. Internal IO error\n", key);
560 bool br_preference_unset_changed_cb(const char *key)
562 BROWSER_LOGD("[%s]", key);
563 int ret = preference_unset_changed_cb(key);
565 case PREFERENCE_ERROR_NONE:
567 case PREFERENCE_ERROR_INVALID_PARAMETER:
568 BROWSER_LOGE("Can not unset [%s] callback. Invalid parameter\n", key);
570 case PREFERENCE_ERROR_IO_ERROR:
571 BROWSER_LOGE("Can not unset [%s] callback. Internal IO error\n", key);