1 #include <Elementary.h>
3 #include "elm_widget_clock.h"
5 EAPI const char ELM_CLOCK_SMART_NAME[] = "elm_clock";
7 #define DEFAULT_FIRST_INTERVAL 0.85
9 static void _time_update(Evas_Object *obj);
11 static const char SIG_CHANGED[] = "changed";
12 static const char SIG_ACCESS_CHANGED[] = "access,changed";
14 static const Evas_Smart_Cb_Description _smart_callbacks[] = {
16 {SIG_ACCESS_CHANGED, ""},
20 EVAS_SMART_SUBCLASS_NEW
21 (ELM_CLOCK_SMART_NAME, _elm_clock, Elm_Clock_Smart_Class,
22 Elm_Layout_Smart_Class, elm_layout_smart_class_get, _smart_callbacks);
25 _on_clock_val_up(void *data)
27 ELM_CLOCK_DATA_GET(data, sd);
29 if (!sd->edit) goto clock_val_up_cancel;
30 if (!sd->sel_obj) goto clock_val_up_cancel;
31 if (sd->sel_obj == sd->digit[0])
33 sd->hrs = sd->hrs + 10;
34 if (sd->hrs >= 24) sd->hrs -= 24;
36 if (sd->sel_obj == sd->digit[1])
38 sd->hrs = sd->hrs + 1;
39 if (sd->hrs >= 24) sd->hrs -= 24;
41 if (sd->sel_obj == sd->digit[2])
43 sd->min = sd->min + 10;
44 if (sd->min >= 60) sd->min -= 60;
46 if (sd->sel_obj == sd->digit[3])
48 sd->min = sd->min + 1;
49 if (sd->min >= 60) sd->min -= 60;
51 if (sd->sel_obj == sd->digit[4])
53 sd->sec = sd->sec + 10;
54 if (sd->sec >= 60) sd->sec -= 60;
56 if (sd->sel_obj == sd->digit[5])
58 sd->sec = sd->sec + 1;
59 if (sd->sec >= 60) sd->sec -= 60;
61 if (sd->sel_obj == sd->am_pm_obj)
63 sd->hrs = sd->hrs + 12;
64 if (sd->hrs > 23) sd->hrs -= 24;
67 sd->interval = sd->interval / 1.05;
68 ecore_timer_interval_set(sd->spin, sd->interval);
70 evas_object_smart_callback_call(data, SIG_CHANGED, NULL);
71 return ECORE_CALLBACK_RENEW;
77 return ECORE_CALLBACK_CANCEL;
81 _on_clock_val_down(void *data)
83 ELM_CLOCK_DATA_GET(data, sd);
85 if (!sd->edit) goto clock_val_down_cancel;
86 if (!sd->sel_obj) goto clock_val_down_cancel;
87 if (sd->sel_obj == sd->digit[0])
89 sd->hrs = sd->hrs - 10;
90 if (sd->hrs < 0) sd->hrs += 24;
92 if (sd->sel_obj == sd->digit[1])
94 sd->hrs = sd->hrs - 1;
95 if (sd->hrs < 0) sd->hrs += 24;
97 if (sd->sel_obj == sd->digit[2])
99 sd->min = sd->min - 10;
100 if (sd->min < 0) sd->min += 60;
102 if (sd->sel_obj == sd->digit[3])
104 sd->min = sd->min - 1;
105 if (sd->min < 0) sd->min += 60;
107 if (sd->sel_obj == sd->digit[4])
109 sd->sec = sd->sec - 10;
110 if (sd->sec < 0) sd->sec += 60;
112 if (sd->sel_obj == sd->digit[5])
114 sd->sec = sd->sec - 1;
115 if (sd->sec < 0) sd->sec += 60;
117 if (sd->sel_obj == sd->am_pm_obj)
119 sd->hrs = sd->hrs - 12;
120 if (sd->hrs < 0) sd->hrs += 24;
122 sd->interval = sd->interval / 1.05;
123 ecore_timer_interval_set(sd->spin, sd->interval);
125 evas_object_smart_callback_call(data, SIG_CHANGED, NULL);
126 return ECORE_CALLBACK_RENEW;
128 clock_val_down_cancel:
131 return ECORE_CALLBACK_CANCEL;
135 _on_clock_val_up_start(void *data,
137 const char *emission __UNUSED__,
138 const char *source __UNUSED__)
140 ELM_CLOCK_DATA_GET(data, sd);
142 sd->interval = sd->first_interval;
144 if (sd->spin) ecore_timer_del(sd->spin);
145 sd->spin = ecore_timer_add(sd->interval, _on_clock_val_up, data);
147 _on_clock_val_up(data);
151 _on_clock_val_down_start(void *data,
153 const char *emission __UNUSED__,
154 const char *source __UNUSED__)
156 ELM_CLOCK_DATA_GET(data, sd);
158 sd->interval = sd->first_interval;
160 if (sd->spin) ecore_timer_del(sd->spin);
161 sd->spin = ecore_timer_add(sd->interval, _on_clock_val_down, data);
163 _on_clock_val_down(data);
167 _on_clock_val_change_stop(void *data,
168 Evas_Object *obj __UNUSED__,
169 const char *emission __UNUSED__,
170 const char *source __UNUSED__)
172 Elm_Clock_Smart_Data *sd = data;
174 if (sd->spin) ecore_timer_del(sd->spin);
180 _access_activate_cb(void *data,
181 Evas_Object *part_obj,
182 Elm_Object_Item *item __UNUSED__)
184 Evas_Object *digit, *inc_btn;
185 ELM_CLOCK_DATA_GET(data, sd);
187 digit = evas_object_smart_parent_get(part_obj);
190 inc_btn = (Evas_Object *)edje_object_part_object_get(digit, "access.t");
192 if (part_obj != inc_btn)
193 _on_clock_val_down_start(data, digit, NULL, NULL);
195 _on_clock_val_up_start(data, digit, NULL, NULL);
197 _on_clock_val_change_stop(sd, NULL, NULL, NULL);
201 _access_time_register(Evas_Object *obj, Eina_Bool is_access)
203 Evas_Object *ao, *po;
205 ELM_CLOCK_DATA_GET(obj, sd);
207 if (!sd->edit) return;
209 /* hour, min, sec edit button */
211 for (i = 0; i < 6; i++)
213 if (is_access && (sd->digedit & (1 << i)))
219 case ELM_CLOCK_EDIT_HOUR_DECIMAL:
220 digit = "hour decimal";
222 case ELM_CLOCK_EDIT_HOUR_UNIT:
225 case ELM_CLOCK_EDIT_MIN_DECIMAL:
226 digit = "minute decimal";
228 case ELM_CLOCK_EDIT_MIN_UNIT:
229 digit = "minute unit";
231 case ELM_CLOCK_EDIT_SEC_DECIMAL:
232 digit = "second decimal";
234 case ELM_CLOCK_EDIT_SEC_UNIT:
235 digit = "second unit";
240 strbuf = eina_strbuf_new();
242 /* increment button */
243 ao = _elm_access_edje_object_part_object_register
244 (obj, sd->digit[i], "access.t");
246 eina_strbuf_append_printf(strbuf,
247 "clock increment button for %s", digit);
248 _elm_access_text_set(_elm_access_object_get(ao),
249 ELM_ACCESS_TYPE, eina_strbuf_string_get(strbuf));
250 _elm_access_activate_callback_set
251 (_elm_access_object_get(ao), _access_activate_cb, obj);
253 /* decrement button */
254 ao = _elm_access_edje_object_part_object_register
255 (obj, sd->digit[i], "access.b");
257 eina_strbuf_replace(strbuf, "increment", "decrement", 1);
258 _elm_access_text_set(_elm_access_object_get(ao),
259 ELM_ACCESS_TYPE, eina_strbuf_string_get(strbuf));
260 _elm_access_activate_callback_set
261 (_elm_access_object_get(ao), _access_activate_cb, obj);
263 eina_strbuf_free(strbuf);
265 edje_object_signal_emit
266 (sd->digit[i], "elm,state,access,edit,on", "elm");
268 else if (!is_access && (sd->digedit & (1 << i)))
270 _elm_access_edje_object_part_object_unregister
271 (obj, sd->digit[i], "access.t");
273 _elm_access_edje_object_part_object_unregister
274 (obj, sd->digit[i], "access.b");
276 edje_object_signal_emit
277 (sd->digit[i], "elm,state,access,edit,off", "elm");
280 /* no need to propagate mouse event with acess */
281 po = (Evas_Object *)edje_object_part_object_get
282 (sd->digit[i], "access.t");
283 evas_object_propagate_events_set(po, !is_access);
285 po = (Evas_Object *)edje_object_part_object_get
286 (sd->digit[i], "access.b");
287 evas_object_propagate_events_set(po, !is_access);
291 /* am, pm edit button */
292 if (is_access && sd->am_pm)
294 /* increment button */
295 ao = _elm_access_edje_object_part_object_register
296 (obj, sd->am_pm_obj, "access.t");
297 _elm_access_text_set(_elm_access_object_get(ao),
298 ELM_ACCESS_TYPE, E_("clock increment button for am,pm"));
299 _elm_access_activate_callback_set
300 (_elm_access_object_get(ao), _access_activate_cb, obj);
302 /* decrement button */
303 ao = _elm_access_edje_object_part_object_register
304 (obj, sd->am_pm_obj, "access.b");
305 _elm_access_text_set(_elm_access_object_get(ao),
306 ELM_ACCESS_TYPE, E_("clock decrement button for am,pm"));
307 _elm_access_activate_callback_set
308 (_elm_access_object_get(ao), _access_activate_cb, obj);
310 edje_object_signal_emit
311 (sd->am_pm_obj, "elm,state,access,edit,on", "elm");
313 else if (!is_access && sd->am_pm)
315 _elm_access_edje_object_part_object_register
316 (obj, sd->am_pm_obj, "access.t");
318 _elm_access_edje_object_part_object_register
319 (obj, sd->am_pm_obj, "access.b");
321 edje_object_signal_emit
322 (sd->am_pm_obj, "elm,state,access,edit,off", "elm");
325 /* no need to propagate mouse event with access */
326 po = (Evas_Object *)edje_object_part_object_get
327 (sd->am_pm_obj, "access.t");
328 evas_object_propagate_events_set(po, !is_access);
330 po = (Evas_Object *)edje_object_part_object_get
331 (sd->am_pm_obj, "access.b");
332 evas_object_propagate_events_set(po, !is_access);
336 _time_update(Evas_Object *obj)
338 ELM_CLOCK_DATA_GET(obj, sd);
340 Edje_Message_Int msg;
342 const char *style = elm_widget_style_get(obj);
344 if ((sd->cur.seconds != sd->seconds) || (sd->cur.am_pm != sd->am_pm) ||
345 (sd->cur.edit != sd->edit) || (sd->cur.digedit != sd->digedit))
350 for (i = 0; i < 6; i++)
354 evas_object_del(sd->digit[i]);
360 evas_object_del(sd->am_pm_obj);
361 sd->am_pm_obj = NULL;
364 if ((sd->seconds) && (sd->am_pm))
365 elm_layout_theme_set(obj, "clock", "base-all", style);
366 else if (sd->seconds)
367 elm_layout_theme_set(obj, "clock", "base-seconds", style);
369 elm_layout_theme_set(obj, "clock", "base-am_pm", style);
371 elm_layout_theme_set(obj, "clock", "base", style);
373 edje_object_scale_set
374 (ELM_WIDGET_DATA(sd)->resize_obj, elm_widget_scale_get(obj) *
375 elm_config_scale_get());
377 for (i = 0; i < 6; i++)
381 if ((!sd->seconds) && (i >= 4)) break;
382 sd->digit[i] = edje_object_add
383 (evas_object_evas_get(ELM_WIDGET_DATA(sd)->resize_obj));
384 elm_widget_theme_object_set
385 (obj, sd->digit[i], "clock", "flipdigit", style);
386 edje_object_scale_set
387 (sd->digit[i], elm_widget_scale_get(obj) *
388 elm_config_scale_get());
390 if ((sd->edit) && (sd->digedit & (1 << i)))
391 edje_object_signal_emit
392 (sd->digit[i], "elm,state,edit,on", "elm");
393 edje_object_signal_callback_add
394 (sd->digit[i], "elm,action,up,start", "",
395 _on_clock_val_up_start, obj);
396 edje_object_signal_callback_add
397 (sd->digit[i], "elm,action,up,stop", "",
398 _on_clock_val_change_stop, sd);
399 edje_object_signal_callback_add
400 (sd->digit[i], "elm,action,down,start", "",
401 _on_clock_val_down_start, obj);
402 edje_object_signal_callback_add
403 (sd->digit[i], "elm,action,down,stop", "",
404 _on_clock_val_change_stop, sd);
407 elm_coords_finger_size_adjust(1, &mw, 2, &mh);
408 edje_object_size_min_restricted_calc
409 (sd->digit[i], &mw, &mh, mw, mh);
410 elm_coords_finger_size_adjust(1, &mw, 2, &mh);
411 edje_extern_object_min_size_set(sd->digit[i], mw, mh);
412 snprintf(buf, sizeof(buf), "d%i", i);
413 elm_layout_content_set(obj, buf, sd->digit[i]);
414 evas_object_show(sd->digit[i]);
419 edje_object_add(evas_object_evas_get(ELM_WIDGET_DATA(sd)->resize_obj));
420 elm_widget_theme_object_set
421 (obj, sd->am_pm_obj, "clock", "flipampm", style);
422 edje_object_scale_set(sd->am_pm_obj, elm_widget_scale_get(obj) *
425 edje_object_signal_emit
426 (sd->am_pm_obj, "elm,state,edit,on", "elm");
427 edje_object_signal_callback_add
428 (sd->am_pm_obj, "elm,action,up,start", "",
429 _on_clock_val_up_start, obj);
430 edje_object_signal_callback_add
431 (sd->am_pm_obj, "elm,action,up,stop", "",
432 _on_clock_val_change_stop, sd);
433 edje_object_signal_callback_add
434 (sd->am_pm_obj, "elm,action,down,start", "",
435 _on_clock_val_down_start, obj);
436 edje_object_signal_callback_add
437 (sd->am_pm_obj, "elm,action,down,stop", "",
438 _on_clock_val_change_stop, sd);
441 elm_coords_finger_size_adjust(1, &mw, 2, &mh);
442 edje_object_size_min_restricted_calc
443 (sd->am_pm_obj, &mw, &mh, mw, mh);
444 elm_coords_finger_size_adjust(1, &mw, 2, &mh);
445 edje_extern_object_min_size_set(sd->am_pm_obj, mw, mh);
446 elm_layout_content_set(obj, "ampm", sd->am_pm_obj);
447 evas_object_show(sd->am_pm_obj);
451 if (_elm_config->access_mode == ELM_ACCESS_MODE_ON)
452 _access_time_register(obj, EINA_TRUE);
454 edje_object_size_min_calc(ELM_WIDGET_DATA(sd)->resize_obj, &mw, &mh);
455 evas_object_size_hint_min_set(obj, mw, mh);
461 sd->cur.seconds = sd->seconds;
462 sd->cur.am_pm = sd->am_pm;
463 sd->cur.edit = sd->edit;
464 sd->cur.digedit = sd->digedit;
466 if (sd->hrs != sd->cur.hrs)
469 int d1, d2, dc1, dc2;
476 if (hrs > 12) hrs -= 12;
484 dc1 = sd->cur.hrs / 10;
485 dc2 = sd->cur.hrs % 10;
489 edje_object_message_send(sd->digit[0], EDJE_MESSAGE_INT, 1, &msg);
494 edje_object_message_send(sd->digit[1], EDJE_MESSAGE_INT, 1, &msg);
498 if (sd->min != sd->cur.min)
500 int d1, d2, dc1, dc2;
504 dc1 = sd->cur.min / 10;
505 dc2 = sd->cur.min % 10;
509 edje_object_message_send(sd->digit[2], EDJE_MESSAGE_INT, 1, &msg);
514 edje_object_message_send(sd->digit[3], EDJE_MESSAGE_INT, 1, &msg);
516 sd->cur.min = sd->min;
520 if (sd->sec != sd->cur.sec)
522 int d1, d2, dc1, dc2;
526 dc1 = sd->cur.sec / 10;
527 dc2 = sd->cur.sec % 10;
531 edje_object_message_send
532 (sd->digit[4], EDJE_MESSAGE_INT, 1, &msg);
537 edje_object_message_send
538 (sd->digit[5], EDJE_MESSAGE_INT, 1, &msg);
540 sd->cur.sec = sd->sec;
548 if (sd->hrs >= 12) ampm = 1;
549 if (ampm != sd->cur.ampm)
551 if (sd->cur.ampm != ampm)
554 edje_object_message_send
555 (sd->am_pm_obj, EDJE_MESSAGE_INT, 1, &msg);
565 _elm_clock_smart_theme(Evas_Object *obj)
567 if (!ELM_WIDGET_CLASS(_elm_clock_parent_sc)->theme(obj)) return EINA_FALSE;
577 ELM_CLOCK_DATA_GET(data, sd);
580 struct timeval timev;
584 gettimeofday(&timev, NULL);
585 t = ((double)(1000000 - timev.tv_usec)) / 1000000.0;
586 sd->ticker = ecore_timer_add(t, _ticker, data);
589 tt = (time_t)(timev.tv_sec) + sd->timediff;
594 sd->hrs = tm->tm_hour;
595 sd->min = tm->tm_min;
596 sd->sec = tm->tm_sec;
601 return ECORE_CALLBACK_CANCEL;
605 _access_info_cb(void *data __UNUSED__, Evas_Object *obj)
612 ELM_CLOCK_DATA_GET(obj, sd);
614 buf = eina_strbuf_new();
622 if (hrs > 12) hrs -= 12;
628 eina_strbuf_append_printf(buf, (ampm) ? ("%d, %d, %s") : ("%d, %d"),
631 ret = eina_strbuf_string_steal(buf);
632 eina_strbuf_free(buf);
637 _access_state_cb(void *data __UNUSED__, Evas_Object *obj)
639 ELM_CLOCK_DATA_GET(obj, sd);
641 return strdup(E_("State: Editable"));
647 _elm_clock_smart_add(Evas_Object *obj)
649 EVAS_SMART_DATA_ALLOC(obj, Elm_Clock_Smart_Data);
651 ELM_WIDGET_CLASS(_elm_clock_parent_sc)->base.add(obj);
654 priv->cur.seconds = EINA_TRUE;
655 priv->cur.am_pm = EINA_TRUE;
656 priv->cur.edit = EINA_TRUE;
657 priv->cur.digedit = ELM_CLOCK_EDIT_DEFAULT;
658 priv->first_interval = DEFAULT_FIRST_INTERVAL;
661 elm_widget_can_focus_set(obj, EINA_TRUE);
667 if (_elm_config->access_mode != ELM_ACCESS_MODE_OFF)
669 evas_object_propagate_events_set(obj, EINA_FALSE);
670 edje_object_signal_emit(ELM_WIDGET_DATA(priv)->resize_obj,
671 "elm,state,access,on", "elm");
674 _elm_access_object_register(obj, ELM_WIDGET_DATA(priv)->resize_obj);
676 (_elm_access_object_get(obj), ELM_ACCESS_TYPE, E_("Clock"));
677 _elm_access_callback_set
678 (_elm_access_object_get(obj), ELM_ACCESS_INFO, _access_info_cb, NULL);
679 evas_object_propagate_events_set(obj, EINA_FALSE);
680 _elm_access_callback_set
681 (_elm_access_object_get(obj), ELM_ACCESS_STATE, _access_state_cb, NULL);
685 _elm_clock_smart_del(Evas_Object *obj)
687 ELM_CLOCK_DATA_GET(obj, sd);
689 if (sd->ticker) ecore_timer_del(sd->ticker);
690 if (sd->spin) ecore_timer_del(sd->spin);
692 /* NB: digits are killed for being sub objects, automatically */
694 ELM_WIDGET_CLASS(_elm_clock_parent_sc)->base.del(obj);
698 _elm_clock_smart_focus_next(const Evas_Object *obj,
699 Elm_Focus_Direction dir,
702 Evas_Object *ao, *po;
703 Eina_List *items = NULL;
705 ELM_CLOCK_DATA_GET(obj, sd);
709 *next = (Evas_Object *)obj;
710 return !elm_widget_focus_get(obj);
712 else if (!elm_widget_focus_get(obj))
714 *next = (Evas_Object *)obj;
719 for (i = 0; i < 6; i++)
721 if ((!sd->seconds) && (i >= 4)) break;
722 if (sd->digedit & (1 << i))
724 po = (Evas_Object *)edje_object_part_object_get
725 (sd->digit[i], "access.t");
726 ao = evas_object_data_get(po, "_part_access_obj");
727 items = eina_list_append(items, ao);
729 po = (Evas_Object *)edje_object_part_object_get
730 (sd->digit[i], "access.b");
731 ao = evas_object_data_get(po, "_part_access_obj");
732 items = eina_list_append(items, ao);
738 po = (Evas_Object *)edje_object_part_object_get
739 (sd->am_pm_obj, "access.t");
740 ao = evas_object_data_get(po, "_part_access_obj");
741 items = eina_list_append(items, ao);
743 po = (Evas_Object *)edje_object_part_object_get
744 (sd->am_pm_obj, "access.b");
745 ao = evas_object_data_get(po, "_part_access_obj");
746 items = eina_list_append(items, ao);
749 return elm_widget_focus_list_next_get
750 (obj, items, eina_list_data_get, dir, next);
754 _access_obj_process(Evas_Object *obj, Eina_Bool is_access)
756 ELM_CLOCK_DATA_GET(obj, sd);
759 evas_object_propagate_events_set(obj, !is_access);
762 edje_object_signal_emit(ELM_WIDGET_DATA(sd)->resize_obj,
763 "elm,state,access,on", "elm");
765 edje_object_signal_emit(ELM_WIDGET_DATA(sd)->resize_obj,
766 "elm,state,access,off", "elm");
768 /* clock time objects */
769 _access_time_register(obj, is_access);
773 _elm_clock_smart_access(Evas_Object *obj, Eina_Bool is_access)
775 ELM_CLOCK_CHECK(obj);
776 ELM_CLOCK_DATA_GET(obj, sd);
779 ELM_WIDGET_CLASS(ELM_WIDGET_DATA(sd)->api)->focus_next =
780 _elm_clock_smart_focus_next;
782 ELM_WIDGET_CLASS(ELM_WIDGET_DATA(sd)->api)->focus_next = NULL;
783 _access_obj_process(obj, is_access);
785 evas_object_smart_callback_call(obj, SIG_ACCESS_CHANGED, NULL);
789 _elm_clock_smart_set_user(Elm_Clock_Smart_Class *sc)
791 ELM_WIDGET_CLASS(sc)->base.add = _elm_clock_smart_add;
792 ELM_WIDGET_CLASS(sc)->base.del = _elm_clock_smart_del;
794 ELM_WIDGET_CLASS(sc)->theme = _elm_clock_smart_theme;
796 /* not a 'focus chain manager' */
797 ELM_WIDGET_CLASS(sc)->focus_next = NULL;
798 ELM_WIDGET_CLASS(sc)->focus_direction = NULL;
801 if (_elm_config->access_mode != ELM_ACCESS_MODE_OFF)
802 ELM_WIDGET_CLASS(sc)->focus_next = _elm_clock_smart_focus_next;
804 ELM_WIDGET_CLASS(sc)->access = _elm_clock_smart_access;
807 EAPI const Elm_Clock_Smart_Class *
808 elm_clock_smart_class_get(void)
810 static Elm_Clock_Smart_Class _sc =
811 ELM_CLOCK_SMART_CLASS_INIT_NAME_VERSION(ELM_CLOCK_SMART_NAME);
812 static const Elm_Clock_Smart_Class *class = NULL;
813 Evas_Smart_Class *esc = (Evas_Smart_Class *)&_sc;
818 _elm_clock_smart_set(&_sc);
819 esc->callbacks = _smart_callbacks;
826 elm_clock_add(Evas_Object *parent)
830 EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
832 obj = elm_widget_add(_elm_clock_smart_class_new(), parent);
833 if (!obj) return NULL;
835 if (!elm_widget_sub_object_add(parent, obj))
836 ERR("could not add %p as sub object of %p", obj, parent);
842 _timediff_set(Elm_Clock_Smart_Data *sd)
844 struct timeval timev;
848 gettimeofday(&timev, NULL);
849 tt = (time_t)(timev.tv_sec);
852 sd->timediff = (((sd->hrs - tm->tm_hour) * 60 +
853 sd->min - tm->tm_min) * 60) + sd->sec - tm->tm_sec;
857 elm_clock_time_set(Evas_Object *obj,
862 ELM_CLOCK_CHECK(obj);
863 ELM_CLOCK_DATA_GET(obj, sd);
874 elm_clock_time_get(const Evas_Object *obj,
879 ELM_CLOCK_CHECK(obj);
880 ELM_CLOCK_DATA_GET(obj, sd);
882 if (hrs) *hrs = sd->hrs;
883 if (min) *min = sd->min;
884 if (sec) *sec = sd->sec;
888 elm_clock_edit_set(Evas_Object *obj,
891 ELM_CLOCK_CHECK(obj);
892 ELM_CLOCK_DATA_GET(obj, sd);
897 if ((edit) && (sd->digedit == ELM_CLOCK_EDIT_DEFAULT))
898 elm_clock_edit_mode_set(obj, ELM_CLOCK_EDIT_ALL);
904 elm_clock_edit_get(const Evas_Object *obj)
906 ELM_CLOCK_CHECK(obj) EINA_FALSE;
907 ELM_CLOCK_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
913 elm_clock_edit_mode_set(Evas_Object *obj,
914 Elm_Clock_Edit_Mode digedit)
916 ELM_CLOCK_CHECK(obj);
917 ELM_CLOCK_DATA_GET(obj, sd);
919 sd->digedit = digedit;
920 if (digedit == ELM_CLOCK_EDIT_DEFAULT)
921 elm_clock_edit_set(obj, EINA_FALSE);
926 EAPI Elm_Clock_Edit_Mode
927 elm_clock_edit_mode_get(const Evas_Object *obj)
929 ELM_CLOCK_CHECK(obj) 0;
930 ELM_CLOCK_DATA_GET_OR_RETURN_VAL(obj, sd, 0);
936 elm_clock_show_am_pm_set(Evas_Object *obj,
939 ELM_CLOCK_CHECK(obj);
940 ELM_CLOCK_DATA_GET(obj, sd);
947 elm_clock_show_am_pm_get(const Evas_Object *obj)
949 ELM_CLOCK_CHECK(obj) EINA_FALSE;
950 ELM_CLOCK_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
956 elm_clock_show_seconds_set(Evas_Object *obj,
959 ELM_CLOCK_CHECK(obj);
960 ELM_CLOCK_DATA_GET(obj, sd);
962 sd->seconds = !!seconds;
967 elm_clock_show_seconds_get(const Evas_Object *obj)
969 ELM_CLOCK_CHECK(obj) EINA_FALSE;
970 ELM_CLOCK_DATA_GET_OR_RETURN_VAL(obj, sd, EINA_FALSE);
976 elm_clock_first_interval_set(Evas_Object *obj,
979 ELM_CLOCK_CHECK(obj);
980 ELM_CLOCK_DATA_GET(obj, sd);
982 sd->first_interval = !!interval;
986 elm_clock_first_interval_get(const Evas_Object *obj)
988 ELM_CLOCK_CHECK(obj) 0.0;
989 ELM_CLOCK_DATA_GET_OR_RETURN_VAL(obj, sd, 0.0);
991 return sd->first_interval;