4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Contact: MyoungJune Park <mj2004.park@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
22 #include <setting-common-draw-widget.h>
26 #include <efl_assist.h>
27 #include <notification.h>
28 #include <notification_internal.h>
30 #define SUPPORT_BACK_KEY_GRAB 1
31 static void __ignore_back_key_cb(void *data, Evas_Object *obj, void *event_info);
33 EXPORT_PUBLIC void popup_handle_hardkey(void *data, Evas_Object *popup)
37 evas_object_hide(popup);
38 double timeout = elm_popup_timeout_get(popup);
41 evas_object_smart_callback_call(popup, "timeout", data);
45 char *btn_part_str[3] = {
46 _("button1"), _("button2"), _("button3")
49 Evas_Object *btn = NULL;
50 Evas_Object *first_btn = NULL;
52 btn = elm_object_part_content_get(popup, btn_part_str[i]);
62 evas_object_smart_callback_call(popup, "block,clicked", data);
66 const char *btn_str = elm_object_text_get(first_btn);
67 if(0 == safeStrCmp(btn_str, _("IDS_ST_BUTTON_ONLY_VIBRATE"))
68 || 0 == safeStrCmp(btn_str, _("IDS_COM_SK_OK")))
70 // 1. special process for "Vibration" button
71 // 2. Assistive light popup has only one button, OK. In this case, do not call smart callback.
72 evas_object_del(popup);
76 evas_object_smart_callback_call(first_btn, "clicked", data);
83 static void __hardkey_mouseup_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
86 Evas_Event_Mouse_Up *ev = event_info;
87 if (ev->button == 3) // if mouse right button is up
89 //evas_object_hide(obj); // you can call evas_object_del(obj); to remove popup if you want
90 popup_handle_hardkey(data, obj);
93 static void __hardkey_keyup_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
96 Evas_Event_Key_Down *ev = event_info;
97 if (!strcmp(ev->keyname, KEY_BACK))
99 //evas_object_hide(obj); // you can call evas_object_del(obj); to remove popup if you want
100 popup_handle_hardkey(data, obj);
104 EXPORT_PUBLIC void ea_popup_back_cb_2(void *data, Evas_Object *obj, void *event_info)
107 popup_handle_hardkey(data, obj);
112 static void __popup_del_cb2(void *data, Evas *e, Evas_Object *obj, void *event_info)
117 #if SUPPORT_BACK_KEY_GRAB
118 //ungrab the "back key"
119 Ecore_X_Display *disp = ecore_x_display_get();
120 Ecore_X_Window xwin = elm_win_xwindow_get(obj);
121 int ret = utilx_ungrab_key(disp, xwin, KEY_BACK);
123 SETTING_TRACE_ERROR("KEY_BACK ungrab error ret[%d]", ret);
126 evas_object_event_callback_del(obj, EVAS_CALLBACK_KEY_UP, __hardkey_keyup_cb);
127 evas_object_event_callback_del(obj, EVAS_CALLBACK_MOUSE_UP, __hardkey_mouseup_cb);
130 EXPORT_PUBLIC void setting_popup_lang_update(Evas_Object *popup)
133 setting_retm_if(NULL == popup, "data is NULL");
134 char *title = evas_object_data_get(popup, "title");
135 char *text1 = evas_object_data_get(popup, "text");
136 char *text0 = evas_object_data_get(popup, "text0");
137 //SETTING_TRACE("title:%s", title);
138 //SETTING_TRACE("text1:%s", text1);
139 //SETTING_TRACE("text0:%s", text0);
141 char text[MAX_COMMON_BUFFER_LEN + 1]={0,};
144 snprintf(text, MAX_COMMON_BUFFER_LEN, "%s<br>%s", _(text0), _(text1));
148 snprintf(text, MAX_COMMON_BUFFER_LEN, "%s", text1);
150 //char *eo_view_t = evas_object_type_get(popup);
152 elm_object_part_text_set(popup, "title,text", _(title));
154 Evas_Object *layout = elm_object_content_get(popup);
157 Evas_Object *eo_view = elm_object_part_content_get(layout, "elm.swallow.content");
160 const char *eo_view_t = evas_object_type_get(eo_view);
161 //SETTING_TRACE("eo_view_t:%s", eo_view_t);
162 if (!safeStrCmp("elm_gengrid", eo_view_t))
163 elm_gengrid_realized_items_update(eo_view);
164 else if(!safeStrCmp("elm_genlist", eo_view_t))
165 elm_genlist_realized_items_update(eo_view);
166 else if(!safeStrCmp("elm_label", eo_view_t))
167 if (!isEmptyStr(text)) elm_object_text_set(eo_view, _(text));
171 eo_view = elm_object_part_content_get(layout, "elm.swallow.end");
174 const char *eo_view_t = evas_object_type_get(eo_view);
175 //SETTING_TRACE("eo_view_t:%s", eo_view_t);
176 if(!safeStrCmp("elm_check", eo_view_t))
179 char *check_str = evas_object_data_get(popup, "check_str");
180 //SETTING_TRACE("check_str:%s", check_str);
181 if (check_str) elm_object_text_set(eo_view, _(check_str));
187 //SETTING_TRACE("text:%s", text);
188 if (!isEmptyStr(text))
189 elm_object_text_set(popup, _(text));
192 char *btn_part_str[3] = {
193 _("button1"), _("button2"), _("button3")
196 Evas_Object *btn = NULL;
198 //SETTING_TRACE("button1...:%s", evas_object_data_get(popup, "button1"));
199 //SETTING_TRACE("button2...:%s", evas_object_data_get(popup, "button2"));
200 //SETTING_TRACE("button3...:%s", evas_object_data_get(popup, "button3"));
203 btn = elm_object_part_content_get(popup, btn_part_str[i]);
204 //SETTING_TRACE("btn:%p", btn);
208 char *btn_str = evas_object_data_get(popup, btn_part_str[i]);
209 //SETTING_TRACE("btn_str:%s", btn_str);
210 elm_object_text_set(btn, _(btn_str));
216 static void __popup_lang_change_cb(keynode_t *key, void *data)
218 setting_retm_if(NULL == key, "key is NULL");
219 setting_retm_if(NULL == data, "data is NULL");
220 Evas_Object *popup = data;
221 char *vconf_name = vconf_keynode_get_name(key);
222 if (!safeStrCmp(vconf_name, VCONFKEY_LANGSET))
224 setting_popup_lang_update(popup);
228 static void __popup_del_cb3(void *data, Evas *e, Evas_Object *obj, void *event_info)
233 (void)vconf_ignore_key_changed(VCONFKEY_LANGSET, __popup_lang_change_cb);
234 evas_object_data_set(obj, "title", NULL);
235 evas_object_data_set(obj, "text0", NULL);
236 evas_object_data_set(obj, "text", NULL);
237 evas_object_data_set(obj, "button1", NULL);
238 evas_object_data_set(obj, "button2", NULL);
239 evas_object_data_set(obj, "button3", NULL);
240 evas_object_data_set(obj, "check_str", NULL);
244 #define ADD_POPUP_MULTI_LANGUAGE_AUTO_UPDATE(popup, title, text, button1_str, button2_str,button3_str) \
246 evas_object_data_set(popup, "title", title);\
247 evas_object_data_set(popup, "text", text);\
248 evas_object_data_set(popup, "button1", button1_str);\
249 evas_object_data_set(popup, "button2", button2_str);\
250 evas_object_data_set(popup, "button3", button3_str);\
251 vconf_notify_key_changed(VCONFKEY_LANGSET, __popup_lang_change_cb, popup);\
252 evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, __popup_del_cb3, NULL);\
255 EXPORT_PUBLIC void setting_add_hardkey_features(Evas_Object *popup, void *data)
261 vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, &value);
266 #if SUPPORT_BACK_KEY_GRAB
267 Ecore_X_Display *disp = ecore_x_display_get();
268 Ecore_X_Window xwin = elm_win_xwindow_get(popup);
269 int ret = utilx_grab_key(disp, xwin, KEY_BACK, TOP_POSITION_GRAB);
271 SETTING_TRACE_ERROR("KEY_BACK grab error ret[%d]", ret);
274 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP, __hardkey_mouseup_cb, data);
275 evas_object_event_callback_add(popup, EVAS_CALLBACK_KEY_UP, __hardkey_keyup_cb, data);
276 evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, __popup_del_cb2, NULL);
279 static void _setting_def_response_cb(void *data, Evas_Object *obj,
284 SETTING_TRACE(" REMOVE THE POPUP OBJECT BY THIS FUNCTION ");
286 evas_object_del(obj);
291 EXPORT_PUBLIC void __popup_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
295 Ecore_X_Display *disp = ecore_x_display_get();
296 Ecore_X_Window xwin = elm_win_xwindow_get(obj);
297 int ret = utilx_ungrab_key(disp, xwin, KEY_HOME);
299 SETTING_TRACE_ERROR("KEY_HOME ungrab error ret[%d]", ret);
305 * @ set the attribution of the specialized progressbar
306 * @See setting_create_custom_progressbar.
308 EXPORT_PUBLIC void __popup_event_set(Evas_Object *popup, void *data,
309 setting_call_back_func response_cb,
310 int timeout,//to control the timeout time
311 bool blocked_flag,//to control whether to block the screen
312 bool keygrab_flag//to control whether to block the 'Home key'
317 evas_object_smart_callback_add(popup, "timeout", response_cb, data);
319 evas_object_smart_callback_add(popup, "timeout", _setting_def_response_cb, data);
323 if (!blocked_flag) {//not blocked_flag == TRUE !!!
325 evas_object_smart_callback_add(popup, "block,clicked", response_cb, data);
327 evas_object_smart_callback_add(popup, "block,clicked", _setting_def_response_cb, data);
332 Ecore_X_Display *disp = ecore_x_display_get();
333 Ecore_X_Window xwin = elm_win_xwindow_get(popup);
334 int ret = utilx_grab_key(disp, xwin, KEY_HOME, TOP_POSITION_GRAB);
336 SETTING_TRACE_ERROR("KEY_HOME grab error ret[%d]", ret);
338 evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, __popup_del_cb, NULL);
339 ea_object_event_callback_add(popup, EA_CALLBACK_BACK, __ignore_back_key_cb, NULL);
343 static void __ignore_back_key_cb(void *data, Evas_Object *obj,
351 static Evas_Object *__add_progressbar(void *data, Evas_Object *parent,
352 char *progressbar_style,
353 char *progressbar_title,
354 char *progressbar_lable)
358 Evas_Object *popup = elm_popup_add(parent);
359 ea_object_event_callback_add(popup, EA_CALLBACK_BACK, __ignore_back_key_cb, NULL);
360 //setting_add_hardkey_features(popup, data);
362 vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, &value);
365 Ecore_X_Display *disp = ecore_x_display_get();
366 Ecore_X_Window xwin = elm_win_xwindow_get(popup);
367 int ret = utilx_grab_key(disp, xwin, KEY_BACK, TOP_POSITION_GRAB);
369 SETTING_TRACE_ERROR("KEY_BACK grab error ret[%d]", ret);
372 evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP, __hardkey_mouseup_cb, data);
373 //evas_object_event_callback_add(popup, EVAS_CALLBACK_KEY_UP, __hardkey_keyup_cb, data);
374 evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, __popup_del_cb2, NULL);
377 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
378 if (progressbar_title) {
379 elm_object_part_text_set(popup, "title,text", _(progressbar_title));
382 Evas_Object *box = elm_box_add(popup);
383 elm_box_horizontal_set(box, EINA_TRUE);
384 evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
385 evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
386 elm_box_align_set(box, 0.5, 0.5);
387 elm_box_padding_set(box, 16, 0);
389 // [UI] progress icon
390 if (progressbar_style) {
391 Evas_Object *progressbar = elm_progressbar_add(popup);
392 elm_object_style_set(progressbar, progressbar_style); /* "toolbar_process" or "pending_list" or "list_prosess" */
393 //evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, 0.5);
394 //evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
395 elm_progressbar_pulse(progressbar, EINA_TRUE);
396 evas_object_show(progressbar);
397 elm_box_pack_end(box, progressbar);
401 if (progressbar_lable) {
402 Evas_Object *label = elm_label_add(popup);
403 elm_object_text_set(label, _(progressbar_lable)); /* "Loading..." */
404 evas_object_show(label);
405 elm_box_pack_end(box, label);
407 ADD_POPUP_MULTI_LANGUAGE_AUTO_UPDATE(popup, progressbar_title, progressbar_lable, NULL, NULL, NULL);
409 Evas_Object *table = elm_table_add(popup);
410 evas_object_show(table);
411 elm_table_homogeneous_set(table, EINA_FALSE);
413 Evas_Object *rect_up;
414 rect_up = evas_object_rectangle_add(evas_object_evas_get(popup));
415 evas_object_size_hint_min_set(rect_up, ELM_SCALE_SIZE(100), ELM_SCALE_SIZE(20));
417 Evas_Object *rect_down;
418 rect_down = evas_object_rectangle_add(evas_object_evas_get(popup));
419 evas_object_size_hint_min_set(rect_down, ELM_SCALE_SIZE(100), ELM_SCALE_SIZE(20));
422 elm_table_pack(table, rect_up, 0, 0, 2, 1);// rect as a padding
423 elm_table_pack(table, box, 0, 1, 2, 1);
424 elm_table_pack(table, rect_down, 0, 2, 2, 1);// rect as a padding
425 evas_object_show(box);
426 elm_object_content_set(popup, table);
431 void _popup_show_cb(void * data) {
434 evas_object_show(data);
440 Evas_Object *setting_create_popup_with_progressbar_withobject(void *data,
443 char *progressbar_style,
446 setting_call_back_func response_cb,
453 evas_object_del(popup);
457 popup = __add_progressbar(data, parent, progressbar_style,
459 elm_object_style_set(popup, "no_effect");
462 elm_popup_timeout_set(popup, timeout);
464 __popup_event_set(popup, data, response_cb, timeout, blocked_flag, keygrab_flag);
465 //ecore_idler_add(_popup_show_cb, popup);
466 evas_object_show(popup);
472 * create a popup window which contents a progressbar
474 * @return a popup window which contents a progressbar
477 Evas_Object *setting_create_popup_with_progressbar(void *data,
479 char *progressbar_style,
482 setting_call_back_func response_cb,
488 Evas_Object *popup = NULL;
489 popup = __add_progressbar(data, parent, progressbar_style,
493 elm_popup_timeout_set(popup, timeout);
495 __popup_event_set(popup, data, response_cb, timeout, blocked_flag, keygrab_flag);
496 //ecore_idler_add(_popup_show_cb, popup);
497 evas_object_show(popup);
503 * create a popup window which contents a progressbar and btn
505 * @return a popup window which contents a progressbar and btn
508 Evas_Object *setting_create_popup_with_progressbar_btn(void *data,
510 char *progressbar_style,
513 setting_call_back_func response_cb,
518 Evas_Object *popup = NULL;
519 popup = __add_progressbar(data, parent, progressbar_style,
523 elm_popup_timeout_set(popup, timeout);
526 if (btn_num > 0) { //the case popup has button or buttons
530 va_start(args, btn_num);
533 btn_str = va_arg( args, char *);
534 if(safeStrCmp(_(btn_str),_("IDS_COM_SK_CANCEL")) != 0){
535 Evas_Object *btn = setting_create_button(popup, btn_str, NULL, response_cb, data);
536 elm_object_style_set(btn, "popup");
537 elm_object_part_content_set(popup, _("button1"), btn);
539 evas_object_data_set(popup, "button1", btn_str);
542 evas_object_smart_callback_add(popup, "block,clicked", response_cb, data);
544 evas_object_smart_callback_add(popup, "block,clicked", _setting_def_response_cb, data);
552 va_start(args, btn_num);
556 char *btn_part_str[] = {
557 _("button1"), _("button2"), _("button3")
561 for (; argno < btn_num; argno++) {
562 btn_str = va_arg( args, char *);
563 SETTING_TRACE("Parameter #%d is: %s, btn_part_str;%s", argno, btn_str, btn_part_str[argno]);
566 Evas_Object *btn = setting_create_button(popup, btn_str, NULL, response_cb, data);
567 elm_object_style_set(btn, "popup");
568 elm_object_part_content_set(popup, btn_part_str[argno], btn);
569 evas_object_data_set(popup, btn_part_str[argno], btn_str);
575 } else { //the case popup doesn't have any button.
576 __popup_event_set(popup, data,response_cb, timeout, FALSE, FALSE);
579 evas_object_show(popup);
584 * The general API to create a certain popup window with more than one button.
585 * @return a certain popup window
588 Evas_Object *setting_create_popup_with_btn(void *data,
592 setting_call_back_func response_cb,
597 Evas_Object *popup = elm_popup_add(parent);
598 ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb_2, data);
599 setting_add_hardkey_features(popup, data);
600 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
603 //popup text's default align is left, add html lable will cause TTS reading incorrect
605 char r_str_text[HELP_MSG_BUFF_SIZE] = { 0, };
608 snprintf(r_str_text, HELP_MSG_BUFF_SIZE, "<align=left>");
610 snprintf(r_str_text, HELP_MSG_BUFF_SIZE, "<align=center>");
612 snprintf(r_str_text, HELP_MSG_BUFF_SIZE, "<align=left>");
613 g_strlcat(r_str_text, text, HELP_MSG_BUFF_SIZE);
614 g_strlcat(r_str_text, "</align>", HELP_MSG_BUFF_SIZE);
615 elm_object_text_set(popup, r_str_text);
620 elm_object_text_set(popup, _(text));
623 elm_object_part_text_set(popup, "title,text", _(title));
626 elm_popup_timeout_set(popup, timeout);
628 ADD_POPUP_MULTI_LANGUAGE_AUTO_UPDATE(popup, title, text, NULL, NULL, NULL);
629 SETTING_TRACE("title...:%s", evas_object_data_get(popup, "title"));
630 SETTING_TRACE("text...:%s", evas_object_data_get(popup, "text"));
632 if (btn_num > 0) { //the case popup has button or buttons
633 /*currently, most button number is 3*/
635 SETTING_TRACE_ERROR("incorrect button number for popup");
638 else if (btn_num == 1)
641 va_start(args, btn_num);
644 btn_str = va_arg( args, char *);
645 if(safeStrCmp(btn_str,_("IDS_COM_SK_CANCEL")) != 0){
646 Evas_Object *btn = setting_create_button(popup, btn_str, NULL, response_cb, data);
647 elm_object_style_set(btn, "popup");
648 elm_object_part_content_set(popup, _("button1"), btn);
649 evas_object_data_set(popup, "button1", btn_str);
652 evas_object_smart_callback_add(popup, "block,clicked", response_cb, data);
654 evas_object_smart_callback_add(popup, "block,clicked", _setting_def_response_cb, data);
662 va_start(args, btn_num);
667 char *btn_part_str[] = {
668 _("button1"), _("button2"), _("button3")
672 for (; i < btn_num; i++) {
673 btn_str[i] = va_arg( args, char *);
676 for (; argno < btn_num; argno++) {
677 SETTING_TRACE("Parameter #%d is: %s, btn_part_str;%s", argno, btn_str[btn_num-1-argno], btn_part_str[argno]);
678 if (btn_str[btn_num-1-argno]) {
679 Evas_Object *btn = setting_create_button(popup, btn_str[btn_num-1-argno], NULL, response_cb, data);
680 /*if(!safeStrCmp(btn_str[btn_num-1-argno], _("IDS_COM_SK_DELETE"))){
681 elm_object_style_set(btn, "style1/delete");
684 elm_object_style_set(btn, "popup");
686 elm_object_part_content_set(popup, btn_part_str[argno], btn);
687 evas_object_data_set(popup, btn_part_str[argno], btn_str[btn_num-1-argno]);
694 } else { //the case popup doesn't have any button.
695 __popup_event_set(popup, data,response_cb, timeout, FALSE, FALSE);
697 SETTING_TRACE("title...:%s", evas_object_data_get(popup, "title"));
698 SETTING_TRACE("text...:%s", evas_object_data_get(popup, "text"));
699 SETTING_TRACE("button1...:%s", evas_object_data_get(popup, "button1"));
700 SETTING_TRACE("button2...:%s", evas_object_data_get(popup, "button2"));
701 SETTING_TRACE("button3...:%s", evas_object_data_get(popup, "button3"));
703 evas_object_show(popup);
709 * The general API to create a certain popup window
711 * @return a certain popup window
714 Evas_Object *setting_create_popup_without_btn(void *data,
718 setting_call_back_func response_cb,
723 Evas_Object *popup = elm_popup_add(parent);
724 ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb_2, data);
725 setting_add_hardkey_features(popup, data);
726 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
729 //popup text's default align is left, add html lable will cause TTS reading incorrect
731 char r_str_text[HELP_MSG_BUFF_SIZE] = { 0, };
734 snprintf(r_str_text, HELP_MSG_BUFF_SIZE, "<align=left>");
736 snprintf(r_str_text, HELP_MSG_BUFF_SIZE, "<align=center>");
738 snprintf(r_str_text, HELP_MSG_BUFF_SIZE, "<align=left>");
739 g_strlcat(r_str_text, text, HELP_MSG_BUFF_SIZE);
740 g_strlcat(r_str_text, "</align>", HELP_MSG_BUFF_SIZE);
741 elm_object_text_set(popup, r_str_text);
746 elm_object_text_set(popup, _(text));
749 elm_object_part_text_set(popup, "title,text", _(title));
751 ADD_POPUP_MULTI_LANGUAGE_AUTO_UPDATE(popup, title, text, NULL, NULL, NULL);
753 elm_popup_timeout_set(popup, timeout);
756 __popup_event_set(popup, data,response_cb, timeout, blocked_flag, keygrab_flag);
757 evas_object_show(popup);
762 * The API to create a certain popup window with title
764 * @return a certain popup window with title
768 int setting_create_simple_popup(void *data,
773 setting_create_popup_without_btn(data, parent, title, text,
774 NULL, POPUP_INTERVAL, FALSE, FALSE);
779 #define ADD_POPUP_BTN(btn_num, popup, response_cb, data) \
784 va_start(args, btn_num);\
787 btn_str = va_arg( args, char *);\
788 if(safeStrCmp(btn_str,_("IDS_COM_SK_CANCEL")) != 0){\
789 Evas_Object *btn = setting_create_button(popup, btn_str, NULL, response_cb, data);\
790 elm_object_style_set(btn, "popup");\
791 elm_object_part_content_set(popup, _("button1"), btn);\
792 evas_object_data_set(popup, "button1", btn_str);\
795 evas_object_smart_callback_add(popup, "block,clicked", response_cb, data);\
797 evas_object_smart_callback_add(popup, "block,clicked", _setting_def_response_cb, data);\
804 va_start(args, btn_num);\
808 char *btn_part_str[] = {\
809 _("button1"), _("button2"), _("button3")\
812 for (; argno < btn_num; argno++) {\
813 btn_str = va_arg( args, char *);\
814 SETTING_TRACE("Parameter #%d is: %s, btn_part_str;%s", argno, btn_str, btn_part_str[argno]);\
817 Evas_Object *btn = setting_create_button(popup, btn_str, NULL, response_cb, data);\
818 elm_object_style_set(btn, "popup");\
819 elm_object_part_content_set(popup, btn_part_str[argno], btn);\
820 evas_object_data_set(popup, btn_part_str[argno], btn_str);\
827 evas_object_smart_callback_add(popup, "timeout", response_cb, data);\
828 evas_object_smart_callback_add(popup, "block,clicked", response_cb, data);\
830 evas_object_smart_callback_add(popup, "timeout", _setting_def_response_cb, data);\
831 evas_object_smart_callback_add(popup, "block,clicked", _setting_def_response_cb, data);\
835 //1Title-1Description-1Gif-nButton
836 /* @png_list is an array end with 'NULL'. like ,
837 const char *png_list[] = {
838 SETTING_ICON_PATH_CFG"motions/motion_overturn_01.png",
839 SETTING_ICON_PATH_CFG"motions/motion_overturn_02.png",
840 SETTING_ICON_PATH_CFG"motions/motion_overturn_03.png",
841 SETTING_ICON_PATH_CFG"motions/motion_overturn_04.png",
842 SETTING_ICON_PATH_CFG"motions/motion_overturn_05.png",
843 NULL //must end with 'NULL'
847 static void __gif_popup_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
850 evas_object_data_set(obj, "popup_type", NULL);
855 Evas_Object *setting_create_popup_with_gif(void *data,
859 const char **png_list, //array end with 'NULL'.
860 setting_call_back_func response_cb,
868 Evas_Object *image = NULL;
869 if (png_list && *png_list) {
870 if (png_list[1]) { //png_list is an array end with 'NULL', and it has at least 2 png file,
871 image = setting_create_gif(parent, png_list);
872 } else { //png_list just has one png file,
873 image = setting_create_image(parent, *png_list);
877 Evas_Object *popup = elm_popup_add(parent);
878 evas_object_show(popup);
879 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
883 elm_object_part_text_set(popup, "title,text", title);
887 elm_popup_timeout_set(popup, timeout);
891 Evas_Object *content_box = elm_box_add(popup);
892 //instructing of displaying image
894 Evas_Object *lable = setting_create_lable(popup, text,
896 elm_box_pack_end(content_box, lable);
900 elm_box_pack_end(content_box, image);
904 app_device_orientation_e m = elm_win_rotation_get(parent);
905 SETTING_TRACE("m:%d", m);
906 if(APP_DEVICE_ORIENTATION_90 == m || APP_DEVICE_ORIENTATION_270 == m)
908 Evas_Object *scroller = elm_scroller_add(parent);
909 elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
910 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
911 evas_object_show(scroller);
912 elm_object_content_set(scroller, content_box);
914 Evas_Object *checkview = elm_layout_add(parent);
915 elm_layout_file_set(checkview, SETTING_THEME_EDJ_NAME, "popup_checkview_image");
916 evas_object_size_hint_weight_set(checkview, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
917 elm_object_part_content_set(checkview, "elm.swallow.content", scroller);
919 evas_object_data_set(popup, "popup_type", "scroller");
921 elm_object_content_set(popup, checkview);
925 evas_object_data_set(popup, "popup_type", "auto_expand");
926 elm_object_content_set(popup, content_box);
928 evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, __gif_popup_del_cb, NULL);
930 ADD_POPUP_BTN(btn_num, popup, response_cb, data);
931 evas_object_show(popup);
933 Evas_Object *scroller = elm_genlist_add(parent);
934 retvm_if(scroller == NULL, NULL, "Cannot set scroller object as contento of layout");
935 elm_genlist_realization_mode_set(scroller, EINA_TRUE);
936 elm_object_style_set(scroller, "dialogue");
937 elm_genlist_clear(scroller); /* first to clear list */
938 elm_genlist_mode_set(scroller, ELM_LIST_COMPRESS);
939 evas_object_smart_callback_add(scroller, "realized", __gl_realized_cb, NULL);
941 ADD_GL_LABLE(scroller, text);
943 SETTING_TRACE("png_list:%p", png_list);
944 ADD_GL_GIF(scroller,png_list)
946 //elm_object_content_set(popup, scroller);
948 Evas_Object *popup = setting_create_popup_with_checkview(parent, title, NULL, scroller,
949 "popup_checkview_image", NULL, timeout);
951 setting_add_hardkey_features(popup, data);
952 ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb_2, data);
953 //evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
954 //evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
955 //evas_object_size_hint_min_set(scroller, ELM_SCALE_SIZE(480), ELM_SCALE_SIZE(700));
957 ADD_POPUP_BTN(btn_num, popup, response_cb, data);
958 evas_object_show(popup);
965 Evas_Object *setting_create_popup_with_checkview(Evas_Object *parent,
968 Evas_Object *checkview_content,
969 const char *checkview_style,
973 Evas_Object *popup = elm_popup_add(parent);
974 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
978 elm_object_part_text_set(popup, "title,text", _(title));
982 elm_popup_timeout_set(popup, timeout);
987 Evas_Object *checkview = elm_layout_add(parent);
988 elm_layout_file_set(checkview, SETTING_THEME_EDJ_NAME, checkview_style);
989 evas_object_size_hint_weight_set(checkview, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
991 //instructing of displaying image
993 edje_object_part_text_set(elm_layout_edje_get(checkview), "elm.text", _(check_str));
995 ADD_POPUP_MULTI_LANGUAGE_AUTO_UPDATE(popup, title, NULL, NULL, NULL, NULL);
996 evas_object_data_set(popup, "check_str", check_str);
998 *check = elm_check_add(popup);
999 evas_object_size_hint_align_set(*check, EVAS_HINT_FILL,
1001 evas_object_size_hint_weight_set(*check, EVAS_HINT_EXPAND,
1003 evas_object_show(*check);
1004 elm_object_part_content_set(checkview, "elm.swallow.end", *check);
1007 if (checkview_content) {
1008 elm_object_part_content_set(checkview, "elm.swallow.content", checkview_content);
1011 Evas_Object *sub_layout = elm_layout_add(popup);
1012 elm_layout_file_set(sub_layout, SETTING_THEME_EDJ_NAME, "screen_mode");
1013 evas_object_size_hint_weight_set(sub_layout, EVAS_HINT_EXPAND, 0.0);
1014 evas_object_show(sub_layout);
1015 elm_object_part_content_set(sub_layout, "content", checkview);
1017 elm_object_content_set(popup, sub_layout);
1022 Evas_Object * setting_create_popup_with_label_and_reverse_btn(void *data,
1023 Evas_Object *parent,
1026 setting_call_back_func response_cb,
1031 //struct appdata *ad = (struct appdata *) data;
1033 popup = elm_popup_add(parent);
1034 ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb_2, data);
1035 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1036 elm_object_text_set(popup, _(text));
1037 ADD_POPUP_MULTI_LANGUAGE_AUTO_UPDATE(popup, NULL, text, NULL, NULL, NULL);
1039 ADD_POPUP_BTN(btn_num, popup, response_cb, data);
1041 evas_object_show(popup);
1047 Evas_Object *setting_create_popup_with_label_check(void *data,
1048 Evas_Object *parent,
1052 Evas_Object **check,
1053 setting_call_back_func response_cb,
1057 Evas_Object *popup = elm_popup_add(parent);
1058 ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb_2, data);
1059 setting_add_hardkey_features(popup, data);
1060 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1063 elm_object_part_text_set(popup, "title,text", _(title));
1067 elm_popup_timeout_set(popup, timeout);
1070 Evas_Object *label = NULL;
1071 label = elm_label_add(popup);
1072 elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
1074 char arr[2048] = {'\0',};
1075 snprintf(arr, 2048, "<color=#000000>%s</color>",_(content));
1076 elm_object_text_set(label, arr);
1078 evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
1079 evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
1080 evas_object_show(label);
1082 Evas_Object *layout = elm_layout_add(popup);
1083 elm_layout_file_set(layout, SETTING_THEME_EDJ_NAME, "popup_checkview");
1084 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1087 *check = elm_check_add(popup);
1088 elm_object_style_set(*check, "popup");
1089 elm_object_text_set(*check, _(check_str));
1090 evas_object_show(*check);
1092 Evas_Object* box = elm_box_add(popup);
1093 elm_box_horizontal_set(box, EINA_TRUE);
1094 elm_box_pack_end(box, *check);
1096 evas_object_show(box);
1097 elm_object_part_content_set(layout, "elm.swallow.end", box);
1100 elm_object_part_content_set(layout, "elm.swallow.content", label);
1102 elm_object_content_set(popup, layout);
1103 ADD_POPUP_MULTI_LANGUAGE_AUTO_UPDATE(popup, title, content, NULL, NULL, NULL);
1104 evas_object_data_set(popup, "check_str", check_str);
1106 ADD_POPUP_BTN(btn_num, popup, response_cb, data);
1107 evas_object_show(popup);
1113 * The API to create a certain popup window with a image, a check and some buttons
1114 * @return a certain popup window with title
1117 Evas_Object *setting_create_popup_with_image_check(void *data,
1118 Evas_Object *parent,
1122 const char **png_list, //array end with 'NULL'.
1124 Evas_Object **check,
1125 setting_call_back_func response_cb,
1129 SETTING_TRACE_BEGIN;
1131 Evas_Object *lable = NULL;
1133 Evas_Object *inner_layout = elm_layout_add(parent);
1134 elm_layout_file_set(inner_layout, SETTING_THEME_EDJ_NAME, "popup_smartscreen_internal");
1135 evas_object_size_hint_weight_set(inner_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1138 lable = setting_create_lable(inner_layout, text1, "entry", "left");
1139 elm_object_part_content_set(inner_layout, "elm.swallow.content1", lable);
1142 Evas_Object *image = NULL;
1143 if (png_list && *png_list) {
1144 if (png_list[1]) { //png_list is an array end with 'NULL', and it has at least 2 png file,
1145 image = setting_create_gif(parent, png_list);
1146 } else { //png_list just has one png file,
1147 image = setting_create_image(parent, *png_list);
1150 elm_object_part_content_set(inner_layout, "elm.swallow.content2", image);
1154 lable = setting_create_lable(inner_layout, text2, "entry", "left");
1155 elm_object_part_content_set(inner_layout, "elm.swallow.content3", lable);
1158 Evas_Object *scroller = elm_scroller_add(parent);
1159 evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, 0);
1160 elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
1161 elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
1162 evas_object_show(scroller);
1163 elm_object_content_set(scroller, inner_layout);
1165 Evas_Object *scroller = elm_genlist_add(parent);
1166 retvm_if(scroller == NULL, NULL, "Cannot set scroller object as contento of layout");
1167 elm_genlist_realization_mode_set(scroller, EINA_TRUE);
1168 elm_object_style_set(scroller, "dialogue");
1169 elm_genlist_clear(scroller); /* first to clear list */
1170 elm_genlist_mode_set(scroller, ELM_LIST_COMPRESS);
1171 evas_object_smart_callback_add(scroller, "realized", __gl_realized_cb, NULL);
1173 ADD_GL_LABLE(scroller, text1);
1175 SETTING_TRACE("png_list:%p", png_list);
1176 ADD_GL_GIF(scroller,png_list)
1177 ADD_GL_LABLE(scroller, text2);
1178 //ADD_GL_BUTTON(scroller, content_button_str, content_button_click_cb, cb_data)
1179 Evas_Object *popup = setting_create_popup_with_checkview(parent, title, check_str, scroller,
1180 "popup_checkview_image", check, timeout);
1181 setting_add_hardkey_features(popup, data);
1182 ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb_2, data);
1184 ADD_POPUP_BTN(btn_num, popup, response_cb, data);
1185 evas_object_show(popup);
1190 * Create selectinfo popup
1193 void setting_create_sel_info_popup(Evas_Object *parent,
1194 Evas_Object **selInfoPop_layout,
1195 Evas_Object **selInfoPop)
1197 SETTING_TRACE_BEGIN;
1198 SETTING_TRACE("*selInfoPop:%p", *selInfoPop);
1199 if (!(*selInfoPop)) {
1201 *selInfoPop = elm_notify_add(parent);
1202 elm_notify_align_set(*selInfoPop, ELM_NOTIFY_ALIGN_FILL, 1.0);
1203 elm_notify_timeout_set(*selInfoPop, 3);
1205 /* list_data->selInfoPop layout add */
1206 *selInfoPop_layout = elm_layout_add(*selInfoPop);
1207 elm_layout_theme_set(*selInfoPop_layout, "standard", "selectioninfo", "center_text");
1209 /* list_data->selInfoPop layout content set to notify */
1210 elm_object_content_set(*selInfoPop, *selInfoPop_layout);
1213 evas_object_show(*selInfoPop);
1217 void setting_create_select_info_popup(Evas_Object **popup, Evas_Object *parent, double timeout, char *content_text, char *style)
1219 SETTING_TRACE_BEGIN;
1220 setting_retm_if(parent == NULL, "parent is NULL");
1221 //SETTING_TRACE("*popup:%p", *popup);
1223 *popup = elm_notify_add(parent);
1224 elm_notify_align_set(*popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
1226 Evas_Object *selectioninfo_layout = NULL;
1227 selectioninfo_layout = elm_layout_add(*popup);
1228 elm_object_content_set(*popup, selectioninfo_layout);
1230 elm_notify_timeout_set(*popup, timeout);
1232 Evas_Object *content_obj = elm_object_content_get(*popup);
1233 /* Set the layout theme */
1234 elm_layout_theme_set(content_obj, "standard", "selectioninfo", style);
1236 char text[MAX_DISPLAY_NAME_LEN_ON_UI] = {0,};
1237 snprintf(text, sizeof(text), "%s", content_text);
1238 elm_object_part_text_set(content_obj, "elm.text", text);
1240 evas_object_show(*popup);
1244 * The API going to insert a record into noti_list in /opt/dbspace/.notification.db
1245 * @ you can check the result via "sqlite3 /opt/dbspace/.notification.db" "select * from noti_list;"
1246 * @ App (quickpanel) use notification_register_detailed_changed_cb to listen all notification/DB events,
1247 * @ in the function _quickpanel_noti_detailed_changed_cb(), it will check the event type(INSERT,UPDATE..)
1248 * @ Take INSERT event for example,
1249 * @ it get the noti_type via notification_get_type,then:
1250 if (noti_type == NOTIFICATION_TYPE_NOTI) {
1251 _quickpanel_noti_noti_add(ad->list, noti_new, GRIDBOX_PREPEND);
1252 } else if (noti_type == NOTIFICATION_TYPE_ONGOING) {
1253 _quickpanel_noti_ongoing_add(ad->list, noti_new, LISTBOX_PREPEND);
1256 "quickpanel/notibox/thumbnail" ---NOTIFICATION_LY_NOTI_THUMBNAIL
1257 "quickpanel/notibox/single_multi" --Others
1260 "quickpanel/listitem/default" --NOTIFICATION_LY_NOTI_EVENT_SINGLE
1262 * usage: dlogutil NOTIFICATION QUICKPANEL indicator
1263 1.ongoing---it's like quick pannel brightness (list item)
1264 setting_create_noti("setting-blockingmode-efl", NOTIFICATION_TYPE_ONGOING,
1265 NOTIFICATION_LY_ONGOING_EVENT, _(title), _(content),
1266 IMG_BlockingMode, NULL);
1268 2.notification---it's grid below ongoing (square grid box)
1269 setting_create_noti("setting-sim-manager-efl", NOTIFICATION_TYPE_NOTI,
1270 NOTIFICATION_LY_NOTI_EVENT_SINGLE, "111", _(noti_str),
1271 IMG_BlockingMode, NULL);
1273 EXPORT_PUBLIC void setting_create_quickpannel_notification(const char *pkgname, int noti_type,
1274 int ly_type, const char *title,
1275 const char *content, const char *image, int *noti_id)
1277 SETTING_TRACE_BEGIN;
1278 notification_h noti = NULL;
1279 notification_error_e ret = NOTIFICATION_ERROR_NONE;
1281 ret = notification_delete_all_by_type(pkgname, noti_type);
1282 SETTING_TRACE("delete all result:%d", ret);
1284 noti = notification_new((notification_type_e)noti_type, NOTIFICATION_GROUP_ID_NONE, NOTIFICATION_PRIV_ID_NONE);
1285 retm_if(!noti, "Fail to notification_new");
1288 /*ret = notification_set_property(noti, NOTIFICATION_PROP_VOLATILE_DISPLAY);
1289 if (ret != NOTIFICATION_ERROR_NONE) break;*/
1291 ret = notification_set_layout(noti, (notification_ly_type_e)ly_type);
1292 if (ret != NOTIFICATION_ERROR_NONE) break;
1296 ret = notification_set_image(noti, NOTIFICATION_IMAGE_TYPE_ICON, image);
1297 if (ret != NOTIFICATION_ERROR_NONE) break;
1302 ret = notification_set_text(noti,NOTIFICATION_TEXT_TYPE_TITLE, title, title, NOTIFICATION_VARIABLE_TYPE_NONE);
1303 if (ret != NOTIFICATION_ERROR_NONE) break;
1308 ret = notification_set_text(noti, NOTIFICATION_TEXT_TYPE_CONTENT,content, content, NOTIFICATION_VARIABLE_TYPE_NONE);
1309 if (ret != NOTIFICATION_ERROR_NONE) break;
1312 ret = notification_set_text_domain(noti, SETTING_PACKAGE, SETTING_LOCALEDIR);
1313 if (ret != NOTIFICATION_ERROR_NONE) break;
1315 ret = notification_set_pkgname(noti, pkgname);
1316 if (ret != NOTIFICATION_ERROR_NONE) break;
1319 ret = notification_set_application(noti, pkgname);
1320 if (ret != NOTIFICATION_ERROR_NONE) break;
1323 ret = notification_insert(noti, noti_id);
1324 if (ret != NOTIFICATION_ERROR_NONE) break;
1328 if (notification_free(noti) != NOTIFICATION_ERROR_NONE) {
1329 SETTING_TRACE_ERROR("Fail to notification_free");
1335 EXPORT_PUBLIC void setting_remove_quickpannel_notification(const char *pkgname, int noti_type, int *noti_id)
1337 SETTING_TRACE_BEGIN;
1338 notification_error_e ret = NOTIFICATION_ERROR_NONE;
1339 ret = notification_delete_all_by_type(pkgname, noti_type);
1340 if (ret != NOTIFICATION_ERROR_NONE) {
1341 SETTING_TRACE_ERROR("Fail to notification_delete_all_by_type [%d]", ret);
1348 /*The API is going to register a message to NOTIFICATION_STATUS_MESSAGE_KEY, and the message will be shown in indicator
1349 * @ Quickpannel App save the value of var message, and it supply notification_status_monitor_message_cb_set,
1350 * @ in which, Indicator can set process of vconf(NOTIFICATION_STATUS_MESSAGE_KEY) change event,in the call __message_callback,
1351 * @ it will invoke indicator_part_text_emit_by_win(win,"message.text.compare", text); to show message you registered
1353 EXPORT_PUBLIC void setting_create_indicator_notification(const char *message)
1355 notification_status_message_post(message);