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->city_list);
76 _D("An item is selected");
78 if (scroller_is_scrolling(main_view_info->searchlist))
81 count = scroller_count_item(main_view_info->city_list);
82 if (count >= MAXIMUM_SELECTED_CITY) {
83 Evas_Object *popup = NULL;
84 _D("Cities selected are limited.");
85 popup = popup_create_text(main_view_info->main_view, "Maximum number of cities reached");
86 elm_object_part_content_set(main_view_info->main_view, "popup", popup);
88 } else if (count > 0) {
89 elm_object_signal_emit(main_view_info->main_view, "momentic,state,add_description,hide", "");
91 /* We need to move this to the item_selecting */
92 elm_object_signal_emit(main_view_info->main_view, "momentic,state,add_description,show", "");
96 elm_object_signal_emit(main_view_info->main_view, "momentic,state,next_btn,show", "");
99 city = (int) evas_object_data_get(item, DATA_KEY_CITY);
100 selecting_item = item_create_selecting(main_view_info->city_list, city, 0);
101 ret_if(!selecting_item);
103 scroller_append_item(main_view_info->city_list, selecting_item);
106 Evas_Object *item_create_typing(Evas_Object *parent, int city, main_view_s *main_view_info)
108 Evas_Object *item = NULL;
109 city_s *city_info = NULL;
112 char full_path[PATH_LEN] = {0, };
113 char city_str[PATH_LEN] = {0, };
115 retv_if(!parent, NULL);
117 path = app_get_resource_path();
118 retv_if(!path, NULL);
120 snprintf(full_path, sizeof(full_path), "%s/edje/%s", path, ITEM_EDJE);
123 item = elm_layout_add(parent);
124 retv_if(!item, NULL);
126 elm_layout_file_set(item, full_path, "item_typing");
128 evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
129 evas_object_size_hint_align_set(item, EVAS_HINT_FILL, EVAS_HINT_FILL);
130 evas_object_data_set(item, DATA_KEY_CITY, (void *) city);
131 evas_object_event_callback_add(item, EVAS_CALLBACK_DEL, _item_typing_del_cb, NULL);
132 elm_object_signal_callback_add(item, "down", "item", _item_typing_down_cb, NULL);
133 elm_object_signal_callback_add(item, "up", "item", _item_typing_up_cb, main_view_info);
135 evas_object_show(item);
137 city_info = city_get();
139 _E("Critical, no city information");
140 evas_object_del(item);
144 snprintf(city_str, sizeof(city_str), "%s, %s", city_info[city].name, city_info[city].nation);
145 elm_object_part_text_set(item, "city", city_str);
150 void item_destroy_typing(Evas_Object *item)
154 evas_object_event_callback_del(item, EVAS_CALLBACK_DEL, _item_typing_del_cb);
155 elm_object_signal_callback_del(item, "down", "item", _item_typing_down_cb);
156 elm_object_signal_callback_del(item, "up", "item", _item_typing_up_cb);
158 evas_object_data_del(item, DATA_KEY_CITY);
159 evas_object_del(item);
162 static void _item_selecting_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
164 item_destroy_selecting(obj);
167 static void _item_selecting_delete_down_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
169 _D("Delete button is down");
172 static void _item_selecting_delete_up_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
174 Evas_Object *item= obj;
177 _D("Delete button is up");
179 item_destroy_selecting(item);
182 Evas_Object *item_create_selecting(Evas_Object *parent, int city, int color)
184 Evas_Object *item = NULL;
185 city_s *city_info = NULL;
186 selecting_info_s *selecting_info = NULL;
189 char full_path[PATH_LEN] = {0, };
190 char city_str[PATH_LEN] = {0, };
191 char color_str[16] = {0, };
193 retv_if(!parent, NULL);
195 path = app_get_resource_path();
196 retv_if(!path, NULL);
198 snprintf(full_path, sizeof(full_path), "%s/edje/%s", path, ITEM_EDJE);
201 selecting_info = calloc(1, sizeof(selecting_info_s));
202 retv_if(!selecting_info, NULL);
203 selecting_info->city = city;
204 selecting_info->color = color;
206 item = elm_layout_add(parent);
207 retv_if(!item, NULL);
209 elm_layout_file_set(item, full_path, "item_selecting");
211 evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
212 evas_object_size_hint_align_set(item, EVAS_HINT_FILL, EVAS_HINT_FILL);
213 evas_object_data_set(item, DATA_KEY_SELECTING, selecting_info);
214 evas_object_event_callback_add(item, EVAS_CALLBACK_DEL, _item_selecting_del_cb, NULL);
215 elm_object_signal_callback_add(item, "delete,down", "item", _item_selecting_delete_down_cb, NULL);
216 elm_object_signal_callback_add(item, "delete,up", "item", _item_selecting_delete_up_cb, NULL);
217 evas_object_show(item);
219 city_info = city_get();
220 goto_if(!city_info, error);
222 snprintf(city_str, sizeof(city_str), "%s, %s", city_info[city].name, city_info[city].nation);
223 elm_object_part_text_set(item, "city", city_str);
226 snprintf(color_str, sizeof(color_str), "%d", color);
227 elm_object_signal_emit(item, color_str, "mark");
234 evas_object_del(item);
237 free(selecting_info);
242 void item_destroy_selecting(Evas_Object *item)
244 selecting_info_s *selecting_info = NULL;
248 selecting_info = evas_object_data_del(item, DATA_KEY_SELECTING);
249 free(selecting_info);
251 evas_object_event_callback_del(item, EVAS_CALLBACK_DEL, _item_selecting_del_cb);
252 elm_object_signal_callback_del(item, "delete,down", "item", _item_selecting_delete_down_cb);
253 elm_object_signal_callback_del(item, "delete,up", "item", _item_selecting_delete_up_cb);
255 evas_object_del(item);
258 void _text_set_local_time(Evas_Object *item, const char *part, int city, struct tm *global_time)
260 city_s *city_info = NULL;
261 int hour = global_time->tm_hour;
262 int minute = global_time->tm_min;
264 char time_result[PATH_LEN] = {0, };
269 city_info = city_get();
272 if (((double) ((int) city_info[city].timezone)) < city_info[city].timezone) {
280 snprintf(time_result, sizeof(time_result), "%d:%d", hour, minute);
281 elm_object_part_text_set(item, part, time_result);
284 static void _resize_graph_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
286 result_info_s *result_info = NULL;
290 result_info = evas_object_data_get(obj, DATA_KEY_RESULT);
291 ret_if(!result_info);
293 edje_object_part_geometry_get(_EDJ(obj), "graph_base", &x, &y, &w, &h);
295 if (result_info->start > result_info->end) {
296 evas_object_move(result_info->rect2, x, y);
297 evas_object_resize(result_info->rect2, w / 10.0, h);
298 evas_object_color_set(result_info->rect2, 0, 0, 0, 255);
299 evas_object_show(result_info->rect2);
301 evas_object_hide(result_info->rect2);
304 start_x = (result_info->start / 24.0f) * w + x;
306 evas_object_move(result_info->rect1, start_x, y);
307 evas_object_resize(result_info->rect1, x + w - start_x, h);
308 evas_object_color_set(result_info->rect1, 0, 0, 0, 255);
309 evas_object_show(result_info->rect1);
312 static void _item_result_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
314 item_destroy_result(obj);
317 Evas_Object *item_create_result(Evas_Object *parent, int city, int color, int start, int end, struct tm *global_time)
319 Evas_Object *item = NULL;
320 city_s *city_info = NULL;
321 result_info_s *result_info = NULL;
325 char full_path[PATH_LEN] = {0, };
326 char city_str[PATH_LEN] = {0, };
327 char color_str[16] = {0, };
329 retv_if(!parent, NULL);
331 path = app_get_resource_path();
332 retv_if(!path, NULL);
334 snprintf(full_path, sizeof(full_path), "%s/edje/%s", path, ITEM_EDJE);
337 result_info = calloc(1, sizeof(result_info_s));
338 retv_if(!result_info, NULL);
340 item = elm_layout_add(parent);
341 goto_if(!item, error);
343 elm_layout_file_set(item, full_path, "item_result");
345 evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
346 evas_object_size_hint_align_set(item, EVAS_HINT_FILL, EVAS_HINT_FILL);
347 evas_object_data_set(item, DATA_KEY_RESULT, result_info);
348 evas_object_event_callback_add(item, EVAS_CALLBACK_DEL, _item_result_del_cb, NULL);
349 evas_object_event_callback_add(item, EVAS_CALLBACK_RESIZE, _resize_graph_cb, result_info);
350 evas_object_event_callback_add(item, EVAS_CALLBACK_MOVE, _resize_graph_cb, result_info);
351 evas_object_show(item);
353 city_info = city_get();
354 goto_if(!city_info, error);
356 snprintf(city_str, sizeof(city_str), "%s, %s", city_info[city].name, city_info[city].nation);
357 elm_object_part_text_set(item, "city", city_str);
359 snprintf(color_str, sizeof(color_str), "%d", color);
360 elm_object_signal_emit(item, color_str, "mark");
362 _text_set_local_time(item, "time", city, global_time);
364 e = evas_object_evas_get(item);
367 result_info->rect1 = evas_object_rectangle_add(e);
368 goto_if(!result_info->rect1, error);
370 result_info->rect2 = evas_object_rectangle_add(e);
371 goto_if(!result_info->rect2, error);
373 result_info->city = city;
374 result_info->start = start;
375 result_info->end = end;
381 if (result_info->rect1)
382 evas_object_del(result_info->rect1);
383 if (result_info->rect2)
384 evas_object_del(result_info->rect2);
389 evas_object_del(item);
395 void item_destroy_result(Evas_Object *item)
397 result_info_s *result_info = NULL;
401 evas_object_event_callback_del(item, EVAS_CALLBACK_DEL, _item_result_del_cb);
403 result_info = evas_object_data_del(item, DATA_KEY_RESULT);
405 if (result_info->rect1)
406 evas_object_del(result_info->rect1);
407 if (result_info->rect2)
408 evas_object_del(result_info->rect2);
412 evas_object_del(item);
415 static void _item_group_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
417 item_destroy_group(obj);
420 static void _item_group_down_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
422 _D("An item is down");
425 static void _item_group_up_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
427 Evas_Object *item = obj;
428 Evas_Object *selecting_item = NULL;
429 main_view_s *main_view_info = data;
434 ret_if(!main_view_info);
435 ret_if(!main_view_info->city_list);
437 _D("An item is selected");
439 count = scroller_count_item(main_view_info->city_list);
440 if (count >= MAXIMUM_SELECTED_CITY) {
441 Evas_Object *popup = NULL;
442 _D("Cities selected are limited.");
443 popup = popup_create_text(main_view_info->main_view, "Maximum number of cities reached");
444 elm_object_part_content_set(main_view_info->main_view, "popup", popup);
448 city = (int) evas_object_data_get(item, DATA_KEY_CITY);
449 selecting_item = item_create_selecting(main_view_info->city_list, city, 0);
450 ret_if(!selecting_item);
452 scroller_append_item(main_view_info->city_list, selecting_item);
455 Evas_Object *item_create_group(Evas_Object *parent, const char *title, main_view_s *main_view_info)
457 Evas_Object *item = NULL;
460 char full_path[PATH_LEN] = {0, };
462 retv_if(!parent, NULL);
464 path = app_get_resource_path();
465 retv_if(!path, NULL);
467 snprintf(full_path, sizeof(full_path), "%s/edje/%s", path, ITEM_EDJE);
470 item = elm_layout_add(parent);
471 retv_if(!item, NULL);
473 elm_layout_file_set(item, full_path, "item_group");
475 evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
476 evas_object_size_hint_align_set(item, EVAS_HINT_FILL, EVAS_HINT_FILL);
477 evas_object_event_callback_add(item, EVAS_CALLBACK_DEL, _item_group_del_cb, NULL);
478 elm_object_signal_callback_add(item, "down", "item", _item_group_down_cb, NULL);
479 elm_object_signal_callback_add(item, "up", "item", _item_group_up_cb, main_view_info);
481 evas_object_show(item);
483 elm_object_part_text_set(item, "city", title);
488 void item_destroy_group(Evas_Object *item)
492 evas_object_event_callback_del(item, EVAS_CALLBACK_DEL, _item_group_del_cb);
493 elm_object_signal_callback_del(item, "down", "item", _item_group_down_cb);
494 elm_object_signal_callback_del(item, "up", "item", _item_group_up_cb);
496 evas_object_del(item);