fix PLM issue : P120829-4306 patchset2. apply string ID
[apps/core/preloaded/settings.git] / setting-common / src / setting-common-draw-naviframe.c
1 /*
2  * setting
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
5  *
6  * Contact: MyoungJune Park <mj2004.park@samsung.com>
7  *
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
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
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.
19  *
20  */
21 #include <setting-common-draw-widget.h>
22 #include <glib.h>
23 #include <utilX.h>
24 #include <Ecore_X.h>
25
26 Evas_Object *setting_create_win_layout(Evas_Object *win_layout,
27                                        Evas_Object *win_obj)
28 {
29         Evas_Object *layout = NULL;
30
31         /*  Base Layout */
32         layout = elm_layout_add(win_layout);
33         setting_retvm_if(layout == NULL, FALSE, "layout == NULL");
34
35         elm_layout_theme_set(layout, "layout", "application", "default");
36         evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
37                                          EVAS_HINT_EXPAND);
38         elm_win_resize_object_add(win_obj, layout);
39         Evas_Object *bg = setting_create_bg(layout, win_obj, "group_list");
40         elm_object_part_content_set(layout, "elm.swallow.bg", bg);
41         evas_object_show(layout);
42
43         return layout;
44 }
45
46 #define HALF_SCREEN_STR_LEN 20
47 #define ONE_THIRD_SCREEN_STR_LEN 13
48 Evas_Object *setting_create_navi_bar(Evas_Object *layout)
49 {
50
51         Evas_Object *navi = NULL;
52         navi = elm_naviframe_add(layout);
53
54         if (navi == NULL) {
55                 SETTING_TRACE(" *** elm_naviframe_add returns NULL *** ");
56                 return NULL;
57         }
58         elm_object_part_content_set(layout, "elm.swallow.content", navi);
59         evas_object_show(navi);
60         return navi;
61 }
62
63 Elm_Object_Item * setting_create_navi_bar_top_buttons(char *title_str,
64                                          char *lbutton_str,
65                                          char *rbutton_str,
66                                          char *mbutton_str,
67                                          setting_call_back_func lbutton_click_cb,
68                                          setting_call_back_func rbutton_click_cb,
69                                          setting_call_back_func mbutton_click_cb,
70                                          void *cb_data, Evas_Object *eo_view,/*any container obj */
71                                          Evas_Object *navigate_bar )
72 {
73         //SETTING_TRACE_BEGIN;
74         Evas_Object *l_button = NULL;
75         Evas_Object *r_button = NULL;
76         Evas_Object *m_button = NULL;
77         Elm_Object_Item *navi_it = NULL;
78
79         /*  create buttons */
80         l_button = setting_create_button(navigate_bar, lbutton_str,
81                                          "naviframe/title/default",
82                                          lbutton_click_cb, cb_data);
83
84         r_button = setting_create_button(navigate_bar, rbutton_str,
85                                          "naviframe/title/default",
86                                          rbutton_click_cb, cb_data);
87         m_button = setting_create_button(navigate_bar, mbutton_str,
88                                          "naviframe/title/default",
89                                          mbutton_click_cb, cb_data);
90
91         navi_it = elm_naviframe_item_push(navigate_bar, title_str,
92                                           NULL, NULL, eo_view,
93                                           NULL);
94         retv_if(!navi_it, NULL);
95
96         /*  arrange buttons into  navi_it*/
97         if (l_button) {
98                 elm_object_item_part_content_set(navi_it, "title_left_btn", l_button);
99         }
100         if (r_button) {
101                 elm_object_item_part_content_set(navi_it, "title_right_btn", r_button);
102         }
103         if (m_button) {
104                 elm_object_item_part_content_set(navi_it, "title_more_btn", m_button);
105         }
106         //remove '<-' button
107         Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
108         if (back_btn) {
109                 elm_object_item_part_content_set(navi_it, "prev_btn", NULL);
110                 if (back_btn) evas_object_del(back_btn);
111         }
112
113         return navi_it;
114 }
115
116 Elm_Object_Item *__create_navi_bar_bottom_buttons(char *title_str, char *lbutton_str, char *rbutton_str,
117                                      char *mbutton_str, setting_call_back_func lbutton_click_cb,
118                                      setting_call_back_func rbutton_click_cb,
119                                      setting_call_back_func mbutton_click_cb,
120                                      void *cb_data, Evas_Object *eo_view,/*any container obj */
121                                      Evas_Object *navigate_bar, /*the specialized navigation bar */
122                                      Evas_Object *controlbar)
123 {
124         SETTING_TRACE_BEGIN;
125         Elm_Object_Item *navi_it = NULL;
126
127         /*  arrange buttons into  controlbar*/
128         if (0 == safeStrCmp(lbutton_str, _("IDS_COM_BODY_BACK"))) {     /*  do special handling */
129                 Evas_Object *l_button = NULL;
130                 l_button = setting_create_button(navigate_bar, lbutton_str,
131                                                  NAVI_BACK_BUTTON_STYLE,
132                                                  lbutton_click_cb, cb_data);
133
134                 navi_it = elm_naviframe_item_push(navigate_bar, title_str, l_button, NULL, eo_view, NULL);      /* add new button */
135                 elm_object_style_set(l_button, NAVI_BACK_BUTTON_STYLE); /* take into effect */
136
137                 if (!rbutton_str && !mbutton_str) {     /* return directly */
138                         if (controlbar) {
139                                 evas_object_del(controlbar);
140                                 controlbar = NULL;
141                         }
142                         return navi_it;
143                 } else {
144                         if (rbutton_str && mbutton_str) {       /* both exist.. */
145                                 elm_toolbar_item_append(controlbar, NULL, mbutton_str, mbutton_click_cb, cb_data);
146                                 elm_toolbar_item_append(controlbar, NULL, rbutton_str, rbutton_click_cb, cb_data);
147
148                         } else if (rbutton_str) {       /* r_btn exist.. */
149                                 elm_toolbar_item_append(controlbar, NULL, rbutton_str, rbutton_click_cb, cb_data);
150                                 elm_object_item_disabled_set(elm_toolbar_item_append(controlbar, NULL, "", NULL, NULL), EINA_TRUE);
151                         } else if (mbutton_str) {       /* m_btn exist.. */
152                                 elm_object_item_disabled_set(elm_toolbar_item_append(controlbar, NULL, "", NULL, NULL), EINA_TRUE);
153                                 elm_toolbar_item_append(controlbar, NULL, mbutton_str, mbutton_click_cb, cb_data);
154                         }
155
156                         elm_object_item_part_content_set(navi_it, NAVI_CONTROLBAR_PART, controlbar);
157                         return navi_it;
158                 }
159         }
160
161         if (lbutton_str)
162                 elm_toolbar_item_append(controlbar, NULL, lbutton_str, lbutton_click_cb, cb_data);
163         if (mbutton_str)
164                 elm_toolbar_item_append(controlbar, NULL, mbutton_str, mbutton_click_cb, cb_data);
165
166         /* if controllbar just have one right button, let it occups 1/2. */
167
168         if (rbutton_str)
169         {
170                 if (!lbutton_str && !mbutton_str)
171                 {
172                         elm_object_item_disabled_set(elm_toolbar_item_append(controlbar, NULL, "", NULL, NULL), EINA_TRUE);
173                 }
174                 elm_toolbar_item_append(controlbar, NULL, rbutton_str, rbutton_click_cb, cb_data);
175         }
176         else
177         {
178                 if (lbutton_str || mbutton_str)
179                 {
180                         elm_object_item_disabled_set(elm_toolbar_item_append(controlbar, NULL, "", NULL, NULL), EINA_TRUE);
181                 }
182         }
183
184         navi_it = elm_naviframe_item_push(navigate_bar, title_str, NULL, NULL, eo_view, NULL);
185         elm_object_item_part_content_set(navi_it, NAVI_CONTROLBAR_PART, controlbar);
186         return navi_it;
187
188 }
189
190
191 /**
192 * Create buttons on the specialized navigation bar
193 *
194 * @param[in] eo_view    navigation bar's content
195 * @param[in] controlbar   title obj of navigation bar
196 *
197 */
198 void setting_create_navi_bar_buttons(char *title_str, char *lbutton_str, char *rbutton_str,
199                                      char *mbutton_str, setting_call_back_func lbutton_click_cb,
200                                      setting_call_back_func rbutton_click_cb,
201                                      setting_call_back_func mbutton_click_cb,
202                                      void *cb_data, Evas_Object *eo_view,/*any container obj */
203                                      Evas_Object *navigate_bar, /*the specialized navigation bar */
204                                      Evas_Object *controlbar)
205 {                               /* controlbar */
206         #if SUPPORT_BOTTOM_BTNS
207         __create_navi_bar_bottom_buttons(title_str, lbutton_str,
208                                        rbutton_str, mbutton_str,
209                                        lbutton_click_cb,
210                                        rbutton_click_cb,
211                                        mbutton_click_cb,
212                                        cb_data, eo_view,
213                                        navigate_bar, controlbar);
214         return;
215         #endif
216
217         Evas_Object *l_button = NULL;
218         Evas_Object *r_button = NULL;
219         Evas_Object *m_button = NULL;
220         Elm_Object_Item *navi_it = NULL;
221
222         /* navigationbar left buttons */
223
224         /*  create buttons */
225         if (lbutton_str && 0 == safeStrCmp(lbutton_str, _("IDS_COM_BODY_BACK"))) {      /* left 'Back' button should be processed specially */
226                 l_button = setting_create_button(navigate_bar, lbutton_str,
227                                                  NAVI_BACK_BUTTON_STYLE,
228                                                  lbutton_click_cb, cb_data);
229         } else {
230                 l_button = setting_create_button(navigate_bar, lbutton_str,
231                                                  NAVI_DEF_BUTTON_STYLE,
232                                                  lbutton_click_cb, cb_data);
233         }
234
235
236         r_button = setting_create_button(navigate_bar, rbutton_str,
237                                          NAVI_DEF_BUTTON_STYLE,
238                                          rbutton_click_cb, cb_data);
239         m_button = setting_create_button(navigate_bar, mbutton_str,
240                                          NAVI_DEF_BUTTON_STYLE,
241                                          mbutton_click_cb, cb_data);
242
243         Elm_Object_Item *item = NULL;
244
245         /*  arrange buttons into  controlbar*/
246         if (0 == safeStrCmp(lbutton_str, _("IDS_COM_BODY_BACK"))) {     /*  do special handling */
247                 /* At then, in function elm_naviframe_item_push, icon of l_button will be unset, */
248                 /* Usr need set style again!! */
249                 navi_it = elm_naviframe_item_push(navigate_bar, title_str, l_button, NULL, eo_view, NULL);      /* add new button */
250                 elm_object_style_set(l_button, NAVI_BACK_BUTTON_STYLE); /* take into effect */
251
252                 if (!rbutton_str && !mbutton_str) {     /* return directly */
253                         if (controlbar) {
254                                 evas_object_del(controlbar);
255                                 controlbar = NULL;
256                         }
257                         return;
258                 } else {
259                         if (rbutton_str && mbutton_str) {       /* both exist.. */
260                                 item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
261                                 elm_object_item_part_content_set(item, "object", m_button);
262                                 item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
263                                 elm_object_item_part_content_set(item, "object", r_button);
264                                 /* item[2] = elm_controlbar_object_item_append(controlbar, r_button, 1); */
265                         } else if (rbutton_str) {       /* r_btn exist.. */
266                                 item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
267                                 elm_object_item_part_content_set(item, "object", r_button);
268                                 item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
269                                 //elm_object_part_content_set(item, "object", NULL);
270                         } else if (mbutton_str) {       /* m_btn exist.. */
271                                 item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
272                                 //elm_object_part_content_set(item, "object", NULL);
273                                 item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
274                                 elm_object_item_part_content_set(item, "object", m_button);
275                         }
276
277                         elm_object_item_part_content_set(navi_it, NAVI_CONTROLBAR_PART, controlbar);
278                         return;
279                 }
280         }
281
282         if (l_button)
283         {
284                 item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
285                 elm_object_item_part_content_set(item, "object", l_button);
286         }
287         if (m_button)
288         {
289                 item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
290                 elm_object_item_part_content_set(item, "object", m_button);
291         }
292         /* if controllbar just have one right button, let it occups 1/2. */
293         if (!l_button && !m_button)
294         {
295                 item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
296                 //elm_object_part_content_set(item, "object", NULL);
297         }
298         if (r_button)
299         {
300                 item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
301                 elm_object_item_part_content_set(item, "object", r_button);
302         }
303
304         navi_it = elm_naviframe_item_push(navigate_bar, title_str, NULL, NULL, eo_view, NULL);
305
306         elm_object_item_part_content_set(navi_it, NAVI_CONTROLBAR_PART, controlbar);
307         return;
308 }
309
310 /**
311 * The general API to create a layout with navigation bar,
312 *   which contents any evas container object(@param[eo_view]) as its content
313 *
314 * @param[in] eo_view    navigation bar's content
315 * @param[out] titleobj   title obj of navigation bar
316 *
317 * return main layout of UG or App..
318 */
319 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 */
320                                             Evas_Object **navi_bar,
321                                             Evas_Object **titleobj)
322 {
323
324         Evas_Object *layout = setting_create_win_layout(win_layout, win_obj);
325         *navi_bar = setting_create_navi_bar(layout);
326         /*  add controlbar */
327         Evas_Object *controlbar = elm_toolbar_add(*navi_bar);
328         setting_retvm_if(controlbar == NULL, NULL, "controlbar == NULL");
329         elm_toolbar_shrink_mode_set(controlbar, ELM_TOOLBAR_SHRINK_EXPAND);
330         //elm_object_style_set(controlbar, NAVI_CONTROLBAR_STYLE);
331         if (titleobj) {         /* need output */
332                 *titleobj = controlbar;
333         }
334
335         setting_create_navi_bar_buttons(title_str,
336                                         lbutton_str, rbutton_str, NULL,
337                                         lbutton_click_cb, rbutton_click_cb,
338                                         NULL, cb_data, eo_view /*content */ ,
339                                         *navi_bar, controlbar);
340         return layout;
341 }
342
343 /**
344 * The API to create a layout with navigation bar,
345 *   which contents a scroller object as its content
346 *
347 * @param[out] scroller   navigation bar's content
348 *
349 * @return a layout with a special navigation bar and at most 2 buttons
350 */
351
352 Evas_Object *setting_create_layout_navi_bar_scroller(Evas_Object *win_layout,
353                                                      Evas_Object *win_obj,
354                                                      char *title_str,
355                                                      char *lbutton_str,
356                                                      char *rbutton_str,
357                                                      setting_call_back_func
358                                                      lbutton_click_cb,
359                                                      setting_call_back_func
360                                                      rbutton_click_cb,
361                                                      void *cb_data,
362                                                      Evas_Object **scroller,
363                                                      Evas_Object **navi_bar)
364 {
365
366         Evas_Object *layout = setting_create_win_layout(win_layout, win_obj);
367         *navi_bar = setting_create_navi_bar(layout);
368
369         /*  add controlbar */
370         Evas_Object *controlbar = elm_toolbar_add(*navi_bar);
371         setting_retvm_if(controlbar == NULL, NULL, "controlbar == NULL");
372         elm_toolbar_shrink_mode_set(controlbar, ELM_TOOLBAR_SHRINK_EXPAND);
373         //elm_object_style_set(controlbar, NAVI_CONTROLBAR_STYLE);
374
375         /*****/
376         /*  create scroller as CONTENT */
377         Evas_Object *scrl = NULL;
378         /* Evas_Object *ret = NULL; */
379         if (scroller != NULL) {
380                 /* scrl =*scroller = elm_scroller_add(win_layout); */
381                 scrl = *scroller = elm_scroller_add(layout);
382                 retvm_if(*scroller == NULL, NULL,
383                          "Cannot set scroller object as contento of layout");
384                 elm_scroller_bounce_set(*scroller, EINA_FALSE, EINA_TRUE);
385                 elm_scroller_policy_set(*scroller, ELM_SCROLLER_POLICY_OFF,
386                                         ELM_SCROLLER_POLICY_AUTO);
387                 evas_object_show(*scroller);
388         }
389
390         /*****/
391
392         setting_create_navi_bar_buttons(title_str,
393                                         lbutton_str, rbutton_str, NULL,
394                                         lbutton_click_cb, rbutton_click_cb,
395                                         NULL, cb_data, scrl /*content */ ,
396                                         *navi_bar, controlbar);
397         return layout;
398 }
399
400 /**
401 * The API to create a layout with navigation bar ,
402 *       which contents a genlist object as its content
403 *
404 * @return a layout with a special navigation bar and at most 2 buttons
405 */
406 Evas_Object *setting_create_layout_navi_bar_genlist(Evas_Object *win_layout,
407                                                     Evas_Object *win_obj,
408                                                     char *title_str,
409                                                     char *lbutton_str,
410                                                     char *rbutton_str,
411                                                     setting_call_back_func
412                                                     lbutton_click_cb,
413                                                     setting_call_back_func
414                                                     rbutton_click_cb,
415                                                     void *cb_data,
416                                                     Evas_Object **genlist,
417                                                     Evas_Object **navi_bar)
418 {
419         /*  win_layout -> layout */
420         Evas_Object *layout = setting_create_win_layout(win_layout, win_obj);
421
422         *navi_bar = setting_create_navi_bar(layout);
423
424         /*  add controlbar */
425         Evas_Object *controlbar = elm_toolbar_add(*navi_bar);
426         setting_retvm_if(controlbar == NULL, NULL, "controlbar == NULL");
427         elm_toolbar_shrink_mode_set(controlbar, ELM_TOOLBAR_SHRINK_EXPAND);
428         //elm_object_style_set(controlbar, NAVI_CONTROLBAR_STYLE);
429
430         *genlist = elm_genlist_add(*navi_bar);
431         elm_object_style_set(*genlist, "dialogue");
432         retvm_if(*genlist == NULL, NULL,
433                  "Cannot set scroller object as contento of layout");
434         elm_genlist_clear(*genlist);    /* first to clear list */
435
436         setting_create_navi_bar_buttons(title_str,
437                                         lbutton_str, rbutton_str, NULL,
438                                         lbutton_click_cb, rbutton_click_cb,
439                                         NULL, cb_data, *genlist, *navi_bar,
440                                         controlbar);
441         return layout;
442 }
443
444
445 Elm_Object_Item *__push_navi_bar_bottom_buttons(char *title_str,
446                              char *lbutton_str, char *rbutton_str,
447                              char *mbutton_str,
448                              setting_call_back_func lbutton_click_cb,
449                              setting_call_back_func rbutton_click_cb,
450                              setting_call_back_func mbutton_click_cb,
451                              void *cb_data, Evas_Object *eo_view,
452                              Evas_Object *navigate_bar, Evas_Object **titleobj)
453 {
454         Elm_Object_Item *navi_it = NULL;
455         Evas_Object *controlbar = NULL;
456
457         /*  arrange buttons into  controlbar*/
458         if (0 == safeStrCmp(lbutton_str, _("IDS_COM_BODY_BACK"))) {
459                 Evas_Object *l_button = NULL;
460                 l_button = setting_create_button(navigate_bar, lbutton_str,
461                                                  NAVI_BACK_BUTTON_STYLE,
462                                                  lbutton_click_cb, cb_data);
463
464                 navi_it = elm_naviframe_item_push(navigate_bar, title_str, l_button, NULL, eo_view, NULL);
465                 elm_object_style_set(l_button, NAVI_BACK_BUTTON_STYLE); /* take into effect */
466                 if (!rbutton_str && !mbutton_str)
467                 {
468                         return navi_it;
469                 }
470
471                 controlbar = elm_toolbar_add(navigate_bar);
472                 setting_retvm_if(controlbar == NULL, navi_it, "controlbar == NULL");
473                 elm_toolbar_shrink_mode_set(controlbar, ELM_TOOLBAR_SHRINK_EXPAND);
474                 //elm_object_style_set(controlbar, NAVI_CONTROLBAR_STYLE);
475                 if (titleobj) *titleobj = controlbar;
476
477                 if (rbutton_str && mbutton_str) {
478                         elm_toolbar_item_append(controlbar, NULL, mbutton_str, mbutton_click_cb, cb_data);
479                         elm_toolbar_item_append(controlbar, NULL, rbutton_str, rbutton_click_cb, cb_data);
480                 } else if (rbutton_str) {
481                         elm_toolbar_item_append(controlbar, NULL, rbutton_str, rbutton_click_cb, cb_data);
482                         int len = safeStrLen(rbutton_str);
483                         if (len < ONE_THIRD_SCREEN_STR_LEN) {
484                                 elm_object_item_disabled_set(elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL), EINA_TRUE);
485
486                         }
487
488                         if (len < HALF_SCREEN_STR_LEN)
489                         {
490                                 elm_object_item_disabled_set(elm_toolbar_item_append(controlbar, NULL, "", NULL, NULL), EINA_TRUE);
491                         }
492                 } else if (mbutton_str) {
493                         elm_toolbar_item_append(controlbar, NULL, mbutton_str, mbutton_click_cb, cb_data);
494                         elm_object_item_disabled_set(elm_toolbar_item_append(controlbar, NULL, "", NULL, NULL), EINA_TRUE);
495                         elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
496                 }
497         } else {        /*  no need back button on navi_bar */
498                 navi_it = elm_naviframe_item_push(navigate_bar, title_str, NULL, NULL, eo_view, NULL);
499                 if (!lbutton_str && !rbutton_str && !mbutton_str) {
500                         return navi_it;
501                 }
502
503                 //remove '<-' button, insteadly using controlbar
504                 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
505                 elm_object_item_part_content_set(navi_it, "prev_btn", NULL);
506                 evas_object_del(back_btn);
507
508                 controlbar = elm_toolbar_add(navigate_bar);
509                 setting_retvm_if(controlbar == NULL, navi_it, "controlbar == NULL");
510                 elm_toolbar_shrink_mode_set(controlbar, ELM_TOOLBAR_SHRINK_EXPAND);
511                 //elm_object_style_set(controlbar, NAVI_CONTROLBAR_STYLE);
512                 if (titleobj) *titleobj = controlbar;
513
514                 if (lbutton_str)
515                         elm_toolbar_item_append(controlbar, NULL, lbutton_str, lbutton_click_cb, cb_data);
516                 if (mbutton_str)
517                         elm_toolbar_item_append(controlbar, NULL, mbutton_str, mbutton_click_cb, cb_data);
518                 if (rbutton_str)
519                         elm_toolbar_item_append(controlbar, NULL, rbutton_str, rbutton_click_cb, cb_data);
520         }
521
522         elm_object_item_part_content_set(navi_it, NAVI_CONTROLBAR_PART, controlbar);
523         return navi_it;
524 }
525
526
527 /**
528 * The general API to push any evas object(@param[eo_view]) to the specialized navi_bar,
529 *   which contents at most 3 buttons
530 */
531 Elm_Object_Item *
532 setting_push_layout_navi_bar(char *title_str,
533                              char *lbutton_str, char *rbutton_str,
534                              char *mbutton_str,
535                              setting_call_back_func lbutton_click_cb,
536                              setting_call_back_func rbutton_click_cb,
537                              setting_call_back_func mbutton_click_cb,
538                              void *cb_data, Evas_Object *eo_view,
539                              Evas_Object *navi_bar, Evas_Object **titleobj)
540 {
541 #if SUPPORT_BOTTOM_BTNS
542         return __push_navi_bar_bottom_buttons(title_str,
543                                      lbutton_str, rbutton_str,mbutton_str,
544                                      lbutton_click_cb,
545                                      rbutton_click_cb,
546                                      mbutton_click_cb,
547                                      cb_data, eo_view, navi_bar, titleobj);
548 #endif
549
550
551         Evas_Object *l_button = NULL;
552         Evas_Object *r_button = NULL;
553         Evas_Object *m_button = NULL;
554         Elm_Object_Item *navi_it = NULL;
555         Evas_Object *controlbar = NULL;
556
557         /*  create buttons */
558         if (lbutton_str && 0 == safeStrCmp(lbutton_str, _("IDS_COM_BODY_BACK"))) {      /* left 'Back' button should be processed specially */
559                 l_button = setting_create_button(navi_bar, lbutton_str,
560                                                  NAVI_BACK_BUTTON_STYLE,
561                                                  lbutton_click_cb, cb_data);
562         } else {
563                 l_button = setting_create_button(navi_bar, lbutton_str,
564                                                  NAVI_DEF_BUTTON_STYLE,
565                                                  lbutton_click_cb, cb_data);
566         }
567         r_button = setting_create_button(navi_bar, rbutton_str,
568                                          NAVI_DEF_BUTTON_STYLE,
569                                          rbutton_click_cb, cb_data);
570         m_button = setting_create_button(navi_bar, mbutton_str,
571                                          NAVI_DEF_BUTTON_STYLE,
572                                          mbutton_click_cb, cb_data);
573
574         Elm_Object_Item *item = NULL;
575
576         /*  arrange buttons into  controlbar*/
577         if (0 == safeStrCmp(lbutton_str, _("IDS_COM_BODY_BACK"))) {     /*  need back button on navi_bar */
578                 navi_it = elm_naviframe_item_push(navi_bar, title_str, l_button, NULL, eo_view, NULL);
579                 elm_object_style_set(l_button, NAVI_BACK_BUTTON_STYLE); /* take into effect */
580                 if (!rbutton_str && !mbutton_str)
581                 {
582                         return navi_it;
583                 }
584
585                 controlbar = elm_toolbar_add(navi_bar);
586                 setting_retvm_if(controlbar == NULL, NULL, "controlbar == NULL");
587                 elm_toolbar_shrink_mode_set(controlbar, ELM_TOOLBAR_SHRINK_EXPAND);
588                 //elm_object_style_set(controlbar, NAVI_CONTROLBAR_STYLE);
589                 if (titleobj) *titleobj = controlbar;
590
591                 if (rbutton_str && mbutton_str) {
592                         item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
593                         elm_object_item_part_content_set(item, "object", m_button);
594                         /* elm_controlbar_object_item_append(controlbar, NULL, 1); */
595                         item = elm_toolbar_item_append(controlbar,NULL, NULL, NULL, NULL);
596                         elm_object_item_part_content_set(item, "object", r_button);
597                 } else if (rbutton_str) {
598                         if (0 ==
599                             safeStrCmp(rbutton_str, _(KeyStr_INFO))) {
600                                 item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
601                                 item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
602                                 elm_object_item_part_content_set(item, "object", r_button);
603                         } else {
604                                 int len = safeStrLen(rbutton_str);
605                                 item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
606                                 elm_object_item_part_content_set(item, "object", r_button);
607
608                                 if (len < HALF_SCREEN_STR_LEN)
609                                 {
610                                         item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
611                                         elm_object_item_part_content_set(item, "object", r_button);
612                                 }
613                                 if (len < ONE_THIRD_SCREEN_STR_LEN)
614                                 {
615                                         item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
616                                 }
617                         }
618
619                 } else if (mbutton_str) {
620                         item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
621                         elm_object_item_part_content_set(item, "object", m_button);
622                         item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
623                         item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
624                 }
625         } else {        /*  no need back button on navi_bar */
626                 navi_it = elm_naviframe_item_push(navi_bar, title_str, NULL, NULL, eo_view, NULL);
627                 if (!lbutton_str && !rbutton_str && !mbutton_str)
628                 {
629                         return navi_it;
630                 }
631
632                 //remove '<-' button, insteadly using controlbar
633                 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
634                 elm_object_item_part_content_set(navi_it, "prev_btn", NULL);
635                 evas_object_del(back_btn);
636
637                 controlbar = elm_toolbar_add(navi_bar);
638                 setting_retvm_if(controlbar == NULL, NULL, "controlbar == NULL");
639                 elm_toolbar_shrink_mode_set(controlbar, ELM_TOOLBAR_SHRINK_EXPAND);
640                 //elm_object_style_set(controlbar, NAVI_CONTROLBAR_STYLE);
641                 if (titleobj) *titleobj = controlbar;
642
643                 if (l_button)
644                 {
645                         item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
646                         elm_object_item_part_content_set(item, "object", l_button);
647                 }
648                 if (m_button)
649                 {
650                         item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
651                         elm_object_item_part_content_set(item, "object", m_button);
652                 }
653                 if (r_button)
654                 {
655                         item = elm_toolbar_item_append(controlbar, NULL, NULL, NULL, NULL);
656                         elm_object_item_part_content_set(item, "object", r_button);
657                 }
658         }
659
660         elm_object_item_part_content_set(navi_it, NAVI_CONTROLBAR_PART, controlbar);
661
662         return navi_it;
663 }
664
665 /**
666 * The API to push a scroller object(@param[scroller]) to the specialized navi_bar,
667 *   which contents at most 2 buttons
668 */
669
670 void
671 setting_push_layout_navi_bar_scroller(Evas_Object *win_main, char *title_str,
672                                       char *lbutton_str, char *rbutton_str,
673                                       setting_call_back_func lbutton_click_cb,
674                                       setting_call_back_func rbutton_click_cb,
675                                       void *cb_data,
676                                       Evas_Object **scroller,
677                                       Evas_Object *navi_bar)
678 {
679         /*  create scroller */
680         Evas_Object *scrl = NULL;
681         if (scroller != NULL) {
682                 scrl = *scroller = elm_scroller_add(win_main);
683                 retm_if(*scroller == NULL,
684                         "Cannot set scroller as contento of layout");
685                 elm_scroller_bounce_set(*scroller, EINA_FALSE, EINA_TRUE);
686                 elm_scroller_policy_set(*scroller, ELM_SCROLLER_POLICY_OFF,
687                                         ELM_SCROLLER_POLICY_AUTO);
688
689                 evas_object_show(*scroller);
690         }
691
692         setting_push_layout_navi_bar(title_str,
693                                      lbutton_str, rbutton_str, NULL,
694                                      lbutton_click_cb,
695                                      rbutton_click_cb,
696                                      NULL, cb_data, scrl, navi_bar, NULL);
697 }
698
699 /**
700 * @ The API to push a genlist object(@param[genlist]) to the specialized navi_bar,
701 *   which contents at most 2 buttons
702 */
703 void
704 setting_push_layout_navi_bar_genlist(Evas_Object *win_layout,
705                                      Evas_Object *win_obj, char *title_str,
706                                      char *lbutton_str, char *rbutton_str,
707                                      setting_call_back_func lbutton_click_cb,
708                                      setting_call_back_func rbutton_click_cb,
709                                      void *cb_data, Evas_Object **genlist,
710                                      Evas_Object *navi_bar)
711 {
712         /*  create scroller */
713         Evas_Object *gl = NULL;
714         if (genlist != NULL) {
715                 gl = *genlist = elm_genlist_add(win_layout);
716                 elm_object_style_set(*genlist, "dialogue");
717                 retm_if(*genlist == NULL,
718                         "Cannot set scroller object  as contento of layout");
719                 elm_genlist_clear(gl);  /* first to clear list */
720         }
721
722         setting_push_layout_navi_bar(title_str,
723                                      lbutton_str, rbutton_str, NULL,
724                                      lbutton_click_cb,
725                                      rbutton_click_cb,
726                                      NULL, cb_data, gl, navi_bar, NULL);
727 }
728
729 /*
730 * To go to top of list in top view of navibar.
731 * @param[in] navibar
732 */
733 void setting_go_to_navibar_list_top(Evas_Object *navibar)
734 {
735         Elm_Object_Item *navi_it = elm_naviframe_top_item_get(navibar);
736         if (navi_it)
737         {
738                 Evas_Object *content = elm_object_item_part_content_get(navi_it, "default");
739
740                 Elm_Object_Item *first_item = elm_genlist_first_item_get(content);
741                 if (first_item)
742                 {
743                         elm_genlist_item_show(first_item, ELM_GENLIST_ITEM_SCROLLTO_TOP);
744                 }
745         }
746 }
747
748