4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
6 * Contact: MyoungJune Park <mj2004.park@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
21 #include <setting-common-draw-widget.h>
26 Evas_Object *setting_create_win_layout(Evas_Object *win_layout,
29 Evas_Object *layout = NULL;
32 layout = elm_layout_add(win_obj);
33 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
34 setting_retvm_if(layout == NULL, FALSE, "layout == NULL");
36 elm_layout_theme_set(layout, "layout", "application", "default");
38 Evas_Object *bg = setting_create_bg(layout, win_obj, "group_list");
39 elm_object_part_content_set(layout, "elm.swallow.bg", bg);
40 evas_object_show(layout);
45 #define HALF_SCREEN_STR_LEN 20
46 #define ONE_THIRD_SCREEN_STR_LEN 13
47 Evas_Object *setting_create_navi_bar(Evas_Object *layout)
50 Evas_Object *navi = NULL;
51 navi = elm_naviframe_add(layout);
54 SETTING_TRACE(" *** elm_naviframe_add returns NULL *** ");
57 elm_object_part_content_set(layout, "elm.swallow.content", navi);
58 evas_object_show(navi);
62 Elm_Object_Item * setting_create_navi_bar_top_buttons(char *title_str,
66 setting_call_back_func lbutton_click_cb,
67 setting_call_back_func rbutton_click_cb,
68 setting_call_back_func mbutton_click_cb,
69 void *cb_data, Evas_Object *eo_view,/*any container obj */
70 Evas_Object *navigate_bar )
72 //SETTING_TRACE_BEGIN;
73 Evas_Object *l_button = NULL;
74 Evas_Object *r_button = NULL;
75 Evas_Object *m_button = NULL;
76 Elm_Object_Item *navi_it = NULL;
79 l_button = setting_create_button(navigate_bar, lbutton_str,
81 lbutton_click_cb, cb_data);
83 r_button = setting_create_button(navigate_bar, rbutton_str,
85 rbutton_click_cb, cb_data);
86 m_button = setting_create_button(navigate_bar, mbutton_str,
88 mbutton_click_cb, cb_data);
90 navi_it = elm_naviframe_item_push(navigate_bar, title_str,
93 retv_if(!navi_it, NULL);
95 /* arrange buttons into navi_it*/
97 elm_object_item_part_content_set(navi_it, "title_left_btn", l_button);
100 elm_object_item_part_content_set(navi_it, "title_right_btn", r_button);
103 elm_object_item_part_content_set(navi_it, "title_more_btn", m_button);
106 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
108 elm_object_item_part_content_set(navi_it, "prev_btn", NULL);
109 if (back_btn) evas_object_del(back_btn);
115 Elm_Object_Item *__create_navi_bar_bottom_buttons(char *title_str, char *lbutton_str, char *rbutton_str,
116 char *mbutton_str, setting_call_back_func lbutton_click_cb,
117 setting_call_back_func rbutton_click_cb,
118 setting_call_back_func mbutton_click_cb,
119 void *cb_data, Evas_Object *eo_view,/*any container obj */
120 Evas_Object *navigate_bar, /*the specialized navigation bar */
121 Evas_Object *titleobj)
124 Elm_Object_Item *navi_it = NULL;
125 Evas_Object *mbtn = NULL;
126 Evas_Object *rbtn = NULL;
127 Evas_Object *lbtn = NULL;
129 /* arrange buttons into controlbar*/
130 if (0 == safeStrCmp(lbutton_str, _("IDS_COM_BODY_BACK"))) { /* do special handling */
131 lbtn = setting_create_button(navigate_bar, lbutton_str,
132 NAVI_BACK_BUTTON_STYLE,
133 lbutton_click_cb, cb_data);
135 navi_it = elm_naviframe_item_push(navigate_bar, title_str, lbtn, NULL, eo_view, NULL); /* add new button */
136 elm_object_style_set(lbtn, NAVI_BACK_BUTTON_STYLE); /* take into effect */
138 if (!rbutton_str && !mbutton_str) {
140 } else if (rbutton_str && mbutton_str) { /* both exist.. */
141 mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
142 rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
143 elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
144 elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn);
145 } else if (rbutton_str) { /* r_btn exist.. */
146 rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
147 elm_object_item_part_content_set(navi_it, "toolbar_button1", rbtn);
148 elm_object_item_part_content_set(navi_it, "toolbar_button2", setting_create_button(navigate_bar, "", NULL, NULL, NULL));
149 } else if (mbutton_str) { /* m_btn exist.. */
150 mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
151 elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
152 elm_object_item_part_content_set(navi_it, "toolbar_button2", setting_create_button(navigate_bar, "", NULL, NULL, NULL));
156 navi_it = elm_naviframe_item_push(navigate_bar, title_str, NULL, NULL, eo_view, NULL);
157 if (lbutton_str && mbutton_str && rbutton_str)
159 lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
160 elm_object_item_part_content_set(navi_it, "toolbar_more_btn", lbtn);
161 mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
162 elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
163 rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
164 elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn);
168 bool has_btn_flag = FALSE;//first "toolbar_button1", then "toolbar_button2".
171 lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
172 elm_object_item_part_content_set(navi_it, "toolbar_button1", lbtn);
177 mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
178 elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", mbtn);
183 rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
184 elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", rbtn);
194 * Create buttons on the specialized navigation bar
196 * @param[in] eo_view navigation bar's content
197 * @param[in] controlbar title obj of navigation bar
200 void setting_create_navi_bar_buttons(char *title_str, char *lbutton_str, char *rbutton_str,
201 char *mbutton_str, setting_call_back_func lbutton_click_cb,
202 setting_call_back_func rbutton_click_cb,
203 setting_call_back_func mbutton_click_cb,
204 void *cb_data, Evas_Object *eo_view,/*any container obj */
205 Evas_Object *navigate_bar, /*the specialized navigation bar */
206 Evas_Object *titleobj)
208 __create_navi_bar_bottom_buttons(title_str, lbutton_str,
209 rbutton_str, mbutton_str,
214 navigate_bar, titleobj);
219 * The general API to create a layout with navigation bar,
220 * which contents any evas container object(@param[eo_view]) as its content
222 * @param[in] eo_view navigation bar's content
223 * @param[out] titleobj title obj of navigation bar
225 * return main layout of UG or App..
227 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 */
228 Evas_Object **navi_bar,
229 Evas_Object **titleobj)
232 Evas_Object *layout = setting_create_win_layout(win_layout, win_obj);
233 *navi_bar = setting_create_navi_bar(layout);
235 setting_create_navi_bar_buttons(title_str,
236 lbutton_str, rbutton_str, mbutton_str,
237 lbutton_click_cb, rbutton_click_cb,
238 mbutton_click_cb, cb_data, eo_view /*content */ ,
244 * The API to create a layout with navigation bar,
245 * which contents a scroller object as its content
247 * @param[out] scroller navigation bar's content
249 * @return a layout with a special navigation bar and at most 2 buttons
252 Evas_Object *setting_create_layout_navi_bar_scroller(Evas_Object *win_layout,
253 Evas_Object *win_obj,
257 setting_call_back_func
259 setting_call_back_func
262 Evas_Object **scroller,
263 Evas_Object **navi_bar)
266 Evas_Object *layout = setting_create_win_layout(win_layout, win_obj);
267 *navi_bar = setting_create_navi_bar(layout);
270 /* create scroller as CONTENT */
271 Evas_Object *scrl = NULL;
272 /* Evas_Object *ret = NULL; */
273 if (scroller != NULL) {
274 /* scrl =*scroller = elm_scroller_add(win_layout); */
275 scrl = *scroller = elm_scroller_add(layout);
276 retvm_if(*scroller == NULL, NULL,
277 "Cannot set scroller object as contento of layout");
278 elm_scroller_bounce_set(*scroller, EINA_FALSE, EINA_TRUE);
279 elm_scroller_policy_set(*scroller, ELM_SCROLLER_POLICY_OFF,
280 ELM_SCROLLER_POLICY_AUTO);
281 evas_object_show(*scroller);
286 setting_create_navi_bar_buttons(title_str,
287 lbutton_str, rbutton_str, NULL,
288 lbutton_click_cb, rbutton_click_cb,
289 NULL, cb_data, scrl /*content */ ,
295 * The API to create a layout with navigation bar ,
296 * which contents a genlist object as its content
298 * @return a layout with a special navigation bar and at most 2 buttons
300 Evas_Object *setting_create_layout_navi_bar_genlist(Evas_Object *win_layout,
301 Evas_Object *win_obj,
305 setting_call_back_func
307 setting_call_back_func
310 Evas_Object **genlist,
311 Evas_Object **navi_bar)
313 /* win_layout -> layout */
314 Evas_Object *layout = setting_create_win_layout(win_layout, win_obj);
315 *navi_bar = setting_create_navi_bar(layout);
317 *genlist = elm_genlist_add(*navi_bar);
318 elm_object_style_set(*genlist, "dialogue");
319 retvm_if(*genlist == NULL, NULL,
320 "Cannot set scroller object as contento of layout");
321 elm_genlist_clear(*genlist); /* first to clear list */
323 setting_create_navi_bar_buttons(title_str,
324 lbutton_str, rbutton_str, NULL,
325 lbutton_click_cb, rbutton_click_cb,
326 NULL, cb_data, *genlist, *navi_bar,
332 Elm_Object_Item *__push_navi_bar_bottom_buttons(char *title_str,
333 char *lbutton_str, char *rbutton_str,
335 setting_call_back_func lbutton_click_cb,
336 setting_call_back_func rbutton_click_cb,
337 setting_call_back_func mbutton_click_cb,
338 void *cb_data, Evas_Object *eo_view,
339 Evas_Object *navigate_bar, Evas_Object **titleobj)
341 Elm_Object_Item *navi_it = NULL;
342 Evas_Object *mbtn = NULL;
343 Evas_Object *rbtn = NULL;
344 Evas_Object *lbtn = NULL;
346 /* arrange buttons into controlbar*/
347 if (0 == safeStrCmp(lbutton_str, _("IDS_COM_BODY_BACK"))) {
348 lbtn = setting_create_button(navigate_bar, lbutton_str,
349 NAVI_BACK_BUTTON_STYLE,
350 lbutton_click_cb, cb_data);
352 navi_it = elm_naviframe_item_push(navigate_bar, title_str, lbtn, NULL, eo_view, NULL);
353 elm_object_style_set(lbtn, NAVI_BACK_BUTTON_STYLE); /* take into effect */
354 if (!rbutton_str && !mbutton_str)
359 if (rbutton_str && mbutton_str) {
361 mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
362 rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
363 elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
364 elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn);
365 } else if (rbutton_str) {
366 rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
367 elm_object_item_part_content_set(navi_it, "toolbar_button1", rbtn);
368 //elm_object_item_part_content_set(navi_it, "toolbar_button2", setting_create_button(navigate_bar, "", NULL, NULL, NULL));
369 } else if (mbutton_str) {
370 mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
371 elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
372 //elm_object_item_part_content_set(navi_it, "toolbar_button2", setting_create_button(navigate_bar, "", NULL, NULL, NULL));
374 } else { /* no need back button on navi_bar */
375 navi_it = elm_naviframe_item_push(navigate_bar, title_str, NULL, NULL, eo_view, NULL);
376 if (!lbutton_str && !rbutton_str && !mbutton_str) {
380 //remove '<-' button, insteadly using controlbar
381 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
382 elm_object_item_part_content_set(navi_it, "prev_btn", NULL);
383 evas_object_del(back_btn);
385 if (lbutton_str && mbutton_str && rbutton_str)
387 lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
388 elm_object_item_part_content_set(navi_it, "toolbar_more_btn", lbtn);
389 mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
390 elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
391 rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
392 elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn);
396 bool has_btn_flag = FALSE;//first "toolbar_button1", then "toolbar_button2".
399 lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
400 elm_object_item_part_content_set(navi_it, "toolbar_button1", lbtn);
405 mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
406 elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", mbtn);
411 rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
412 elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", rbtn);
423 * The general API to push any evas object(@param[eo_view]) to the specialized navi_bar,
424 * which contents at most 3 buttons
427 setting_push_layout_navi_bar(char *title_str,
428 char *lbutton_str, char *rbutton_str,
430 setting_call_back_func lbutton_click_cb,
431 setting_call_back_func rbutton_click_cb,
432 setting_call_back_func mbutton_click_cb,
433 void *cb_data, Evas_Object *eo_view,
434 Evas_Object *navi_bar, Evas_Object **titleobj)
436 return __push_navi_bar_bottom_buttons(title_str,
437 lbutton_str, rbutton_str,mbutton_str,
441 cb_data, eo_view, navi_bar, titleobj);
445 * The API to push a scroller object(@param[scroller]) to the specialized navi_bar,
446 * which contents at most 2 buttons
450 setting_push_layout_navi_bar_scroller(Evas_Object *win_main, char *title_str,
451 char *lbutton_str, char *rbutton_str,
452 setting_call_back_func lbutton_click_cb,
453 setting_call_back_func rbutton_click_cb,
455 Evas_Object **scroller,
456 Evas_Object *navi_bar)
458 /* create scroller */
459 Evas_Object *scrl = NULL;
460 if (scroller != NULL) {
461 scrl = *scroller = elm_scroller_add(win_main);
462 retm_if(*scroller == NULL,
463 "Cannot set scroller as contento of layout");
464 elm_scroller_bounce_set(*scroller, EINA_FALSE, EINA_TRUE);
465 elm_scroller_policy_set(*scroller, ELM_SCROLLER_POLICY_OFF,
466 ELM_SCROLLER_POLICY_AUTO);
468 evas_object_show(*scroller);
471 setting_push_layout_navi_bar(title_str,
472 lbutton_str, rbutton_str, NULL,
475 NULL, cb_data, scrl, navi_bar, NULL);
479 * @ The API to push a genlist object(@param[genlist]) to the specialized navi_bar,
480 * which contents at most 2 buttons
483 setting_push_layout_navi_bar_genlist(Evas_Object *win_layout,
484 Evas_Object *win_obj, char *title_str,
485 char *lbutton_str, char *rbutton_str,
486 setting_call_back_func lbutton_click_cb,
487 setting_call_back_func rbutton_click_cb,
488 void *cb_data, Evas_Object **genlist,
489 Evas_Object *navi_bar)
491 /* create scroller */
492 Evas_Object *gl = NULL;
493 if (genlist != NULL) {
494 gl = *genlist = elm_genlist_add(win_layout);
495 elm_object_style_set(*genlist, "dialogue");
496 retm_if(*genlist == NULL,
497 "Cannot set scroller object as contento of layout");
498 elm_genlist_clear(gl); /* first to clear list */
501 setting_push_layout_navi_bar(title_str,
502 lbutton_str, rbutton_str, NULL,
505 NULL, cb_data, gl, navi_bar, NULL);
509 * To go to top of list in top view of navibar.
512 void setting_go_to_navibar_list_top(Evas_Object *navibar)
514 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(navibar);
517 Evas_Object *content = elm_object_item_part_content_get(navi_it, "default");
519 Elm_Object_Item *first_item = elm_genlist_first_item_get(content);
522 elm_genlist_item_show(first_item, ELM_GENLIST_ITEM_SCROLLTO_TOP);