Tizen 2.0 Release
[apps/home/settings.git] / setting-menuscreen / src / setting-menuscreen.c
1 /*
2  * setting
3  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
4  *
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
8  *
9  *     http://floralicense.org/license/
10  *
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.
16  */
17 #include <setting-menuscreen.h>
18 #include <Ecore_X.h>
19
20 #ifndef UG_MODULE_API
21 #define UG_MODULE_API __attribute__ ((visibility("default")))
22 #endif
23
24 setting_view *__get_menuscreen_view_to_load(service_h service)
25 {
26         SETTING_TRACE_BEGIN;
27         //setting_retvm_if(NULL == data, NULL, "NULL == data");
28         return &setting_view_menuscreen_main;
29 }
30
31 Evas_Object *__get_menuscreen_layout_to_return(service_h service, void *priv)
32 {
33         SETTING_TRACE_BEGIN;
34         SettingMenuscreenUG *menuscreenUG = priv;
35         return menuscreenUG->ly_main;
36 }
37
38 static void setting_menuscreen_ug_cb_resize(void *data, Evas *e,
39                                          Evas_Object *obj, void *event_info)
40 {
41         SettingMenuscreenUG *ad = (SettingMenuscreenUG *) data;
42         /* setting_view_update(&setting_view_about_main, ad); */
43         setting_view_update(ad->view_to_load, ad);
44 }
45
46 static void *setting_menuscreen_ug_on_create(ui_gadget_h ug,
47                                           enum ug_mode mode, service_h service,
48                                           void *priv)
49 {
50         setting_retvm_if((!priv), NULL, "!priv");
51
52         SettingMenuscreenUG *menuscreenUG = priv;
53         menuscreenUG->ug = ug;
54
55         setting_set_i18n(SETTING_PACKAGE, SETTING_LOCALEDIR);
56
57         menuscreenUG->win_main_layout = (Evas_Object *) ug_get_parent_layout(ug);
58         menuscreenUG->win_get = (Evas_Object *) ug_get_window();
59
60         evas_object_show(menuscreenUG->win_main_layout);
61         menuscreenUG->evas = evas_object_evas_get(menuscreenUG->win_main_layout);
62
63         setting_retvm_if(menuscreenUG->win_main_layout == NULL, NULL, "cannot get main window ");
64
65         /* register view node table */
66         setting_view_node_table_intialize();
67         setting_view_node_table_register(&setting_view_menuscreen_main, NULL);
68         setting_view_node_table_register(&setting_view_menuscreen_password, &setting_view_menuscreen_main);
69
70         //setting_create_Gendial_itc("dialogue/1text.1icon.2", &(menuscreenUG->itc_1text_1icon));
71         setting_create_Gendial_itc("dialogue/1text.1icon.2", &(menuscreenUG->itc_1text_1icon_2));
72
73         menuscreenUG->itc_seperator.item_style = "dialogue/separator";
74         menuscreenUG->itc_seperator.func.text_get = NULL;
75         menuscreenUG->itc_seperator.func.content_get = NULL;
76         menuscreenUG->itc_seperator.func.state_get = NULL;
77         menuscreenUG->itc_seperator.func.del = NULL;
78
79
80         setting_create_Gendial_itc("dialogue/1text", &(menuscreenUG->itc_1text));
81
82         /*  creating a view. */
83         menuscreenUG->view_to_load = __get_menuscreen_view_to_load(service);
84         setting_retvm_if(NULL == menuscreenUG->view_to_load, NULL, "NULL == menuscreenUG->view_to_load");
85         setting_view_node_set_cur_view(menuscreenUG->view_to_load);
86         setting_view_create(menuscreenUG->view_to_load, (void *)menuscreenUG);
87         evas_object_event_callback_add(menuscreenUG->win_main_layout,EVAS_CALLBACK_RESIZE, setting_menuscreen_ug_cb_resize, menuscreenUG);
88         return __get_menuscreen_layout_to_return(service, menuscreenUG);
89 }
90
91 static void setting_menuscreen_ug_on_start(ui_gadget_h ug, service_h service,
92                                         void *priv)
93 {
94 }
95
96 static void setting_menuscreen_ug_on_pause(ui_gadget_h ug, service_h service,
97                                         void *priv)
98 {
99 }
100
101 static void setting_menuscreen_ug_on_resume(ui_gadget_h ug, service_h service,
102                                          void *priv)
103 {
104 }
105
106
107 static void _clear_menuscreen_list(Eina_List *menu_screen_list)
108 {
109         SETTING_TRACE_BEGIN;
110     Eina_List *elist = NULL;
111     ug_menuscreen_info* pnode = NULL;
112
113     EINA_LIST_FOREACH( menu_screen_list, elist, pnode ) {
114         menu_screen_list = eina_list_remove(menu_screen_list, pnode);
115     }
116     eina_list_free( menu_screen_list );
117 }
118
119 static void setting_menuscreen_ug_on_destroy(ui_gadget_h ug, service_h service,
120                                           void *priv)
121 {
122         SETTING_TRACE_BEGIN;
123         setting_retm_if((!priv), "!priv");
124         SettingMenuscreenUG *menuscreenUG = priv;
125
126         evas_object_event_callback_del(menuscreenUG->win_main_layout, EVAS_CALLBACK_RESIZE, setting_menuscreen_ug_cb_resize);   /* fix flash issue for gallery */
127         menuscreenUG->ug = ug;
128
129     if (!ug || !priv)
130         return;
131
132     if(menuscreenUG->menuscreen_list) {
133         _clear_menuscreen_list( menuscreenUG->menuscreen_list);
134         menuscreenUG->menuscreen_list = NULL;
135     }
136
137         /*  called when this shared gadget is terminated. similar with app_exit */
138         if (&setting_view_menuscreen_main == menuscreenUG->view_to_load) {
139                 setting_view_destroy(&setting_view_menuscreen_main, menuscreenUG);
140         }
141
142         if (NULL != ug_get_layout(menuscreenUG->ug)) {
143                 evas_object_hide((Evas_Object *) ug_get_layout(menuscreenUG->ug));
144                 evas_object_del((Evas_Object *) ug_get_layout(menuscreenUG->ug));
145         }
146
147         SETTING_TRACE_END;
148 }
149
150 static void setting_menuscreen_ug_on_message(ui_gadget_h ug, service_h msg,
151                                           service_h service, void *priv)
152 {
153         SETTING_TRACE_BEGIN;
154 }
155
156 static void setting_menuscreen_ug_on_event(ui_gadget_h ug,
157                                         enum ug_event event, service_h service,
158                                         void *priv)
159 {
160         SETTING_TRACE_BEGIN;
161         switch (event) {
162         case UG_EVENT_LOW_MEMORY:
163                 break;
164         case UG_EVENT_LOW_BATTERY:
165                 break;
166         case UG_EVENT_LANG_CHANGE:
167                 break;
168         case UG_EVENT_ROTATE_PORTRAIT:
169                 break;
170         case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
171                 break;
172         case UG_EVENT_ROTATE_LANDSCAPE:
173                 break;
174         case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
175                 break;
176         case UG_EVENT_REGION_CHANGE:
177                 break;
178         default:
179                 break;
180         }
181 }
182
183 static void setting_menuscreen_ug_on_key_event(ui_gadget_h ug,
184                                             enum ug_key_event event,
185                                             service_h service, void *priv)
186 {
187         SETTING_TRACE_BEGIN;
188         SettingMenuscreenUG *ad = (SettingMenuscreenUG *) priv;
189
190         switch (event) {
191         case UG_KEY_EVENT_END:
192                 {
193                         if (elm_naviframe_top_item_get(ad->navi_bar) ==
194                            elm_naviframe_bottom_item_get(ad->navi_bar)) {
195                                 ug_destroy_me(ug);
196                         } else {
197                                 /* elm_naviframe_item_pop(ad->navi_bar); */
198                                 setting_view_cb_at_endKey(ad);
199                         }
200                 }
201                 break;
202         default:
203                 break;
204         }
205 }
206
207 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
208 {
209         SETTING_TRACE_BEGIN;
210         SettingMenuscreenUG *menuscreenUG = calloc(1, sizeof(SettingMenuscreenUG));
211         setting_retvm_if(!menuscreenUG, -1, "Create SettingMenuscreenUG obj failed");
212
213         ops->create = setting_menuscreen_ug_on_create;
214         ops->start = setting_menuscreen_ug_on_start;
215         ops->pause = setting_menuscreen_ug_on_pause;
216         ops->resume = setting_menuscreen_ug_on_resume;
217         ops->destroy = setting_menuscreen_ug_on_destroy;
218         ops->message = setting_menuscreen_ug_on_message;
219         ops->event = setting_menuscreen_ug_on_event;
220         ops->key_event = setting_menuscreen_ug_on_key_event;
221         ops->priv = menuscreenUG;
222         ops->opt = UG_OPT_INDICATOR_ENABLE;
223
224         return 0;
225 }
226
227 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
228 {
229         SETTING_TRACE_BEGIN;
230         struct SettingMenuscreenUG *menuscreenUG;
231         setting_retm_if(!ops, "ops == NULL");
232
233         menuscreenUG = ops->priv;
234         if (menuscreenUG) {
235                 FREE(menuscreenUG);
236         }
237 }
238
239 /* ***************************************************
240  *
241  *general func
242  *
243  ***************************************************/
244
245 void setting_menuscreen_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode,
246                                   void *priv)
247 {
248         SettingMenuscreenUG *ad = (SettingMenuscreenUG *) priv;
249         Evas_Object *base;
250
251         if (!priv)
252                 return;
253         SETTING_TRACE_BEGIN;
254
255         base = (Evas_Object *) ug_get_layout(ug);
256         if (!base)
257                 return;
258
259         switch (mode) {
260         case UG_MODE_FULLVIEW:
261                 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
262                                                  EVAS_HINT_EXPAND);
263                 //elm_win_resize_object_add(ad->win_get, base);
264                 evas_object_show(base);
265                 break;
266         default:
267                 break;
268         }
269
270         SETTING_TRACE_END;
271 }
272
273
274 /*****/
275 UG_MODULE_API int setting_plugin_reset(service_h service, void *priv)
276 {
277         SETTING_TRACE_BEGIN;
278         return 0;
279 }
280
281 /*****/