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");
39 elm_object_signal_emit(layout, "elm,state,guidetext,hide", "elm");
44 static void __focused_cb(void *data, Evas_Object *obj, void *event_info)
46 Evas_Object *layout = (Evas_Object *)data;
48 void *erase = evas_object_data_get(layout, "eraser");
49 BROWSER_LOGD("erase = %d", erase);
51 if (!elm_entry_is_empty(obj) && erase)
52 elm_object_signal_emit(layout, "elm,state,eraser,show", "elm");
54 elm_object_signal_emit(layout, "elm,state,guidetext,hide", "elm");
57 static void __unfocused_cb(void *data, Evas_Object *obj, void *event_info)
59 Evas_Object *layout = (Evas_Object *)data;
61 if (elm_entry_is_empty(obj))
62 elm_object_signal_emit(layout, "elm,state,guidetext,show", "elm");
64 elm_object_signal_emit(layout, "elm,state,eraser,hide", "elm");
67 static void __url_entry_focused_cb(void *data, Evas_Object *obj, void *event_info)
69 Evas_Object *layout = (Evas_Object *)data;
71 void *erase = evas_object_data_get(layout, "eraser");
72 BROWSER_LOGD("erase = %d", erase);
74 if (!elm_entry_is_empty(obj) && erase)
75 elm_object_signal_emit(layout, "elm,state,eraser,show", "elm");
77 elm_object_signal_emit(layout, "elm,state,guidetext,hide", "elm");
78 // edje_object_signal_emit(elm_layout_edje_get(layout), "ellipsis_hide,signal", "");
79 elm_object_signal_emit(layout, "ellipsis_hide,signal", "elm");
81 int *cursor_position = (int *)evas_object_data_get(obj, "cursor_position");
82 BROWSER_LOGD("cursor_position = %d", cursor_position);
83 elm_entry_cursor_pos_set(obj, (int)cursor_position);
86 static void __url_entry_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
88 Evas_Object *layout = (Evas_Object *)data;
90 if (elm_entry_is_empty(obj))
91 elm_object_signal_emit(layout, "elm,state,guidetext,show", "elm");
93 elm_object_signal_emit(layout, "elm,state,eraser,hide", "elm");
95 // edje_object_signal_emit(elm_layout_edje_get(layout), "ellipsis_show,signal", "");
96 elm_object_signal_emit(layout, "ellipsis_show,signal", "elm");
98 evas_object_data_set(obj, "cursor_position", (void *)elm_entry_cursor_pos_get(obj));
100 BROWSER_LOGD("cursor_position = %d", elm_entry_cursor_pos_get(obj));
103 static void __eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
105 Evas_Object *entry = (Evas_Object *)data;
106 elm_entry_entry_set(entry, "");
109 Evas_Object *br_elm_url_editfield_add(Evas_Object *parent)
111 Evas_Object *layout = elm_layout_add(parent);
113 elm_layout_theme_set(layout, "layout", "browser-editfield", "default");
115 Evas_Object *entry = elm_entry_add(parent);
117 elm_entry_single_line_set(entry, EINA_TRUE);
118 elm_entry_scrollable_set(entry, EINA_TRUE);
120 elm_entry_text_style_user_push(entry, "DEFAULT='font_size=35 color=#3C3632 ellipsis=1'");
121 elm_object_part_content_set(layout, "elm.swallow.content", entry);
123 evas_object_smart_callback_add(entry, "changed", __changed_cb, layout);
124 evas_object_smart_callback_add(entry, "focused", __url_entry_focused_cb, layout);
125 evas_object_smart_callback_add(entry, "unfocused", __url_entry_unfocused_cb, layout);
126 elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm",
127 __eraser_clicked_cb, entry);
129 elm_object_signal_emit(layout, "ellipsis_show,signal", "elm");
134 Evas_Object *br_elm_find_word_editfield_add(Evas_Object *parent)
136 Evas_Object *layout = elm_layout_add(parent);
138 elm_layout_theme_set(layout, "layout", "browser-editfield", "default");
140 Evas_Object *entry = elm_entry_add(parent);
142 elm_entry_single_line_set(entry, EINA_TRUE);
143 elm_entry_scrollable_set(entry, EINA_TRUE);
145 elm_entry_text_style_user_push(entry, "color=#000000 ellipsis=1'");
146 elm_object_part_content_set(layout, "elm.swallow.content", entry);
148 evas_object_smart_callback_add(entry, "changed", __changed_cb, layout);
149 evas_object_smart_callback_add(entry, "focused", __focused_cb, layout);
150 evas_object_smart_callback_add(entry, "unfocused", __unfocused_cb, layout);
151 elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm",
152 __eraser_clicked_cb, entry);
154 elm_object_signal_emit(layout, "ellipsis_hide,signal", "elm");
159 Evas_Object *br_elm_editfield_add(Evas_Object *parent, Eina_Bool title)
161 Evas_Object *layout = elm_layout_add(parent);
163 elm_layout_theme_set(layout, "layout", "editfield", "title");
165 elm_layout_theme_set(layout, "layout", "editfield", "default");
167 Evas_Object *entry = elm_entry_add(parent);
168 elm_object_part_content_set(layout, "elm.swallow.content", entry);
170 elm_object_signal_emit(layout, "elm,state,guidetext,hide", "elm");
171 evas_object_data_set(layout, "eraser", (void *)EINA_TRUE);
173 evas_object_smart_callback_add(entry, "changed", __changed_cb, layout);
174 evas_object_smart_callback_add(entry, "focused", __focused_cb, layout);
175 evas_object_smart_callback_add(entry, "unfocused", __unfocused_cb, layout);
176 elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm",
177 __eraser_clicked_cb, entry);
182 void br_elm_editfield_label_set(Evas_Object *obj, const char *label)
184 elm_object_part_text_set(obj, "elm.text", label);
187 Evas_Object *br_elm_editfield_entry_get(Evas_Object *obj)
189 return elm_object_part_content_get(obj, "elm.swallow.content");
192 void br_elm_editfield_guide_text_set(Evas_Object *obj, const char *text)
194 elm_object_part_text_set(obj, "elm.guidetext", text);
197 void br_elm_editfield_entry_single_line_set(Evas_Object *obj, Eina_Bool single_line)
199 Evas_Object *entry = br_elm_editfield_entry_get(obj);
200 elm_entry_single_line_set(entry, EINA_TRUE);
201 elm_entry_scrollable_set(entry, EINA_TRUE);
204 void br_elm_editfield_eraser_set(Evas_Object *obj, Eina_Bool visible)
206 evas_object_data_set(obj, "eraser", (void *)visible);
209 elm_object_signal_emit(obj, "elm,state,eraser,show", "elm");
211 elm_object_signal_emit(obj, "elm,state,eraser,hide", "elm");
215 static void __searchbar_changed_cb(void *data, Evas_Object *obj, void *event_info)
217 Evas_Object *layout = (Evas_Object *)data;
219 if (elm_object_focus_get(layout)) {
220 if (elm_entry_is_empty(obj))
221 elm_object_signal_emit(layout, "elm,state,eraser,hide", "elm");
223 elm_object_signal_emit(layout, "elm,state,eraser,show", "elm");
224 elm_object_signal_emit(layout, "elm,state,guidetext,hide", "elm");
229 static void __searchbar_focused_cb(void *data, Evas_Object *obj, void *event_info)
231 Evas_Object *layout = (Evas_Object *)data;
233 if (!elm_entry_is_empty(obj))
234 elm_object_signal_emit(layout, "elm,state,eraser,show", "elm");
236 elm_object_signal_emit(layout, "elm,state,guidetext,hide", "elm");
237 elm_object_signal_emit(layout, "cancel,in", "");
240 static void __searchbar_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
242 Evas_Object *layout = (Evas_Object *)data;
244 if (elm_entry_is_empty(obj))
245 elm_object_signal_emit(layout, "elm,state,guidetext,show", "elm");
246 elm_object_signal_emit(layout, "elm,state,eraser,hide", "elm");
249 static void __searchbar_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
251 Evas_Object *entry = (Evas_Object *)data;
253 elm_entry_entry_set(entry, "");
256 static void __searchbar_bg_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
258 Evas_Object *entry = (Evas_Object *)data;
260 elm_object_focus_set(entry, EINA_TRUE);
263 static void __searchbar_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
265 Evas_Object *searchbar_layout = (Evas_Object *)data;
266 Evas_Object *entry = elm_object_part_content_get(searchbar_layout, "elm.swallow.content");
268 evas_object_hide(obj);
269 elm_object_signal_emit(searchbar_layout, "cancel,out", "");
271 text = elm_entry_entry_get(entry);
272 if (text != NULL && strlen(text) > 0)
273 elm_entry_entry_set(entry, NULL);
275 elm_object_focus_set(entry, EINA_FALSE);
278 static void __search_entry_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
280 Evas_Object *entry = (Evas_Object *)data;
281 if (!elm_object_focus_allow_get(entry)) {
282 elm_object_focus_allow_set(entry, EINA_TRUE);
283 elm_object_focus_set(entry, EINA_TRUE);
287 Evas_Object *br_elm_searchbar_add(Evas_Object *parent)
289 Evas_Object *searchbar_layout = elm_layout_add(parent);
290 elm_layout_theme_set(searchbar_layout, "layout", "searchbar", "cancel_button");
291 Evas_Object *entry = elm_entry_add(searchbar_layout);
292 elm_entry_scrollable_set(entry, EINA_TRUE);
293 elm_entry_single_line_set(entry, EINA_TRUE);
294 elm_object_part_content_set(searchbar_layout, "elm.swallow.content", entry);
295 elm_object_part_text_set(searchbar_layout, "elm.guidetext", BR_STRING_SEARCH);
298 * When tab history view, the search entry has focus automatically.
299 * So the keypad is shown. So give focus manually. */
300 edje_object_signal_callback_add(elm_layout_edje_get(searchbar_layout),
301 "mouse,clicked,1", "elm.swallow.content", __search_entry_clicked_cb, entry);
303 elm_object_focus_allow_set(entry, EINA_FALSE);
305 Evas_Object *cancel_button = elm_button_add(searchbar_layout);
306 elm_object_part_content_set(searchbar_layout, "button_cancel", cancel_button);
307 elm_object_style_set(cancel_button, "searchbar/default");
308 elm_object_text_set(cancel_button, BR_STRING_CANCEL);
309 evas_object_smart_callback_add(cancel_button, "clicked", __searchbar_cancel_clicked_cb, searchbar_layout);
311 evas_object_smart_callback_add(entry, "changed", __searchbar_changed_cb, searchbar_layout);
312 evas_object_smart_callback_add(entry, "focused", __searchbar_focused_cb, searchbar_layout);
313 evas_object_smart_callback_add(entry, "unfocused", __searchbar_unfocused_cb, searchbar_layout);
314 elm_object_signal_callback_add(searchbar_layout, "elm,eraser,clicked", "elm",
315 __searchbar_eraser_clicked_cb, entry);
316 elm_object_signal_callback_add(searchbar_layout, "elm,bg,clicked", "elm", __searchbar_bg_clicked_cb, entry);
318 return searchbar_layout;
321 void br_elm_searchbar_text_set(Evas_Object *obj, const char *text)
323 Evas_Object *entry = elm_object_part_content_get(obj, "elm.swallow.content");
324 elm_object_text_set(entry, text);
327 char *br_elm_searchbar_text_get(Evas_Object *obj)
329 Evas_Object *entry = elm_object_part_content_get(obj, "elm.swallow.content");
330 const char *text = elm_object_text_get(entry);
331 BROWSER_LOGD("search entry text=[%s]", text);
333 if (text && strlen(text))
339 Evas_Object *br_elm_searchbar_entry_get(Evas_Object *obj)
341 return elm_object_part_content_get(obj, "elm.swallow.content");
344 bool br_preference_set_bool(const char *key, bool value)
347 ret = preference_set_boolean(key, value);
349 case PREFERENCE_ERROR_NONE:
351 case PREFERENCE_ERROR_INVALID_PARAMETER:
352 BROWSER_LOGE("Can not get [%s] value. Invalid parameter\n", key);
354 case PREFERENCE_ERROR_IO_ERROR:
355 BROWSER_LOGE("Can not get [%s] value. Internal IO error\n", key);
363 bool br_preference_get_bool(const char *key, bool *value)
365 int ret = preference_get_boolean(key, value);
367 case PREFERENCE_ERROR_NONE:
369 case PREFERENCE_ERROR_INVALID_PARAMETER:
370 BROWSER_LOGE("Can not get [%s] value. Invalid parameter\n", key);
372 case PREFERENCE_ERROR_NO_KEY:
373 BROWSER_LOGE("Can not get [%s] value. Required key not available\n", key);
375 case PREFERENCE_ERROR_IO_ERROR:
376 BROWSER_LOGE("Can not get [%s] value. Internal IO error\n", key);
384 bool br_preference_create_bool(const char *key, bool value)
386 BROWSER_LOGD("%s(%d)", key, value);
387 bool existing = false;
388 int ret = preference_is_existing(key, &existing);
390 case PREFERENCE_ERROR_NONE:
392 preference_set_boolean(key, value);
394 case PREFERENCE_ERROR_INVALID_PARAMETER:
395 BROWSER_LOGE("Can not initialize [%s] value. Invalid parameter\n", key);
397 case PREFERENCE_ERROR_IO_ERROR:
398 BROWSER_LOGE("Can not initialize [%s] value. Internal IO error\n", key);
406 bool br_preference_set_int(const char *key, int value)
409 ret = preference_set_int(key, value);
411 case PREFERENCE_ERROR_NONE:
413 case PREFERENCE_ERROR_INVALID_PARAMETER:
414 BROWSER_LOGE("Can not get [%s] value. Invalid parameter\n", key);
416 case PREFERENCE_ERROR_IO_ERROR:
417 BROWSER_LOGE("Can not get [%s] value. Internal IO error\n", key);
425 bool br_preference_get_int(const char *key, int *value)
427 int ret = preference_get_int(key, value);
429 case PREFERENCE_ERROR_NONE:
431 case PREFERENCE_ERROR_INVALID_PARAMETER:
432 BROWSER_LOGE("Can not get [%s] value. Invalid parameter\n", key);
434 case PREFERENCE_ERROR_NO_KEY:
435 BROWSER_LOGE("Can not get [%s] value. Required key not available\n", key);
437 case PREFERENCE_ERROR_IO_ERROR:
438 BROWSER_LOGE("Can not get [%s] value. Internal IO error\n", key);
446 bool br_preference_create_int(const char *key, int value)
448 BROWSER_LOGD("%s(%d)", key, value);
449 bool existing = false;
450 int ret = preference_is_existing(key, &existing);
452 case PREFERENCE_ERROR_NONE:
454 preference_set_int(key, value);
456 case PREFERENCE_ERROR_INVALID_PARAMETER:
457 BROWSER_LOGE("Can not initialize [%s] value. Invalid parameter\n", key);
459 case PREFERENCE_ERROR_IO_ERROR:
460 BROWSER_LOGE("Can not initialize [%s] value. Internal IO error\n", key);
468 bool br_preference_set_str(const char *key, const char *value)
471 ret = preference_set_string(key, value);
473 case PREFERENCE_ERROR_NONE:
475 case PREFERENCE_ERROR_INVALID_PARAMETER:
476 BROWSER_LOGE("Can not get [%s] value. Invalid parameter\n", key);
478 case PREFERENCE_ERROR_IO_ERROR:
479 BROWSER_LOGE("Can not get [%s] value. Internal IO error\n", key);
487 bool br_preference_get_str(const char *key, char **value)
489 int ret = preference_get_string(key, value);
491 case PREFERENCE_ERROR_NONE:
493 case PREFERENCE_ERROR_INVALID_PARAMETER:
494 BROWSER_LOGE("Can not get [%s] value. Invalid parameter\n", key);
496 case PREFERENCE_ERROR_OUT_OF_MEMORY:
497 BROWSER_LOGE("Can not get [%s] value. Out of Memory\n", key);
499 case PREFERENCE_ERROR_NO_KEY:
500 BROWSER_LOGE("Can not get [%s] value. Required key not available\n", key);
502 case PREFERENCE_ERROR_IO_ERROR:
503 BROWSER_LOGE("Can not get [%s] value. Internal IO error\n", key);
511 bool br_preference_create_str(const char *key, const char *value)
513 BROWSER_LOGD("%s(%s)", key, value);
514 bool existing = false;
515 int ret = preference_is_existing(key, &existing);
517 case PREFERENCE_ERROR_NONE:
519 preference_set_string(key, value);
521 case PREFERENCE_ERROR_INVALID_PARAMETER:
522 BROWSER_LOGE("Can not initialize [%s] value. Invalid parameter\n", key);
524 case PREFERENCE_ERROR_IO_ERROR:
525 BROWSER_LOGE("Can not initialize [%s] value. Internal IO error\n", key);
533 bool br_preference_set_changed_cb(const char *key, br_preference_changed_cb callback, void *user_data)
535 BROWSER_LOGD("[%s]", key);
536 int ret = preference_set_changed_cb(key, (preference_changed_cb)callback, user_data);
538 case PREFERENCE_ERROR_NONE:
540 case PREFERENCE_ERROR_INVALID_PARAMETER:
541 BROWSER_LOGE("Can not set [%s] callback. Invalid parameter\n", key);
543 case PREFERENCE_ERROR_OUT_OF_MEMORY:
544 BROWSER_LOGE("Can not set [%s] callback. Out of Memory\n", key);
546 case PREFERENCE_ERROR_NO_KEY:
547 BROWSER_LOGE("Can not set [%s] callback. Required key not available\n", key);
549 case PREFERENCE_ERROR_IO_ERROR:
550 BROWSER_LOGE("Can not set [%s] callback. Internal IO error\n", key);
558 bool br_preference_unset_changed_cb(const char *key)
560 BROWSER_LOGD("[%s]", key);
561 int ret = preference_unset_changed_cb(key);
563 case PREFERENCE_ERROR_NONE:
565 case PREFERENCE_ERROR_INVALID_PARAMETER:
566 BROWSER_LOGE("Can not unset [%s] callback. Invalid parameter\n", key);
568 case PREFERENCE_ERROR_IO_ERROR:
569 BROWSER_LOGE("Can not unset [%s] callback. Internal IO error\n", key);
577 Browser_Utility::Browser_Utility(void)
579 BROWSER_LOGD("[%s]", __func__);
582 Browser_Utility::~Browser_Utility(void)
584 BROWSER_LOGD("[%s]", __func__);
587 std::string Browser_Utility::convert_WKStringRef(WKStringRef string_ref)
589 BROWSER_LOGD("[%s]", __func__);
590 std::string return_string;
591 int string_length = WKStringGetMaximumUTF8CStringSize(string_ref);
592 char *buffer =(char *)calloc(string_length + 1, sizeof(char));
594 WKStringGetUTF8CString(string_ref, buffer, string_length);
595 return_string = std::string(buffer);
599 return return_string;