2 * Copyright 2012 Samsung Electronics Co., Ltd
\r
4 * Licensed under the Flora License, Version 1.0 (the "License");
\r
5 * you may not use this file except in compliance with the License.
\r
6 * You may obtain a copy of the License at
\r
8 * http://www.tizenopensource.org/license
\r
10 * Unless required by applicable law or agreed to in writing, software
\r
11 * distributed under the License is distributed on an "AS IS" BASIS,
\r
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
13 * See the License for the specific language governing permissions and
\r
14 * limitations under the License.
\r
17 #ifndef UG_MODULE_API
\r
18 #define UG_MODULE_API __attribute__ ((visibility("default")))
\r
23 #include <stdbool.h>
\r
25 #include <Elementary.h>
\r
26 #include <ui-gadget-module.h>
\r
30 #include "sg-keys.h"
\r
31 #include "sg-debug.h"
\r
32 #include "ug-setting-gallery.h"
\r
34 #define MAX_PRECISION 0.1
\r
36 typedef int (*Init_State_Func) (int *data);
\r
39 _gallery_quit_cb(void *data, Evas_Object *obj, void *event_info)
\r
41 gallery_ret_if(!data);
\r
43 struct ug_data *ugd;
\r
44 ugd = (struct ug_data *)data;
\r
48 ug_destroy_me(ugd->ug);
\r
52 static char *_gallery_get_menu_elm_text(int param)
\r
58 case GALLERY_MAIN_MENU_TIME:
\r
59 text = SGUG_TR_PESF;
\r
62 case GALLERY_MAIN_MENU_REPEAT:
\r
63 text = SGUG_TR_REPEAT;
\r
66 case GALLERY_MAIN_MENU_SHUFFLE:
\r
67 text = SGUG_TR_SHUFFLE;
\r
70 case GALLERY_MAIN_MENU_TITLE:
\r
71 text = SGUG_TR_SLIDESHOW;
\r
81 static int _gallery_get_time_radio_value(void)
\r
83 int radio_value = 0;
\r
84 double time_value = 0;
\r
86 gallery_key_init_current_time(&time_value);
\r
88 for(radio_value = 0; radio_value < GALLERY_SUB_TIME_COUNT; radio_value++)
\r
90 if(abs(time_value - gallery_key_get_time_vconf_value(radio_value)) < MAX_PRECISION)
\r
97 static char *_gallery_get_menu_time_text(void)
\r
99 int radio_value = 0;
\r
100 radio_value =_gallery_get_time_radio_value();
\r
102 return gallery_key_time_menu_get(radio_value);
\r
105 static char *_gallery_get_menu_sub_elm_text(int param)
\r
111 case GALLERY_MAIN_MENU_TIME:
\r
112 text = _gallery_get_menu_time_text();
\r
123 _gallery_genlist_text_get(void *data, Evas_Object *obj, const char *part)
\r
125 gallery_retv_if(!part, NULL);
\r
127 int param = (int )data;
\r
131 input_len = strlen(part);
\r
133 if (input_len == strlen("elm.text.1") && strncmp(part, "elm.text.1", input_len) == 0 )
\r
135 txt = _gallery_get_menu_elm_text(param);
\r
137 else if (input_len == strlen("elm.text.2") && strncmp(part, "elm.text.2", input_len) == 0 )
\r
139 txt = _gallery_get_menu_sub_elm_text(param);
\r
141 else if (input_len == strlen("elm.text") && strncmp(part, "elm.text", input_len) == 0 )
\r
143 txt = _gallery_get_menu_elm_text(param);
\r
147 return strdup(txt);
\r
153 _gallery_expand_common_text_get(const char *part, void *data, gallery_main_menu_item_t mitem)
\r
155 gallery_retv_if(!part, NULL);
\r
157 int param = (int )data;
\r
161 input_len = strlen(part);
\r
163 if (input_len == strlen("elm.text") && strncmp(part, "elm.text", input_len) == 0 )
\r
167 case GALLERY_MAIN_MENU_TIME:
\r
168 txt = gallery_key_time_menu_get(param);
\r
176 return strdup(txt);
\r
183 _gallery_time_text_get(void *data, Evas_Object *obj, const char *part)
\r
185 gallery_retv_if(!part, NULL);
\r
187 return _gallery_expand_common_text_get(part, data, GALLERY_MAIN_MENU_TIME);
\r
191 static Evas_Object*
\r
192 _gallery_expand_common_icon_get(Evas_Object *obj, const char *part, int param, int radio_value, Evas_Object *radio_group)
\r
194 gallery_retv_if(!part, NULL);
\r
195 gallery_retv_if(!obj, NULL);
\r
197 if (strncmp(part, "elm.icon", strlen(part)) == 0 )
\r
199 Evas_Object *radio_btn = elm_radio_add(obj);
\r
200 evas_object_propagate_events_set(radio_btn, EINA_TRUE);
\r
201 elm_radio_state_value_set(radio_btn, param);
\r
202 elm_radio_group_add(radio_btn, radio_group);
\r
203 elm_radio_value_set(radio_group, radio_value);
\r
204 evas_object_show(radio_btn);
\r
212 static Evas_Object*
\r
213 _gallery_time_content_get(void *data, Evas_Object *obj, const char *part)
\r
215 gallery_retv_if(!part, NULL);
\r
217 struct ug_data *ugd = evas_object_data_get(obj, "ugd");
\r
218 gallery_retvm_if(!ugd, NULL, "INVALID param");
\r
220 int radio_value = 0;
\r
221 radio_value = _gallery_get_time_radio_value();
\r
223 return _gallery_expand_common_icon_get(obj, part, (int )data, radio_value, ugd->radio_group);
\r
227 _gallery_genlist_icon_cb(void *data, Evas_Object *obj, void *event_info)
\r
229 gallery_ret_if(!data);
\r
230 struct ug_data *ugd = evas_object_data_get(obj, "ugd");
\r
233 int index = (int )data;
\r
235 if (index == GALLERY_MAIN_MENU_REPEAT)
\r
237 gallery_key_init_repeat_state(&state);
\r
239 if (gallery_key_set_repeat_state(!state))
\r
241 gallery_key_text_popup(ugd,SGUG_TR_FAILED);
\r
244 else if(index == GALLERY_MAIN_MENU_SHUFFLE)
\r
246 gallery_key_init_shuffle_state(&state);
\r
248 if(gallery_key_set_shuffle_state(!state))
\r
250 gallery_key_text_popup(ugd,SGUG_TR_FAILED);
\r
256 static Evas_Object *_gallery_create_check(Evas_Object *obj, struct ug_data *ugd, int index, Init_State_Func func, int *state)
\r
258 gallery_retvm_if(!obj, NULL, "obj is NULL");
\r
259 gallery_retvm_if(!ugd, NULL, "ugd is NULL");
\r
260 gallery_retvm_if(!state, NULL, "state is NULL");
\r
265 Evas_Object *check = NULL;
\r
266 check = elm_check_add(obj);
\r
267 evas_object_data_set(check, "ugd", ugd);
\r
268 elm_check_state_set( check, (bool)*state);
\r
269 elm_object_style_set(check, "on&off");
\r
270 evas_object_propagate_events_set(check, EINA_FALSE);
\r
271 evas_object_smart_callback_add(check, "changed", _gallery_genlist_icon_cb, (void *)index);
\r
276 static Evas_Object*
\r
277 _gallery_genlist_icon_get(void *data, Evas_Object *obj, const char *part)
\r
279 gallery_retv_if(!data, NULL);
\r
280 gallery_retv_if(!part, NULL);
\r
282 struct ug_data *ugd = NULL;
\r
284 ugd = evas_object_data_get(obj, "ugd");
\r
285 gallery_retvm_if(!ugd, NULL, "INVALID param");
\r
287 int index = (int )data;
\r
288 Evas_Object *check = NULL;
\r
290 if (strncmp(part, "elm.icon", strlen(part)) == 0)
\r
292 if (index == GALLERY_MAIN_MENU_REPEAT)
\r
294 check = _gallery_create_check(obj, ugd, index, gallery_key_init_repeat_state, &ugd->repeat_state);
\r
295 ugd->repeat_btn = check;
\r
297 else if(index == GALLERY_MAIN_MENU_SHUFFLE)
\r
299 check = _gallery_create_check(obj, ugd, index, gallery_key_init_shuffle_state, &ugd->shuffle_state);
\r
300 ugd->shuffle_btn = check;
\r
309 _gallery_time_select_cb(void *data, Evas_Object *obj, void *event_info)
\r
311 struct ug_data *ugd = evas_object_data_get(obj, "ugd");
\r
312 gallery_ret_if(!ugd);
\r
314 int param = (int )data;
\r
315 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
\r
317 int index = GALLERY_MAIN_MENU_TIME;
\r
319 elm_genlist_item_selected_set(item, EINA_FALSE);
\r
321 if(gallery_key_set_current_time(gallery_key_get_time_vconf_value(param)))
\r
323 gallery_key_text_popup(ugd,SGUG_TR_FAILED);
\r
326 elm_radio_value_set(ugd->radio_group, param);
\r
327 elm_genlist_item_update(ugd->gl_it[index]);
\r
332 _gallery_genlist_con(void *data, Evas_Object *obj, void *event_info)
\r
334 gallery_ret_if(!event_info);
\r
336 Elm_Object_Item *item = event_info;
\r
337 elm_genlist_item_subitems_clear(item);
\r
341 _gallery_genlist_time_select_cb(void *data, Evas_Object *obj, void *event_info)
\r
343 struct ug_data *ugd = evas_object_data_get(obj, "ugd");
\r
344 gallery_ret_if(!ugd);
\r
347 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
\r
349 elm_genlist_item_selected_set(item, EINA_FALSE);
\r
351 Evas_Object *gl = elm_object_item_widget_get(item);
\r
353 ugd->check_time_itc.item_style = "dialogue/1text.1icon/expandable2";
\r
354 ugd->check_time_itc.func.text_get = _gallery_time_text_get;
\r
355 ugd->check_time_itc.func.content_get = _gallery_time_content_get;
\r
356 ugd->check_time_itc.func.state_get = NULL;
\r
357 ugd->check_time_itc.func.del = NULL;
\r
359 ugd->radio_group = elm_radio_add(gl);
\r
360 for (index = 0; gallery_key_time_menu_get(index); index++)
\r
362 elm_genlist_item_append(gl,&ugd->check_time_itc, (void *)index, item,
\r
363 ELM_GENLIST_ITEM_NONE, _gallery_time_select_cb, (void *)index);
\r
369 _gallery_genlist_exp(void *data, Evas_Object *obj, void *event_info)
\r
371 gallery_ret_if(!obj);
\r
373 struct ug_data *ugd = evas_object_data_get(obj, "ugd");
\r
374 gallery_ret_if(!ugd);
\r
376 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
\r
378 elm_genlist_item_selected_set(item, EINA_FALSE);
\r
380 if(item == ugd->gl_it[GALLERY_MAIN_MENU_TIME])
\r
382 _gallery_genlist_time_select_cb(data, obj, event_info);
\r
387 _gallery_genlist_select_cb(void *data, Evas_Object *obj, void *event_info)
\r
389 struct ug_data *ugd = evas_object_data_get(obj, "ugd");
\r
390 gallery_ret_if(!ugd);
\r
392 int param = (int )data;
\r
394 int icon_state = 0;
\r
395 bool expand_state = false;
\r
397 Elm_Object_Item *item = (Elm_Object_Item *)event_info;
\r
399 elm_genlist_item_selected_set(item, EINA_FALSE);
\r
401 if(param == GALLERY_MAIN_MENU_TIME)
\r
403 expand_state = elm_genlist_item_expanded_get(item);
\r
404 elm_genlist_item_expanded_set(item, !expand_state);
\r
406 else if(param == GALLERY_MAIN_MENU_REPEAT)
\r
408 gallery_key_init_repeat_state(&icon_state);
\r
409 icon_state = !icon_state;
\r
411 if(gallery_key_set_repeat_state(icon_state))
\r
413 gallery_key_text_popup(ugd,SGUG_TR_FAILED);
\r
416 elm_check_state_set(ugd->repeat_btn, (bool)icon_state);
\r
418 else if(param == GALLERY_MAIN_MENU_SHUFFLE)
\r
420 gallery_key_init_shuffle_state(&icon_state);
\r
421 icon_state = !icon_state;
\r
423 if(gallery_key_set_shuffle_state(icon_state))
\r
425 gallery_key_text_popup(ugd,SGUG_TR_FAILED);
\r
428 elm_check_state_set(ugd->shuffle_btn,(bool)icon_state);
\r
432 static Evas_Object *
\r
433 _gallery_genlist_items_add (Evas_Object *parent, struct ug_data *ugd)
\r
435 Evas_Object *main_genlist;
\r
436 Elm_Object_Item *sep;
\r
440 main_genlist = elm_genlist_add(parent);
\r
442 elm_object_style_set(main_genlist, "dialogue");
\r
444 evas_object_size_hint_weight_set(main_genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
\r
445 evas_object_size_hint_align_set(main_genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
\r
447 ugd->genlist = main_genlist;
\r
449 ugd->title_itc.item_style = "dialogue/title";
\r
450 ugd->title_itc.func.text_get = _gallery_genlist_text_get;
\r
451 ugd->title_itc.func.content_get = NULL;
\r
452 ugd->title_itc.func.state_get = NULL;
\r
453 ugd->title_itc.func.del = NULL;
\r
455 ugd->expandable_itc.item_style = "dialogue/2text.3/expandable";
\r
456 ugd->expandable_itc.func.text_get = _gallery_genlist_text_get;
\r
457 ugd->expandable_itc.func.content_get = NULL;
\r
458 ugd->expandable_itc.func.state_get = NULL;
\r
459 ugd->expandable_itc.func.del = NULL;
\r
461 ugd->txt_icon_itc.item_style = "dialogue/1text.1icon";
\r
462 ugd->txt_icon_itc.func.text_get = _gallery_genlist_text_get;
\r
463 ugd->txt_icon_itc.func.content_get = _gallery_genlist_icon_get;
\r
464 ugd->txt_icon_itc.func.state_get = NULL;
\r
465 ugd->txt_icon_itc.func.del = NULL;
\r
467 ugd->seperator_itc.item_style = "grouptitle.dialogue.seperator";
\r
468 ugd->seperator_itc.func.text_get = NULL;
\r
469 ugd->seperator_itc.func.content_get = NULL;
\r
470 ugd->seperator_itc.func.state_get = NULL;
\r
471 ugd->seperator_itc.func.del = NULL;
\r
473 ugd->seperator_end_itc.item_style = "dialogue/separator/end";
\r
474 ugd->seperator_end_itc.func.text_get = NULL;
\r
475 ugd->seperator_end_itc.func.content_get = NULL;
\r
476 ugd->seperator_end_itc.func.state_get = NULL;
\r
477 ugd->seperator_end_itc.func.del = NULL;
\r
479 sep = elm_genlist_item_append(main_genlist, &ugd->seperator_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
\r
480 elm_genlist_item_select_mode_set(sep, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
\r
482 for (index = GALLERY_MAIN_MENU_TITLE; index < GALLERY_MAIN_MENU_ITEM_MAX; index++)
\r
484 //expandable genlist
\r
485 if (index == GALLERY_MAIN_MENU_TIME)
\r
487 ugd->gl_it[index] = elm_genlist_item_append(main_genlist, &ugd->expandable_itc,
\r
488 (void *)index, NULL,
\r
489 ELM_GENLIST_ITEM_TREE,
\r
490 _gallery_genlist_select_cb,
\r
493 // repeat&shuffle 1txt .1icon
\r
494 else if (index == GALLERY_MAIN_MENU_REPEAT ||
\r
495 index == GALLERY_MAIN_MENU_SHUFFLE)
\r
497 ugd->gl_it[index] = elm_genlist_item_append(main_genlist, &ugd->txt_icon_itc,
\r
498 (void *)index, NULL,
\r
499 ELM_GENLIST_ITEM_NONE,
\r
500 _gallery_genlist_select_cb,
\r
505 sep = elm_genlist_item_append(main_genlist, &ugd->seperator_end_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
\r
506 elm_genlist_item_select_mode_set(sep, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
\r
508 evas_object_smart_callback_add(main_genlist, "expanded", _gallery_genlist_exp, ugd);
\r
509 evas_object_smart_callback_add(main_genlist, "contracted", _gallery_genlist_con, ugd);
\r
511 return main_genlist;
\r
515 static Evas_Object *
\r
516 _gallery_create_fullview(Evas_Object *parent, struct ug_data *ugd)
\r
518 gallery_retv_if(!parent, NULL);
\r
521 base = elm_layout_add(parent);
\r
522 gallery_retv_if( base == NULL, NULL );
\r
524 elm_layout_theme_set(base, "layout", "application", "default");
\r
525 edje_object_signal_emit(_EDJ(base), "elm,state,show,indicator", "elm");
\r
526 elm_object_part_content_set(base, "elm.swallow.bg", ugd->bg);
\r
531 static Evas_Object*
\r
532 _gallery_create_naviframe(Evas_Object* parent)
\r
534 gallery_retv_if(!parent, NULL);
\r
536 Evas_Object *naviframe = NULL;
\r
537 naviframe = elm_naviframe_add( parent );
\r
538 elm_object_part_content_set( parent, "elm.swallow.content", naviframe );
\r
539 evas_object_show(naviframe);
\r
544 static Evas_Object *_gallery_create_bg(Evas_Object *parent)
\r
546 Evas_Object *bg = elm_bg_add(parent);
\r
547 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
\r
548 elm_win_resize_object_add(parent, bg);
\r
549 evas_object_show(bg);
\r
555 _on_create(ui_gadget_h ug, enum ug_mode mode, service_h data, void *priv)
\r
557 gallery_retvm_if(!ug, NULL, "ug is NULL, check it !!");
\r
558 gallery_retvm_if(!priv, NULL, "priv is NULL, check it !!");
\r
560 Evas_Object *parent = NULL;
\r
561 struct ug_data *ugd = NULL;
\r
563 ugd = (struct ug_data *)priv;
\r
566 /* Bind text domain for internalization */
\r
567 bindtextdomain("ug-setting-gallery-efl" , "/opt/ug/res/locale");
\r
569 parent = (Evas_Object *)ug_get_parent_layout(ug);
\r
570 gallery_retvm_if(parent == NULL, NULL, "parent layout is NULL");
\r
572 ugd->bg = _gallery_create_bg(parent);
\r
574 if (mode == UG_MODE_FULLVIEW)
\r
576 ugd->main_layout = _gallery_create_fullview(parent, ugd);
\r
580 ugd->main_layout = NULL;
\r
583 if(ugd->main_layout)
\r
585 ugd->naviframe = _gallery_create_naviframe(ugd->main_layout);
\r
586 evas_object_data_set(ugd->naviframe, "ugd", ugd);
\r
589 ugd->genlist = _gallery_genlist_items_add(ugd->naviframe,ugd);
\r
591 evas_object_data_set(ugd->genlist, "ugd", ugd);
\r
593 ugd->backbtn = elm_button_add(ugd->naviframe);
\r
594 evas_object_smart_callback_add(ugd->backbtn, "clicked", _gallery_quit_cb, ugd);
\r
595 elm_naviframe_item_push(ugd->naviframe, SGUG_TR_GALLERY, ugd->backbtn,
\r
596 NULL, ugd->genlist, NULL);
\r
597 elm_object_style_set(ugd->backbtn, "naviframe/end_btn/default");
\r
599 evas_object_show(ugd->main_layout);
\r
601 return ugd->main_layout;
\r
605 _on_message(ui_gadget_h ug, service_h msg, service_h data, void *priv)
\r
610 _on_event(ui_gadget_h ug, enum ug_event event, service_h data, void *priv)
\r
612 //struct ug_data *ugd = (struct ug_data *)priv;
\r
615 case UG_EVENT_LOW_MEMORY:
\r
617 case UG_EVENT_LOW_BATTERY:
\r
619 case UG_EVENT_LANG_CHANGE:
\r
621 case UG_EVENT_ROTATE_PORTRAIT:
\r
623 case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
\r
625 case UG_EVENT_ROTATE_LANDSCAPE:
\r
627 case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
\r
635 _on_start(ui_gadget_h ug, service_h data, void *priv)
\r
640 _on_pause(ui_gadget_h ug, service_h data, void *priv)
\r
646 _on_resume(ui_gadget_h ug, service_h data, void *priv)
\r
652 _on_destroy(ui_gadget_h ug, service_h data, void *priv)
\r
654 struct ug_data *ugd;
\r
656 gallery_retm_if(!ug, "ug is NULL, check it !!");
\r
657 gallery_retm_if(!priv, "priv is NULL, check it !!");
\r
660 if(ugd->main_layout)
\r
662 evas_object_del(ugd->main_layout);
\r
663 ugd->main_layout = NULL;
\r
668 _on_key_event(ui_gadget_h ug, enum ug_key_event event, service_h data, void *priv)
\r
674 UG_MODULE_INIT(struct ug_module_ops *ops)
\r
676 gallery_retvm_if(!ops, -1, "ops is NULL");
\r
678 struct ug_data *ugd = NULL;
\r
679 ugd = calloc(1, sizeof(struct ug_data));
\r
680 gallery_retvm_if(!ugd, -1, "ugd is NULL");
\r
682 ops->create = _on_create;
\r
683 ops->start = _on_start;
\r
684 ops->pause = _on_pause;
\r
685 ops->resume = _on_resume;
\r
686 ops->destroy = _on_destroy;
\r
687 ops->message = _on_message;
\r
688 ops->key_event = _on_key_event;
\r
689 ops->event = _on_event;
\r
691 ops->opt = UG_OPT_INDICATOR_PORTRAIT_ONLY;
\r
696 UG_MODULE_API int setting_plugin_reset(service_h data, void *priv)
\r
698 gallery_info("Reset the settings start");
\r
701 ret += gallery_key_set_current_time(DEFAULT_TIMER);
\r
702 ret += gallery_key_set_repeat_state(DEFAULT_REPEAT);
\r
703 ret += gallery_key_set_shuffle_state(DEFAULT_SHUFFLE);
\r
705 gallery_info("Finished");
\r
711 UG_MODULE_EXIT(struct ug_module_ops *ops)
\r
713 gallery_retm_if(!ops, "ops is NULL");
\r
715 struct ug_data *ugd;
\r