xartigas pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=a1478261b5df689b04c2223cdaf68dc91c4a6442

commit a1478261b5df689b04c2223cdaf68dc91c4a6442
Author: Woochanlee <wc0917....@samsung.com>
Date:   Tue Nov 20 09:59:18 2018 +0100

    efl_ui_format: remove supporting default TM format in interface.
    
    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       |  9 ------
 src/lib/elementary/efl_ui_calendar.c         | 42 ++++++++++++++++++++++++++++
 src/lib/elementary/efl_ui_calendar.eo        |  1 +
 src/lib/elementary/efl_ui_calendar_private.h |  1 +
 4 files changed, 44 insertions(+), 9 deletions(-)

diff --git a/src/lib/efl/interfaces/efl_ui_format.c 
b/src/lib/efl/interfaces/efl_ui_format.c
index 4f3a867f27..e722d22654 100644
--- a/src/lib/efl/interfaces/efl_ui_format.c
+++ b/src/lib/efl/interfaces/efl_ui_format.c
@@ -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;
diff --git a/src/lib/elementary/efl_ui_calendar.c 
b/src/lib/elementary/efl_ui_calendar.c
index 1e05e58fa1..15ab19bfc7 100644
--- a/src/lib/elementary/efl_ui_calendar.c
+++ b/src/lib/elementary/efl_ui_calendar.c
@@ -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)
 {
diff --git a/src/lib/elementary/efl_ui_calendar.eo 
b/src/lib/elementary/efl_ui_calendar.eo
index 4a6415f701..649b6536c4 100644
--- a/src/lib/elementary/efl_ui_calendar.eo
+++ b/src/lib/elementary/efl_ui_calendar.eo
@@ -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]]
diff --git a/src/lib/elementary/efl_ui_calendar_private.h 
b/src/lib/elementary/efl_ui_calendar_private.h
index 6cce25d130..78446c612e 100644
--- a/src/lib/elementary/efl_ui_calendar_private.h
+++ b/src/lib/elementary/efl_ui_calendar_private.h
@@ -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;

-- 


Reply via email to