3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 * Licensed under the Flora License, Version 1.0 (the License);
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://floralicense.org/license/
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an AS IS BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 #include <setting-common-draw-widget.h>
22 Evas_Object *setting_create_win_layout(Evas_Object *win_layout,
25 Evas_Object *layout = NULL;
28 layout = elm_layout_add(win_obj);
29 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
30 setting_retvm_if(layout == NULL, FALSE, "layout == NULL");
32 elm_layout_theme_set(layout, "layout", "application", "default");
34 Evas_Object *bg = setting_create_bg(layout, win_obj, "group_list");
35 elm_object_part_content_set(layout, "elm.swallow.bg", bg);
36 evas_object_show(layout);
41 #define HALF_SCREEN_STR_LEN 20
42 #define ONE_THIRD_SCREEN_STR_LEN 13
43 Evas_Object *setting_create_navi_bar(Evas_Object *layout)
46 Evas_Object *navi = NULL;
47 navi = elm_naviframe_add(layout);
50 SETTING_TRACE(" *** elm_naviframe_add returns NULL *** ");
53 elm_object_part_content_set(layout, "elm.swallow.content", navi);
54 evas_object_show(navi);
58 Elm_Object_Item * setting_create_navi_bar_top_buttons(char *title_str,
62 setting_call_back_func lbutton_click_cb,
63 setting_call_back_func rbutton_click_cb,
64 setting_call_back_func mbutton_click_cb,
65 void *cb_data, Evas_Object *eo_view,/*any container obj */
66 Evas_Object *navigate_bar )
68 //SETTING_TRACE_BEGIN;
69 Evas_Object *l_button = NULL;
70 Evas_Object *r_button = NULL;
71 Evas_Object *m_button = NULL;
72 Elm_Object_Item *navi_it = NULL;
75 l_button = setting_create_button(navigate_bar, lbutton_str,
77 lbutton_click_cb, cb_data);
79 r_button = setting_create_button(navigate_bar, rbutton_str,
81 rbutton_click_cb, cb_data);
82 m_button = setting_create_button(navigate_bar, mbutton_str,
84 mbutton_click_cb, cb_data);
86 navi_it = elm_naviframe_item_push(navigate_bar, title_str,
89 retv_if(!navi_it, NULL);
91 /* arrange buttons into navi_it*/
93 elm_object_item_part_content_set(navi_it, "title_left_btn", l_button);
96 elm_object_item_part_content_set(navi_it, "title_right_btn", r_button);
99 elm_object_item_part_content_set(navi_it, "title_more_btn", m_button);
102 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
104 elm_object_item_part_content_set(navi_it, "prev_btn", NULL);
105 if (back_btn) evas_object_del(back_btn);
110 Elm_Object_Item *__create_navi_bar_bottom_buttons(char *title_str, char *lbutton_str, char *rbutton_str,
111 char *mbutton_str, setting_call_back_func lbutton_click_cb,
112 setting_call_back_func rbutton_click_cb,
113 setting_call_back_func mbutton_click_cb,
114 void *cb_data, Evas_Object *eo_view,/*any container obj */
115 Evas_Object *navigate_bar, /*the specialized navigation bar */
116 Evas_Object *titleobj)
119 Elm_Object_Item *navi_it = NULL;
120 Evas_Object *mbtn = NULL;
121 Evas_Object *rbtn = NULL;
122 Evas_Object *lbtn = NULL;
124 /* arrange buttons into controlbar*/
125 if (0 == safeStrCmp(lbutton_str, _("IDS_COM_BODY_BACK"))) { /* do special handling */
126 lbtn = setting_create_button(navigate_bar, lbutton_str,
127 NAVI_BACK_BUTTON_STYLE,
128 lbutton_click_cb, cb_data);
130 navi_it = elm_naviframe_item_push(navigate_bar, title_str, lbtn, NULL, eo_view, NULL); /* add new button */
131 elm_object_style_set(lbtn, NAVI_BACK_BUTTON_STYLE); /* take into effect */
133 if (!rbutton_str && !mbutton_str) {
135 } else if (rbutton_str && mbutton_str) { /* both exist.. */
136 mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
137 rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
138 elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
139 elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn);
140 } else if (rbutton_str) { /* r_btn exist.. */
141 rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
142 elm_object_item_part_content_set(navi_it, "toolbar_button1", rbtn);
143 //elm_object_item_part_content_set(navi_it, "toolbar_button2", setting_create_button(navigate_bar, "", NULL, NULL, NULL));
144 } else if (mbutton_str) { /* m_btn exist.. */
145 mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
146 elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
147 //elm_object_item_part_content_set(navi_it, "toolbar_button2", setting_create_button(navigate_bar, "", NULL, NULL, NULL));
151 navi_it = elm_naviframe_item_push(navigate_bar, title_str, NULL, NULL, eo_view, NULL);
152 if (lbutton_str && mbutton_str && rbutton_str)
154 lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
155 elm_object_item_part_content_set(navi_it, "toolbar_more_btn", lbtn);
156 mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
157 elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
158 rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
159 elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn);
163 bool has_btn_flag = FALSE;//first "toolbar_button1", then "toolbar_button2".
166 lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
167 elm_object_item_part_content_set(navi_it, "toolbar_button1", lbtn);
172 mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
173 elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", mbtn);
178 rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
179 elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", rbtn);
189 * Create buttons on the specialized navigation bar
191 * @param[in] eo_view navigation bar's content
192 * @param[in] controlbar title obj of navigation bar
195 void setting_create_navi_bar_buttons(char *title_str, char *lbutton_str, char *rbutton_str,
196 char *mbutton_str, setting_call_back_func lbutton_click_cb,
197 setting_call_back_func rbutton_click_cb,
198 setting_call_back_func mbutton_click_cb,
199 void *cb_data, Evas_Object *eo_view,/*any container obj */
200 Evas_Object *navigate_bar, /*the specialized navigation bar */
201 Evas_Object *titleobj)
203 __create_navi_bar_bottom_buttons(title_str, lbutton_str,
204 rbutton_str, mbutton_str,
209 navigate_bar, titleobj);
214 * The general API to create a layout with navigation bar,
215 * which contents any evas container object(@param[eo_view]) as its content
217 * @param[in] eo_view navigation bar's content
218 * @param[out] titleobj title obj of navigation bar
220 * return main layout of UG or App..
222 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 */
223 Evas_Object **navi_bar,
224 Evas_Object **titleobj)
227 Evas_Object *layout = setting_create_win_layout(win_layout, win_obj);
228 *navi_bar = setting_create_navi_bar(layout);
230 setting_create_navi_bar_buttons(title_str,
231 lbutton_str, rbutton_str, mbutton_str,
232 lbutton_click_cb, rbutton_click_cb,
233 mbutton_click_cb, cb_data, eo_view /*content */ ,
239 * The API to create a layout with navigation bar,
240 * which contents a scroller object as its content
242 * @param[out] scroller navigation bar's content
244 * @return a layout with a special navigation bar and at most 2 buttons
247 Evas_Object *setting_create_layout_navi_bar_scroller(Evas_Object *win_layout,
248 Evas_Object *win_obj,
252 setting_call_back_func
254 setting_call_back_func
257 Evas_Object **scroller,
258 Evas_Object **navi_bar)
261 Evas_Object *layout = setting_create_win_layout(win_layout, win_obj);
262 *navi_bar = setting_create_navi_bar(layout);
265 /* create scroller as CONTENT */
266 Evas_Object *scrl = NULL;
267 /* Evas_Object *ret = NULL; */
268 if (scroller != NULL) {
269 /* scrl =*scroller = elm_scroller_add(win_layout); */
270 scrl = *scroller = elm_scroller_add(layout);
271 retvm_if(*scroller == NULL, NULL,
272 "Cannot set scroller object as contento of layout");
273 elm_scroller_bounce_set(*scroller, EINA_FALSE, EINA_TRUE);
274 elm_scroller_policy_set(*scroller, ELM_SCROLLER_POLICY_OFF,
275 ELM_SCROLLER_POLICY_AUTO);
276 evas_object_show(*scroller);
281 setting_create_navi_bar_buttons(title_str,
282 lbutton_str, rbutton_str, NULL,
283 lbutton_click_cb, rbutton_click_cb,
284 NULL, cb_data, scrl /*content */ ,
290 * The API to create a layout with navigation bar ,
291 * which contents a genlist object as its content
293 * @return a layout with a special navigation bar and at most 2 buttons
295 Evas_Object *setting_create_layout_navi_bar_genlist(Evas_Object *win_layout,
296 Evas_Object *win_obj,
300 setting_call_back_func
302 setting_call_back_func
305 Evas_Object **genlist,
306 Evas_Object **navi_bar)
308 /* win_layout -> layout */
309 Evas_Object *layout = setting_create_win_layout(win_layout, win_obj);
310 *navi_bar = setting_create_navi_bar(layout);
312 *genlist = elm_genlist_add(*navi_bar);
313 elm_object_style_set(*genlist, "dialogue");
314 retvm_if(*genlist == NULL, NULL,
315 "Cannot set scroller object as contento of layout");
316 elm_genlist_clear(*genlist); /* first to clear list */
318 setting_create_navi_bar_buttons(title_str,
319 lbutton_str, rbutton_str, NULL,
320 lbutton_click_cb, rbutton_click_cb,
321 NULL, cb_data, *genlist, *navi_bar,
327 Elm_Object_Item *__push_navi_bar_bottom_buttons(char *title_str,
328 char *lbutton_str, char *rbutton_str,
330 setting_call_back_func lbutton_click_cb,
331 setting_call_back_func rbutton_click_cb,
332 setting_call_back_func mbutton_click_cb,
333 void *cb_data, Evas_Object *eo_view,
334 Evas_Object *navigate_bar, Evas_Object **titleobj)
336 Elm_Object_Item *navi_it = NULL;
337 Evas_Object *mbtn = NULL;
338 Evas_Object *rbtn = NULL;
339 Evas_Object *lbtn = NULL;
341 /* arrange buttons into controlbar*/
342 if (0 == safeStrCmp(lbutton_str, _("IDS_COM_BODY_BACK"))) {
343 lbtn = setting_create_button(navigate_bar, lbutton_str,
344 NAVI_BACK_BUTTON_STYLE,
345 lbutton_click_cb, cb_data);
347 navi_it = elm_naviframe_item_push(navigate_bar, title_str, lbtn, NULL, eo_view, NULL);
348 elm_object_style_set(lbtn, NAVI_BACK_BUTTON_STYLE); /* take into effect */
349 if (!rbutton_str && !mbutton_str)
354 if (rbutton_str && mbutton_str) {
356 mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
357 rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
358 elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
359 elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn);
360 } else if (rbutton_str) {
361 rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
362 elm_object_item_part_content_set(navi_it, "toolbar_button1", rbtn);
363 //elm_object_item_part_content_set(navi_it, "toolbar_button2", setting_create_button(navigate_bar, "", NULL, NULL, NULL));
364 } else if (mbutton_str) {
365 mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
366 elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
367 //elm_object_item_part_content_set(navi_it, "toolbar_button2", setting_create_button(navigate_bar, "", NULL, NULL, NULL));
369 } else { /* no need back button on navi_bar */
370 navi_it = elm_naviframe_item_push(navigate_bar, title_str, NULL, NULL, eo_view, NULL);
371 if (!lbutton_str && !rbutton_str && !mbutton_str) {
375 //remove '<-' button, insteadly using controlbar
376 Evas_Object *back_btn = elm_object_item_part_content_get(navi_it, "prev_btn");
377 elm_object_item_part_content_set(navi_it, "prev_btn", NULL);
378 evas_object_del(back_btn);
380 if (lbutton_str && mbutton_str && rbutton_str)
382 lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
383 elm_object_item_part_content_set(navi_it, "toolbar_more_btn", lbtn);
384 mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
385 elm_object_item_part_content_set(navi_it, "toolbar_button1", mbtn);
386 rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
387 elm_object_item_part_content_set(navi_it, "toolbar_button2", rbtn);
391 bool has_btn_flag = FALSE;//first "toolbar_button1", then "toolbar_button2".
394 lbtn = setting_create_button(navigate_bar, lbutton_str, NAVI_DEF_BUTTON_STYLE, lbutton_click_cb, cb_data);
395 elm_object_item_part_content_set(navi_it, "toolbar_button1", lbtn);
400 mbtn = setting_create_button(navigate_bar, mbutton_str, NAVI_DEF_BUTTON_STYLE, mbutton_click_cb, cb_data);
401 elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", mbtn);
406 rbtn = setting_create_button(navigate_bar, rbutton_str, NAVI_DEF_BUTTON_STYLE, rbutton_click_cb, cb_data);
407 elm_object_item_part_content_set(navi_it, has_btn_flag ? "toolbar_button2" : "toolbar_button1", rbtn);
418 * The general API to push any evas object(@param[eo_view]) to the specialized navi_bar,
419 * which contents at most 3 buttons
422 setting_push_layout_navi_bar(char *title_str,
423 char *lbutton_str, char *rbutton_str,
425 setting_call_back_func lbutton_click_cb,
426 setting_call_back_func rbutton_click_cb,
427 setting_call_back_func mbutton_click_cb,
428 void *cb_data, Evas_Object *eo_view,
429 Evas_Object *navi_bar, Evas_Object **titleobj)
431 return __push_navi_bar_bottom_buttons(title_str,
432 lbutton_str, rbutton_str,mbutton_str,
436 cb_data, eo_view, navi_bar, titleobj);
440 * The API to push a scroller object(@param[scroller]) to the specialized navi_bar,
441 * which contents at most 2 buttons
445 setting_push_layout_navi_bar_scroller(Evas_Object *win_main, char *title_str,
446 char *lbutton_str, char *rbutton_str,
447 setting_call_back_func lbutton_click_cb,
448 setting_call_back_func rbutton_click_cb,
450 Evas_Object **scroller,
451 Evas_Object *navi_bar)
453 /* create scroller */
454 Evas_Object *scrl = NULL;
455 if (scroller != NULL) {
456 scrl = *scroller = elm_scroller_add(win_main);
457 retm_if(*scroller == NULL,
458 "Cannot set scroller as contento of layout");
459 elm_scroller_bounce_set(*scroller, EINA_FALSE, EINA_TRUE);
460 elm_scroller_policy_set(*scroller, ELM_SCROLLER_POLICY_OFF,
461 ELM_SCROLLER_POLICY_AUTO);
463 evas_object_show(*scroller);
466 setting_push_layout_navi_bar(title_str,
467 lbutton_str, rbutton_str, NULL,
470 NULL, cb_data, scrl, navi_bar, NULL);
474 * @ The API to push a genlist object(@param[genlist]) to the specialized navi_bar,
475 * which contents at most 2 buttons
478 setting_push_layout_navi_bar_genlist(Evas_Object *win_layout,
479 Evas_Object *win_obj, char *title_str,
480 char *lbutton_str, char *rbutton_str,
481 setting_call_back_func lbutton_click_cb,
482 setting_call_back_func rbutton_click_cb,
483 void *cb_data, Evas_Object **genlist,
484 Evas_Object *navi_bar)
486 /* create scroller */
487 Evas_Object *gl = NULL;
488 if (genlist != NULL) {
489 gl = *genlist = elm_genlist_add(win_layout);
490 elm_object_style_set(*genlist, "dialogue");
491 retm_if(*genlist == NULL,
492 "Cannot set scroller object as contento of layout");
493 elm_genlist_clear(gl); /* first to clear list */
496 setting_push_layout_navi_bar(title_str,
497 lbutton_str, rbutton_str, NULL,
500 NULL, cb_data, gl, navi_bar, NULL);
504 * To go to top of list in top view of navibar.
507 void setting_go_to_navibar_list_top(Evas_Object *navibar)
509 Elm_Object_Item *navi_it = elm_naviframe_top_item_get(navibar);
512 Evas_Object *content = elm_object_item_part_content_get(navi_it, "default");
514 Elm_Object_Item *first_item = elm_genlist_first_item_get(content);
517 elm_genlist_item_show(first_item, ELM_GENLIST_ITEM_SCROLLTO_TOP);