tizen 2.3 release
[apps/home/settings.git] / setting-common / src / setting-common-draw-naviframe.c
old mode 100755 (executable)
new mode 100644 (file)
index 20b27f6..93ea6f6
 /*
  * setting
- * Copyright (c) 2012 Samsung Electronics Co., Ltd.
  *
- * Licensed under the Flora License, Version 1.1 (the License);
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
+ *
+ * Contact: MyoungJune Park <mj2004.park@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *     http://floralicense.org/license/
+ * http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an AS IS BASIS,
+ * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
+ *
  */
 #include <setting-common-draw-widget.h>
 #include <glib.h>
 #include <utilX.h>
 #include <Ecore_X.h>
+#include <Elementary.h>
 #include <efl_assist.h>
 
+extern Eina_List* elm_widget_scrollable_children_get(Evas_Object *obj);
+
+#define HALF_SCREEN_STR_LEN 20
+#define ONE_THIRD_SCREEN_STR_LEN 13
+
+#define ADD_MULTI_LANGUAGE_AUTO_UPDATE(eo_view, navi_it, title_str, lbutton_str, mbutton_str,rbutton_str) \
+{\
+       evas_object_data_set(eo_view, "navi_it", navi_it);\
+       evas_object_data_set(eo_view, "navi_title", title_str);\
+       evas_object_data_set(eo_view, "lbutton_str", lbutton_str);\
+       evas_object_data_set(eo_view, "mbutton_str", mbutton_str);\
+       evas_object_data_set(eo_view, "rbutton_str", rbutton_str);\
+       /*vconf_notify_key_changed(VCONFKEY_LANGSET, __navi_eo_view_lang_change_cb, eo_view);*/\
+       evas_object_event_callback_add(eo_view, EVAS_CALLBACK_DEL, __eo_view_del_cb, NULL);\
+}
+
+/*
+static void __navi_eo_view_lang_change_cb(keynode_t *key, void *data)
+{
+       SETTING_TRACE_BEGIN;
+       setting_retm_if(NULL == key, "key is NULL");
+       setting_retm_if(NULL == data, "data is NULL");
+       Evas_Object *eo_view = data;
+       char *vconf_name = vconf_keynode_get_name(key);
+       if (!safeStrCmp(vconf_name, VCONFKEY_LANGSET))
+       {
+               Elm_Object_Item *navi_it = evas_object_data_get(eo_view, "navi_it");
+               char *navi_title = evas_object_data_get(eo_view, "navi_title");
+               char *lbutton_str = evas_object_data_get(eo_view, "lbutton_str");
+               char *mbutton_str = evas_object_data_get(eo_view, "mbutton_str");
+               char *rbutton_str = evas_object_data_get(eo_view, "rbutton_str");
+               const char *eo_view_t = evas_object_type_get(eo_view);
+               SETTING_TRACE("navi_title  [%s]:%s", _(navi_title), navi_title);
+               SETTING_TRACE("eo_view_t:%s", eo_view_t);
+               SETTING_TRACE("lbutton_str:%s", lbutton_str);
+               SETTING_TRACE("mbutton_str:%s", mbutton_str);
+               SETTING_TRACE("rbutton_str:%s", rbutton_str);
+               if (!safeStrCmp("elm_gengrid", eo_view_t))
+                       elm_gengrid_realized_items_update(eo_view);
+               else if(!safeStrCmp("elm_genlist", eo_view_t))
+                       elm_genlist_realized_items_update(eo_view);
+
+               if (navi_it)
+               {
+                       SETTING_TRACE("Update navi_item, navi_title:%s", navi_title);
+                       if (navi_title)
+                               elm_object_item_text_set(navi_it, _(navi_title));
+
+                       //l,m,r
+                       Evas_Object *toolbar = elm_object_item_part_content_get(navi_it, "toolbar");
+
+                       char *btn_str[3] = {0, };
+                       int idx = 0;
+                       if (lbutton_str && 0 != safeStrCmp(_(lbutton_str), _("IDS_COM_BODY_BACK")))
+                               btn_str[idx++] = g_strdup(lbutton_str);
+
+                       if (rbutton_str)
+                               btn_str[idx++] = g_strdup(rbutton_str);
+
+                       if (mbutton_str)
+                               btn_str[idx++] = g_strdup(mbutton_str);
+
+
+                       Elm_Object_Item *it = NULL;
+                       Elm_Object_Item *next_it = NULL;
+                       //char *text = NULL;
+                       it = elm_toolbar_first_item_get(toolbar);
+                       idx = 0;
+                       while (it) {
+                               next_it = elm_toolbar_item_next_get(it);
+                               //text = (char *)elm_object_item_text_get(it);
+                               elm_object_item_text_set(it, _(btn_str[idx]));
+                               idx++;
+                               it = next_it;
+                       }
+               }
+       }
+}
+*/
+static void __eo_view_del_cb(void *data, Evas *e, Evas_Object *eo_view, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       ret_if(!eo_view);
+       //(void)vconf_ignore_key_changed(VCONFKEY_LANGSET, __navi_eo_view_lang_change_cb);
+       evas_object_data_set(eo_view, "navi_it", NULL);
+       evas_object_data_set(eo_view, "navi_title", NULL);
+       evas_object_data_set(eo_view, "lbutton_str", NULL);
+       evas_object_data_set(eo_view, "mbutton_str", NULL);
+       evas_object_data_set(eo_view, "rbutton_str", NULL);
+
+       SETTING_TRACE_END;
+}
+
+EXPORT_PUBLIC
+void setting_navi_items_update(Evas_Object *navigate_bar)
+{
+       SETTING_TRACE_BEGIN;
+       //setting_retm_if(NULL == key, "key is NULL");
+       setting_retm_if(NULL == navigate_bar, "data is NULL");
+       Eina_List * list = elm_naviframe_items_get(navigate_bar);
+       Evas_Object *eo_view = NULL;
+       Evas_Object *btn = NULL;
+       char *btn_text = NULL;
+
+       while (list) {
+               Elm_Object_Item *item = (Elm_Object_Item *) eina_list_data_get(list);
+               if (NULL == item){
+                       SETTING_TRACE("item is null");
+                       list = eina_list_next(list);
+                       continue;
+               }
+
+               btn = elm_object_item_part_content_get(item, "title_right_btn");
+               if (btn)
+               {
+                       btn_text = evas_object_data_get(btn, "text");
+                       if(btn_text)
+                               elm_object_text_set(btn, _(btn_text));
+               }
+
+               btn = elm_object_item_part_content_get(item, "title_left_btn");
+               if (btn)
+               {
+                       btn_text = evas_object_data_get(btn, "text");
+                       if(btn_text)
+                               elm_object_text_set(btn, _(btn_text));
+               }
+
+               eo_view = elm_object_item_content_get(item);
+               if (NULL == eo_view){
+                       SETTING_TRACE("eo_view is null");
+                       list = eina_list_next(list);
+                       continue;
+               }
+
+               Elm_Object_Item *navi_it = evas_object_data_get(eo_view, "navi_it");
+               if (navi_it != item){
+                       SETTING_TRACE("navi_it is null");
+                       list = eina_list_next(list);
+                       continue;
+               }
+
+               const char *navi_title = evas_object_data_get(eo_view, "navi_title");
+               const char *lbutton_str = evas_object_data_get(eo_view, "lbutton_str");
+               const char *mbutton_str = evas_object_data_get(eo_view, "mbutton_str");
+               const char *rbutton_str = evas_object_data_get(eo_view, "rbutton_str");
+               const char *eo_view_t = evas_object_type_get(eo_view);
+               //SETTING_TRACE("navi_title  [%s]:%s", _(navi_title), navi_title);
+               //SETTING_TRACE("eo_view_t:%s", eo_view_t);
+               //SETTING_TRACE("lbutton_str:%s", lbutton_str);
+               //SETTING_TRACE("mbutton_str:%s", mbutton_str);
+               //SETTING_TRACE("rbutton_str:%s", rbutton_str);
+               if (!safeStrCmp("elm_gengrid", eo_view_t))
+                       elm_gengrid_realized_items_update(eo_view);
+               else if(!safeStrCmp("elm_genlist", eo_view_t))
+                       elm_genlist_realized_items_update(eo_view);
+
+               if (navi_it)
+               {
+                       //SETTING_TRACE("Update navi_item, navi_title:%s", navi_title);
+                       if (navi_title)
+                               elm_object_item_text_set(navi_it, _(navi_title));
+
+                       //l,m,r
+                       Evas_Object *toolbar = elm_object_item_part_content_get(navi_it, "toolbar");
+
+                       char *btn_str[3] = {0, };
+                       int idx = 0;
+                       if (lbutton_str && 0 != safeStrCmp(_(lbutton_str), _("IDS_COM_BODY_BACK")))
+                               btn_str[idx++] = g_strdup(lbutton_str);
+
+                       if (rbutton_str)
+                               btn_str[idx++] = g_strdup(rbutton_str);
+
+                       if (mbutton_str)
+                               btn_str[idx++] = g_strdup(mbutton_str);
+
+
+                       Elm_Object_Item *it = NULL;
+                       Elm_Object_Item *next_it = NULL;
+                       //char *text = NULL;
+                       it = elm_toolbar_first_item_get(toolbar);
+                       idx = 0;
+                       while (it) {
+                               next_it = elm_toolbar_item_next_get(it);
+                               //text = (char *)elm_object_item_text_get(it);
+                               elm_object_item_text_set(it, _(btn_str[idx]));
+                               idx++;
+                               it = next_it;
+                       }
+                       G_FREE(btn_str[0]);
+                       G_FREE(btn_str[1]);
+                       G_FREE(btn_str[2]);
+               }
+
+               //if not matched,to check next node.
+               list = eina_list_next(list);
+               item = NULL;
+       }
+       SETTING_TRACE_END;
+}
+
+static void __dismissed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       ret_if(!data);
+       Setting_Btn_Data *btn_data = data;
+       if(btn_data->ctxpopup) {
+               evas_object_del(btn_data->ctxpopup);
+               btn_data->ctxpopup = NULL;
+       }
+}
+
+static void __btn_click_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       ret_if(!data);
+       Setting_Btn_Data *btn_data = data;
+       btn_data->btn_click_cb(btn_data->btn_cb_data, obj, event_info);
+       if(btn_data->ctxpopup) {
+               evas_object_del(btn_data->ctxpopup);
+               btn_data->ctxpopup = NULL;
+       }
+}
+
+static void __rotate_ctxpopup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       ret_if(data == NULL);
+       Setting_Btn_Data *btn_data = (Setting_Btn_Data *)data;
+       Evas_Coord w, h;
+       int pos = -1;
+       ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
+       pos = elm_win_rotation_get(ug_get_window());
+       SETTING_TRACE_DEBUG("pos: %d, w: %d, h: %d", pos, w, h);
+       if (pos == 90)
+       {
+               evas_object_move(btn_data->ctxpopup, 0, w);
+       }
+       else if (pos == 270)
+       {
+               evas_object_move(btn_data->ctxpopup, h, w);
+       }
+       else
+       {
+               evas_object_move(btn_data->ctxpopup, 0, h);
+       }
+}
+
+static void __ctxpopup_lang_change_cb(keynode_t *key, void *data)
+{
+       setting_retm_if(NULL == key, "key is NULL");
+       setting_retm_if(NULL == data, "data is NULL");
+       Setting_Btn_Data *btn_data = (Setting_Btn_Data *)data;
+       char *vconf_name = vconf_keynode_get_name(key);
+       if (!safeStrCmp(vconf_name, VCONFKEY_LANGSET))
+       {
+               //setting_popup_lang_update(popup);
+               int i = 0;
+               while(btn_data->btn_text[i])
+               {
+                       elm_object_item_text_set(btn_data->item[i], _(btn_data->btn_text[i]));
+                       i++;
+               }
+       }
+}
+
+static void __delete_rotate_ctxpopup_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       //SETTING_TRACE_BEGIN;
+       ret_if(data == NULL);
+       Setting_Btn_Data *btn_data = (Setting_Btn_Data *)data;
+       Evas_Object *ctxpopup = btn_data->ctxpopup;
+
+       Ecore_Event_Handler *event_handler = evas_object_data_get(ctxpopup, "event_handler");
+       ecore_event_handler_del(event_handler);
+       evas_object_data_set(ctxpopup, "event_handler", NULL);
+
+       (void)vconf_ignore_key_changed(VCONFKEY_LANGSET, __ctxpopup_lang_change_cb);
+       evas_object_smart_callback_del(elm_object_top_widget_get(ctxpopup), "rotation,changed", __rotate_ctxpopup_cb);
+}
+
+static Eina_Bool __ctxpopup_key_press_cb(void *data, int type, void *event)
+{
+       SETTING_TRACE_BEGIN;
+       Evas_Event_Key_Down *ev = event;
+       if (!ev || !data) {
+               SETTING_TRACE("Invalid event object");
+               return ECORE_CALLBACK_RENEW;
+       }
+       SETTING_TRACE("Pressed %s", ev->keyname);
+       Evas_Object *ctxpopup = data;
+
+       if (!strcmp(ev->keyname, KEY_HOME))
+       {
+               elm_ctxpopup_dismiss(ctxpopup);
+       }
+       return ECORE_CALLBACK_RENEW;
+}
+
+EXPORT_PUBLIC void setting_create_more_btn_click_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       ret_if(!data);
+       Setting_Btn_Data *btn_data = data;
+
+       if(btn_data->ctxpopup) {
+               evas_object_del(btn_data->ctxpopup);
+               btn_data->ctxpopup = NULL;
+       }
+
+       Evas_Object *ctxpopup = elm_ctxpopup_add(btn_data->parent);
+       elm_object_style_set(ctxpopup, "more/default");
+       elm_ctxpopup_auto_hide_disabled_set(ctxpopup, EINA_TRUE); //to disable the rotating dismiss issue
+       ea_object_event_callback_add(ctxpopup, EA_CALLBACK_BACK, ea_ctxpopup_back_cb, NULL); //to make ctxpopup get the "Back" key event
+       ea_object_event_callback_add(ctxpopup, EA_CALLBACK_MORE, ea_ctxpopup_back_cb, NULL);//to make ctxpopup get the "More" key event
+       Ecore_Event_Handler *event_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, __ctxpopup_key_press_cb, ctxpopup);
+       evas_object_data_set(ctxpopup, "event_handler", event_handler);
+
+       evas_object_smart_callback_add(ctxpopup, "dismissed", __dismissed_cb, btn_data);
+       evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_DEL, __delete_rotate_ctxpopup_cb, btn_data);
+       evas_object_smart_callback_add(elm_object_top_widget_get(ctxpopup), "rotation,changed", __rotate_ctxpopup_cb, btn_data);
+       vconf_notify_key_changed(VCONFKEY_LANGSET, __ctxpopup_lang_change_cb, btn_data);
+
+       SETTING_TRACE("Clicked a more button, the call back of selecting objects in context popup is not the same as button callback");
+       Evas_Object *icon = NULL;
+
+       int i = 0;
+       //while(btn_data->btn_text[i])
+       for(i = 0; i < MAX_BUTTON_NUM; i++)
+       {
+               //SETTING_TRACE("btn_data->btn_text[%d]:%s", i, btn_data->btn_text[i]);
+               if (isEmptyStr(btn_data->btn_text[i])) continue;
+               if (btn_data->btn_icon[i])
+               {
+                       icon = elm_image_add(ctxpopup);
+                       elm_image_file_set(icon, btn_data->btn_icon[i], NULL);
+
+               }
+               btn_data->item[i] = elm_ctxpopup_item_append(ctxpopup, _(btn_data->btn_text[i]), icon, __btn_click_cb, btn_data);
+       }
+
+       btn_data->ctxpopup = ctxpopup;
+
+       Evas_Coord w , h;
+
+       int pos = -1;
+       ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
+       pos = elm_win_rotation_get(ug_get_window());
+       if (pos == 90)
+       {
+               evas_object_move(ctxpopup, 0, w);
+       }
+       else if (pos == 270)
+       {
+               evas_object_move(ctxpopup, h, w);
+       }
+       else
+       {
+               evas_object_move(ctxpopup, 0, h);
+       }
+       evas_object_show(ctxpopup);
+}
+
+EXPORT_PUBLIC void setting_create_more_btn_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       ret_if(!data);
+       Setting_Btn_Data *btn_data = data;
+
+       evas_object_smart_callback_del(btn_data->ctxpopup, "dismissed", __dismissed_cb);
+       if(btn_data->ctxpopup) {
+               evas_object_del(btn_data->ctxpopup);
+               btn_data->ctxpopup = NULL;
+       }
+       int i = 0;
+       //while(btn_data->btn_text[i])
+       for(i = 0; i < MAX_BUTTON_NUM; i++)
+       {
+               FREE(btn_data->btn_text[i]);
+               FREE(btn_data->btn_icon[i]);
+       }
+       FREE(btn_data);//delete the date.
+       SETTING_TRACE_END;
+       //evas_object_data_set(obj, "more_btn_data", NULL);
+}
+
+EXPORT_PUBLIC
 Evas_Object *setting_create_win_layout(Evas_Object *win_layout,
                                       Evas_Object *win_obj)
 {
        Evas_Object *layout = NULL;
-
        /*  Base Layout */
        layout = elm_layout_add(win_obj);
        evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
@@ -32,15 +424,129 @@ Evas_Object *setting_create_win_layout(Evas_Object *win_layout,
 
        elm_layout_theme_set(layout, "layout", "application", "default");
 
-       Evas_Object *bg = setting_create_bg(layout, win_obj, "group_list");
+       Evas_Object *bg = setting_create_bg(layout, win_obj, NULL);
        elm_object_part_content_set(layout, "elm.swallow.bg", bg);
        evas_object_show(layout);
-
        return layout;
 }
 
-#define HALF_SCREEN_STR_LEN 20
-#define ONE_THIRD_SCREEN_STR_LEN 13
+EXPORT_PUBLIC
+Elm_Object_Item *setting_create_guild_layout(Evas_Object *navi_bar,
+                                    char *title_str,
+                                    char *lbutton_str,
+                                    char *rbutton_str,
+                                    char *mbutton_str,
+                                    setting_call_back_func lbutton_click_cb,
+                                    setting_call_back_func rbutton_click_cb,
+                                    setting_call_back_func mbutton_click_cb,
+                                    char *content_str1,
+                                    char **png_list,
+                                    char *content_str2,
+                                    char *content_button_str,
+                                    setting_call_back_func content_button_click_cb,
+                                    void *cb_data)
+{
+       Evas_Object *scroller = elm_genlist_add(navi_bar);
+       retvm_if(scroller == NULL, NULL, "Cannot set scroller object  as contento of layout");
+       elm_genlist_realization_mode_set(scroller, EINA_TRUE);
+       elm_object_style_set(scroller, "dialogue");
+       elm_genlist_clear(scroller);    /* first to clear list */
+       elm_genlist_mode_set(scroller, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(scroller, "realized", __gl_realized_cb, NULL);
+
+       ADD_GL_LABLE(scroller, content_str1);
+       ADD_GL_GIF(scroller,png_list)
+       ADD_GL_LABLE(scroller, content_str2);
+       ADD_GL_BUTTON(scroller, content_button_str, content_button_click_cb, cb_data)
+
+       return setting_push_layout_navi_bar(title_str,
+                                    lbutton_str, rbutton_str, NULL,
+                                    lbutton_click_cb,
+                                    rbutton_click_cb,
+                                    NULL, cb_data, scroller, navi_bar, NULL);
+}
+
+EXPORT_PUBLIC
+Elm_Object_Item *setting_create_guild_layout2(Evas_Object *navi_bar,
+                                    char *title_str,
+                                    char *lbutton_str,
+                                    char *rbutton_str,
+                                    char *mbutton_str,
+                                    setting_call_back_func lbutton_click_cb,
+                                    setting_call_back_func rbutton_click_cb,
+                                    setting_call_back_func mbutton_click_cb,
+                                    char *content_str1,
+                                    Evas_Object **ug_layout,
+                                    char *content_str2,
+                                    char *content_button_str,
+                                    setting_call_back_func content_button_click_cb,
+                                    void *cb_data)
+{
+       Evas_Object *scroller;
+       Elm_Object_Item *item = setting_push_layout_navi_bar_scroller(navi_bar,
+                                             title_str,
+                                             lbutton_str, rbutton_str,
+                                             lbutton_click_cb,
+                                             rbutton_click_cb,
+                                             cb_data, &scroller,
+                                             navi_bar);
+       Evas_Object *outer_box = setting_create_client_bx(navi_bar);
+       //add top text window..
+       if (content_str1)
+       {
+               const char *str = setting_customize_text(content_str1, 0, NULL, NULL);
+               Evas_Object *lable = setting_create_textbox(navi_bar, str);
+               setting_disable_evas_object(lable);
+               elm_box_pack_end(outer_box, lable);
+               FREE(str);
+       }
+
+       //add UG window..
+       if (ug_layout)
+       {
+               Evas_Object *ug_win = elm_layout_add(navi_bar);
+               evas_object_size_hint_weight_set(ug_win, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               setting_retvm_if(ug_win == NULL, NULL, "layout == NULL");
+               elm_layout_theme_set(ug_win, "layout", "application", "default");
+               elm_object_part_content_set(ug_win, "elm.swallow.bg", setting_create_blank_rect_customize(navi_bar,720,850));
+               //elm_object_part_content_set(layout, "elm.swallow.content", navi);
+               elm_box_pack_end(outer_box, ug_win);
+               evas_object_show(ug_win);
+               *ug_layout = ug_win;
+       }
+
+       //add bottom text
+       if (content_str2)
+       {
+               const char *str = setting_customize_text(content_str2, 0, NULL, NULL);
+               Evas_Object *lable = setting_create_textbox(navi_bar, str);
+               setting_disable_evas_object(lable);
+               elm_box_pack_end(outer_box, lable);
+               FREE(str);
+       }
+
+       //add bottom button
+       if (content_button_str)
+       {
+               Evas_Object *layout = elm_layout_add(navi_bar);
+               evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               elm_layout_theme_set(layout, "layout", "application", "default");
+               elm_object_part_content_set(layout, "elm.swallow.bg", setting_create_blank_rect_customize(navi_bar,680,100));
+               Evas_Object *btn = elm_button_add(navi_bar);
+               elm_object_text_set(btn, content_button_str);
+               evas_object_propagate_events_set(btn, EINA_FALSE);
+               evas_object_smart_callback_add(btn, "clicked", content_button_click_cb, cb_data);
+               elm_object_part_content_set(layout, "elm.swallow.content", btn);
+               evas_object_show(btn);
+               evas_object_show(layout);
+               elm_box_pack_end(outer_box, layout);
+       }
+
+       elm_object_content_set(scroller, outer_box);
+       return item;
+}
+
+EXPORT_PUBLIC
 Evas_Object *setting_create_navi_bar(Evas_Object *layout)
 {
 
@@ -52,6 +558,7 @@ Evas_Object *setting_create_navi_bar(Evas_Object *layout)
        ea_object_event_callback_add(navi, EA_CALLBACK_BACK, ea_naviframe_back_cb, NULL);
        ea_object_event_callback_add(navi, EA_CALLBACK_MORE, ea_naviframe_more_cb, NULL);
 
+       //elm_object_item_signal_callback_event(navi
 
        if (navi == NULL) {
                SETTING_TRACE(" *** elm_naviframe_add returns NULL *** ");
@@ -62,6 +569,107 @@ Evas_Object *setting_create_navi_bar(Evas_Object *layout)
        return navi;
 }
 
+/**
+* The API to Create title buttons of naviframe
+* if sip is shown,the buttons created by this API will be shown,it sip is hidden,they will be hiden too
+* @return non
+* eg:
+*      //4 common buttons
+*      setting_append_naviframe_title_buttons(ad->navi_it, ad->navi_bar,
+*                                             "1", "2", "3" ,"4",
+*                                             _back_cb,
+*                                             _back_cb,
+*                                             _back_cb,
+*                                             _back_cb);
+*
+*      //more button +2 common buttons + '<-'button
+*      setting_append_naviframe_title_buttons(ad->navi_it, ad->navi_bar,
+*                                             NULL, "2", "3" ,NULL,
+*                                             _back_cb,
+*                                             _back_cb,
+*                                             _back_cb,
+*                                             _back_cb);
+*
+*      //1common buton + '<-'button
+*      setting_append_naviframe_title_buttons(ad->navi_it, ad->navi_bar,
+*                                             NULL, NULL, _("IDS_COM_SK_DONE") ,NULL,
+*                                             NULL,
+*                                             NULL,
+*                                             _back_cb,
+*                                             _back_cb);
+*/
+EXPORT_PUBLIC
+void setting_append_naviframe_title_buttons(Elm_Object_Item *navi_it,
+                                       Evas_Object *navigate_bar,
+                                       char *more_button_str,
+                                       char *left_button_str,
+                                       char *right_button_str,
+                                       char *back_button_str,
+                                       setting_call_back_func more_button_click_cb,
+                                       setting_call_back_func left_button_click_cb,
+                                       setting_call_back_func right_button_click_cb,
+                                       setting_call_back_func back_button_click_cb,
+                                       void *cb_data)
+{
+       SETTING_TRACE_BEGIN;
+       Evas_Object *btn = NULL;
+       /*  create buttons */
+       if (more_button_click_cb)
+       {
+               if (!more_button_str)
+               {
+
+                       //btn = setting_create_button(navigate_bar, NULL, "naviframe/more/default", more_button_click_cb, cb_data);
+                       btn = elm_button_add(navigate_bar);
+                       elm_object_style_set(btn, "naviframe/more/default");
+                       evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       evas_object_size_hint_align_set(btn,EVAS_HINT_FILL, 0.5);
+                       evas_object_smart_callback_add(btn, "clicked", more_button_click_cb, cb_data);
+                       evas_object_show(btn);
+               }
+               else
+               {
+                       btn = setting_create_button(navigate_bar, more_button_str, "naviframe/title/default", more_button_click_cb, cb_data);
+
+               }
+               elm_object_item_part_content_set(navi_it, "title_more_btn", btn);
+       }
+
+       if (left_button_click_cb)
+       {
+               btn = setting_create_button(navigate_bar, left_button_str, "naviframe/title/default", left_button_click_cb, cb_data);
+               elm_object_item_part_content_set(navi_it, "title_toolbar_button1", btn);
+       }
+
+       if (right_button_click_cb)
+       {
+               btn = setting_create_button(navigate_bar, right_button_str, "naviframe/title/default", right_button_click_cb, cb_data);
+               elm_object_item_part_content_set(navi_it, "title_toolbar_button2", btn);
+       }
+
+       if (back_button_click_cb)
+       {
+               if (!back_button_str)
+               {
+                       //btn = setting_create_button(navigate_bar, NULL, "naviframe/back_btn/default", back_button_click_cb, cb_data);
+                       btn = elm_button_add(navigate_bar);
+                       elm_object_style_set(btn, "naviframe/back_btn/default");
+                       evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       evas_object_size_hint_align_set(btn,EVAS_HINT_FILL, 0.5);
+                       evas_object_smart_callback_add(btn, "clicked", back_button_click_cb, cb_data);
+                       evas_object_show(btn);
+               }
+               else
+               {
+                       btn = setting_create_button(navigate_bar, back_button_str, "naviframe/title/default", back_button_click_cb, cb_data);
+
+               }
+               elm_object_item_part_content_set(navi_it, "title_prev_btn", btn);
+       }
+}
+
+//"title_more_btn" won't be supported any more, so don't pass mbutton_str
+EXPORT_PUBLIC
 Elm_Object_Item * setting_create_navi_bar_top_buttons(char *title_str,
                                         char *lbutton_str,
                                         char *rbutton_str,
@@ -78,44 +686,45 @@ Elm_Object_Item * setting_create_navi_bar_top_buttons(char *title_str,
        Evas_Object *m_button = NULL;
        Elm_Object_Item *navi_it = NULL;
 
-       /*  create buttons */
-       l_button = setting_create_button(navigate_bar, lbutton_str,
-                                        NULL,
+       if(lbutton_str)
+       {
+               /*  create buttons */
+               l_button = setting_create_button(navigate_bar, lbutton_str,
+                                        "naviframe/toolbar/default",
                                         lbutton_click_cb, cb_data);
-
-       r_button = setting_create_button(navigate_bar, rbutton_str,
-                                        NULL,
+       }
+       if(rbutton_str)
+       {
+               r_button = setting_create_button(navigate_bar, rbutton_str,
+                                        "naviframe/end_btn/default",
                                         rbutton_click_cb, cb_data);
-       m_button = setting_create_button(navigate_bar, mbutton_str,
+       }
+       if(mbutton_str)
+       {
+               m_button = setting_create_button(navigate_bar, mbutton_str,
                                         NULL,
                                         mbutton_click_cb, cb_data);
-
+       }
        navi_it = elm_naviframe_item_push(navigate_bar, title_str,
                                          NULL, NULL, eo_view,
                                          NULL);
        retv_if(!navi_it, NULL);
 
        /*  arrange buttons into  navi_it*/
-       if (l_button) {
-               elm_object_item_part_content_set(navi_it, "title_left_btn", l_button);
+       if (l_button) { /* done */
+               elm_object_item_part_content_set(navi_it, "title_toolbar_button1", l_button);
        }
-       if (r_button) {
-               elm_object_item_part_content_set(navi_it, "title_right_btn", r_button);
+       if (r_button) { /* cancel */
+               elm_object_item_part_content_set(navi_it, "title_prev_btn", r_button);
        }
-       if (m_button) {
+       if (m_button) { /* none */
                elm_object_item_part_content_set(navi_it, "title_more_btn", m_button);
        }
-       //remove '<-' button
-       Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
-       if (back_btn) {
-               elm_object_item_part_content_set(navi_it, "prev_btn", NULL);
-               if (back_btn) evas_object_del(back_btn);
-       }
-
        return navi_it;
 }
+
 Elm_Object_Item *__create_navi_bar_bottom_buttons(char *title_str, char *lbutton_str, char *rbutton_str,
-                                    char *mbutton_str, setting_call_back_func lbutton_click_cb,
+                                    char *mbutton_str, setting_call_back_func lbutton_click_cb,/* MORE */
                                     setting_call_back_func rbutton_click_cb,
                                     setting_call_back_func mbutton_click_cb,
                                     void *cb_data, Evas_Object *eo_view,/*any container obj */
@@ -124,84 +733,155 @@ Elm_Object_Item *__create_navi_bar_bottom_buttons(char *title_str, char *lbutton
 {
        SETTING_TRACE_BEGIN;
        Elm_Object_Item *navi_it = NULL;
-       Evas_Object *mbtn = NULL;
-       Evas_Object *rbtn = NULL;
+       //Evas_Object *mbtn = NULL;
+       //Evas_Object *rbtn = NULL;
        Evas_Object *lbtn = NULL;
        Evas_Object *toolbar = NULL;
 
        /*  arrange buttons into  controlbar*/
-       if (0 == safeStrCmp(lbutton_str, _("IDS_COM_BODY_BACK"))) {     /*  do special handling */
-               lbtn = setting_create_button(navigate_bar, lbutton_str,
+       if (0 == safeStrCmp(_(lbutton_str), _("IDS_COM_BODY_BACK"))) {
+               lbtn = setting_create_button(navigate_bar, _(lbutton_str),
                                                 NAVI_BACK_BUTTON_STYLE,
                                                 NULL, NULL);
                                                 //lbutton_click_cb, cb_data);
 #if SUPPORT_TTS
-               setting_set_tts_info(lbtn, lbutton_str, NULL, NULL, TTS_CONTENT_BACK_CLICK_INFO);
+               setting_set_tts_info(lbtn, _(lbutton_str), NULL, NULL, TTS_CONTENT_BACK_CLICK_INFO);
 #endif
                navi_it = elm_naviframe_item_push(navigate_bar, title_str, lbtn, NULL, eo_view, NULL);  /* add new button */
-               elm_object_style_set(lbtn, NAVI_BACK_BUTTON_STYLE);     /* take into effect */
-               elm_naviframe_item_pop_cb_set(navi_it, lbutton_click_cb, cb_data);
+               if(navi_it)
+               {
+                       if(0 != safeStrCmp(title_str, dgettext(SETTING_PACKAGE, title_str)))
+                               elm_object_item_domain_text_translatable_set(navi_it, SETTING_PACKAGE, EINA_TRUE);
+                       else
+                               elm_object_item_domain_text_translatable_set(navi_it, "sys_string", EINA_TRUE);
+
+                       elm_object_style_set(lbtn, NAVI_BACK_BUTTON_STYLE);     /* take into effect */
+                       elm_naviframe_item_pop_cb_set(navi_it, (Elm_Naviframe_Item_Pop_Cb)lbutton_click_cb, cb_data);
+                       ADD_MULTI_LANGUAGE_AUTO_UPDATE(eo_view, navi_it, title_str, lbutton_str, mbutton_str,rbutton_str);
+               }
 
                // more handler
                //elm_object_item_signal_callback_add(navi_it, "elm,action,more,event", more_cb, cb_data);
 
-               toolbar = elm_toolbar_add(navigate_bar);
-               elm_object_style_set(toolbar, "default");
-               elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
-               elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
-
                if (!rbutton_str && !mbutton_str) {
                        //do nothing..
                } else if (rbutton_str && mbutton_str) {        /* both exist.. */
-                       elm_toolbar_item_append(toolbar, NULL, mbutton_str, mbutton_click_cb, cb_data);
-                       elm_toolbar_item_append(toolbar, NULL, rbutton_str, rbutton_click_cb, cb_data);
+                       toolbar = elm_toolbar_add(navigate_bar);
+                       if(toolbar)
+                       {
+                               elm_object_style_set(toolbar, "default");
+                               elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
+                               elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+                               elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+                               elm_toolbar_item_append(toolbar, NULL, _(mbutton_str), mbutton_click_cb, cb_data);
+                               elm_toolbar_item_append(toolbar, NULL, _(rbutton_str), rbutton_click_cb, cb_data);
 
-                       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+                               elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+                       }
+                       //mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
+                       //rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
+                       //elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
+                       //elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn);
                } else if (rbutton_str) {       /* r_btn exist.. */
-                       elm_toolbar_item_append(toolbar, NULL, rbutton_str, rbutton_click_cb, cb_data);
+                       toolbar = elm_toolbar_add(navigate_bar);
+                       if(toolbar)
+                       {
+                               elm_object_style_set(toolbar, "default");
+                               elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
+                               elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+                               elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+                               elm_toolbar_item_append(toolbar, NULL, _(rbutton_str), rbutton_click_cb, cb_data);
 
-                       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+                               elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+                       }
+                       //rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
+                       //elm_object_item_part_content_set(navi_it, "toolbar_button1", rbtn);
+                       //elm_object_item_part_content_set(navi_it, "toolbar_button2", setting_create_button(navigate_bar, "", NULL, NULL, NULL));
                } else if (mbutton_str) {       /* m_btn exist.. */
-                       elm_toolbar_item_append(toolbar, NULL, mbutton_str, mbutton_click_cb, cb_data);
+                       toolbar = elm_toolbar_add(navigate_bar);
+                       if(toolbar)
+                       {
+                               elm_object_style_set(toolbar, "default");
+                               elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
+                               elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+                               elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+                               elm_toolbar_item_append(toolbar, NULL, _(mbutton_str), mbutton_click_cb, cb_data);
 
-                       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+                               elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+                       }
+                       //mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
+                       //elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
+                       //elm_object_item_part_content_set(navi_it, "toolbar_button2", setting_create_button(navigate_bar, "", NULL, NULL, NULL));
                }
                return navi_it;
        }
        navi_it = elm_naviframe_item_push(navigate_bar, title_str, NULL, NULL, eo_view, NULL);
+       if(navi_it)
+       {
+               SETTING_TRACE("dgettext(SETTING_PACKAGE, title_str):%s", dgettext(SETTING_PACKAGE, title_str));
+               SETTING_TRACE("dgettext(SYSTEM_PACKAGE, title_str):%s", dgettext(SYSTEM_PACKAGE, title_str));
+               if(0 != safeStrCmp(title_str, dgettext(SETTING_PACKAGE, title_str)))
+                       elm_object_item_domain_text_translatable_set(navi_it, SETTING_PACKAGE, EINA_TRUE);
+               else
+                       elm_object_item_domain_text_translatable_set(navi_it, "sys_string", EINA_TRUE);
+               ADD_MULTI_LANGUAGE_AUTO_UPDATE(eo_view, navi_it, title_str, lbutton_str, mbutton_str,rbutton_str);
+       }
+       if (rbutton_str || mbutton_str){
+               toolbar = elm_toolbar_add(navigate_bar);
+               if(toolbar)
+               {
+                       elm_object_style_set(toolbar, "default");
+                       elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
+                       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+                       elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+               }
+       }
        if (lbutton_str && mbutton_str && rbutton_str)
        {
                lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
                elm_object_item_part_content_set(navi_it, "toolbar_more_btn", lbtn);
-               elm_toolbar_item_append(toolbar, NULL, mbutton_str, mbutton_click_cb, cb_data);
-               elm_toolbar_item_append(toolbar, NULL, rbutton_str, rbutton_click_cb, cb_data);
-               elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+               //mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
+               //elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
+               //rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
+               //elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn);
+
+               elm_toolbar_item_append(toolbar, NULL, _(mbutton_str), mbutton_click_cb, cb_data);
+               elm_toolbar_item_append(toolbar, NULL, _(rbutton_str), rbutton_click_cb, cb_data);
+
+               if (0 == safeStrCmp(_(lbutton_str), _("IDS_COM_SK_CANCEL")))
+                       elm_naviframe_item_pop_cb_set(navi_it, (Elm_Naviframe_Item_Pop_Cb)lbutton_click_cb, cb_data);
        }
        else
        {
-               bool has_btn_flag = FALSE;//first "toolbar_button1", then "toolbar_button2".
+               //bool has_btn_flag = FALSE;//first "toolbar_button1", then "toolbar_button2".
                if (lbutton_str)
                {
-                       lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
-                       elm_object_item_part_content_set(navi_it, "toolbar_button1", lbtn);
-                       has_btn_flag = TRUE;
+                       //lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
+                       //elm_object_item_part_content_set(navi_it, "toolbar_button1", lbtn);
+                       elm_toolbar_item_append(toolbar, NULL, _(lbutton_str), lbutton_click_cb, cb_data);
+                       //has_btn_flag = TRUE;
+
+                       if (0 == safeStrCmp(_(lbutton_str), _("IDS_COM_SK_CANCEL")))
+                               elm_naviframe_item_pop_cb_set(navi_it, (Elm_Naviframe_Item_Pop_Cb)lbutton_click_cb, cb_data);
                }
                if (mbutton_str)
                {
-                       mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
-                       elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", mbtn);
-                       has_btn_flag = TRUE;
+                       //mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
+                       //elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", mbtn);
+                       elm_toolbar_item_append(toolbar, NULL, _(mbutton_str), mbutton_click_cb, cb_data);
+                       //has_btn_flag = TRUE;
                }
                if (rbutton_str)
                {
-                       rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
-                       elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", rbtn);
-                       has_btn_flag = TRUE;
+                       //rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
+                       //elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", rbtn);
+                       elm_toolbar_item_append(toolbar, NULL, _(rbutton_str), rbutton_click_cb, cb_data);
+                       //has_btn_flag = TRUE;
                }
        }
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
        return navi_it;
 
-
 }
 
 
@@ -212,6 +892,7 @@ Elm_Object_Item *__create_navi_bar_bottom_buttons(char *title_str, char *lbutton
 * @param[in] controlbar   title obj of navigation bar
 *
 */
+EXPORT_PUBLIC
 void setting_create_navi_bar_buttons(char *title_str, char *lbutton_str, char *rbutton_str,
                                     char *mbutton_str, setting_call_back_func lbutton_click_cb,
                                     setting_call_back_func rbutton_click_cb,
@@ -239,6 +920,7 @@ void setting_create_navi_bar_buttons(char *title_str, char *lbutton_str, char *r
 *
 * return main layout of UG or App..
 */
+EXPORT_PUBLIC
 Evas_Object *setting_create_layout_navi_bar(Evas_Object *win_layout, Evas_Object *win_obj, char *title_str, char *lbutton_str, char *rbutton_str, char *mbutton_str, setting_call_back_func lbutton_click_cb, setting_call_back_func rbutton_click_cb, setting_call_back_func mbutton_click_cb, void *cb_data, Evas_Object *eo_view,   /*any container obj constructed on any evas obj */
                                            Evas_Object **navi_bar,
                                            Evas_Object **titleobj)
@@ -263,7 +945,7 @@ Evas_Object *setting_create_layout_navi_bar(Evas_Object *win_layout, Evas_Object
 *
 * @return a layout with a special navigation bar and at most 2 buttons
 */
-
+EXPORT_PUBLIC
 Evas_Object *setting_create_layout_navi_bar_scroller(Evas_Object *win_layout,
                                                     Evas_Object *win_obj,
                                                     char *title_str,
@@ -312,6 +994,7 @@ Evas_Object *setting_create_layout_navi_bar_scroller(Evas_Object *win_layout,
 *
 * @return a layout with a special navigation bar and at most 2 buttons
 */
+EXPORT_PUBLIC
 Evas_Object *setting_create_layout_navi_bar_genlist(Evas_Object *win_layout,
                                                    Evas_Object *win_obj,
                                                    char *title_str,
@@ -330,10 +1013,12 @@ Evas_Object *setting_create_layout_navi_bar_genlist(Evas_Object *win_layout,
        *navi_bar = setting_create_navi_bar(layout);
 
        *genlist = elm_genlist_add(*navi_bar);
-       elm_object_style_set(*genlist, "dialogue");
        retvm_if(*genlist == NULL, NULL,
                 "Cannot set scroller object as contento of layout");
+       elm_genlist_realization_mode_set(*genlist, EINA_TRUE);
+       elm_object_style_set(*genlist, "dialogue");
        elm_genlist_clear(*genlist);    /* first to clear list */
+       evas_object_smart_callback_add(*genlist, "realized", __gl_realized_cb, NULL);
 
        setting_create_navi_bar_buttons(title_str,
                                        lbutton_str, rbutton_str, NULL,
@@ -343,7 +1028,7 @@ Evas_Object *setting_create_layout_navi_bar_genlist(Evas_Object *win_layout,
        return layout;
 }
 
-
+EXPORT_PUBLIC
 Elm_Object_Item *__push_navi_bar_bottom_buttons(char *title_str,
                             char *lbutton_str, char *rbutton_str,
                             char *mbutton_str,
@@ -354,24 +1039,30 @@ Elm_Object_Item *__push_navi_bar_bottom_buttons(char *title_str,
                             Evas_Object *navigate_bar, Evas_Object **titleobj)
 {
        Elm_Object_Item *navi_it = NULL;
-       Evas_Object *mbtn = NULL;
-       Evas_Object *rbtn = NULL;
+       //Evas_Object *mbtn = NULL;
+       //Evas_Object *rbtn = NULL;
        Evas_Object *lbtn = NULL;
        Evas_Object *toolbar = NULL;
 
        /*  arrange buttons into  controlbar*/
-       if (0 == safeStrCmp(lbutton_str, _("IDS_COM_BODY_BACK"))) {
-               lbtn = setting_create_button(navigate_bar, lbutton_str,
+       if (0 == safeStrCmp(_(lbutton_str), _("IDS_COM_BODY_BACK"))) {
+               lbtn = setting_create_button(navigate_bar, _(lbutton_str),
                                                 NAVI_BACK_BUTTON_STYLE,
                                                 NULL, NULL);
                                                 //lbutton_click_cb, cb_data);
 #if SUPPORT_TTS
-               setting_set_tts_info(lbtn, lbutton_str, NULL, NULL, TTS_CONTENT_BACK_CLICK_INFO);
+               setting_set_tts_info(lbtn, _(lbutton_str), NULL, NULL, TTS_CONTENT_BACK_CLICK_INFO);
 #endif
                navi_it = elm_naviframe_item_push(navigate_bar, title_str, lbtn, NULL, eo_view, NULL);
+               if(0 != safeStrCmp(title_str, dgettext(SETTING_PACKAGE, title_str)))
+                       elm_object_item_domain_text_translatable_set(navi_it, SETTING_PACKAGE, EINA_TRUE);
+               else
+                       elm_object_item_domain_text_translatable_set(navi_it, "sys_string", EINA_TRUE);
+               ADD_MULTI_LANGUAGE_AUTO_UPDATE(eo_view, navi_it, title_str, lbutton_str, mbutton_str,rbutton_str);
+
                elm_object_style_set(lbtn, NAVI_BACK_BUTTON_STYLE);     /* take into effect */
                if(lbutton_click_cb)
-                       elm_naviframe_item_pop_cb_set(navi_it, lbutton_click_cb, cb_data);
+                       elm_naviframe_item_pop_cb_set(navi_it, (Elm_Naviframe_Item_Pop_Cb)lbutton_click_cb, cb_data);
 
                if (!rbutton_str && !mbutton_str)
                {
@@ -380,18 +1071,19 @@ Elm_Object_Item *__push_navi_bar_bottom_buttons(char *title_str,
 
                toolbar = elm_toolbar_add(navigate_bar);
                elm_object_style_set(toolbar, "default");
+               elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
                elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
                elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
 
                if (rbutton_str && mbutton_str) {
-                       if (safeStrLen(mbutton_str) <= MAX_BUTTON_TEXT_LEN
-                           && safeStrLen(rbutton_str) <= MAX_BUTTON_TEXT_LEN)
+                       if (safeStrLen(_(mbutton_str)) <= MAX_BUTTON_TEXT_LEN
+                           && safeStrLen(_(rbutton_str)) <= MAX_BUTTON_TEXT_LEN)
                        {
                                //mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
                                //rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
 
-                               elm_toolbar_item_append(toolbar, NULL, mbutton_str, mbutton_click_cb, cb_data);
-                               elm_toolbar_item_append(toolbar, NULL, rbutton_str, rbutton_click_cb, cb_data);
+                               elm_toolbar_item_append(toolbar, NULL, _(mbutton_str), mbutton_click_cb, cb_data);
+                               elm_toolbar_item_append(toolbar, NULL, _(rbutton_str), rbutton_click_cb, cb_data);
 
                                elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
 
@@ -400,39 +1092,37 @@ Elm_Object_Item *__push_navi_bar_bottom_buttons(char *title_str,
                        }
                        else
                        {
-                               elm_toolbar_item_append(toolbar, NULL, mbutton_str, mbutton_click_cb, cb_data);
+                               elm_toolbar_item_append(toolbar, NULL, _(mbutton_str), mbutton_click_cb, cb_data);
 
                                elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
                                //mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
                                //elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
 
-                               #if 0
                                Evas_Object *more_btn = elm_button_add(navigate_bar);
                                if (!more_btn) return NULL;
-                               //elm_object_style_set(more_btn, NAVI_MORE_BUTTON_STYLE);
+                               elm_object_style_set(more_btn, NAVI_MORE_BUTTON_STYLE);
 
                                Setting_Btn_Data *btn_data = calloc(1,sizeof(Setting_Btn_Data));
                                setting_retvm_if(!btn_data, NULL, "calloc failed");
-                               btn_data->btn_text = strdup(rbutton_str);
+                               btn_data->btn_text[0] = strdup(rbutton_str);
                                btn_data->btn_click_cb = rbutton_click_cb;
                                btn_data->btn_cb_data = cb_data;
                                btn_data->parent = navigate_bar;
                                //evas_object_data_set(more_btn, "more_btn_data", btn_data);
-                               evas_object_event_callback_add(more_btn, EVAS_CALLBACK_DEL, __more_btn_del_cb, btn_data);
-                               evas_object_smart_callback_add(more_btn, "clicked", __more_btn_click_cb, btn_data);
+                               evas_object_event_callback_add(more_btn, EVAS_CALLBACK_DEL, setting_create_more_btn_del_cb, btn_data);
+                               evas_object_smart_callback_add(more_btn, "clicked", setting_create_more_btn_click_cb, btn_data);
 
                                elm_object_item_part_content_set(navi_it, "toolbar_more_btn", more_btn);
-                               #endif
                        }
                } else if (rbutton_str) {
-                       elm_toolbar_item_append(toolbar, NULL, rbutton_str, rbutton_click_cb, cb_data);
+                       elm_toolbar_item_append(toolbar, NULL, _(rbutton_str), rbutton_click_cb, cb_data);
 
                        elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
                        //rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
                        //elm_object_item_part_content_set(navi_it, "toolbar_button1", rbtn);
                        //elm_object_item_part_content_set(navi_it, "toolbar_button2", setting_create_button(navigate_bar, "", NULL, NULL, NULL));
                } else if (mbutton_str) {
-                       elm_toolbar_item_append(toolbar, NULL, mbutton_str, mbutton_click_cb, cb_data);
+                       elm_toolbar_item_append(toolbar, NULL, _(mbutton_str), mbutton_click_cb, cb_data);
 
                        elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
                        //mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
@@ -441,10 +1131,21 @@ Elm_Object_Item *__push_navi_bar_bottom_buttons(char *title_str,
                }
        } else {        /*  no need back button on navi_bar */
                navi_it = elm_naviframe_item_push(navigate_bar, title_str, NULL, NULL, eo_view, NULL);
+               if(0 != safeStrCmp(title_str, dgettext(SETTING_PACKAGE, title_str)))
+                       elm_object_item_domain_text_translatable_set(navi_it, SETTING_PACKAGE, EINA_TRUE);
+               else
+                       elm_object_item_domain_text_translatable_set(navi_it, "sys_string", EINA_TRUE);
+               ADD_MULTI_LANGUAGE_AUTO_UPDATE(eo_view, navi_it, title_str, lbutton_str, mbutton_str,rbutton_str);
                if (!lbutton_str && !rbutton_str && !mbutton_str) {
                        return navi_it;
                }
 
+               toolbar = elm_toolbar_add(navigate_bar);
+               elm_object_style_set(toolbar, "default");
+               elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
+               elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+               elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+
                //remove '<-' button, insteadly using controlbar
                Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
                elm_object_item_part_content_set(navi_it, "prev_btn", NULL);
@@ -452,40 +1153,42 @@ Elm_Object_Item *__push_navi_bar_bottom_buttons(char *title_str,
 
                if (lbutton_str && mbutton_str && rbutton_str)
                {
-                       lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
+                       lbtn = setting_create_button(navigate_bar, _(lbutton_str), NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
                        elm_object_item_part_content_set(navi_it, "toolbar_more_btn", lbtn);
                        //mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
                        //elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
                        //rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
                        //elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn);
 
-                       elm_toolbar_item_append(toolbar, NULL, mbutton_str, mbutton_click_cb, cb_data);
-                       elm_toolbar_item_append(toolbar, NULL, rbutton_str, rbutton_click_cb, cb_data);
-
-                       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+                       elm_toolbar_item_append(toolbar, NULL, _(mbutton_str), mbutton_click_cb, cb_data);
+                       elm_toolbar_item_append(toolbar, NULL, _(rbutton_str), rbutton_click_cb, cb_data);
                }
                else
                {
-                       bool has_btn_flag = FALSE;//first "toolbar_button1", then "toolbar_button2".
+                       //bool has_btn_flag = FALSE;//first "toolbar_button1", then "toolbar_button2".
                        if (lbutton_str)
                        {
-                               lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
-                               elm_object_item_part_content_set(navi_it, "toolbar_button1", lbtn);
-                               has_btn_flag = TRUE;
+                               //lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
+                               //elm_object_item_part_content_set(navi_it, "toolbar_button1", lbtn);
+                               elm_toolbar_item_append(toolbar, NULL, _(lbutton_str), lbutton_click_cb, cb_data);
+                               //has_btn_flag = TRUE;
                        }
                        if (mbutton_str)
                        {
-                               mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
-                               elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", mbtn);
-                               has_btn_flag = TRUE;
+                               //mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
+                               //elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", mbtn);
+                               elm_toolbar_item_append(toolbar, NULL, _(mbutton_str), mbutton_click_cb, cb_data);
+                               //has_btn_flag = TRUE;
                        }
                        if (rbutton_str)
                        {
-                               rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
-                               elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", rbtn);
-                               has_btn_flag = TRUE;
+                               //rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
+                               //elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", rbtn);
+                               elm_toolbar_item_append(toolbar, NULL, _(rbutton_str), rbutton_click_cb, cb_data);
+                               //has_btn_flag = TRUE;
                        }
                }
+               elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
        }
 
        return navi_it;
@@ -496,6 +1199,7 @@ Elm_Object_Item *__push_navi_bar_bottom_buttons(char *title_str,
 * The general API to push any evas object(@param[eo_view]) to the specialized navi_bar,
 *   which contents at most 3 buttons
 */
+EXPORT_PUBLIC
 Elm_Object_Item *
 setting_push_layout_navi_bar(char *title_str,
                             char *lbutton_str, char *rbutton_str,
@@ -519,7 +1223,8 @@ setting_push_layout_navi_bar(char *title_str,
 *   which contents at most 2 buttons
 */
 
-void
+EXPORT_PUBLIC
+Elm_Object_Item *
 setting_push_layout_navi_bar_scroller(Evas_Object *win_main, char *title_str,
                                      char *lbutton_str, char *rbutton_str,
                                      setting_call_back_func lbutton_click_cb,
@@ -531,8 +1236,8 @@ setting_push_layout_navi_bar_scroller(Evas_Object *win_main, char *title_str,
        /*  create scroller */
        Evas_Object *scrl = NULL;
        if (scroller != NULL) {
-               scrl = *scroller = elm_scroller_add(win_main);
-               retm_if(*scroller == NULL,
+               scrl = *scroller = elm_scroller_add(navi_bar);
+               retvm_if(*scroller == NULL,NULL,
                        "Cannot set scroller as contento of layout");
                elm_scroller_bounce_set(*scroller, EINA_FALSE, EINA_TRUE);
                elm_scroller_policy_set(*scroller, ELM_SCROLLER_POLICY_OFF,
@@ -541,7 +1246,7 @@ setting_push_layout_navi_bar_scroller(Evas_Object *win_main, char *title_str,
                evas_object_show(*scroller);
        }
 
-       setting_push_layout_navi_bar(title_str,
+       return setting_push_layout_navi_bar(title_str,
                                     lbutton_str, rbutton_str, NULL,
                                     lbutton_click_cb,
                                     rbutton_click_cb,
@@ -552,7 +1257,8 @@ setting_push_layout_navi_bar_scroller(Evas_Object *win_main, char *title_str,
 * @ The API to push a genlist object(@param[genlist]) to the specialized navi_bar,
 *   which contents at most 2 buttons
 */
-void
+EXPORT_PUBLIC
+Elm_Object_Item *
 setting_push_layout_navi_bar_genlist(Evas_Object *win_layout,
                                     Evas_Object *win_obj, char *title_str,
                                     char *lbutton_str, char *rbutton_str,
@@ -564,37 +1270,118 @@ setting_push_layout_navi_bar_genlist(Evas_Object *win_layout,
        /*  create scroller */
        Evas_Object *gl = NULL;
        if (genlist != NULL) {
-               gl = *genlist = elm_genlist_add(win_layout);
-               elm_object_style_set(*genlist, "dialogue");
-               retm_if(*genlist == NULL,
+               *genlist = elm_genlist_add(navi_bar);
+               retvm_if(*genlist == NULL,NULL,
                        "Cannot set scroller object  as contento of layout");
+               elm_genlist_realization_mode_set(*genlist, EINA_TRUE);
+               gl = *genlist;
+               elm_object_style_set(*genlist, "dialogue");
                elm_genlist_clear(gl);  /* first to clear list */
+               evas_object_smart_callback_add(gl, "realized", __gl_realized_cb, NULL);
        }
 
-       setting_push_layout_navi_bar(title_str,
+       return setting_push_layout_navi_bar(title_str,
                                     lbutton_str, rbutton_str, NULL,
                                     lbutton_click_cb,
                                     rbutton_click_cb,
                                     NULL, cb_data, gl, navi_bar, NULL);
 }
 
+EXPORT_PUBLIC
+void setting_go_to_top(Evas_Object *content)
+{
+       setting_retm_if(content == NULL, "content is NULL");
+       const char *type = elm_object_widget_type_get(content);
+       SETTING_TRACE("content type:%s", type);
+
+       if (0 == safeStrCmp(type, "elm_genlist")) {
+               Elm_Object_Item *first_item = elm_genlist_first_item_get(content);
+               if (first_item) {
+                       elm_genlist_item_show(first_item, ELM_GENLIST_ITEM_SCROLLTO_TOP);
+               }
+       } else if (0 == safeStrCmp(type, "elm_scroller")) {
+               elm_scroller_region_show(content, 0, 0, 0, 0);
+       } else if (0 == safeStrCmp(type, "elm_gengrid")) {
+               Elm_Object_Item *first_item = elm_gengrid_first_item_get(content);
+               if (first_item) {
+                       elm_gengrid_item_show(first_item, ELM_GENLIST_ITEM_SCROLLTO_TOP);
+               }
+       } else if (NULL != type) {
+               Eina_List *sub_objs = (Eina_List *)elm_widget_scrollable_children_get(content);
+               ret_if(!sub_objs);
+               Evas_Object *sub_obj = NULL;
+               Eina_List *l = NULL;
+               const char *sub_type = NULL;
+
+               //just only search the first objects level
+               EINA_LIST_FOREACH(sub_objs, l, sub_obj)
+               {
+                       if (!sub_obj) {
+                               continue;
+                       }
+
+                       sub_type = elm_object_widget_type_get(sub_obj);
+                       SETTING_TRACE("sub content type :%s", sub_type);
+                       if (0 == safeStrCmp(sub_type, "elm_genlist")) {
+                               Elm_Object_Item *first_item = elm_genlist_first_item_get(sub_obj);
+                               if (first_item) {
+                                       elm_genlist_item_show(first_item, ELM_GENLIST_ITEM_SCROLLTO_TOP);
+                               }
+                       } else if (0 == safeStrCmp(sub_type, "elm_scroller")) {
+                               elm_scroller_region_show(sub_obj, 0, 0, 0, 0);
+                       } else if (0 == safeStrCmp(sub_type, "elm_gengrid")) {
+                               Elm_Object_Item *first_item = elm_gengrid_first_item_get(sub_obj);
+                               if (first_item) {
+                                       elm_gengrid_item_show(first_item, ELM_GENLIST_ITEM_SCROLLTO_TOP);
+                               }
+                       } else {
+                               /* do nothing */
+                       }
+               }
+       } else {
+               /* do nothing */
+       }
+}
+
 /*
 * To go to top of list in top view of navibar.
 * @param[in] navibar
 */
+EXPORT_PUBLIC
 void setting_go_to_navibar_list_top(Evas_Object *navibar)
 {
        Elm_Object_Item *navi_it = elm_naviframe_top_item_get(navibar);
-       if (navi_it)
-       {
+       if (navi_it) {
                Evas_Object *content = elm_object_item_part_content_get(navi_it, "default");
 
-               Elm_Object_Item *first_item = elm_genlist_first_item_get(content);
-               if (first_item)
-               {
-                       elm_genlist_item_show(first_item, ELM_GENLIST_ITEM_SCROLLTO_TOP);
-               }
+               setting_go_to_top(content);
        }
 }
 
+EXPORT_PUBLIC void setting_nf_check_vconf_cb(keynode_t *key, void *data)
+{
+       ret_if(data == NULL);
+       Evas_Object *check = data;
+       char *vconf_name = vconf_keynode_get_name(key);
+       int status = vconf_keynode_get_bool(key);
+       SETTING_TRACE("Vconf[%s] has changed to be %d just now", vconf_name, status);
+       elm_check_state_set(check, status);
+}
+
+EXPORT_PUBLIC void setting_nf_check_change_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       ret_if(!data);
+       const char *vconf = data;
+       Eina_Bool state = elm_check_state_get(obj);
+       vconf_set_bool(vconf, state);
+}
+
+EXPORT_PUBLIC void setting_nf_check_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       SETTING_TRACE_BEGIN;
+       ret_if(!data);
+       const char *vconf = data;
+       (void)vconf_ignore_key_changed(vconf, setting_nf_check_vconf_cb);
+}