circle_datetime: C# supports Efl.Ui.DatePicker and TimePicker 24/207824/2 accepted/tizen/unified/20190620.071914 submit/tizen/20190619.051039
authorTaehyub Kim <taehyub.kim@samsung.com>
Thu, 13 Jun 2019 05:49:04 +0000 (14:49 +0900)
committerTaehyub Kim <taehyub.kim@samsung.com>
Thu, 13 Jun 2019 05:52:07 +0000 (14:52 +0900)
Change-Id: I991cd2488c18bd8c8a10f52cb8483ccb9f106469

inc/wearable/circle/efl_extension_circle_private.h
src/wearable/circle/efl_extension_circle_object_datetime.c

index 1d63a028aa3755ff98915c9fd09bdd72da2ff274..7a043ac1b2c1a9eab14c9dbe50736eb172f7ab8d 100644 (file)
@@ -160,6 +160,8 @@ struct _Eext_Circle_Object_Item {
 typedef struct _Eext_Circle_Object_Datetime_Data Eext_Circle_Object_Datetime_Data;
 struct _Eext_Circle_Object_Datetime_Data {
    Elm_Datetime_Field_Type current_type;
+   double min;
+   double max;
    double rotary_angle;
    double type_current_angle;
    Ecore_Timer *rotary_timer;
index 6089b564a03d789fa3c0d7b8e5a1f9a336220527..cf57906283ae9f6987d2744e22cebdc8009dd7ff 100755 (executable)
@@ -176,7 +176,7 @@ _eext_circle_object_datetime_bg_image_set(Eext_Circle_Object *obj, int index)
 }
 
 static void
-_eext_circle_object_datetime_current_type_update(Eext_Circle_Object *obj, Eina_Bool anim)
+_current_type_update_for_datetime(Eext_Circle_Object *obj, Eina_Bool anim)
 {
    Eext_Circle_Object_Datetime_Data *data = (Eext_Circle_Object_Datetime_Data *)obj->widget_data;
    Evas_Object *datetime = obj->widget_object;
@@ -188,49 +188,126 @@ _eext_circle_object_datetime_current_type_update(Eext_Circle_Object *obj, Eina_B
 
    elm_datetime_value_get(datetime, &t);
 
-   //C# FIXME: should consider current picker type
    radio = _eext_circle_object_datetime_selected_field_object_get(datetime);
    if (radio)
      {
         data->current_type = elm_radio_state_value_get(radio);
         data->rotary_angle = eext_circle_object_angle_get(datetime);
-
         switch (data->current_type)
           {
-           case ELM_DATETIME_YEAR:
-              bg_image_index = 5;
-              picker_angle = (double)(picker_mark_angle_year[(int)((t.tm_year + 1900) % PICKER_MARK_PARTITION_COUNT_YEAR)]);
-              _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, anim);
-              break;
-           case ELM_DATETIME_MONTH:
-              bg_image_index = 4;
-              picker_angle = (double)((t.tm_mon) * PICKER_MARK_ANGLE_MONTH);
-              _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, anim);
-              break;
-           case ELM_DATETIME_DATE:
-              max_day = _max_days_get(t.tm_year, t.tm_mon);
-              bg_image_index = max_day % 28;
-              picker_angle = (double)(picker_mark_angle_day[max_day - MIN_DAYS_IN_MONTH][(t.tm_mday > max_day ? max_day:t.tm_mday) - 1]);
-              _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, anim);
-              break;
-           case ELM_DATETIME_HOUR:
-              picker_angle = (double)((t.tm_hour) * PICKER_MARK_ANGLE_HOUR);
-              _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, anim);
-              bg_image_index = 6;
-              break;
-           case ELM_DATETIME_MINUTE:
-              picker_angle = (double)(t.tm_min * PICKER_MARK_ANGLE_MIN);
-              _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, anim);
-              bg_image_index = 6;
-              break;
-           default:
-              break;
-          }
-
+             case ELM_DATETIME_YEAR:
+                bg_image_index = 5;
+                picker_angle = (double)(picker_mark_angle_year[(int)((t.tm_year + 1900) % PICKER_MARK_PARTITION_COUNT_YEAR)]);
+                _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, anim);
+                break;
+             case ELM_DATETIME_MONTH:
+                bg_image_index = 4;
+                picker_angle = (double)((t.tm_mon) * PICKER_MARK_ANGLE_MONTH);
+                _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, anim);
+                break;
+             case ELM_DATETIME_DATE:
+                max_day = _max_days_get(t.tm_year, t.tm_mon);
+                bg_image_index = max_day % 28;
+                picker_angle = (double)(picker_mark_angle_day[max_day - MIN_DAYS_IN_MONTH][(t.tm_mday > max_day ? max_day:t.tm_mday) - 1]);
+                _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, anim);
+                break;
+             case ELM_DATETIME_HOUR:
+                picker_angle = (double)((t.tm_hour) * PICKER_MARK_ANGLE_HOUR);
+                _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, anim);
+                bg_image_index = 6;
+                break;
+             case ELM_DATETIME_MINUTE:
+                picker_angle = (double)(t.tm_min * PICKER_MARK_ANGLE_MIN);
+                _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, anim);
+                bg_image_index = 6;
+                break;
+             default:
+                break;
+            }
         _eext_circle_object_datetime_bg_image_set(obj, bg_image_index);
      }
 }
 
+static void
+_current_type_update_for_datepicker(Eext_Circle_Object *obj, Eina_Bool anim)
+{
+   Eext_Circle_Object_Datetime_Data *data = (Eext_Circle_Object_Datetime_Data *)obj->widget_data;
+   Evas_Object *datetime = obj->widget_object;
+
+   int max_day;
+   int bg_image_index = BG_FILE_COUNT - 1;
+   double picker_angle = 0.0;
+   int year, month, day;
+   efl_ui_datepicker_date_get(datetime, &year, &month, &day);
+
+   switch (data->current_type)
+     {
+        case ELM_DATETIME_YEAR:
+           bg_image_index = 5;
+           picker_angle = (double)(picker_mark_angle_year[(int)(year) % PICKER_MARK_PARTITION_COUNT_YEAR]);
+           _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, anim);
+           break;
+        case ELM_DATETIME_MONTH:
+           bg_image_index = 4;
+           picker_angle = (double)((month) * PICKER_MARK_ANGLE_MONTH);
+           _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, anim);
+           break;
+        case ELM_DATETIME_DATE:
+           max_day = _max_days_get(year - 1900, month);
+           bg_image_index = max_day % 28;
+           picker_angle = (double)(picker_mark_angle_day[max_day - MIN_DAYS_IN_MONTH][(day > max_day ? max_day:day) - 1]);
+           _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, anim);
+           break;
+        default:
+           break;
+      }
+
+   _eext_circle_object_datetime_bg_image_set(obj, bg_image_index);
+}
+
+static void
+_current_type_update_for_timepicker(Eext_Circle_Object *obj, Eina_Bool anim)
+{
+   Eext_Circle_Object_Datetime_Data *data = (Eext_Circle_Object_Datetime_Data *)obj->widget_data;
+   Evas_Object *datetime = obj->widget_object;
+
+   int bg_image_index = BG_FILE_COUNT - 1;
+   double picker_angle = 0.0;
+   int hour, minute;
+   efl_ui_timepicker_time_get(datetime, &hour, &minute);
+
+   switch (data->current_type)
+     {
+        case ELM_DATETIME_HOUR:
+           picker_angle = (double)((hour) * PICKER_MARK_ANGLE_HOUR);
+           _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, anim);
+           bg_image_index = 6;
+           break;
+        case ELM_DATETIME_MINUTE:
+           picker_angle = (double)(minute * PICKER_MARK_ANGLE_MIN);
+           _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, anim);
+           bg_image_index = 6;
+           break;
+        default:
+           break;
+      }
+   _eext_circle_object_datetime_bg_image_set(obj, bg_image_index);
+}
+
+static void
+_eext_circle_object_datetime_current_type_update(Eext_Circle_Object *obj, Eina_Bool anim)
+{
+   if (efl_isa(obj->widget_object, EFL_UI_LEGACY_INTERFACE))
+     _current_type_update_for_datetime(obj, anim);
+   else
+     {
+        if (!strcmp(efl_class_name_get(obj->widget_object), "Efl.Ui.Wearable.CircleDatePicker"))
+          _current_type_update_for_datepicker(obj, anim);
+        else
+          _current_type_update_for_timepicker(obj, anim);
+     }
+}
+
 /**
  * FIXME(171030): This sets eext_circle_object data values with a handle "datetime",
  *       but this is not working because "datetime" is elm_datetime, not circle object.
@@ -287,9 +364,6 @@ _eext_circle_object_datetime_radio_changed_cb(void *data, Evas_Object *obj, void
 {
    Eext_Circle_Object *circle_obj = (Eext_Circle_Object *)data;
 
-   //C# FIXME: When datepicker and timepicker is changed, current type should be updated
-   //          please define datepicker_type and timepicker_type static value and update
-   //          when picker focus is changed
    if (circle_obj->widget_object == event_info)
      _eext_circle_object_datetime_current_type_update(circle_obj, EINA_FALSE);
    else
@@ -315,108 +389,81 @@ _eext_circle_object_datetime_changed_cb(void *data, Evas_Object *obj, void *even
 }
 
 static void
-_date_update(Eext_Circle_Object *obj, Eina_Bool value_up)
+_date_update_for_datetime(Eext_Circle_Object *obj, Eina_Bool value_up)
 {
    Eext_Circle_Object_Datetime_Data *data = (Eext_Circle_Object_Datetime_Data *)obj->widget_data;
    Evas_Object *datetime = obj->widget_object;
    struct tm t;
-   int min, max;
    int max_day;
-   double picker_angle = 0.0;
-
-   int year, month, day;
-   year = month = day = 0;
+   int min, max;
 
-   if (efl_isa(datetime, EFL_UI_LEGACY_INTERFACE))
-     {
-        elm_datetime_value_get(datetime, &t);
-        elm_datetime_field_limit_get(datetime, data->current_type, &min, &max);
-     }
-   else
-     {
-        efl_ui_datepicker_date_get(datetime, &year, &month, &day);
-     }
+   elm_datetime_value_get(datetime, &t);
+   elm_datetime_field_limit_get(datetime, data->current_type, &min, &max);
+   double picker_angle = 0.0;
 
-   //C# FIXME: Implements other types
-   //          Here, Only year type is implemented
    switch (data->current_type)
      {
         case ELM_DATETIME_YEAR:
-           if (efl_isa(datetime, EFL_UI_LEGACY_INTERFACE))
-             {
-                if (value_up) t.tm_year += 1;
-                else t.tm_year -= 1;
-
-                if (t.tm_year < min) t.tm_year = max;
-                else if (t.tm_year > max) t.tm_year = min;
-
-                picker_angle = (double)(picker_mark_angle_year[(int)((t.tm_year + 1900) % PICKER_MARK_PARTITION_COUNT_YEAR)]);
-             }
-           else
-             {
-                if (value_up) year += 1;
-                else year -= 1;
-                picker_angle = (double)(picker_mark_angle_year[(int)(year) % PICKER_MARK_PARTITION_COUNT_YEAR]);
-           }
+           if (value_up) t.tm_year += 1;
+           else t.tm_year -= 1;
+           if (t.tm_year < min) t.tm_year = max;
+           else if (t.tm_year > max) t.tm_year = min;
 
+           picker_angle = (double)(picker_mark_angle_year[(int)((t.tm_year + 1900) % PICKER_MARK_PARTITION_COUNT_YEAR)]);
            _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, EINA_TRUE);
            break;
+
         case ELM_DATETIME_MONTH:
            if (value_up) t.tm_mon += 1;
            else t.tm_mon -= 1;
-
            if (t.tm_mon < min) t.tm_mon = max;
            else if (t.tm_mon > max) t.tm_mon = min;
 
            picker_angle = (double)((t.tm_mon) * PICKER_MARK_ANGLE_MONTH);
            _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, EINA_TRUE);
            break;
+
         case ELM_DATETIME_DATE:
            if (value_up) t.tm_mday += 1;
            else t.tm_mday -= 1;
-
            int old_mday = t.tm_mday;
-
            if (t.tm_mday < min) t.tm_mday = max;
            else if (t.tm_mday > max) t.tm_mday = min;
            else
-            {
-               elm_datetime_value_set(datetime, &t);
-               elm_datetime_value_get(datetime, &t);
-               if (t.tm_mday < old_mday)
-                 {
-                    if (value_up) t.tm_mday = min;
-                    else
-                      {
-                         t.tm_mday = max;
-                         elm_datetime_value_set(datetime, &t);
-                         elm_datetime_value_get(datetime, &t);
-                      }
-                 }
-            }
-
+             {
+                elm_datetime_value_set(datetime, &t);
+                elm_datetime_value_get(datetime, &t);
+                if (t.tm_mday < old_mday)
+                  {
+                     if (value_up) t.tm_mday = min;
+                     else
+                       {
+                          t.tm_mday = max;
+                          elm_datetime_value_set(datetime, &t);
+                          elm_datetime_value_get(datetime, &t);
+                       }
+                  }
+              }
            max_day = _max_days_get(t.tm_year, t.tm_mon);
-
            picker_angle = (double)(picker_mark_angle_day[max_day - MIN_DAYS_IN_MONTH][(t.tm_mday > max_day ? max_day:t.tm_mday) - 1]);
            _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, EINA_TRUE);
            break;
+
         case ELM_DATETIME_HOUR:
            if (value_up) t.tm_hour += 1;
            else t.tm_hour -= 1;
-
            if (t.tm_hour < min) t.tm_hour = max;
            else if (t.tm_hour > max) t.tm_hour = min;
-
            elm_datetime_value_set(datetime, &t);
            elm_datetime_value_get(datetime, &t);
 
            picker_angle = (double)((t.tm_hour) * PICKER_MARK_ANGLE_HOUR);
            _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, EINA_TRUE);
            break;
+
         case ELM_DATETIME_MINUTE:
            if (value_up) t.tm_min += 1;
            else t.tm_min -= 1;
-
            if (t.tm_min < min) t.tm_min = max;
            else if (t.tm_min > max) t.tm_min = min;
 
@@ -425,20 +472,126 @@ _date_update(Eext_Circle_Object *obj, Eina_Bool value_up)
            picker_angle = (double)(t.tm_min * PICKER_MARK_ANGLE_MIN);
            _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, EINA_TRUE);
            break;
+
         case ELM_DATETIME_AMPM:
            if (value_up && t.tm_hour < 12) t.tm_hour += 12;
            else if (t.tm_hour >= 12) t.tm_hour -= 12;
+
+        default:
+            break;
+     }
+
+   elm_datetime_value_set(datetime, &t);
+}
+
+static void
+_date_update_for_datepicker(Eext_Circle_Object *obj, Eina_Bool value_up)
+{
+   Eext_Circle_Object_Datetime_Data *data = (Eext_Circle_Object_Datetime_Data *)obj->widget_data;
+   Evas_Object *datetime = obj->widget_object;
+
+   int max_day;
+   int min, max;
+
+   min = (int)data->min;
+   max = (int)data->max;
+   double picker_angle = 0.0;
+
+   int year, month, day;
+   efl_ui_datepicker_date_get(datetime, &year, &month, &day);
+
+   switch (data->current_type)
+     {
+        case ELM_DATETIME_YEAR:
+           if (value_up) year += 1;
+           else year -= 1;
+           if (year < min) year = max;
+           else if (year > max) year = min;
+           picker_angle = (double)(picker_mark_angle_year[(int)(year) % PICKER_MARK_PARTITION_COUNT_YEAR]);
+           _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, EINA_TRUE);
+           break;
+
+        case ELM_DATETIME_MONTH:
+           if (value_up) month += 1;
+           else month -= 1;
+           if (month < min) month = max;
+           else if (month > max) month = min;
+           picker_angle = (double)((month) * PICKER_MARK_ANGLE_MONTH);
+           _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, EINA_TRUE);
+           break;
+
+        case ELM_DATETIME_DATE:
+           if (value_up) day += 1;
+           else day -= 1;
+           if (day < min) day = max;
+           else if(day > max) day = min;
+           max_day = _max_days_get(year - 1900, month);
+           picker_angle = (double)(picker_mark_angle_day[max_day - MIN_DAYS_IN_MONTH][(day > max_day ? max_day:day) - 1]);
+           _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, EINA_TRUE);
+           break;
         default:
            break;
      }
 
-   if (efl_isa(datetime, EFL_UI_LEGACY_INTERFACE))
+   efl_ui_datepicker_date_set(datetime, year, month, day);
+}
+
+
+static void
+_date_update_for_timepicker(Eext_Circle_Object *obj, Eina_Bool value_up)
+{
+   Eext_Circle_Object_Datetime_Data *data = (Eext_Circle_Object_Datetime_Data *)obj->widget_data;
+   Evas_Object *datetime = obj->widget_object;
+
+   int max_day;
+   int min, max;
+
+   min = (int)data->min;
+   max = (int)data->max;
+   double picker_angle = 0.0;
+
+   int hour, minute;
+   efl_ui_timepicker_time_get(datetime, &hour, &minute);
+
+   switch (data->current_type)
      {
-        elm_datetime_value_set(datetime, &t);
+        case ELM_DATETIME_HOUR:
+           if (value_up) hour += 1;
+           else hour -= 1;
+           if (hour < 0 ) hour = max + 11;
+           else if (hour > (max + 11)) hour = 0;
+           picker_angle = (double)((hour) * PICKER_MARK_ANGLE_HOUR);
+           _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, EINA_TRUE);
+           break;
+
+        case ELM_DATETIME_MINUTE:
+           if (value_up) minute += 1;
+           else minute -= 1;
+           if (minute < min) minute = max;
+           else if (minute > max) minute = min;
+           picker_angle = (double)(minute * PICKER_MARK_ANGLE_MIN);
+           _eext_circle_object_datetime_picker_mark_angle_set(obj, picker_angle, EINA_TRUE);
+           break;
+
+        default:
+           break;
      }
+
+   efl_ui_timepicker_time_set(datetime, hour, minute);
+}
+
+
+static void
+_date_update(Eext_Circle_Object *obj, Eina_Bool value_up)
+{
+   if (efl_isa(obj->widget_object, EFL_UI_LEGACY_INTERFACE))
+     _date_update_for_datetime(obj, value_up);
    else
      {
-        efl_ui_datepicker_date_set(datetime, year, month, day);
+        if (!strcmp(efl_class_name_get(obj->widget_object), "Efl.Ui.Wearable.CircleDatePicker"))
+          _date_update_for_datepicker(obj, value_up);
+        else
+          _date_update_for_timepicker(obj, value_up);
      }
 }
 
@@ -482,7 +635,6 @@ _rotary_changed_cb(void *data, Evas_Object *obj, Eext_Rotary_Event_Info* info)
    selected_radio = _eext_circle_object_datetime_selected_field_object_get(circle_obj->widget_object);
    elm_object_signal_emit(selected_radio, "elm,state,rotary,active", "eext");
 
-   //C# FIXME: Implements other types
    if (info->direction == EEXT_ROTARY_DIRECTION_CLOCKWISE)
      _date_update(circle_obj, EINA_TRUE);
    else
@@ -772,36 +924,30 @@ _accessibility_datetime_radio_highlighted_cb(void *data, Evas_Object *obj, void
 static void
 date_field_focus_cb(void *data, const Efl_Event *event)
 {
-   int value = (int)data;
-   ERR("current focused type:%d", value);
-   datepicker_type = value;
-}
+   int type = evas_object_data_get(event->object, "field_type");
+   Eo* spinner = evas_object_data_get(event->object, "field_obj");
 
-static void
-date_field_legacy_focus_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
-{
-   int value = (int)data;
-   ERR("legacy: current focused type:%d", value);
-   datepicker_type = value;
+   Eext_Circle_Object *circle_obj = data;
+   EEXT_CIRCLE_OBJECT_DATETIME_DATA_GET(circle_obj, circle_data) return;
+   circle_data->current_type = type;
+   efl_ui_range_min_max_get(spinner, &circle_data->min, &circle_data->max);
+
+   _eext_circle_object_datetime_current_type_update(circle_obj, EINA_TRUE);
 }
 
-static void add_date_type(Evas_Object *obj)
+static void add_date_type(Evas_Object *obj, int index, Eext_Circle_Object *circle_obj)
 {
-      double max;
-      efl_ui_range_min_max_get(obj, NULL, &max);
-      efl_ui_widget_focus_allow_set(obj, EINA_TRUE);
-      int value = -1;
-
-      //C# FIXME: consider picker type
-      if (max >= 2000) value = 2;
-      else if(max >= 30.0) value = 1;
-      else value = 0;
-
-      evas_object_smart_callback_add(obj, "focused", date_field_legacy_focus_cb, value);
-      efl_event_callback_add(obj, EFL_UI_FOCUS_OBJECT_EVENT_FOCUS_CHANGED, date_field_focus_cb, value);
+   //C# FIXME: The text button is used to get focus in Efl.Ui.SpinButton
+   //          since the spin button cannot get the focus,
+   //          Therefore, the text button should be changed to the spin button
+   //          when the spin button's focus is supported.
+   efl_ui_spin_button_editable_set(obj, EINA_FALSE);
+   Evas_Object *text_btn = elm_layout_content_get(obj, "efl.text_button");
+   evas_object_data_set(text_btn, "field_type", index);
+   evas_object_data_set(text_btn, "field_obj", obj);
+   efl_event_callback_add(text_btn, EFL_UI_FOCUS_OBJECT_EVENT_FOCUS_CHANGED, date_field_focus_cb, circle_obj);
 }
 
-
 static void
 _eext_circle_object_datetime_init(Eext_Circle_Object *obj, Evas_Object *datetime)
 {
@@ -821,6 +967,7 @@ _eext_circle_object_datetime_init(Eext_Circle_Object *obj, Evas_Object *datetime
    obj->widget_data = (void *)data;
 
    item = _eext_circle_object_item_new();
+   _eext_circle_object_item_name_set(item, DATETIME_ITEM_NAME);
    _eext_circle_object_item_color_set(item, 250, 125, 47, 255);
    _eext_circle_object_item_radius_set(item, radius);
    _eext_circle_object_item_line_width_set(item, mark_height);
@@ -830,23 +977,39 @@ _eext_circle_object_datetime_init(Eext_Circle_Object *obj, Evas_Object *datetime
 
    if (efl_isa(datetime, EFL_UI_LEGACY_INTERFACE))
      {
-        elm_object_style_set(datetime, "datepicker/circle");
 
+        elm_object_style_set(datetime, "datepicker/circle");
         evas_object_smart_callback_add(elm_object_part_content_get(datetime, "field0"), "changed",
                                        _eext_circle_object_datetime_radio_changed_cb, obj);
         evas_object_smart_callback_add(elm_object_part_content_get(datetime, "field1"), "changed",
                                        _eext_circle_object_datetime_radio_changed_cb, obj);
         evas_object_smart_callback_add(elm_object_part_content_get(datetime, "field2"), "changed",
                                        _eext_circle_object_datetime_radio_changed_cb, obj);
+        _eext_circle_object_datetime_bg_image_set(obj, BG_FILE_COUNT - 1);
      }
    else
      {
-        Evas_Object *date_field0 = efl_content_get(efl_part(datetime, "efl.field0"));
-        add_date_type(date_field0);
-        Evas_Object *date_field1 = efl_content_get(efl_part(datetime, "efl.field1"));
-        add_date_type(date_field1);
-        Evas_Object *date_field2 = efl_content_get(efl_part(datetime, "efl.field2"));
-        add_date_type(date_field2);
+        if (!strcmp(efl_class_name_get(datetime), "Efl.Ui.Wearable.CircleDatePicker"))
+          {
+             data->current_type = ELM_DATETIME_YEAR;
+             Evas_Object *date_field0 = efl_content_get(efl_part(datetime, "efl.field0"));
+             add_date_type(date_field0, ELM_DATETIME_MONTH, obj);
+
+             Evas_Object *date_field1 = efl_content_get(efl_part(datetime, "efl.field1"));
+             add_date_type(date_field1, ELM_DATETIME_DATE, obj);
+
+             Evas_Object *date_field2 = efl_content_get(efl_part(datetime, "efl.field2"));
+             add_date_type(date_field2, ELM_DATETIME_YEAR, obj);
+          }
+        else
+          {
+             data->current_type = ELM_DATETIME_HOUR;
+             Evas_Object *date_field0 = efl_content_get(efl_part(datetime, "efl.field1"));
+             add_date_type(date_field0, ELM_DATETIME_HOUR, obj);
+
+             Evas_Object *date_field1 = efl_content_get(efl_part(datetime, "efl.field2"));
+             add_date_type(date_field1, ELM_DATETIME_MINUTE, obj);
+          }
      }
 
    for (idx = ELM_DATETIME_HOUR; idx <= ELM_DATETIME_AMPM; idx++)
@@ -892,7 +1055,6 @@ _eext_circle_object_datetime_init(Eext_Circle_Object *obj, Evas_Object *datetime
    eext_rotary_object_event_callback_add(obj->widget_object, _rotary_changed_cb, obj);
    eext_rotary_object_event_callback_add(obj->main_obj, _rotary_changed_cb, obj);
 
-   _eext_circle_object_datetime_bg_image_set(obj, BG_FILE_COUNT - 1);
 }
 
 EAPI Evas_Object *