2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.1 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #define UG_MODULE_API __attribute__ ((visibility("default")))
22 #include <Elementary.h>
23 #include <ui-gadget-module.h>
25 #include "worldclock.h"
26 #include "worldclock_dlog.h"
27 #include "ug_worldclock_efl.h"
28 #include "worldclock_add_view.h"
31 #define _(s) dgettext(PACKAGE, s)
34 #define S_(x) dgettext("sys_string", x)
43 static struct ug_data *g_ugd;
45 //Translation Effect Sample
46 //static void __ug_translation(Evas_Object* evas, Eina_Bool isCreate)
48 // Evas_Coord x, y, w, h;
49 // evas_object_geometry_get(evas, &x, &y, &w, &h);
51 // Elm_Transit *transit = elm_transit_add(evas);
53 // CLK_INFO("\n\tx(%d),y(%d),w(%d),h(%d)\n", x, y, w, h);
54 // //Step 1. Translate to left side.
55 // Elm_Effect *effect = NULL;
56 // if(EINA_TRUE == isCreate) {
57 // effect = elm_fx_translation_add(evas, x+w, y, x, y);
60 // effect = elm_fx_translation_add(evas, x, y, x+w, y);
62 // elm_transit_fx_insert(transit, effect);
63 // elm_transit_completion_callback_set(transit, NULL, NULL);
64 // elm_transit_run(transit, 0.5);
65 // elm_transit_del(transit);
69 * Callback func which should be called when exit from this ug.
71 * @param[in] data The data which used in this function
75 static void __ug_return_cb(void *data, Eina_Bool isReload)
78 struct ug_data *ugd = NULL;
79 Wcl_CitySet *cs = NULL;
80 service_h service = NULL;
85 cs = ugd->ad->return_data;
88 // create bundle as return value to ug caller
89 service_create(&service);
91 service_add_extra_data(service, "city", cs->city);
93 service_add_extra_data(service, "country", cs->country);
95 const char *timezone = cs->timezone;
96 if (timezone == strstr(timezone, "GMT")) {
99 service_add_extra_data(service, "timezone", timezone);
101 service_add_extra_data(service, "tzpath", cs->tz_path);
103 ("[Result] city: %s, country: %s, timezone: %s, tzpath: %s\n",
104 cs->city, cs->country, timezone, cs->tz_path);
106 ug_send_result(ugd->ug, service);
108 service_destroy(service);
111 ugd->ad->return_data = cs = NULL;
113 //__ug_translation(ugd->ad->ly_main, EINA_FALSE);
116 ug_destroy_me(g_ugd->ug);
124 * @param[in] parent The parent Evas_Object which main layout belong to
126 * @return NULL if an error occurred
127 * pointer to new main layout otherwise
129 static Evas_Object *__ug_create_main_layout(Evas_Object *parent)
132 Evas_Object *layout = NULL;
134 retv_if(parent == NULL, NULL);
136 layout = elm_layout_add(parent);
137 retvm_if(layout == NULL, NULL, "Failed elm_layout_add.\n");
139 elm_layout_theme_set(layout, "layout", "application", "default");
140 /*elm_layout_theme_set( layout, "standard", "window", "integration" ); */
141 evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
144 /*elm_win_resize_object_add( parent, layout); */
145 // show indicator & content
146 /*edje_object_signal_emit(_EDJ(layout), "elm,state,show,indicator", "elm"); */
147 /*edje_object_signal_emit(_EDJ(layout), "elm,state,show,content", "elm"); */
149 evas_object_show(layout);
155 Evas_Object *create_bg(Evas_Object *parent)
157 Evas_Object *bg = elm_bg_add(parent);
158 retvm_if(!bg, NULL, "bg null");
159 evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND,
161 evas_object_show(bg);
166 * Create navigation layout
168 * @param[in] parent The parent Evas_Object which navigation layout belong to
170 * @return NULL if an error occurred
171 * pointer to new navigation layout otherwise
173 static Evas_Object *__ug_create_navigation_layout(Evas_Object *parent)
176 Evas_Object *navi_bar = NULL;
178 retv_if(parent == NULL, NULL);
180 navi_bar = elm_naviframe_add(parent);
182 elm_object_part_content_set(parent, "elm.swallow.content", navi_bar);
183 // show navigationbar
184 evas_object_show(navi_bar);
190 static void *on_create(ui_gadget_h ug, enum ug_mode mode, service_h data,
194 Evas_Object *win = NULL;
195 struct ug_data *ugd = NULL;
196 struct appdata *ad = NULL;
197 char* caller_name = NULL;
199 retv_if(ug == NULL || priv == NULL, NULL);
204 win = (Evas_Object *)ug_get_window();
205 retv_if(win == NULL, NULL);
207 ad = (struct appdata *)malloc(sizeof(struct appdata));
208 retv_if(ad == NULL, NULL);
209 memset(ad, 0x0, sizeof(struct appdata));
213 ad->parent = ug_get_parent_layout(ug);
214 GOTO_ERROR_IF(!ad->parent);
217 service_get_extra_data(data, "caller", &caller_name);
221 if (caller_name && !strcmp("clock", caller_name) ) {
223 ad->caller = WCL_CALLER_IS_APP_IT_SELF;
226 elm_theme_extension_add(NULL, WCL_THEME_NAME);
229 ad->caller = WCL_CALLER_IS_UI_GADGET;
232 /* language setting */
233 bindtextdomain(PACKAGE, LOCALEDIR);
237 ad->ly_main = __ug_create_main_layout(ad->parent);
238 GOTO_ERROR_IF(ad->ly_main == NULL);
239 ad->bg = create_bg(ad->ly_main);
240 elm_object_part_content_set(ad->ly_main, "elm.swallow.bg", ad->bg);
243 ad->navi_bar = __ug_create_navigation_layout(ad->ly_main);
244 GOTO_ERROR_IF(ad->navi_bar == NULL);
247 //GOTO_ERROR_IF(EINA_FALSE == worldclock_ug_data_open_database());
249 // set selection flag
250 ad->selectionFlag = WCL_SELECT_IF_HAS_TZPATH;
251 // create add view for ug
252 worldclock_ugview_add(ad->navi_bar, ad, __ug_return_cb);
254 //__ug_translation(ad->ly_main, EINA_TRUE);
264 // reset navigation bar
266 evas_object_del(ad->navi_bar);
271 evas_object_del(ad->ly_main);
275 evas_object_del(ad->bg);
284 static void on_start(ui_gadget_h ug, service_h data, void *priv)
289 static void on_pause(ui_gadget_h ug, service_h data, void *priv)
294 static void on_resume(ui_gadget_h ug, service_h data, void *priv)
299 static void on_destroy(ui_gadget_h ug, service_h data, void *priv)
304 ret_if(!ug || !priv);
309 struct appdata *ad = ugd->ad;
310 worldclock_ugview_free(ad);
311 // reset navigation bar
313 evas_object_del(ad->navi_bar);
318 evas_object_del(ad->ly_main);
322 evas_object_del(ad->bg);
333 static void on_message(ui_gadget_h ug, service_h msg, service_h data,
338 static void on_event(ui_gadget_h ug, enum ug_event event, service_h data,
343 case UG_EVENT_LOW_MEMORY:
344 CLK_INFO("Event : UG_EVENT_LOW_MEMORY");
346 case UG_EVENT_LOW_BATTERY:
347 CLK_INFO("Event : UG_EVENT_LOW_BATTERY");
349 case UG_EVENT_LANG_CHANGE:
350 CLK_INFO("Event : UG_EVENT_LANG_CHANGE");
352 case UG_EVENT_ROTATE_PORTRAIT:
353 CLK_INFO("Event : UG_EVENT_ROTATE_PORTRAIT");
355 case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
356 CLK_INFO("Event : UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN");
358 case UG_EVENT_ROTATE_LANDSCAPE:
359 CLK_INFO("Event : UG_EVENT_ROTATE_LANDSCAPE");
361 case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
362 CLK_INFO("Event : UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN");
365 CLK_INFO("Event : %d", event);
371 static void on_key_event(ui_gadget_h ug, enum ug_key_event event,
372 service_h data, void *priv)
378 case UG_KEY_EVENT_END:
387 UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
394 ugd = calloc(1, sizeof(struct ug_data));
397 ops->create = on_create;
398 ops->start = on_start;
399 ops->pause = on_pause;
400 ops->resume = on_resume;
401 ops->destroy = on_destroy;
402 ops->message = on_message;
403 ops->event = on_event;
404 ops->key_event = on_key_event;
406 ops->opt = UG_OPT_INDICATOR_PORTRAIT_ONLY;
412 UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)