1 #include <Elementary.h>
2 #include <system_settings.h>
13 #include "main_view.h"
17 #define _EDJ(o) elm_layout_edje_get(o)
18 const char *const DATA_KEY_CITY = "city";
20 const char *const ITEM_EDJE = "item.edj";
22 void _text_set_here_time(Evas_Object *item, const char *part)
24 char *timezone_str = NULL;
25 struct tm *local_time = NULL;
27 int ret = SYSTEM_SETTINGS_ERROR_NONE;
29 char time_result[PATH_LEN] = {0, };
34 local_time = localtime(&t);
37 ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_TIMEZONE, &timezone_str);
38 if (ret != SYSTEM_SETTINGS_ERROR_NONE)
39 _E("cannot get the timezone string");
44 if (local_time->tm_gmtoff >= 0)
45 snprintf(time_result, sizeof(time_result), "%s, +%ld", timezone_str, local_time->tm_gmtoff / 3600);
47 snprintf(time_result, sizeof(time_result), "%s, %ld", timezone_str, local_time->tm_gmtoff / 3600);
51 elm_object_part_text_set(item, part, timezone_str);
54 static void _item_typing_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
56 item_destroy_typing(obj);
59 static void _item_typing_down_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
61 _D("An item is down");
64 static void _item_typing_up_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
66 Evas_Object *item = obj;
67 Evas_Object *selecting_item = NULL;
68 main_view_s *main_view_info = data;
73 ret_if(!main_view_info);
74 ret_if(!main_view_info->selected_scroller);
76 _D("An item is selected");
78 count = scroller_count_item(main_view_info->selected_scroller);
79 if (count >= MAXIMUM_SELECTED_CITY) {
80 Evas_Object *popup = NULL;
81 _D("Cities selected are limited.");
82 popup = popup_create_text(main_view_info->main_view, "Maximum number of cities reached");
83 elm_object_part_content_set(main_view_info->main_view, "popup", popup);
85 } else if (count > 0) {
86 elm_object_signal_emit(main_view_info->main_view, "momentic,state,add_description,hide", "");
88 /* We need to move this to the item_selecting */
89 elm_object_signal_emit(main_view_info->main_view, "momentic,state,add_description,show", "");
93 elm_object_signal_emit(main_view_info->main_view, "momentic,state,next_btn,show", "");
96 city = (int) evas_object_data_get(item, DATA_KEY_CITY);
97 selecting_item = item_create_selecting(main_view_info->selected_scroller, city, 0);
98 ret_if(!selecting_item);
100 scroller_append_item(main_view_info->selected_scroller, selecting_item);
103 Evas_Object *item_create_typing(Evas_Object *parent, int city, main_view_s *main_view_info)
105 Evas_Object *item = NULL;
106 city_s *city_info = NULL;
109 char full_path[PATH_LEN] = {0, };
110 char city_str[PATH_LEN] = {0, };
112 retv_if(!parent, NULL);
114 path = app_get_resource_path();
115 retv_if(!path, NULL);
117 snprintf(full_path, sizeof(full_path), "%s/edje/%s", path, ITEM_EDJE);
120 item = elm_layout_add(parent);
121 retv_if(!item, NULL);
123 elm_layout_file_set(item, full_path, "item_typing");
125 evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
126 evas_object_size_hint_align_set(item, EVAS_HINT_FILL, EVAS_HINT_FILL);
127 evas_object_data_set(item, DATA_KEY_CITY, (void *) city);
128 evas_object_event_callback_add(item, EVAS_CALLBACK_DEL, _item_typing_del_cb, NULL);
129 elm_object_signal_callback_add(item, "down", "item", _item_typing_down_cb, NULL);
130 elm_object_signal_callback_add(item, "up", "item", _item_typing_up_cb, main_view_info);
132 evas_object_show(item);
134 city_info = city_get();
136 _E("Critical, no city information");
137 evas_object_del(item);
141 snprintf(city_str, sizeof(city_str), "%s, %s", city_info[city].name, city_info[city].nation);
142 elm_object_part_text_set(item, "city", city_str);
147 void item_destroy_typing(Evas_Object *item)
151 evas_object_event_callback_del(item, EVAS_CALLBACK_DEL, _item_typing_del_cb);
152 elm_object_signal_callback_del(item, "down", "item", _item_typing_down_cb);
153 elm_object_signal_callback_del(item, "up", "item", _item_typing_up_cb);
155 evas_object_data_del(item, DATA_KEY_CITY);
156 evas_object_del(item);
159 static void _item_selecting_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
161 item_destroy_selecting(obj);
164 static void _delete_down_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
166 _D("Delete button is down");
169 static void _delete_up_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
171 Evas_Object *item= obj;
175 item_destroy_selecting(item);
178 Evas_Object *item_create_selecting(Evas_Object *parent, int city, int color)
180 Evas_Object *item = NULL;
181 city_s *city_info = NULL;
182 selecting_info_s *selecting_info = NULL;
185 char full_path[PATH_LEN] = {0, };
186 char city_str[PATH_LEN] = {0, };
187 char color_str[16] = {0, };
189 retv_if(!parent, NULL);
191 path = app_get_resource_path();
192 retv_if(!path, NULL);
194 snprintf(full_path, sizeof(full_path), "%s/edje/%s", path, ITEM_EDJE);
197 selecting_info = calloc(1, sizeof(selecting_info_s));
198 retv_if(!selecting_info, NULL);
199 selecting_info->city = city;
200 selecting_info->color = color;
202 item = elm_layout_add(parent);
203 retv_if(!item, NULL);
205 elm_layout_file_set(item, full_path, "item_selecting");
207 evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
208 evas_object_size_hint_align_set(item, EVAS_HINT_FILL, EVAS_HINT_FILL);
209 evas_object_data_set(item, DATA_KEY_SELECTING, selecting_info);
210 evas_object_event_callback_add(item, EVAS_CALLBACK_DEL, _item_selecting_del_cb, NULL);
211 elm_object_signal_callback_add(item, "delete,down", "item", _delete_down_cb, NULL);
212 elm_object_signal_callback_add(item, "delete,up", "item", _delete_up_cb, NULL);
213 evas_object_show(item);
215 city_info = city_get();
216 goto_if(!city_info, error);
218 snprintf(city_str, sizeof(city_str), "%s, %s", city_info[city].name, city_info[city].nation);
219 elm_object_part_text_set(item, "city", city_str);
222 snprintf(color_str, sizeof(color_str), "%d", color);
223 elm_object_signal_emit(item, color_str, "mark");
230 evas_object_del(item);
233 free(selecting_info);
238 void item_destroy_selecting(Evas_Object *item)
240 selecting_info_s *selecting_info = NULL;
244 selecting_info = evas_object_data_del(item, DATA_KEY_SELECTING);
245 free(selecting_info);
247 evas_object_event_callback_del(item, EVAS_CALLBACK_DEL, _item_selecting_del_cb);
248 elm_object_signal_callback_del(item, "delete,down", "item", _delete_down_cb);
249 elm_object_signal_callback_del(item, "delete,up", "item", _delete_up_cb);
251 evas_object_del(item);
254 void _text_set_local_time(Evas_Object *item, const char *part, int city, struct tm *global_time)
256 city_s *city_info = NULL;
257 int hour = global_time->tm_hour;
258 int minute = global_time->tm_min;
260 char time_result[PATH_LEN] = {0, };
265 city_info = city_get();
268 if (((double) ((int) city_info[city].timezone)) < city_info[city].timezone) {
276 snprintf(time_result, sizeof(time_result), "%d:%d", hour, minute);
277 elm_object_part_text_set(item, part, time_result);
280 static void _resize_graph_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
282 result_info_s *result_info = NULL;
286 result_info = evas_object_data_get(obj, DATA_KEY_RESULT);
287 ret_if(!result_info);
289 edje_object_part_geometry_get(_EDJ(obj), "graph_base", &x, &y, &w, &h);
291 if (result_info->start > result_info->end) {
292 evas_object_move(result_info->rect2, x, y);
293 evas_object_resize(result_info->rect2, w / 10.0, h);
294 evas_object_color_set(result_info->rect2, 0, 0, 0, 255);
295 evas_object_show(result_info->rect2);
297 evas_object_hide(result_info->rect2);
300 start_x = (result_info->start / 24.0f) * w + x;
302 evas_object_move(result_info->rect1, start_x, y);
303 evas_object_resize(result_info->rect1, x + w - start_x, h);
304 evas_object_color_set(result_info->rect1, 0, 0, 0, 255);
305 evas_object_show(result_info->rect1);
308 static void _item_result_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
310 item_destroy_result(obj);
313 Evas_Object *item_create_result(Evas_Object *parent, int city, int color, int start, int end, struct tm *global_time)
315 Evas_Object *item = NULL;
316 city_s *city_info = NULL;
317 result_info_s *result_info = NULL;
321 char full_path[PATH_LEN] = {0, };
322 char city_str[PATH_LEN] = {0, };
323 char color_str[16] = {0, };
325 retv_if(!parent, NULL);
327 path = app_get_resource_path();
328 retv_if(!path, NULL);
330 snprintf(full_path, sizeof(full_path), "%s/edje/%s", path, ITEM_EDJE);
333 result_info = calloc(1, sizeof(result_info_s));
334 retv_if(!result_info, NULL);
336 item = elm_layout_add(parent);
337 goto_if(!item, error);
339 elm_layout_file_set(item, full_path, "item_result");
341 evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
342 evas_object_size_hint_align_set(item, EVAS_HINT_FILL, EVAS_HINT_FILL);
343 evas_object_data_set(item, DATA_KEY_RESULT, result_info);
344 evas_object_event_callback_add(item, EVAS_CALLBACK_DEL, _item_result_del_cb, NULL);
345 evas_object_event_callback_add(item, EVAS_CALLBACK_RESIZE, _resize_graph_cb, result_info);
346 evas_object_event_callback_add(item, EVAS_CALLBACK_MOVE, _resize_graph_cb, result_info);
347 evas_object_show(item);
349 city_info = city_get();
350 goto_if(!city_info, error);
352 snprintf(city_str, sizeof(city_str), "%s, %s", city_info[city].name, city_info[city].nation);
353 elm_object_part_text_set(item, "city", city_str);
355 snprintf(color_str, sizeof(color_str), "%d", color);
356 elm_object_signal_emit(item, color_str, "mark");
358 _text_set_local_time(item, "time", city, global_time);
360 e = evas_object_evas_get(item);
363 result_info->rect1 = evas_object_rectangle_add(e);
364 goto_if(!result_info->rect1, error);
366 result_info->rect2 = evas_object_rectangle_add(e);
367 goto_if(!result_info->rect2, error);
369 result_info->city = city;
370 result_info->start = start;
371 result_info->end = end;
377 if (result_info->rect1)
378 evas_object_del(result_info->rect1);
379 if (result_info->rect2)
380 evas_object_del(result_info->rect2);
385 evas_object_del(item);
391 void item_destroy_result(Evas_Object *item)
393 result_info_s *result_info = NULL;
397 evas_object_event_callback_del(item, EVAS_CALLBACK_DEL, _item_result_del_cb);
398 elm_object_signal_callback_del(item, "delete,down", "item", _delete_down_cb);
399 elm_object_signal_callback_del(item, "delete,up", "item", _delete_up_cb);
401 result_info = evas_object_data_del(item, DATA_KEY_RESULT);
403 if (result_info->rect1)
404 evas_object_del(result_info->rect1);
405 if (result_info->rect2)
406 evas_object_del(result_info->rect2);
410 evas_object_del(item);
413 static void _item_group_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
415 item_destroy_group(obj);
418 static void _item_group_down_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
420 _D("An item is down");
423 static void _item_group_up_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
425 Evas_Object *item = obj;
426 Evas_Object *selecting_item = NULL;
427 main_view_s *main_view_info = data;
432 ret_if(!main_view_info);
433 ret_if(!main_view_info->selected_scroller);
435 _D("An item is selected");
437 count = scroller_count_item(main_view_info->selected_scroller);
438 if (count >= MAXIMUM_SELECTED_CITY) {
439 Evas_Object *popup = NULL;
440 _D("Cities selected are limited.");
441 popup = popup_create_text(main_view_info->main_view, "Maximum number of cities reached");
442 elm_object_part_content_set(main_view_info->main_view, "popup", popup);
446 city = (int) evas_object_data_get(item, DATA_KEY_CITY);
447 selecting_item = item_create_selecting(main_view_info->selected_scroller, city, 0);
448 ret_if(!selecting_item);
450 scroller_append_item(main_view_info->selected_scroller, selecting_item);
453 Evas_Object *item_create_group(Evas_Object *parent, const char *title, main_view_s *main_view_info)
455 Evas_Object *item = NULL;
458 char full_path[PATH_LEN] = {0, };
460 retv_if(!parent, NULL);
462 path = app_get_resource_path();
463 retv_if(!path, NULL);
465 snprintf(full_path, sizeof(full_path), "%s/edje/%s", path, ITEM_EDJE);
468 item = elm_layout_add(parent);
469 retv_if(!item, NULL);
471 elm_layout_file_set(item, full_path, "item_group");
473 evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
474 evas_object_size_hint_align_set(item, EVAS_HINT_FILL, EVAS_HINT_FILL);
475 evas_object_event_callback_add(item, EVAS_CALLBACK_DEL, _item_group_del_cb, NULL);
476 elm_object_signal_callback_add(item, "down", "item", _item_group_down_cb, NULL);
477 elm_object_signal_callback_add(item, "up", "item", _item_group_up_cb, main_view_info);
479 evas_object_show(item);
481 elm_object_part_text_set(item, "city", title);
486 void item_destroy_group(Evas_Object *item)
490 evas_object_event_callback_del(item, EVAS_CALLBACK_DEL, _item_group_del_cb);
491 elm_object_signal_callback_del(item, "down", "item", _item_group_down_cb);
492 elm_object_signal_callback_del(item, "up", "item", _item_group_up_cb);
494 evas_object_del(item);