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");
225 elm_object_signal_emit(layout, "elm,state,guidetext,hide", "elm");
230 static void __searchbar_focused_cb(void *data, Evas_Object *obj, void *event_info)
232 Evas_Object *layout = (Evas_Object *)data;
234 if (!elm_entry_is_empty(obj))
235 elm_object_signal_emit(layout, "elm,state,eraser,show", "elm");
237 elm_object_signal_emit(layout, "elm,state,guidetext,hide", "elm");
238 elm_object_signal_emit(layout, "cancel,in", "");
241 static void __searchbar_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
243 Evas_Object *layout = (Evas_Object *)data;
245 if (elm_entry_is_empty(obj))
246 elm_object_signal_emit(layout, "elm,state,guidetext,show", "elm");
247 elm_object_signal_emit(layout, "elm,state,eraser,hide", "elm");
250 static void __searchbar_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
252 Evas_Object *entry = (Evas_Object *)data;
254 elm_entry_entry_set(entry, "");
257 static void __searchbar_bg_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
259 Evas_Object *entry = (Evas_Object *)data;
261 elm_object_focus_set(entry, EINA_TRUE);
264 static void __searchbar_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
266 Evas_Object *searchbar_layout = (Evas_Object *)data;
267 Evas_Object *entry = elm_object_part_content_get(searchbar_layout, "elm.swallow.content");
269 evas_object_hide(obj);
270 elm_object_signal_emit(searchbar_layout, "cancel,out", "");
272 text = elm_entry_entry_get(entry);
273 if (text != NULL && strlen(text) > 0)
274 elm_entry_entry_set(entry, NULL);
276 elm_object_focus_set(entry, EINA_FALSE);
279 static void __search_entry_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
281 Evas_Object *entry = (Evas_Object *)data;
282 if (!elm_object_focus_allow_get(entry)) {
283 elm_object_focus_allow_set(entry, EINA_TRUE);
284 elm_object_focus_set(entry, EINA_TRUE);
288 Evas_Object *br_elm_searchbar_add(Evas_Object *parent)
290 Evas_Object *searchbar_layout = elm_layout_add(parent);
291 elm_layout_theme_set(searchbar_layout, "layout", "searchbar", "cancel_button");
292 Evas_Object *entry = elm_entry_add(searchbar_layout);
293 elm_entry_scrollable_set(entry, EINA_TRUE);
294 elm_entry_single_line_set(entry, EINA_TRUE);
295 elm_object_part_content_set(searchbar_layout, "elm.swallow.content", entry);
296 elm_object_part_text_set(searchbar_layout, "elm.guidetext", BR_STRING_SEARCH);
299 * When tab history view, the search entry has focus automatically.
300 * So the keypad is shown. So give focus manually. */
301 edje_object_signal_callback_add(elm_layout_edje_get(searchbar_layout),
302 "mouse,clicked,1", "elm.swallow.content", __search_entry_clicked_cb, entry);
304 elm_object_focus_allow_set(entry, EINA_FALSE);
306 Evas_Object *cancel_button = elm_button_add(searchbar_layout);
307 elm_object_part_content_set(searchbar_layout, "button_cancel", cancel_button);
308 elm_object_style_set(cancel_button, "searchbar/default");
309 elm_object_text_set(cancel_button, BR_STRING_CANCEL);
310 evas_object_smart_callback_add(cancel_button, "clicked", __searchbar_cancel_clicked_cb, searchbar_layout);
312 evas_object_smart_callback_add(entry, "changed", __searchbar_changed_cb, searchbar_layout);
313 evas_object_smart_callback_add(entry, "focused", __searchbar_focused_cb, searchbar_layout);
314 evas_object_smart_callback_add(entry, "unfocused", __searchbar_unfocused_cb, searchbar_layout);
315 elm_object_signal_callback_add(searchbar_layout, "elm,eraser,clicked", "elm",
316 __searchbar_eraser_clicked_cb, entry);
317 elm_object_signal_callback_add(searchbar_layout, "elm,bg,clicked", "elm", __searchbar_bg_clicked_cb, entry);
319 return searchbar_layout;
322 void br_elm_searchbar_text_set(Evas_Object *obj, const char *text)
324 Evas_Object *entry = elm_object_part_content_get(obj, "elm.swallow.content");
325 elm_object_text_set(entry, text);
328 char *br_elm_searchbar_text_get(Evas_Object *obj)
330 Evas_Object *entry = elm_object_part_content_get(obj, "elm.swallow.content");
331 const char *text = elm_object_text_get(entry);
332 BROWSER_LOGD("search entry text=[%s]", text);
334 if (text && strlen(text))
340 Evas_Object *br_elm_searchbar_entry_get(Evas_Object *obj)
342 return elm_object_part_content_get(obj, "elm.swallow.content");
345 bool br_preference_set_bool(const char *key, bool value)
348 ret = preference_set_boolean(key, value);
350 case PREFERENCE_ERROR_NONE:
352 case PREFERENCE_ERROR_INVALID_PARAMETER:
353 BROWSER_LOGE("Can not get [%s] value. Invalid parameter\n", key);
355 case PREFERENCE_ERROR_IO_ERROR:
356 BROWSER_LOGE("Can not get [%s] value. Internal IO error\n", key);
364 bool br_preference_get_bool(const char *key, bool *value)
366 int ret = preference_get_boolean(key, value);
368 case PREFERENCE_ERROR_NONE:
370 case PREFERENCE_ERROR_INVALID_PARAMETER:
371 BROWSER_LOGE("Can not get [%s] value. Invalid parameter\n", key);
373 case PREFERENCE_ERROR_NO_KEY:
374 BROWSER_LOGE("Can not get [%s] value. Required key not available\n", key);
376 case PREFERENCE_ERROR_IO_ERROR:
377 BROWSER_LOGE("Can not get [%s] value. Internal IO error\n", key);
385 bool br_preference_create_bool(const char *key, bool value)
387 BROWSER_LOGD("%s(%d)", key, value);
388 bool existing = false;
389 int ret = preference_is_existing(key, &existing);
391 case PREFERENCE_ERROR_NONE:
393 preference_set_boolean(key, value);
395 case PREFERENCE_ERROR_INVALID_PARAMETER:
396 BROWSER_LOGE("Can not initialize [%s] value. Invalid parameter\n", key);
398 case PREFERENCE_ERROR_IO_ERROR:
399 BROWSER_LOGE("Can not initialize [%s] value. Internal IO error\n", key);
407 bool br_preference_set_int(const char *key, int value)
410 ret = preference_set_int(key, value);
412 case PREFERENCE_ERROR_NONE:
414 case PREFERENCE_ERROR_INVALID_PARAMETER:
415 BROWSER_LOGE("Can not get [%s] value. Invalid parameter\n", key);
417 case PREFERENCE_ERROR_IO_ERROR:
418 BROWSER_LOGE("Can not get [%s] value. Internal IO error\n", key);
426 bool br_preference_get_int(const char *key, int *value)
428 int ret = preference_get_int(key, value);
430 case PREFERENCE_ERROR_NONE:
432 case PREFERENCE_ERROR_INVALID_PARAMETER:
433 BROWSER_LOGE("Can not get [%s] value. Invalid parameter\n", key);
435 case PREFERENCE_ERROR_NO_KEY:
436 BROWSER_LOGE("Can not get [%s] value. Required key not available\n", key);
438 case PREFERENCE_ERROR_IO_ERROR:
439 BROWSER_LOGE("Can not get [%s] value. Internal IO error\n", key);
447 bool br_preference_create_int(const char *key, int value)
449 BROWSER_LOGD("%s(%d)", key, value);
450 bool existing = false;
451 int ret = preference_is_existing(key, &existing);
453 case PREFERENCE_ERROR_NONE:
455 preference_set_int(key, value);
457 case PREFERENCE_ERROR_INVALID_PARAMETER:
458 BROWSER_LOGE("Can not initialize [%s] value. Invalid parameter\n", key);
460 case PREFERENCE_ERROR_IO_ERROR:
461 BROWSER_LOGE("Can not initialize [%s] value. Internal IO error\n", key);
469 bool br_preference_set_str(const char *key, const char *value)
472 ret = preference_set_string(key, value);
474 case PREFERENCE_ERROR_NONE:
476 case PREFERENCE_ERROR_INVALID_PARAMETER:
477 BROWSER_LOGE("Can not get [%s] value. Invalid parameter\n", key);
479 case PREFERENCE_ERROR_IO_ERROR:
480 BROWSER_LOGE("Can not get [%s] value. Internal IO error\n", key);
488 bool br_preference_get_str(const char *key, char **value)
490 int ret = preference_get_string(key, value);
492 case PREFERENCE_ERROR_NONE:
494 case PREFERENCE_ERROR_INVALID_PARAMETER:
495 BROWSER_LOGE("Can not get [%s] value. Invalid parameter\n", key);
497 case PREFERENCE_ERROR_OUT_OF_MEMORY:
498 BROWSER_LOGE("Can not get [%s] value. Out of Memory\n", key);
500 case PREFERENCE_ERROR_NO_KEY:
501 BROWSER_LOGE("Can not get [%s] value. Required key not available\n", key);
503 case PREFERENCE_ERROR_IO_ERROR:
504 BROWSER_LOGE("Can not get [%s] value. Internal IO error\n", key);
512 bool br_preference_create_str(const char *key, const char *value)
514 BROWSER_LOGD("%s(%s)", key, value);
515 bool existing = false;
516 int ret = preference_is_existing(key, &existing);
518 case PREFERENCE_ERROR_NONE:
520 preference_set_string(key, value);
522 case PREFERENCE_ERROR_INVALID_PARAMETER:
523 BROWSER_LOGE("Can not initialize [%s] value. Invalid parameter\n", key);
525 case PREFERENCE_ERROR_IO_ERROR:
526 BROWSER_LOGE("Can not initialize [%s] value. Internal IO error\n", key);
534 bool br_preference_set_changed_cb(const char *key, br_preference_changed_cb callback, void *user_data)
536 BROWSER_LOGD("[%s]", key);
537 int ret = preference_set_changed_cb(key, (preference_changed_cb)callback, user_data);
539 case PREFERENCE_ERROR_NONE:
541 case PREFERENCE_ERROR_INVALID_PARAMETER:
542 BROWSER_LOGE("Can not set [%s] callback. Invalid parameter\n", key);
544 case PREFERENCE_ERROR_OUT_OF_MEMORY:
545 BROWSER_LOGE("Can not set [%s] callback. Out of Memory\n", key);
547 case PREFERENCE_ERROR_NO_KEY:
548 BROWSER_LOGE("Can not set [%s] callback. Required key not available\n", key);
550 case PREFERENCE_ERROR_IO_ERROR:
551 BROWSER_LOGE("Can not set [%s] callback. Internal IO error\n", key);
559 bool br_preference_unset_changed_cb(const char *key)
561 BROWSER_LOGD("[%s]", key);
562 int ret = preference_unset_changed_cb(key);
564 case PREFERENCE_ERROR_NONE:
566 case PREFERENCE_ERROR_INVALID_PARAMETER:
567 BROWSER_LOGE("Can not unset [%s] callback. Invalid parameter\n", key);
569 case PREFERENCE_ERROR_IO_ERROR:
570 BROWSER_LOGE("Can not unset [%s] callback. Internal IO error\n", key);