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-debug.h>
23 #include <ui-gadget.h>
24 #include <Elementary.h>
28 #include <appcore-efl.h>
29 #include <appcore-common.h>
34 #include <efl_assist.h>
35 #include <setting-common-general-func.h>
37 #define EXPORT_PUBLIC __attribute__ ((visibility ("default")))
40 typedef struct _support_display_appdata {
45 Evas_Object *win_main;
46 Evas_Object *navibar_main;
47 Evas_Object *ly_main; /**< seting view main */
48 app_control_h service;
49 Ecore_Event_Handler *event_handler;
50 } support_display_appdata;
53 * The function is called when Setting is terminated
55 static void support_display_app_terminate(void *data)
58 support_display_appdata *ad = data;
60 SETTING_TRACE("support_display_terminate!");
64 ecore_event_handler_del(ad->event_handler);
65 ad->event_handler = NULL;
69 evas_object_del(ad->ly_main);
74 evas_object_del(ad->win_main);
83 * The event process when win object is destroyed
85 static void support_display_del_win(void *data, Evas_Object *obj, void *event)
92 * To create a win object, the win is shared between the App and all its UGs
94 static Evas_Object *support_display_create_win(const char *name)
100 eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
104 elm_win_title_set(eo, name);
105 elm_win_borderless_set(eo, EINA_TRUE);
106 evas_object_smart_callback_add(eo, "delete,request",
107 support_display_del_win, NULL);
108 ecore_x_window_size_get(ecore_x_window_root_first_get(),
110 evas_object_resize(eo, w, h);
116 static Eina_Bool __key_press_cb(void *data, int type, void *event)
119 Evas_Event_Key_Down *ev = event;
122 return ECORE_CALLBACK_RENEW;
125 support_display_appdata *ad = data;
127 if(strcmp(ev->keyname, KEY_HOME) == 0)
129 setting_ug_destroy(ad->ug);
131 return ECORE_CALLBACK_RENEW;
135 * The function is called to create Setting view widgets
137 static bool support_display_app_create(void *data)
141 support_display_appdata *ad = data;
143 SETTING_TRACE("[TIME] 3. it taked %d msec from main to setting_display_app_create ", appcore_measure_time());
144 appcore_measure_start();
147 ad->win_main = support_display_create_win("org.tizen.setting.display");
148 if(ad->win_main == NULL)
150 SETTING_TRACE("Can't create window");
154 if(elm_win_wm_rotation_supported_get(ad->win_main))
156 int rots[4] = { 0, 90, 180, 270 };
157 elm_win_wm_rotation_available_rotations_set(ad->win_main, rots, 4);
160 UG_INIT_EFL(ad->win_main, UG_OPT_INDICATOR_ENABLE);
161 ad->evas = evas_object_evas_get(ad->win_main);
163 elm_win_indicator_mode_set(ad->win_main, ELM_WIN_INDICATOR_SHOW);
164 elm_win_indicator_opacity_set(ad->win_main, ELM_WIN_INDICATOR_OPAQUE);
167 Evas_Object *conform = elm_conformant_add(ad->win_main);
168 ad->ly_main = elm_layout_add(ad->win_main);
169 evas_object_size_hint_weight_set(ad->ly_main, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
170 elm_layout_theme_set(ad->ly_main, "layout", "application", "default");
173 Evas_Object *bg = elm_bg_add(ad->ly_main);
174 elm_object_style_set(bg, "group_list");
175 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
176 elm_object_part_content_set(ad->ly_main, "elm.swallow.bg", bg);
177 evas_object_show(bg);
180 Evas_Object *indicator_bg = elm_bg_add(conform);
181 elm_object_style_set(indicator_bg, "indicator/headerbg");
182 elm_object_part_content_set(conform, "elm.swallow.indicator_bg", indicator_bg);
183 evas_object_show(indicator_bg);
185 evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
186 evas_object_size_hint_align_set(conform, EVAS_HINT_FILL, EVAS_HINT_FILL);
187 elm_win_resize_object_add(ad->win_main, conform);
188 elm_object_content_set(conform, ad->ly_main);
189 evas_object_show(conform);
190 elm_win_conformant_set(ad->win_main, EINA_TRUE);
192 SETTING_TRACE("[TIME] 4. setting_main_app_create taked %d msec ", appcore_measure_time());
193 appcore_measure_start();
195 /* add event handler */
196 ad->event_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, __key_press_cb, ad);
202 * The function is called when Setting begins run in background from forground
204 static void support_display_app_pause(void *data)
207 support_display_appdata *ad = data;
216 * The function is called when Setting begins run in forground from background
218 static void support_display_app_resume(void *data)
221 support_display_appdata *ad = data;
227 void support_display_app_destroy_ug_cb(ui_gadget_h ug, void *priv)
229 support_display_appdata *ad = (support_display_appdata *) priv;
231 return; /* do nothing if ad is NULL */
233 elm_win_lower(ad->win_main);
236 setting_ug_destroy(ug);
241 void support_display_app_end_ug_cb(ui_gadget_h ug, void *priv)
245 support_display_appdata *ad = (support_display_appdata *) priv;
247 return; /* do nothing if ad is NULL */
248 support_display_app_terminate(ad);
251 void support_display_app_layout_ug_cb(ui_gadget_h ug, enum ug_mode mode,
259 base = (Evas_Object *) ug_get_layout(ug);
264 case UG_MODE_FULLVIEW:
265 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
267 ug_disable_effect(ug);
268 evas_object_show(base);
276 EXPORT_PUBLIC void update_lang(void)
281 lang = vconf_get_str(VCONFKEY_LANGSET);
283 setenv("LANG", lang, 1);
284 setenv("LC_MESSAGES", lang, 1);
285 r = setlocale(LC_ALL, "");
287 setlocale(LC_ALL, vconf_get_str(VCONFKEY_LANGSET));
293 EXPORT_PUBLIC void update_region(void)
297 region = vconf_get_str(VCONFKEY_REGIONFORMAT);
299 setenv("LC_CTYPE", region, 1);
300 setenv("LC_NUMERIC", region, 1);
301 setenv("LC_TIME", region, 1);
302 setenv("LC_COLLATE", region, 1);
303 setenv("LC_MONETARY", region, 1);
304 setenv("LC_PAPER", region, 1);
305 setenv("LC_NAME", region, 1);
306 setenv("LC_ADDRESS", region, 1);
307 setenv("LC_TELEPHONE", region, 1);
308 setenv("LC_MEASUREMENT", region, 1);
309 setenv("LC_IDENTIFICATION", region, 1);
314 static int __set_i18n(const char *domain, const char *dir)
317 if (domain == NULL) {
322 r = setlocale(LC_ALL, "");
323 /* if locale is not set properly, try again to set as language base */
325 r = setlocale(LC_ALL, vconf_get_str(VCONFKEY_LANGSET));
327 bindtextdomain(domain, dir);
332 int set_i18n(char* pkgname, char* localedir)
333 //int set_i18n(const char *domainname, const char *dirname)
340 return __set_i18n(pkgname, localedir);
344 * The function is called by app-fwk after app_create. It always do the process which cost much time.
346 static void support_display_app_reset(app_control_h service, void *data)
349 support_display_appdata *ad = data;
353 struct ug_cbs *cbs = (struct ug_cbs *)calloc(1, sizeof(struct ug_cbs));
356 support_display_app_terminate(ad);
360 cbs->layout_cb = support_display_app_layout_ug_cb;
361 cbs->result_cb = NULL;
362 cbs->destroy_cb = support_display_app_destroy_ug_cb;
363 cbs->end_cb = support_display_app_end_ug_cb;
364 cbs->priv = (void *)ad;
366 if(app_control_create(&svc))
369 support_display_app_terminate(ad);
372 app_control_add_extra_data(svc, "viewtype", "smartscreen");
373 ad->ug = setting_ug_create(NULL, "setting-display-efl", UG_MODE_FULLVIEW, svc, cbs);
375 app_control_destroy(svc);
378 evas_object_show(ad->ly_main);
382 support_display_app_terminate(ad);
389 evas_object_show(ad->win_main);
390 elm_win_activate(ad->win_main);
397 static void support_display_app_lang_changed(void *data)
400 support_display_appdata *ad = data;
403 lang = vconf_get_str(VCONFKEY_LANGSET);
406 elm_language_set((const char *)lang);
411 ug_send_event(UG_EVENT_LANG_CHANGE);
415 int main(int argc, char *argv[])
419 support_display_appdata ad;
421 app_event_callback_s ops = {
422 .create = support_display_app_create,
423 .terminate = support_display_app_terminate,
424 .pause = support_display_app_pause,
425 .resume = support_display_app_resume,
426 .app_control = support_display_app_reset,
428 .language_changed = support_display_app_lang_changed,
429 .region_format_changed = NULL,
430 .device_orientation = NULL,
433 memset(&ad, 0x00, sizeof(support_display_appdata));
435 r = app_efl_main(&argc, &argv, &ops, &ad);
436 SETTING_TRACE_DEBUG("r = %d", r);
440 SETTING_TRACE_ERROR("app_efl_main() returns -1");