efl_ui_format: remove supporting default TM format in interface.
authorWoochanlee <wc0917.lee@samsung.com>
Tue, 20 Nov 2018 08:59:18 +0000 (09:59 +0100)
committerHermet Park <hermetpark@gmail.com>
Wed, 5 Dec 2018 04:57:43 +0000 (13:57 +0900)
Summary:
efl_ui_format printed ERR log in calendar use case.

calendar only accept format as "B,b,h,m,y,Y"

But it doesn't cover that and not supporting TM type.

If there is other widget which one using format interface, It also has own accpeted format.

So i think it should impelment on widget side.

Test Plan: elementary_test -> efl_ui_calendar.

Reviewers: Hermet, singh.amitesh, Jaehyun, zmike, segfaultxavi

Reviewed By: segfaultxavi

Subscribers: segfaultxavi, cedric, #reviewers, #committers, zmike

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D6871

src/lib/efl/interfaces/efl_ui_format.c
src/lib/elementary/efl_ui_calendar.c
src/lib/elementary/efl_ui_calendar.eo
src/lib/elementary/efl_ui_calendar_private.h

index 4f3a867..e722d22 100644 (file)
@@ -92,18 +92,9 @@ _format_string_check(const char *fmt)
 static void
 _default_format_cb(void *data, Eina_Strbuf *str, const Eina_Value value)
 {
-   const Eina_Value_Type *type = eina_value_type_get(&value);
    Efl_Ui_Format_Data *sd = data;
    Eina_Value copy;
 
-   if (type == EINA_VALUE_TYPE_TM)
-     {
-        struct tm v;
-        eina_value_get(&value, &v);
-        eina_strbuf_append_strftime(str, sd->template, &v);
-        return;
-     }
-
    if (sd->format_type == FORMAT_TYPE_DOUBLE)
      {
         double v = 0.0;
index 1e05e58..15ab19b 100644 (file)
@@ -1164,6 +1164,48 @@ _efl_ui_calendar_efl_ui_format_format_cb_set(Eo *obj, Efl_Ui_Calendar_Data *sd,
    evas_object_smart_changed(obj);
 }
 
+static void
+_calendar_format_cb(void *data, Eina_Strbuf *str, const Eina_Value value)
+{
+   Efl_Ui_Calendar_Data *sd = data;
+   const Eina_Value_Type *type = eina_value_type_get(&value);
+   struct tm v;
+
+   if (type == EINA_VALUE_TYPE_TM)
+     {
+        eina_value_get(&value, &v);
+        eina_strbuf_append_strftime(str, sd->format_template, &v);
+     }
+}
+
+static void
+_calendar_format_free_cb(void *data)
+{
+   Efl_Ui_Calendar_Data *sd = data;
+
+   if (sd && sd->format_template)
+     {
+        eina_stringshare_del(sd->format_template);
+        sd->format_template = NULL;
+     }
+}
+
+EOLIAN static void
+_efl_ui_calendar_efl_ui_format_format_string_set(Eo *obj, Efl_Ui_Calendar_Data *sd, const char *template)
+{
+   if (!template) return;
+
+   eina_stringshare_replace(&sd->format_template, template);
+
+   efl_ui_format_cb_set(obj, sd, _calendar_format_cb, _calendar_format_free_cb);
+}
+
+EOLIAN static const char *
+_efl_ui_calendar_efl_ui_format_format_string_get(const Eo *obj EINA_UNUSED, Efl_Ui_Calendar_Data *sd)
+{
+   return sd->format_template;
+}
+
 EOLIAN static void
 _efl_ui_calendar_first_day_of_week_set(Eo *obj, Efl_Ui_Calendar_Data *sd, Efl_Ui_Calendar_Weekday day)
 {
index 4a6415f..649b653 100644 (file)
@@ -112,6 +112,7 @@ class Efl.Ui.Calendar (Efl.Ui.Layout, Efl.Ui.Focus.Composition, Efl.Access.Widge
       Efl.Ui.Widget.widget_event;
       Efl.Access.Widget.Action.elm_actions { get; }
       Efl.Ui.Format.format_cb { set; }
+      Efl.Ui.Format.format_string { set; get;}
    }
    events {
       changed: void; [[Emitted when the selected date in the calendar is changed]]
index 6cce25d..78446c6 100644 (file)
@@ -42,6 +42,7 @@ struct _Efl_Ui_Calendar_Data
    Efl_Ui_Calendar_Weekday     first_week_day;
    unsigned char            first_day_it;
 
+   const char              *format_template;
    Efl_Ui_Format_Func_Cb    format_cb;
    Eina_Free_Cb             format_free_cb;
    void                    *format_cb_data;