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